From e8ab32c2dff48208c575e040b9c13cb974f0d5fd Mon Sep 17 00:00:00 2001 From: razeeman Date: Sun, 4 Apr 2021 10:43:55 +0300 Subject: [PATCH] fix card order dialog not showing initial order --- .github/workflows/github_actions.yml | 2 +- .../util/simpletimetracker/SettingsTest.kt | 4 ++-- .../navigation/ScreenResolverImpl.kt | 3 ++- .../domain/interactor/RecordTypeInteractor.kt | 11 +++++++---- .../cardOrder/view/CardOrderDialogFragment.kt | 15 +++++++++++++-- .../cardOrder/viewModel/CardOrderViewModel.kt | 5 ++++- .../res/layout/records_container_fragment.xml | 2 +- .../viewModel/SettingsViewModel.kt | 12 ++++++++---- .../navigation/ScreenResolver.kt | 7 ++++++- .../navigation/params/CardOrderDialogParams.kt | 10 ++++++++++ 10 files changed, 54 insertions(+), 17 deletions(-) create mode 100644 navigation/src/main/java/com/example/util/simpletimetracker/navigation/params/CardOrderDialogParams.kt diff --git a/.github/workflows/github_actions.yml b/.github/workflows/github_actions.yml index db2ae526..15648e4c 100644 --- a/.github/workflows/github_actions.yml +++ b/.github/workflows/github_actions.yml @@ -31,7 +31,7 @@ jobs: strategy: fail-fast: false matrix: - api-level: [19, 21, 28, 29] + api-level: [19, 28, 29] steps: - name: Check out code diff --git a/app/src/androidTest/java/com/example/util/simpletimetracker/SettingsTest.kt b/app/src/androidTest/java/com/example/util/simpletimetracker/SettingsTest.kt index b9c5daf0..70be7bb3 100644 --- a/app/src/androidTest/java/com/example/util/simpletimetracker/SettingsTest.kt +++ b/app/src/androidTest/java/com/example/util/simpletimetracker/SettingsTest.kt @@ -336,9 +336,9 @@ class SettingsTest : BaseUiTest() { val name3 = "Test3" // Add activities - testUtils.addActivity(name1) - testUtils.addActivity(name2) testUtils.addActivity(name3) + testUtils.addActivity(name2) + testUtils.addActivity(name1) // Change settings NavUtils.openSettingsScreen() diff --git a/app/src/main/java/com/example/util/simpletimetracker/navigation/ScreenResolverImpl.kt b/app/src/main/java/com/example/util/simpletimetracker/navigation/ScreenResolverImpl.kt index 59758d98..5af515c0 100644 --- a/app/src/main/java/com/example/util/simpletimetracker/navigation/ScreenResolverImpl.kt +++ b/app/src/main/java/com/example/util/simpletimetracker/navigation/ScreenResolverImpl.kt @@ -9,6 +9,7 @@ import com.example.util.simpletimetracker.feature_change_category.view.ChangeCat import com.example.util.simpletimetracker.feature_change_record.view.ChangeRecordFragment import com.example.util.simpletimetracker.feature_change_record_type.view.ChangeRecordTypeFragment import com.example.util.simpletimetracker.feature_change_running_record.view.ChangeRunningRecordFragment +import com.example.util.simpletimetracker.feature_dialogs.cardOrder.view.CardOrderDialogFragment import com.example.util.simpletimetracker.feature_dialogs.dateTime.DateTimeDialogFragment import com.example.util.simpletimetracker.feature_dialogs.duration.view.DurationDialogFragment import com.example.util.simpletimetracker.feature_dialogs.standard.StandardDialogFragment @@ -132,7 +133,7 @@ class ScreenResolverImpl @Inject constructor() : ScreenResolver { Screen.CARD_ORDER_DIALOG -> navController?.navigate( R.id.cardOrderDialogFragment, - null, + CardOrderDialogFragment.createBundle(data), null, navExtras ) diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordTypeInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordTypeInteractor.kt index 768fc014..9d8c69c6 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordTypeInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordTypeInteractor.kt @@ -13,11 +13,11 @@ class RecordTypeInteractor @Inject constructor( private val prefsInteractor: PrefsInteractor ) { - suspend fun getAll(): List { + suspend fun getAll(cardOrder: CardOrder? = null): List { return (recordTypeCacheRepo.getAll() .takeIf(List::isNotEmpty) ?: recordTypeRepo.getAll().also(recordTypeCacheRepo::addAll)) - .let { sort(it) } + .let { sort(cardOrder, it) } } suspend fun get(id: Long): RecordType? { @@ -48,11 +48,14 @@ class RecordTypeInteractor @Inject constructor( recordTypeCacheRepo.clear() } - private suspend fun sort(records: List): List { + private suspend fun sort( + cardOrder: CardOrder?, + records: List + ): List { return records .let(::sortByName) .let { - when (prefsInteractor.getCardOrder()) { + when (cardOrder ?: prefsInteractor.getCardOrder()) { CardOrder.COLOR -> sortByColor(it) CardOrder.MANUAL -> sortByManualOrder(it) CardOrder.NAME -> it diff --git a/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardOrder/view/CardOrderDialogFragment.kt b/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardOrder/view/CardOrderDialogFragment.kt index 803fc0d3..dfcdeb8b 100644 --- a/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardOrder/view/CardOrderDialogFragment.kt +++ b/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardOrder/view/CardOrderDialogFragment.kt @@ -17,6 +17,7 @@ import com.example.util.simpletimetracker.feature_dialogs.R import com.example.util.simpletimetracker.feature_dialogs.cardOrder.adapter.CardOrderAdapter import com.example.util.simpletimetracker.feature_dialogs.cardOrder.di.CardOrderComponentProvider import com.example.util.simpletimetracker.feature_dialogs.cardOrder.viewModel.CardOrderViewModel +import com.example.util.simpletimetracker.navigation.params.CardOrderDialogParams import com.google.android.flexbox.FlexDirection import com.google.android.flexbox.FlexWrap import com.google.android.flexbox.FlexboxLayoutManager @@ -34,11 +35,12 @@ class CardOrderDialogFragment : BottomSheetDialogFragment() { private val viewModel: CardOrderViewModel by viewModels( factoryProducer = { viewModelFactory } ) - private val recordTypesAdapter: CardOrderAdapter by lazy { CardOrderAdapter() } - + private val extra: CardOrderDialogParams by lazy { + arguments?.getParcelable(ARGS_PARAMS) ?: CardOrderDialogParams() + } private var behavior: BottomSheetBehavior? = null override fun onCreate(savedInstanceState: Bundle?) { @@ -126,6 +128,7 @@ class CardOrderDialogFragment : BottomSheetDialogFragment() { } private fun initViewModel(): Unit = with(viewModel) { + extra = this@CardOrderDialogFragment.extra recordTypes.observe(viewLifecycleOwner, recordTypesAdapter::replace) } @@ -135,5 +138,13 @@ class CardOrderDialogFragment : BottomSheetDialogFragment() { private const val ITEM_SCALE_SELECTED = 1.1f private const val ITEM_SCALE_DEFAULT = 1.0f + + private const val ARGS_PARAMS = "args_card_order_params" + + fun createBundle(data: Any?): Bundle = Bundle().apply { + when (data) { + is CardOrderDialogParams -> putParcelable(ARGS_PARAMS, data) + } + } } } \ No newline at end of file diff --git a/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardOrder/viewModel/CardOrderViewModel.kt b/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardOrder/viewModel/CardOrderViewModel.kt index 68dd70c4..96a37431 100644 --- a/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardOrder/viewModel/CardOrderViewModel.kt +++ b/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardOrder/viewModel/CardOrderViewModel.kt @@ -11,6 +11,7 @@ import com.example.util.simpletimetracker.core.viewData.RecordTypeViewData import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor import com.example.util.simpletimetracker.domain.model.CardOrder +import com.example.util.simpletimetracker.navigation.params.CardOrderDialogParams import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import java.util.Collections @@ -22,6 +23,8 @@ class CardOrderViewModel @Inject constructor( private val recordTypeViewDataMapper: RecordTypeViewDataMapper ) : ViewModel() { + lateinit var extra: CardOrderDialogParams + val recordTypes: LiveData> by lazy { return@lazy MutableLiveData>().let { initial -> viewModelScope.launch { @@ -65,7 +68,7 @@ class CardOrderViewModel @Inject constructor( val numberOfCards: Int = prefsInteractor.getNumberOfCards() val isDarkTheme = prefsInteractor.getDarkMode() - return recordTypeInteractor.getAll() + return recordTypeInteractor.getAll(extra.initialOrder) .filter { !it.hidden } .map { type -> recordTypeViewDataMapper.map(type, numberOfCards, isDarkTheme) } .also { types = it } diff --git a/feature_records/src/main/res/layout/records_container_fragment.xml b/feature_records/src/main/res/layout/records_container_fragment.xml index 38ef4a3a..ece225d6 100644 --- a/feature_records/src/main/res/layout/records_container_fragment.xml +++ b/feature_records/src/main/res/layout/records_container_fragment.xml @@ -42,7 +42,7 @@ ?) + fun navigate( + navController: NavController?, + screen: Screen, + data: Any?, + sharedElements: Map? + ) } \ No newline at end of file diff --git a/navigation/src/main/java/com/example/util/simpletimetracker/navigation/params/CardOrderDialogParams.kt b/navigation/src/main/java/com/example/util/simpletimetracker/navigation/params/CardOrderDialogParams.kt new file mode 100644 index 00000000..ea8c14c2 --- /dev/null +++ b/navigation/src/main/java/com/example/util/simpletimetracker/navigation/params/CardOrderDialogParams.kt @@ -0,0 +1,10 @@ +package com.example.util.simpletimetracker.navigation.params + +import android.os.Parcelable +import com.example.util.simpletimetracker.domain.model.CardOrder +import kotlinx.android.parcel.Parcelize + +@Parcelize +data class CardOrderDialogParams( + val initialOrder: CardOrder = CardOrder.MANUAL +) : Parcelable \ No newline at end of file -- 2.51.2