From 753b96e8fa8ed346de78de61d1c9f4a2e8fa6787 Mon Sep 17 00:00:00 2001 From: hunnihundert <47563806+hunnihundert@users.noreply.github.com> Date: Fri, 29 May 2020 16:52:28 +0900 Subject: [PATCH 1/2] changed input type for zip code input field in transcript info --- app/src/main/res/layout/fragment_transcript_info.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/layout/fragment_transcript_info.xml b/app/src/main/res/layout/fragment_transcript_info.xml index e9fce1b..4084895 100644 --- a/app/src/main/res/layout/fragment_transcript_info.xml +++ b/app/src/main/res/layout/fragment_transcript_info.xml @@ -192,7 +192,7 @@ android:autofillHints="postal-code" android:background="@drawable/rounded_white" android:error="@{viewModel.zipCodeError}" - android:inputType="number" + android:inputType="textPostalAddress" android:nextFocusDown="@id/editText_city_value" android:padding="10dp" android:text="@={viewModel.zipCode}" From fcaa883fe08ce2f3c480ba11e77daf0e7b898acc Mon Sep 17 00:00:00 2001 From: hunnihundert <47563806+hunnihundert@users.noreply.github.com> Date: Wed, 3 Jun 2020 06:15:38 +0900 Subject: [PATCH 2/2] moved enabling/disabling to viewModels respectively (register and registerDetailed --- .../auth/register/RegisterDetailedFragment.kt | 16 +--- .../register/RegisterDetailedViewModel.kt | 31 +++++-- .../ui/auth/register/RegisterFragment.kt | 15 ---- .../ui/auth/register/RegisterViewModel.kt | 30 +++++-- app/src/main/res/layout/fragment_register.xml | 88 ++++++++++--------- .../res/layout/fragment_register_detailed.xml | 7 ++ 6 files changed, 105 insertions(+), 82 deletions(-) diff --git a/app/src/main/java/app/nexd/android/ui/auth/register/RegisterDetailedFragment.kt b/app/src/main/java/app/nexd/android/ui/auth/register/RegisterDetailedFragment.kt index 2adf0e9..899dc0f 100644 --- a/app/src/main/java/app/nexd/android/ui/auth/register/RegisterDetailedFragment.kt +++ b/app/src/main/java/app/nexd/android/ui/auth/register/RegisterDetailedFragment.kt @@ -19,7 +19,6 @@ import app.nexd.android.ui.auth.register.RegisterDetailedViewModel.Progress.* import app.nexd.android.ui.common.Constants import app.nexd.android.ui.common.DefaultSnackbar import com.google.android.material.snackbar.Snackbar -import kotlinx.android.synthetic.main.fragment_register_detailed.* import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.viewModel @@ -57,7 +56,6 @@ class RegisterDetailedFragment : Fragment() { } binding.buttonRegister.setOnClickListener { - switchUiIsEnabled(false) vm.setUserDetails() } @@ -72,13 +70,12 @@ class RegisterDetailedFragment : Fragment() { DefaultSnackbar(view, it, Snackbar.LENGTH_SHORT) } binding.progressBar.visibility = View.GONE - switchUiIsEnabled(true) + } is Finished -> { activityVm.setUserAsComplete() findNavController().navigateUp() binding.progressBar.visibility = View.GONE - switchUiIsEnabled(true) } } }) @@ -97,15 +94,4 @@ class RegisterDetailedFragment : Fragment() { ) } - // TODO: migrate that to ViewModel and bind visibility - private fun switchUiIsEnabled(enable: Boolean) { - binding.apply { - editTextPhoneNumber.isEnabled = enable - editTextStreet.isEnabled = enable - editTextHouseNr.isEnabled = enable - editTextZipCode.isEnabled = enable - editTextCity.isEnabled = enable - buttonRegister.isEnabled = enable - } - } } \ No newline at end of file diff --git a/app/src/main/java/app/nexd/android/ui/auth/register/RegisterDetailedViewModel.kt b/app/src/main/java/app/nexd/android/ui/auth/register/RegisterDetailedViewModel.kt index ce88b45..6c7c822 100644 --- a/app/src/main/java/app/nexd/android/ui/auth/register/RegisterDetailedViewModel.kt +++ b/app/src/main/java/app/nexd/android/ui/auth/register/RegisterDetailedViewModel.kt @@ -25,28 +25,33 @@ class RegisterDetailedViewModel( } val phoneNumber = MutableLiveData("") - val phoneNumberError = MutableLiveData(0) + val phoneNumberIsEnabled = MutableLiveData(true) val street = MutableLiveData("") - val streetError = MutableLiveData(0) + val streetIsEnabled = MutableLiveData(true) val houseNumber = MutableLiveData("") - val houseNumberError = MutableLiveData(0) + val houseNumberIsEnabled = MutableLiveData(true) val zipCode = MutableLiveData("") - val zipCodeError = MutableLiveData(0) + val zipCodeIsEnabled = MutableLiveData(true) val locality = MutableLiveData("") - val localityError = MutableLiveData(0) + val localityIsEnabled = MutableLiveData(true) + + val buttonRegisterIsEnabled = MutableLiveData(true) + val buttonDataProtectionIsEnabled = MutableLiveData(true) val progress = MutableLiveData(Progress.Idle) fun setUserDetails() { + switchUiIsEnabled(false) + var success = true if (phoneNumber.value.isNullOrEmpty()) { @@ -93,13 +98,16 @@ class RegisterDetailedViewModel( ) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ + switchUiIsEnabled(true) progress.value = Progress.Finished }, { error -> + switchUiIsEnabled(true) if (error is BackendError) { error.errorCodes.forEach { when (it) { VALIDATION_PHONENUMBER_INVALID -> { - phoneNumberError.value = R.string.error_message_input_validation_phone_number_invalid + phoneNumberError.value = + R.string.error_message_input_validation_phone_number_invalid } else -> { Log.e( @@ -121,8 +129,19 @@ class RegisterDetailedViewModel( }) } } else { + switchUiIsEnabled(true) progress.value = Progress.Error() } } + private fun switchUiIsEnabled(enable: Boolean) { + phoneNumberIsEnabled.value = enable + streetIsEnabled.value = enable + houseNumberIsEnabled.value = enable + zipCodeIsEnabled.value = enable + localityIsEnabled.value = enable + buttonRegisterIsEnabled.value = enable + buttonDataProtectionIsEnabled.value = enable + } + } \ No newline at end of file diff --git a/app/src/main/java/app/nexd/android/ui/auth/register/RegisterFragment.kt b/app/src/main/java/app/nexd/android/ui/auth/register/RegisterFragment.kt index 6103ce4..8c3a30f 100644 --- a/app/src/main/java/app/nexd/android/ui/auth/register/RegisterFragment.kt +++ b/app/src/main/java/app/nexd/android/ui/auth/register/RegisterFragment.kt @@ -18,7 +18,6 @@ import app.nexd.android.ui.auth.register.RegisterViewModel.Progress.* import app.nexd.android.ui.common.Constants import app.nexd.android.ui.common.DefaultSnackbar import com.google.android.material.snackbar.Snackbar -import kotlinx.android.synthetic.main.fragment_register.* import org.koin.androidx.viewmodel.ext.android.sharedViewModel import org.koin.androidx.viewmodel.ext.android.viewModel @@ -58,7 +57,6 @@ class RegisterFragment : Fragment() { ) binding.buttonRegister.setOnClickListener { - switchUiIsEnabled(false) vm.register() } @@ -76,12 +74,10 @@ class RegisterFragment : Fragment() { progress.message?.let { message -> DefaultSnackbar(view, message, Snackbar.LENGTH_SHORT) } - switchUiIsEnabled(true) } is Finished -> { activityVm.authenticate(progress.token) findNavController().navigate(RegisterFragmentDirections.toRegisterDetailedFragment()) - switchUiIsEnabled(true) } } }) @@ -100,17 +96,6 @@ class RegisterFragment : Fragment() { ) } - private fun switchUiIsEnabled(enable: Boolean) { - binding.apply { - buttonRegister.isEnabled = enable - editTextFirstName.isEnabled = enable - editTextLastName.isEnabled = enable - editTextEmail.isEnabled = enable - editTextPassword.isEnabled = enable - editTextPasswordConfirm.isEnabled = enable - checkboxDataProtection.isEnabled = enable - } - } } diff --git a/app/src/main/java/app/nexd/android/ui/auth/register/RegisterViewModel.kt b/app/src/main/java/app/nexd/android/ui/auth/register/RegisterViewModel.kt index b484c9f..4a2756c 100644 --- a/app/src/main/java/app/nexd/android/ui/auth/register/RegisterViewModel.kt +++ b/app/src/main/java/app/nexd/android/ui/auth/register/RegisterViewModel.kt @@ -26,28 +26,31 @@ class RegisterViewModel( } val firstName = MutableLiveData("") - val firstNameError = MutableLiveData(0) + val firstNameIsEnabled = MutableLiveData(true) val lastName = MutableLiveData("") - val lastNameError = MutableLiveData(0) + val lastNameIsEnabled = MutableLiveData(true) val email = MutableLiveData("") - val emailError = MutableLiveData(0) + val emailIsEnabled = MutableLiveData(true) val password = MutableLiveData("") - val passwordError = MutableLiveData(0) + val passwordIsEnabled = MutableLiveData(true) val passwordConfirmation = MutableLiveData("") - val passwordConfirmationError = MutableLiveData(0) + val passwordConfirmationIsEnabled = MutableLiveData(true) val dataProtection = MutableLiveData(false) - val dataProtectionError = MutableLiveData(0) + val dataProtectionIsEnabled = MutableLiveData(true) + + val buttonRegisterIsEnabled = MutableLiveData(true) + val buttonDataProtectionIsEnabled = MutableLiveData(true) val progress = MutableLiveData(Progress.Idle) @@ -60,6 +63,7 @@ class RegisterViewModel( } fun register() { + switchUiIsEnabled(false) var success = true if (firstName.value.isNullOrEmpty()) { @@ -111,14 +115,17 @@ class RegisterViewModel( .observeOn(AndroidSchedulers.mainThread()) .subscribe( { + switchUiIsEnabled(true) progress.value = Progress.Finished(token = it.accessToken) }, { + switchUiIsEnabled(true) handleErrors(it) } ) } } else { + switchUiIsEnabled(true) progress.value = Progress.Error() } } @@ -159,4 +166,15 @@ class RegisterViewModel( } } + private fun switchUiIsEnabled(enable: Boolean) { + firstNameIsEnabled.value = enable + lastNameIsEnabled.value = enable + emailIsEnabled.value = enable + passwordIsEnabled.value = enable + passwordConfirmationIsEnabled.value = enable + dataProtectionIsEnabled.value = enable + buttonRegisterIsEnabled.value = enable + buttonDataProtectionIsEnabled.value = enable + } + } \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_register.xml b/app/src/main/res/layout/fragment_register.xml index d591d21..6418975 100644 --- a/app/src/main/res/layout/fragment_register.xml +++ b/app/src/main/res/layout/fragment_register.xml @@ -22,8 +22,8 @@ android:clickable="true" android:focusable="true" android:theme="@style/ToolbarThemeWhite" - app:layout_constraintTop_toTopOf="parent" app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" app:navigationIcon="?attr/homeAsUpIndicator" /> + android:visibility="gone" /> + android:orientation="vertical" + android:paddingHorizontal="20dp"> + android:layout_height="0dp" + android:layout_weight="1" /> + android:text="@={viewModel.firstName}" /> + android:text="@={viewModel.lastName}" /> + android:text="@={viewModel.email}" /> + android:text="@={viewModel.password}" /> + android:text="@={viewModel.passwordConfirmation}" /> - + - +