diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/PrefsInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/PrefsInteractor.kt index e09e3f06a..cfedc0136 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/PrefsInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/PrefsInteractor.kt @@ -1,6 +1,7 @@ package com.example.util.simpletimetracker.domain.interactor import com.example.util.simpletimetracker.domain.model.CardOrder +import com.example.util.simpletimetracker.domain.model.CardTagOrder import com.example.util.simpletimetracker.domain.model.ChartFilterType import com.example.util.simpletimetracker.domain.model.DayOfWeek import com.example.util.simpletimetracker.domain.model.DaysInCalendar @@ -82,12 +83,12 @@ class PrefsInteractor @Inject constructor( prefsRepo.categoryOrder = mapFromCardOrder(cardOrder) } - suspend fun getTagOrder(): CardOrder = withContext(Dispatchers.IO) { - mapToCardOrder(prefsRepo.tagOrder) + suspend fun getTagOrder(): CardTagOrder = withContext(Dispatchers.IO) { + mapToCardTagOrder(prefsRepo.tagOrder) } - suspend fun setTagOrder(cardOrder: CardOrder) = withContext(Dispatchers.IO) { - prefsRepo.tagOrder = mapFromCardOrder(cardOrder) + suspend fun setTagOrder(cardOrder: CardTagOrder) = withContext(Dispatchers.IO) { + prefsRepo.tagOrder = mapFromCardTagOrder(cardOrder) } suspend fun getStatisticsRange(): RangeLength = withContext(Dispatchers.IO) { @@ -649,4 +650,23 @@ class PrefsInteractor @Inject constructor( CardOrder.MANUAL -> 2 } } + + private fun mapToCardTagOrder(data: Int): CardTagOrder { + return when (data) { + 0 -> CardTagOrder.NAME + 1 -> CardTagOrder.COLOR + 2 -> CardTagOrder.MANUAL + 3 -> CardTagOrder.ACTIVITY + else -> CardTagOrder.NAME + } + } + + private fun mapFromCardTagOrder(data: CardTagOrder): Int { + return when (data) { + CardTagOrder.NAME -> 0 + CardTagOrder.COLOR -> 1 + CardTagOrder.MANUAL -> 2 + CardTagOrder.ACTIVITY -> 3 + } + } } \ No newline at end of file diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordTagInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordTagInteractor.kt index a423eb279..b32889b72 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordTagInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/RecordTagInteractor.kt @@ -1,6 +1,7 @@ package com.example.util.simpletimetracker.domain.interactor -import com.example.util.simpletimetracker.domain.model.CardOrder +import com.example.util.simpletimetracker.domain.extension.orZero +import com.example.util.simpletimetracker.domain.model.CardTagOrder import com.example.util.simpletimetracker.domain.model.RecordTag import com.example.util.simpletimetracker.domain.model.RecordType import com.example.util.simpletimetracker.domain.repo.RecordTagRepo @@ -25,16 +26,35 @@ class RecordTagInteractor @Inject constructor( return repo.isEmpty() } - suspend fun getAll(cardOrder: CardOrder? = null): List { - val types = recordTypeInteractor.getAll().associateBy { it.id } + suspend fun getAll(cardOrder: CardTagOrder? = null): List { + val tags = repo.getAll() + val types = recordTypeInteractor.getAll() + val typesMap = types.associateBy { it.id } - return sortCardsInteractor.sort( - cardOrder = cardOrder ?: prefsInteractor.getTagOrder(), + val getActivityOrderProvider: suspend () -> Map = { + val typesToTags = recordTypeToTagRepo.getAll() + val tagsToAssignedTypes = typesToTags + .groupBy { it.tagId } + .mapValues { (_, typeToTag) -> + typeToTag + .map { it.recordTypeId } + .sortedBy { typeId -> types.indexOfFirst { it.id == typeId } } + } + tags.associate { tag -> + val mainTypeId = tagsToAssignedTypes[tag.id]?.firstOrNull().orZero() + val type = typesMap[mainTypeId] + tag.id to types.indexOf(type).toLong() + } + } + + return sortCardsInteractor.sortTags( + cardTagOrder = cardOrder ?: prefsInteractor.getTagOrder(), manualOrderProvider = { prefsInteractor.getTagOrderManual() }, - data = repo.getAll().map { + activityOrderProvider = { getActivityOrderProvider() }, + data = tags.map { mapForSort( data = it, - colorSource = types[it.iconColorSource], + colorSource = typesMap[it.iconColorSource], ) }, ).map { it.data } diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/SortCardsInteractor.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/SortCardsInteractor.kt index d45831c28..51bfd1e0b 100644 --- a/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/SortCardsInteractor.kt +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/interactor/SortCardsInteractor.kt @@ -4,6 +4,7 @@ import com.example.util.simpletimetracker.domain.extension.orZero import com.example.util.simpletimetracker.domain.mapper.AppColorMapper import com.example.util.simpletimetracker.domain.model.AppColor import com.example.util.simpletimetracker.domain.model.CardOrder +import com.example.util.simpletimetracker.domain.model.CardTagOrder import java.util.Locale import javax.inject.Inject import kotlin.math.roundToInt @@ -28,6 +29,24 @@ class SortCardsInteractor @Inject constructor( } } + suspend fun sortTags( + cardTagOrder: CardTagOrder, + manualOrderProvider: suspend () -> Map, + activityOrderProvider: suspend () -> Map, + data: List>, + ): List> { + return data + .let(::sortByName) + .let { + when (cardTagOrder) { + CardTagOrder.COLOR -> sortByColor(it) + CardTagOrder.MANUAL -> sortByManualOrder(it, manualOrderProvider) + CardTagOrder.NAME -> it + CardTagOrder.ACTIVITY -> sortByManualOrder(it, activityOrderProvider) + } + } + } + private fun sortByName( data: List>, ): List> { diff --git a/domain/src/main/java/com/example/util/simpletimetracker/domain/model/CardTagOrder.kt b/domain/src/main/java/com/example/util/simpletimetracker/domain/model/CardTagOrder.kt new file mode 100644 index 000000000..7a594ddac --- /dev/null +++ b/domain/src/main/java/com/example/util/simpletimetracker/domain/model/CardTagOrder.kt @@ -0,0 +1,8 @@ +package com.example.util.simpletimetracker.domain.model + +enum class CardTagOrder { + NAME, + COLOR, + MANUAL, + ACTIVITY, +} \ No newline at end of file diff --git a/features/feature_change_activity_filter/src/main/java/com/example/util/simpletimetracker/feature_change_activity_filter/view/ChangeActivityFilterFragment.kt b/features/feature_change_activity_filter/src/main/java/com/example/util/simpletimetracker/feature_change_activity_filter/view/ChangeActivityFilterFragment.kt index 289f357f4..509d5dccb 100644 --- a/features/feature_change_activity_filter/src/main/java/com/example/util/simpletimetracker/feature_change_activity_filter/view/ChangeActivityFilterFragment.kt +++ b/features/feature_change_activity_filter/src/main/java/com/example/util/simpletimetracker/feature_change_activity_filter/view/ChangeActivityFilterFragment.kt @@ -1,6 +1,5 @@ package com.example.util.simpletimetracker.feature_change_activity_filter.view -import android.content.res.ColorStateList import com.example.util.simpletimetracker.feature_change_activity_filter.databinding.ChangeActivityFilterFragmentBinding as Binding import android.os.Bundle import android.view.LayoutInflater diff --git a/features/feature_change_category/src/main/java/com/example/util/simpletimetracker/feature_change_category/view/ChangeCategoryFragment.kt b/features/feature_change_category/src/main/java/com/example/util/simpletimetracker/feature_change_category/view/ChangeCategoryFragment.kt index 954f40fa2..7b14c611a 100644 --- a/features/feature_change_category/src/main/java/com/example/util/simpletimetracker/feature_change_category/view/ChangeCategoryFragment.kt +++ b/features/feature_change_category/src/main/java/com/example/util/simpletimetracker/feature_change_category/view/ChangeCategoryFragment.kt @@ -1,6 +1,5 @@ package com.example.util.simpletimetracker.feature_change_category.view -import android.content.res.ColorStateList import android.os.Bundle import android.view.LayoutInflater import android.view.View diff --git a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/view/ChangeRecordFragment.kt b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/view/ChangeRecordFragment.kt index 10661a80a..f49413928 100644 --- a/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/view/ChangeRecordFragment.kt +++ b/features/feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/view/ChangeRecordFragment.kt @@ -1,6 +1,5 @@ package com.example.util.simpletimetracker.feature_change_record.view -import android.content.res.ColorStateList import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup diff --git a/features/feature_change_record_tag/src/main/java/com/example/util/simpletimetracker/feature_change_record_tag/view/ChangeRecordTagFragment.kt b/features/feature_change_record_tag/src/main/java/com/example/util/simpletimetracker/feature_change_record_tag/view/ChangeRecordTagFragment.kt index 6743b7b56..143fc01f2 100644 --- a/features/feature_change_record_tag/src/main/java/com/example/util/simpletimetracker/feature_change_record_tag/view/ChangeRecordTagFragment.kt +++ b/features/feature_change_record_tag/src/main/java/com/example/util/simpletimetracker/feature_change_record_tag/view/ChangeRecordTagFragment.kt @@ -1,6 +1,5 @@ package com.example.util.simpletimetracker.feature_change_record_tag.view -import android.content.res.ColorStateList import android.os.Bundle import android.view.LayoutInflater import android.view.View diff --git a/features/feature_change_record_tag/src/main/res/layout/change_record_tag_fragment.xml b/features/feature_change_record_tag/src/main/res/layout/change_record_tag_fragment.xml index d97a19a08..5c0ebd1d2 100644 --- a/features/feature_change_record_tag/src/main/res/layout/change_record_tag_fragment.xml +++ b/features/feature_change_record_tag/src/main/res/layout/change_record_tag_fragment.xml @@ -282,7 +282,7 @@ style="@style/EditScreenField" android:layout_width="0dp" android:layout_height="match_parent" - android:text="@string/change_record_tag_type_hint" + android:text="@string/change_record_type_field" app:layout_constraintEnd_toStartOf="@id/layoutChangeRecordTagTypesPreview" app:layout_constraintStart_toStartOf="parent" /> diff --git a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt index 4a0b88ea2..a11e9bb82 100644 --- a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt +++ b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/view/ChangeRecordTypeFragment.kt @@ -1,6 +1,5 @@ package com.example.util.simpletimetracker.feature_change_record_type.view -import android.content.res.ColorStateList import android.os.Bundle import android.view.LayoutInflater import android.view.View diff --git a/features/feature_change_running_record/src/main/java/com/example/util/simpletimetracker/feature_change_running_record/view/ChangeRunningRecordFragment.kt b/features/feature_change_running_record/src/main/java/com/example/util/simpletimetracker/feature_change_running_record/view/ChangeRunningRecordFragment.kt index d512fcef3..52ab6fa96 100644 --- a/features/feature_change_running_record/src/main/java/com/example/util/simpletimetracker/feature_change_running_record/view/ChangeRunningRecordFragment.kt +++ b/features/feature_change_running_record/src/main/java/com/example/util/simpletimetracker/feature_change_running_record/view/ChangeRunningRecordFragment.kt @@ -1,6 +1,5 @@ package com.example.util.simpletimetracker.feature_change_running_record.view -import android.content.res.ColorStateList import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup diff --git a/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardOrder/viewModel/CardOrderViewModel.kt b/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardOrder/viewModel/CardOrderViewModel.kt index 4b3f59214..4e6a11ffe 100644 --- a/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardOrder/viewModel/CardOrderViewModel.kt +++ b/features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardOrder/viewModel/CardOrderViewModel.kt @@ -11,6 +11,7 @@ import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.interactor.RecordTagInteractor import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor import com.example.util.simpletimetracker.domain.model.CardOrder +import com.example.util.simpletimetracker.domain.model.CardTagOrder import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType import com.example.util.simpletimetracker.feature_base_adapter.category.CategoryViewData import com.example.util.simpletimetracker.feature_base_adapter.loader.LoaderViewData @@ -70,7 +71,7 @@ class CardOrderViewModel @Inject constructor( } is CardOrderDialogParams.Type.Tag -> { { - prefsInteractor.setTagOrder(CardOrder.MANUAL) + prefsInteractor.setTagOrder(CardTagOrder.MANUAL) prefsInteractor.setTagOrderManual(it) } } @@ -84,18 +85,20 @@ class CardOrderViewModel @Inject constructor( } private suspend fun loadViewData(): List { - return when (extra.type) { - is CardOrderDialogParams.Type.RecordType -> loadTypesViewData() - is CardOrderDialogParams.Type.Category -> loadCategoriesViewData() - is CardOrderDialogParams.Type.Tag -> loadTagsViewData() + return when (val type = extra.type) { + is CardOrderDialogParams.Type.RecordType -> loadTypesViewData(type.order) + is CardOrderDialogParams.Type.Category -> loadCategoriesViewData(type.order) + is CardOrderDialogParams.Type.Tag -> loadTagsViewData(type.order) } } - private suspend fun loadTypesViewData(): List { + private suspend fun loadTypesViewData( + initialOrder: CardOrder, + ): List { val numberOfCards: Int = prefsInteractor.getNumberOfCards() val isDarkTheme = prefsInteractor.getDarkMode() - return recordTypeInteractor.getAll(extra.initialOrder) + return recordTypeInteractor.getAll(initialOrder) .filter { !it.hidden } .takeUnless { it.isEmpty() } ?.map { type -> @@ -109,10 +112,12 @@ class CardOrderViewModel @Inject constructor( ?: recordTypeViewDataMapper.mapToEmpty() } - private suspend fun loadCategoriesViewData(): List { + private suspend fun loadCategoriesViewData( + initialOrder: CardOrder, + ): List { val isDarkTheme = prefsInteractor.getDarkMode() - return categoryInteractor.getAll(extra.initialOrder) + return categoryInteractor.getAll(initialOrder) .takeUnless { it.isEmpty() } ?.map { category -> categoryViewDataMapper.mapCategory( @@ -123,11 +128,13 @@ class CardOrderViewModel @Inject constructor( ?: listOf(categoryViewDataMapper.mapToCategoriesEmpty()) } - private suspend fun loadTagsViewData(): List { + private suspend fun loadTagsViewData( + initialOrder: CardTagOrder, + ): List { val isDarkTheme = prefsInteractor.getDarkMode() val types = recordTypeInteractor.getAll().associateBy { it.id } - return recordTagInteractor.getAll(extra.initialOrder) + return recordTagInteractor.getAll(initialOrder) .filter { !it.archived } .takeUnless { it.isEmpty() } ?.map { tag -> diff --git a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsDisplayViewDataInteractor.kt b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsDisplayViewDataInteractor.kt index 993f4802b..89abeb6b3 100644 --- a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsDisplayViewDataInteractor.kt +++ b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/interactor/SettingsDisplayViewDataInteractor.kt @@ -172,9 +172,15 @@ class SettingsDisplayViewDataInteractor @Inject constructor( subtitle = "", isChecked = prefsInteractor.getShowSeconds(), ) - result += mapOrderData(CardOrderDialogParams.Type.RecordType) - result += mapOrderData(CardOrderDialogParams.Type.Category) - result += mapOrderData(CardOrderDialogParams.Type.Tag) + result += mapOrderData( + CardOrderDialogParams.Type.RecordType(prefsInteractor.getCardOrder()), + ) + result += mapOrderData( + CardOrderDialogParams.Type.Category(prefsInteractor.getCategoryOrder()), + ) + result += mapOrderData( + CardOrderDialogParams.Type.Tag(prefsInteractor.getTagOrder()), + ) result += SettingsTextViewData( block = SettingsBlock.DisplayCardSize, title = resourceRepo.getString(R.string.settings_change_card_size), @@ -190,14 +196,20 @@ class SettingsDisplayViewDataInteractor @Inject constructor( return result } - private suspend fun mapOrderData( + private fun mapOrderData( type: CardOrderDialogParams.Type, ): SettingsSpinnerWithButtonViewData { val cardOrderViewData = when (type) { - is CardOrderDialogParams.Type.RecordType -> prefsInteractor.getCardOrder() - is CardOrderDialogParams.Type.Category -> prefsInteractor.getCategoryOrder() - is CardOrderDialogParams.Type.Tag -> prefsInteractor.getTagOrder() - }.let(settingsMapper::toCardOrderViewData) + is CardOrderDialogParams.Type.RecordType -> { + type.order.let(settingsMapper::toCardOrderViewData) + } + is CardOrderDialogParams.Type.Category -> { + type.order.let(settingsMapper::toCardOrderViewData) + } + is CardOrderDialogParams.Type.Tag -> { + type.order.let(settingsMapper::toCardTagOrderViewData) + } + } val block = when (type) { is CardOrderDialogParams.Type.RecordType -> SettingsBlock.DisplaySortActivities diff --git a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/mapper/SettingsMapper.kt b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/mapper/SettingsMapper.kt index 19b684377..4573bfdc6 100644 --- a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/mapper/SettingsMapper.kt +++ b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/mapper/SettingsMapper.kt @@ -19,6 +19,7 @@ import com.example.util.simpletimetracker.core.utils.EXTRA_RECORD_TAG_NAME import com.example.util.simpletimetracker.domain.extension.orZero import com.example.util.simpletimetracker.domain.interactor.DarkMode import com.example.util.simpletimetracker.domain.model.CardOrder +import com.example.util.simpletimetracker.domain.model.CardTagOrder import com.example.util.simpletimetracker.domain.model.DayOfWeek import com.example.util.simpletimetracker.domain.model.DaysInCalendar import com.example.util.simpletimetracker.domain.model.RepeatButtonType @@ -53,6 +54,13 @@ class SettingsMapper @Inject constructor( CardOrder.MANUAL, ) + private val cardTagOrderList: List = listOf( + CardTagOrder.NAME, + CardTagOrder.COLOR, + CardTagOrder.ACTIVITY, + CardTagOrder.MANUAL, + ) + private val daysInCalendarList: List = listOf( DaysInCalendar.ONE, DaysInCalendar.THREE, @@ -129,10 +137,24 @@ class SettingsMapper @Inject constructor( ) } + fun toCardTagOrderViewData(currentOrder: CardTagOrder): CardOrderViewData { + return CardOrderViewData( + items = cardTagOrderList + .map(::toCardTagOrderName) + .map(CustomSpinner::CustomSpinnerTextItem), + selectedPosition = toPosition(currentOrder), + isManualConfigButtonVisible = currentOrder == CardTagOrder.MANUAL, + ) + } + fun toCardOrder(position: Int): CardOrder { return cardOrderList.getOrElse(position) { cardOrderList.first() } } + fun toCardTagOrder(position: Int): CardTagOrder { + return cardTagOrderList.getOrElse(position) { cardTagOrderList.first() } + } + fun toDaysInCalendarViewData(currentValue: DaysInCalendar): DaysInCalendarViewData { return DaysInCalendarViewData( items = daysInCalendarList @@ -331,6 +353,10 @@ class SettingsMapper @Inject constructor( return cardOrderList.indexOf(cardOrder).takeUnless { it == -1 }.orZero() } + private fun toPosition(cardOrder: CardTagOrder): Int { + return cardTagOrderList.indexOf(cardOrder).takeUnless { it == -1 }.orZero() + } + private fun toCardOrderName(cardOrder: CardOrder): String { return when (cardOrder) { CardOrder.NAME -> R.string.settings_sort_by_name @@ -339,6 +365,15 @@ class SettingsMapper @Inject constructor( }.let(resourceRepo::getString) } + private fun toCardTagOrderName(cardOrder: CardTagOrder): String { + return when (cardOrder) { + CardTagOrder.NAME -> R.string.settings_sort_by_name + CardTagOrder.COLOR -> R.string.settings_sort_by_color + CardTagOrder.MANUAL -> R.string.settings_sort_manually + CardTagOrder.ACTIVITY -> R.string.settings_sort_activity + }.let(resourceRepo::getString) + } + private fun toPosition(daysInCalendar: DaysInCalendar): Int { return daysInCalendarList.indexOf(daysInCalendar).takeUnless { it == -1 }.orZero() } diff --git a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/delegate/SettingsDisplayViewModelDelegate.kt b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/delegate/SettingsDisplayViewModelDelegate.kt index 269a4d8bd..5f39866ac 100644 --- a/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/delegate/SettingsDisplayViewModelDelegate.kt +++ b/features/feature_settings/src/main/java/com/example/util/simpletimetracker/feature_settings/viewModel/delegate/SettingsDisplayViewModelDelegate.kt @@ -10,6 +10,7 @@ import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.interactor.RecordInteractor import com.example.util.simpletimetracker.domain.interactor.WidgetInteractor import com.example.util.simpletimetracker.domain.model.CardOrder +import com.example.util.simpletimetracker.domain.model.CardTagOrder import com.example.util.simpletimetracker.domain.model.WidgetTransparencyPercent import com.example.util.simpletimetracker.domain.model.WidgetType import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType @@ -78,43 +79,49 @@ class SettingsDisplayViewModelDelegate @Inject constructor( fun onRecordTypeOrderSelected(position: Int) { onOrderSelected( - type = CardOrderDialogParams.Type.RecordType, - position = position, + type = CardOrderDialogParams.Type.RecordType( + order = settingsMapper.toCardOrder(position), + ), ) } fun onCategoryOrderSelected(position: Int) { onOrderSelected( - type = CardOrderDialogParams.Type.Category, - position = position, + type = CardOrderDialogParams.Type.Category( + order = settingsMapper.toCardOrder(position), + ), ) } fun onTagOrderSelected(position: Int) { onOrderSelected( - type = CardOrderDialogParams.Type.Tag, - position = position, + type = CardOrderDialogParams.Type.Tag( + order = settingsMapper.toCardTagOrder(position), + ), ) } fun onCardOrderManualClick() { openOrderDialog( - type = CardOrderDialogParams.Type.RecordType, - cardOrder = CardOrder.MANUAL, + type = CardOrderDialogParams.Type.RecordType( + order = CardOrder.MANUAL, + ), ) } fun onCategoryOrderManualClick() { openOrderDialog( - type = CardOrderDialogParams.Type.Category, - cardOrder = CardOrder.MANUAL, + type = CardOrderDialogParams.Type.Category( + order = CardOrder.MANUAL, + ), ) } fun onTagOrderManualClick() { openOrderDialog( - type = CardOrderDialogParams.Type.Tag, - cardOrder = CardOrder.MANUAL, + type = CardOrderDialogParams.Type.Tag( + order = CardTagOrder.MANUAL, + ), ) } @@ -294,24 +301,30 @@ class SettingsDisplayViewModelDelegate @Inject constructor( private fun onOrderSelected( type: CardOrderDialogParams.Type, - position: Int, ) { delegateScope.launch { - val currentOrder = when (type) { - is CardOrderDialogParams.Type.RecordType -> prefsInteractor.getCardOrder() - is CardOrderDialogParams.Type.Category -> prefsInteractor.getCategoryOrder() - is CardOrderDialogParams.Type.Tag -> prefsInteractor.getTagOrder() - } - val newOrder = settingsMapper.toCardOrder(position) - if (newOrder == currentOrder) return@launch - - if (newOrder == CardOrder.MANUAL) { - openOrderDialog(type, currentOrder) - } when (type) { - is CardOrderDialogParams.Type.RecordType -> prefsInteractor.setCardOrder(newOrder) - is CardOrderDialogParams.Type.Category -> prefsInteractor.setCategoryOrder(newOrder) - is CardOrderDialogParams.Type.Tag -> prefsInteractor.setTagOrder(newOrder) + is CardOrderDialogParams.Type.RecordType -> { + val currentOrder = prefsInteractor.getCardOrder() + val newOrder = type.order + if (newOrder == currentOrder) return@launch + if (newOrder == CardOrder.MANUAL) openOrderDialog(type.copy(order = currentOrder)) + prefsInteractor.setCardOrder(newOrder) + } + is CardOrderDialogParams.Type.Category -> { + val currentOrder = prefsInteractor.getCategoryOrder() + val newOrder = type.order + if (newOrder == currentOrder) return@launch + if (newOrder == CardOrder.MANUAL) openOrderDialog(type.copy(order = currentOrder)) + prefsInteractor.setCategoryOrder(newOrder) + } + is CardOrderDialogParams.Type.Tag -> { + val currentOrder = prefsInteractor.getTagOrder() + val newOrder = type.order + if (newOrder == currentOrder) return@launch + if (newOrder == CardTagOrder.MANUAL) openOrderDialog(type.copy(order = currentOrder)) + prefsInteractor.setTagOrder(newOrder) + } } parent?.updateContent() } @@ -319,13 +332,7 @@ class SettingsDisplayViewModelDelegate @Inject constructor( private fun openOrderDialog( type: CardOrderDialogParams.Type, - cardOrder: CardOrder, ) { - router.navigate( - CardOrderDialogParams( - type = type, - initialOrder = cardOrder, - ), - ) + router.navigate(CardOrderDialogParams(type)) } } \ No newline at end of file diff --git a/navigation/src/main/java/com/example/util/simpletimetracker/navigation/params/screen/CardOrderDialogParams.kt b/navigation/src/main/java/com/example/util/simpletimetracker/navigation/params/screen/CardOrderDialogParams.kt index 24eaf10ea..66b685f06 100644 --- a/navigation/src/main/java/com/example/util/simpletimetracker/navigation/params/screen/CardOrderDialogParams.kt +++ b/navigation/src/main/java/com/example/util/simpletimetracker/navigation/params/screen/CardOrderDialogParams.kt @@ -2,22 +2,28 @@ package com.example.util.simpletimetracker.navigation.params.screen import android.os.Parcelable import com.example.util.simpletimetracker.domain.model.CardOrder +import com.example.util.simpletimetracker.domain.model.CardTagOrder import kotlinx.parcelize.Parcelize @Parcelize data class CardOrderDialogParams( - val type: Type = Type.RecordType, - val initialOrder: CardOrder = CardOrder.MANUAL, + val type: Type = Type.RecordType(), ) : Parcelable, ScreenParams { sealed interface Type : Parcelable { @Parcelize - object RecordType : Type + data class RecordType( + val order: CardOrder = CardOrder.MANUAL, + ) : Type @Parcelize - object Category : Type + data class Category( + val order: CardOrder = CardOrder.MANUAL, + ) : Type @Parcelize - object Tag : Type + data class Tag( + val order: CardTagOrder = CardTagOrder.MANUAL, + ) : Type } } \ No newline at end of file diff --git a/resources/src/main/res/values-ar/strings.xml b/resources/src/main/res/values-ar/strings.xml index 3c6b22252..38af256b3 100644 --- a/resources/src/main/res/values-ar/strings.xml +++ b/resources/src/main/res/values-ar/strings.xml @@ -85,7 +85,6 @@ تم أرشفة الوسم - النشاط تم تعيينه بشكل افتراضي يمكن تعيينه إلى متتبعات أي نشاط لا يمكن تعيينه إلا لمتتبعات نشاط معين @@ -220,6 +219,7 @@ الاسم اللون يدويا + @string/change_record_type_field اليوم الأول من الأسبوع زر التكرار كرر السجل الأخير diff --git a/resources/src/main/res/values-ca/strings.xml b/resources/src/main/res/values-ca/strings.xml index 62719c61a..d607b6800 100644 --- a/resources/src/main/res/values-ca/strings.xml +++ b/resources/src/main/res/values-ca/strings.xml @@ -85,7 +85,6 @@ Etiqueta arxivada - Activitat Assignat per defecte Pot ser assignat a enregistraments de qualsevol activitat Només pot ser assignat a enregistraments d\'una activitat específica @@ -220,6 +219,7 @@ Nom Color Manual + @string/change_record_type_field Primer dia de la setmana Botó de repetició Repetiu l\'últim registre diff --git a/resources/src/main/res/values-de/strings.xml b/resources/src/main/res/values-de/strings.xml index 671688027..70259f1ff 100644 --- a/resources/src/main/res/values-de/strings.xml +++ b/resources/src/main/res/values-de/strings.xml @@ -85,7 +85,6 @@ Tag archiviert - Aktivität Standardmäßig zugewiesen Kann Aufzeichnungen beliebiger Aktivitäten zugewiesen werden Kann nur Datensätzen einer bestimmten Aktivität zugeordnet werden @@ -220,6 +219,7 @@ Name Farbe Manuell + @string/change_record_type_field Erster Tag der Woche Wiederholen-Taste Letzte Aufnahme wiederholen diff --git a/resources/src/main/res/values-es/strings.xml b/resources/src/main/res/values-es/strings.xml index af11e5e14..d969540ea 100644 --- a/resources/src/main/res/values-es/strings.xml +++ b/resources/src/main/res/values-es/strings.xml @@ -85,7 +85,6 @@ Etiqueta archivada - Actividad Asignado por defecto Puede ser asignando al registro de cualquier actividad Sólo puede ser asignado al registro de una actividad específica @@ -220,6 +219,7 @@ Nombre Color Manual + @string/change_record_type_field Primer día de la semana Botón de repetición Repetir último registro diff --git a/resources/src/main/res/values-fa/strings.xml b/resources/src/main/res/values-fa/strings.xml index cbdea81a5..34ed63a81 100644 --- a/resources/src/main/res/values-fa/strings.xml +++ b/resources/src/main/res/values-fa/strings.xml @@ -85,7 +85,6 @@ برچسب بایگانی شد - فعالیت به طور پیش فرض اختصاص داده شده است می تواند به تاریخچه هر فعالیتی اضافه شود می تواند به تاریخچه های یک فعالیت خاص اصافه شود @@ -220,6 +219,7 @@ نام رنگ دستی + @string/change_record_type_field اولین روز هفته دکمه تکرار آخرین رکورد را تکرار کنید diff --git a/resources/src/main/res/values-fr/strings.xml b/resources/src/main/res/values-fr/strings.xml index a96732aab..a75d40544 100644 --- a/resources/src/main/res/values-fr/strings.xml +++ b/resources/src/main/res/values-fr/strings.xml @@ -85,7 +85,6 @@ Étiquettes archivées - Activité Attribué par défaut Peut être attribuée aux enregistrements de n\'importe quelle activité Ne peut être attribuée qu\'aux enregistrements d\'une activité spécifique @@ -220,6 +219,7 @@ Par nom Par couleur Manuellement + @string/change_record_type_field Premier jour de la semaine Bouton de répétition Répéter le dernier enregistrement diff --git a/resources/src/main/res/values-hi/strings.xml b/resources/src/main/res/values-hi/strings.xml index 1ed47284f..9106b1877 100644 --- a/resources/src/main/res/values-hi/strings.xml +++ b/resources/src/main/res/values-hi/strings.xml @@ -85,7 +85,6 @@ टैग संग्रहीत - गतिविधि डिफ़ॉल्ट रूप से असाइन किया गया किसी भी गतिविधि के रिकॉर्ड को सौंपा जा सकता है केवल एक विशिष्ट गतिविधि के रिकॉर्ड को सौंपा जा सकता है @@ -220,6 +219,7 @@ नाम रंग हस्तचालन से + @string/change_record_type_field सप्ताह का पहला दिन दोहराएँ बटन पिछला रिकॉर्ड दोहराएँ diff --git a/resources/src/main/res/values-in/strings.xml b/resources/src/main/res/values-in/strings.xml index 7dccaa372..93567733a 100644 --- a/resources/src/main/res/values-in/strings.xml +++ b/resources/src/main/res/values-in/strings.xml @@ -85,7 +85,6 @@ Label diarsipkan - Kegiatan Ditugaskan secara default Dapat ditugaskan ke catatan aktivitas apa pun Hanya dapat ditetapkan ke catatan aktivitas tertentu @@ -220,6 +219,7 @@ Nama Warna Secara manual + @string/change_record_type_field Hari pertama dalam seminggu Tombol ulangi Ulangi rekaman terakhir diff --git a/resources/src/main/res/values-it/strings.xml b/resources/src/main/res/values-it/strings.xml index f8382b728..3e665d4fd 100644 --- a/resources/src/main/res/values-it/strings.xml +++ b/resources/src/main/res/values-it/strings.xml @@ -85,7 +85,6 @@ Etichetta archiviata - Attività Assegnato per impostazione predefinita Può essere assegnato a registrazioni di qualunque attività Può essere assegnato solo a registrazioni di una specifica attività @@ -220,6 +219,7 @@ Nome Colore Manualmente + @string/change_record_type_field Primo giorno della settimana Pulsante Ripeti Ripeti l\'ultimo record diff --git a/resources/src/main/res/values-ja/strings.xml b/resources/src/main/res/values-ja/strings.xml index 171e47053..60e41ebb3 100644 --- a/resources/src/main/res/values-ja/strings.xml +++ b/resources/src/main/res/values-ja/strings.xml @@ -85,7 +85,6 @@ タグをアーカイブ - アクティビティ デフォルトで割り当てられる あらゆるアクティビティに割り当てることができます 特定のアクティビティのみに割り当てることができます @@ -220,6 +219,7 @@ 名前 手動 + @string/change_record_type_field 週の始まり リピートボタン 最後のレコードを繰り返す diff --git a/resources/src/main/res/values-ko/strings.xml b/resources/src/main/res/values-ko/strings.xml index 3e5407447..6215bee27 100644 --- a/resources/src/main/res/values-ko/strings.xml +++ b/resources/src/main/res/values-ko/strings.xml @@ -85,7 +85,6 @@ 태그 보관됨 - 활동 기본적으로 할당됨 어떤 활동에도 추가할 수 있습니다 특정 활동에만 추가할 수 있습니다 @@ -220,6 +219,7 @@ 이름 색상 수동 + @string/change_record_type_field 한 주의 시작 반복 버튼 이전 기록을 반복합니다 diff --git a/resources/src/main/res/values-nl/strings.xml b/resources/src/main/res/values-nl/strings.xml index 3b381cee9..e9a44843a 100644 --- a/resources/src/main/res/values-nl/strings.xml +++ b/resources/src/main/res/values-nl/strings.xml @@ -85,7 +85,6 @@ Label gearchiveerd - Activiteit Standaard toegewezen Kan worden toegewezen aan opname van elke activiteit Kan alleen aan records van een specifieke activiteit worden toegewezen @@ -220,6 +219,7 @@ Naam Kleur Handmatig + @string/change_record_type_field Eerste dag van de week Herhaal knop Herhaal de laatste opname diff --git a/resources/src/main/res/values-pt-rPT/strings.xml b/resources/src/main/res/values-pt-rPT/strings.xml index 962893fdb..ffca085a6 100644 --- a/resources/src/main/res/values-pt-rPT/strings.xml +++ b/resources/src/main/res/values-pt-rPT/strings.xml @@ -85,7 +85,6 @@ Etiqueta arquivada - Atividade Atribuído por padrão Pode ser atribuída a registos de qualquer atividade Só pode ser atribuída a registos de uma atividade específica @@ -220,6 +219,7 @@ Nome Cor Manualmente + @string/change_record_type_field Primeiro dia da semana Botão de repetição Repetir último registo diff --git a/resources/src/main/res/values-pt/strings.xml b/resources/src/main/res/values-pt/strings.xml index d3b6f5c52..6f8f5053b 100644 --- a/resources/src/main/res/values-pt/strings.xml +++ b/resources/src/main/res/values-pt/strings.xml @@ -85,7 +85,6 @@ Tag arquivada - Atividade Atribuído por padrão Pode ser atribuída a registros de qualquer atividade Só pode ser atribuída a registros de uma atividade específica @@ -220,6 +219,7 @@ Nome Cor Manualmente + @string/change_record_type_field Primeiro dia da semana Botão de repetição Repetir último registro diff --git a/resources/src/main/res/values-ro/strings.xml b/resources/src/main/res/values-ro/strings.xml index 544b54970..610de5e80 100644 --- a/resources/src/main/res/values-ro/strings.xml +++ b/resources/src/main/res/values-ro/strings.xml @@ -85,7 +85,6 @@ Etichetă arhivată - Activitate Atribuit implicit Poate fi atribuit înregistrărilor oricărei activități Poate fi atribuit înregistrărilor unei activități specifice @@ -220,6 +219,7 @@ Nume Culoare Manual + @string/change_record_type_field Prima zi a săptămânii Buton Repetă Repetă ultima înregistrare diff --git a/resources/src/main/res/values-ru/strings.xml b/resources/src/main/res/values-ru/strings.xml index 9692acc24..0eae24447 100644 --- a/resources/src/main/res/values-ru/strings.xml +++ b/resources/src/main/res/values-ru/strings.xml @@ -85,7 +85,6 @@ Тег перемещен в архив - Активность Назначено по умолчанию Может быть назначен записям любой активности Может быть назначен только записям определенной активности @@ -220,6 +219,7 @@ Имя Цвет Вручную + @string/change_record_type_field Первый день недели Кнопка повтора Повторить последнюю запись diff --git a/resources/src/main/res/values-sv/strings.xml b/resources/src/main/res/values-sv/strings.xml index ea51a99df..e9ef410ec 100644 --- a/resources/src/main/res/values-sv/strings.xml +++ b/resources/src/main/res/values-sv/strings.xml @@ -85,7 +85,6 @@ Tagg arkiverad - Aktivitet Tilldelad som standard Kan tilldelas händelse oavsett aktivitetstyp Kan endast tilldelas händelse av särskild aktivitet @@ -220,6 +219,7 @@ Namn Färg Manuellt + @string/change_record_type_field Första veckodagen Upprepa knapp Upprepa senaste posten diff --git a/resources/src/main/res/values-tr/strings.xml b/resources/src/main/res/values-tr/strings.xml index 78ba38e24..1ef043be3 100644 --- a/resources/src/main/res/values-tr/strings.xml +++ b/resources/src/main/res/values-tr/strings.xml @@ -85,7 +85,6 @@ Etiket arşivlendi - Aktivite Varsayılan olarak atandı Herhangi bir aktivitenin kayıtlarına atanabilir Sadece seçilen aktivitenin kayıtlarına atanabilir @@ -220,6 +219,7 @@ İsim Renk Elle + @string/change_record_type_field Haftanın ilk günü Tekrar düğmesi Son kaydı tekrarla diff --git a/resources/src/main/res/values-uk/strings.xml b/resources/src/main/res/values-uk/strings.xml index 6180095d6..69b698125 100644 --- a/resources/src/main/res/values-uk/strings.xml +++ b/resources/src/main/res/values-uk/strings.xml @@ -85,7 +85,6 @@ Тег переміщено до архіву - Активність Призначено за умовчанням Може бути віднесено до записів будь -якої діяльності Можна призначити лише до записів про певну діяльність @@ -220,6 +219,7 @@ Ім\'я Колір Вручну + @string/change_record_type_field Перший день тижня Кнопка повтору Повторити останній запис diff --git a/resources/src/main/res/values-vi/strings.xml b/resources/src/main/res/values-vi/strings.xml index 158e8020d..fbefbec07 100644 --- a/resources/src/main/res/values-vi/strings.xml +++ b/resources/src/main/res/values-vi/strings.xml @@ -85,7 +85,6 @@ Đã lưu trữ thẻ - Hoạt động Được chỉ định theo mặc định Có thể được gán cho bản ghi của bất kỳ hoạt động nào Chỉ có thể được gán cho các bản ghi của một hoạt động cụ thể @@ -220,6 +219,7 @@ Tên Màu Thủ công + @string/change_record_type_field Ngày đầu tuần Nút lặp lại Lặp lại bản ghi cuối cùng diff --git a/resources/src/main/res/values-zh-rTW/strings.xml b/resources/src/main/res/values-zh-rTW/strings.xml index dea482b37..6de23a9c1 100644 --- a/resources/src/main/res/values-zh-rTW/strings.xml +++ b/resources/src/main/res/values-zh-rTW/strings.xml @@ -85,7 +85,6 @@ 標記已歸檔 - 活動 預設分配 已能指派任何活動給紀錄 只能指派給指定活動的紀錄 @@ -220,6 +219,7 @@ 名稱 顏色 手動 + @string/change_record_type_field 每周第一天 重複按鈕 重複上次記錄 diff --git a/resources/src/main/res/values-zh/strings.xml b/resources/src/main/res/values-zh/strings.xml index e2311373b..cc2be1c4d 100644 --- a/resources/src/main/res/values-zh/strings.xml +++ b/resources/src/main/res/values-zh/strings.xml @@ -85,7 +85,6 @@ 标签已存档 - 活动 默认分配 可以分配給任何活動的記錄 只能分配給特定活動的記錄 @@ -220,6 +219,7 @@ 名称 颜色 手动 + @string/change_record_type_field 一周的第一天 重复按钮 重复上次记录 diff --git a/resources/src/main/res/values/strings.xml b/resources/src/main/res/values/strings.xml index be2e2908f..a545bb656 100644 --- a/resources/src/main/res/values/strings.xml +++ b/resources/src/main/res/values/strings.xml @@ -85,7 +85,6 @@ Tag archived - Activity Assigned by default Can be assigned to records of any activity Can only be assigned to records of a specific activity @@ -220,6 +219,7 @@ Name Color Manually + @string/change_record_type_field First day of week Repeat button Repeat last record