From fe75c7d3be79162ad8b1c32e3fd52b3102a4b416 Mon Sep 17 00:00:00 2001 From: hunnihundert <47563806+hunnihundert@users.noreply.github.com> Date: Sun, 19 Jul 2020 08:23:49 +0900 Subject: [PATCH 1/3] add advancing to address confirmation screen add moving back from confirmation screen via SingleLiveEvent --- .../create/SeekerCreateRequestViewModel.kt | 14 ++++++++++++- ...ekerCreateRequestConfirmAddressFragment.kt | 3 --- ...eekerCreateRequestEnterArticlesFragment.kt | 21 ++++++++++++++++--- 3 files changed, 31 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt b/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt index 0db1fc6..de404d6 100644 --- a/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt +++ b/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt @@ -15,6 +15,7 @@ import app.nexd.android.api.model.CreateHelpRequestArticleDto import app.nexd.android.api.model.HelpRequestCreateDto import app.nexd.android.api.model.Unit import app.nexd.android.ui.common.helprequest.HelpRequestCreateArticleBinder.ArticleViewModel +import app.nexd.android.ui.utils.SingleLiveEvent import app.nexd.android.ui.utils.extensions.currentLanguage import app.nexd.android.ui.utils.extensions.toLiveData import io.reactivex.BackpressureStrategy.LATEST @@ -25,11 +26,12 @@ class SeekerCreateRequestViewModel(private val context: Context, private val api sealed class Progress { object Idle : Progress() - object Loading : Progress() class Error(@StringRes val message: Int? = null) : Progress() object Finished : Progress() } + + val navigateToConfirmAddress = SingleLiveEvent() val progress: MutableLiveData = MutableLiveData(Progress.Idle) val firstName = MutableLiveData() @@ -213,4 +215,14 @@ class SeekerCreateRequestViewModel(private val context: Context, private val api true } } + + fun confirmItems() { + // to also include null check for inputs the negative case + // (no confirmed items, ie = size < 2) is evaluated first + if (inputs.value?.size ?: 1 < 2) { + progress.value = Progress.Error(R.string.seeker_request_create_no_articles) + } else { + navigateToConfirmAddress.call() + } + } } diff --git a/app/src/main/java/app/nexd/android/ui/seeker/create/address/SeekerCreateRequestConfirmAddressFragment.kt b/app/src/main/java/app/nexd/android/ui/seeker/create/address/SeekerCreateRequestConfirmAddressFragment.kt index d5bc41e..484ff64 100644 --- a/app/src/main/java/app/nexd/android/ui/seeker/create/address/SeekerCreateRequestConfirmAddressFragment.kt +++ b/app/src/main/java/app/nexd/android/ui/seeker/create/address/SeekerCreateRequestConfirmAddressFragment.kt @@ -61,9 +61,6 @@ class SeekerCreateRequestConfirmAddressFragment : Fragment() { is Idle -> { // nothing to do } - is Loading -> { - // - } is Error -> { it.message?.let { errorMessageId -> DefaultSnackbar(binding.root, errorMessageId, Snackbar.LENGTH_SHORT) diff --git a/app/src/main/java/app/nexd/android/ui/seeker/create/articles/SeekerCreateRequestEnterArticlesFragment.kt b/app/src/main/java/app/nexd/android/ui/seeker/create/articles/SeekerCreateRequestEnterArticlesFragment.kt index a249b9b..abe8ad5 100644 --- a/app/src/main/java/app/nexd/android/ui/seeker/create/articles/SeekerCreateRequestEnterArticlesFragment.kt +++ b/app/src/main/java/app/nexd/android/ui/seeker/create/articles/SeekerCreateRequestEnterArticlesFragment.kt @@ -54,6 +54,13 @@ class SeekerCreateRequestEnterArticlesFragment : Fragment() { initRecyclerView() setVmObserver() + setUi() + } + + override fun onDestroyView() { + super.onDestroyView() + + adapter.removeAllSections() } private fun initRecyclerView() { @@ -105,9 +112,6 @@ class SeekerCreateRequestEnterArticlesFragment : Fragment() { is Idle -> { //nothing to do } - is Loading -> { - findNavController().navigate(SeekerCreateRequestEnterArticlesFragmentDirections.toSeekerCreateRequestConfirmAddressFragment()) - } is Finished -> { // state not reachable } @@ -122,5 +126,16 @@ class SeekerCreateRequestEnterArticlesFragment : Fragment() { ) } }) + + vm.navigateToConfirmAddress.observe(viewLifecycleOwner, Observer { + findNavController().navigate(SeekerCreateRequestEnterArticlesFragmentDirections.toSeekerCreateRequestConfirmAddressFragment()) + }) } + + private fun setUi() { + binding.buttonAccept.setOnClickListener { + vm.confirmItems() + } + } + } From b1a47eacdfc531f5a0a8d2014cb5bbf89f882c78 Mon Sep 17 00:00:00 2001 From: hunnihundert <47563806+hunnihundert@users.noreply.github.com> Date: Sun, 19 Jul 2020 08:45:03 +0900 Subject: [PATCH 2/3] change progress value to Idle when moving to address confirmation (to avoid constant error message) --- .../android/ui/seeker/create/SeekerCreateRequestViewModel.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt b/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt index de404d6..7590dcf 100644 --- a/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt +++ b/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt @@ -223,6 +223,7 @@ class SeekerCreateRequestViewModel(private val context: Context, private val api progress.value = Progress.Error(R.string.seeker_request_create_no_articles) } else { navigateToConfirmAddress.call() + progress.value = Progress.Idle } } } From cb1c79bb28cc319383f6213b134431d838be32ac Mon Sep 17 00:00:00 2001 From: hunnihundert <47563806+hunnihundert@users.noreply.github.com> Date: Mon, 20 Jul 2020 17:09:13 +0900 Subject: [PATCH 3/3] improve user input check --- .../ui/seeker/create/SeekerCreateRequestViewModel.kt | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt b/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt index 7590dcf..38aad68 100644 --- a/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt +++ b/app/src/main/java/app/nexd/android/ui/seeker/create/SeekerCreateRequestViewModel.kt @@ -219,7 +219,17 @@ class SeekerCreateRequestViewModel(private val context: Context, private val api fun confirmItems() { // to also include null check for inputs the negative case // (no confirmed items, ie = size < 2) is evaluated first - if (inputs.value?.size ?: 1 < 2) { + val invalid = + // item name null or empty + inputs.value?.any { it.articleName.value.isNullOrBlank() } ?: true || + // no item added + inputs.value?.size ?: 1 < 2 || + // amount is null, empty or less than 1 + inputs.value?.any { it.amount.value.isNullOrBlank() || it.amount.value?.toIntOrNull() ?: 0 < 1 } ?: true || + // no selected Unit + inputs.value?.any { it.selectedUnit.value == null } ?: true + + if (invalid) { progress.value = Progress.Error(R.string.seeker_request_create_no_articles) } else { navigateToConfirmAddress.call()