diff --git a/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/dayOfWeek/DayOfWeekAdapterDelegate.kt b/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/dayOfWeek/DayOfWeekAdapterDelegate.kt new file mode 100644 index 00000000..8d04eb57 --- /dev/null +++ b/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/dayOfWeek/DayOfWeekAdapterDelegate.kt @@ -0,0 +1,21 @@ +package com.example.util.simpletimetracker.feature_base_adapter.dayOfWeek + +import com.example.util.simpletimetracker.feature_base_adapter.createRecyclerBindingAdapterDelegate +import com.example.util.simpletimetracker.feature_views.extension.setOnClickWith +import com.example.util.simpletimetracker.feature_base_adapter.dayOfWeek.DayOfWeekViewData as ViewData +import com.example.util.simpletimetracker.feature_base_adapter.databinding.ItemDayOfWeekBinding as Binding + +fun createDayOfWeekAdapterDelegate( + onClick: (ViewData) -> Unit, +) = createRecyclerBindingAdapterDelegate( + Binding::inflate +) { binding, item, _ -> + + with(binding) { + item as ViewData + + containerDayOfWeekItem.setCardBackgroundColor(item.color) + btnDayOfWeekItem.text = item.text + btnDayOfWeekItem.setOnClickWith(item, onClick) + } +} diff --git a/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/adapter/RecordsFilterDayOfWeekViewData.kt b/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/dayOfWeek/DayOfWeekViewData.kt similarity index 71% rename from features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/adapter/RecordsFilterDayOfWeekViewData.kt rename to features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/dayOfWeek/DayOfWeekViewData.kt index 71140e08..26a19fe6 100644 --- a/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/adapter/RecordsFilterDayOfWeekViewData.kt +++ b/features/feature_base_adapter/src/main/java/com/example/util/simpletimetracker/feature_base_adapter/dayOfWeek/DayOfWeekViewData.kt @@ -1,10 +1,10 @@ -package com.example.util.simpletimetracker.feature_records_filter.adapter +package com.example.util.simpletimetracker.feature_base_adapter.dayOfWeek import androidx.annotation.ColorInt import com.example.util.simpletimetracker.domain.model.DayOfWeek import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType -data class RecordsFilterDayOfWeekViewData( +data class DayOfWeekViewData( val dayOfWeek: DayOfWeek, val text: String, @ColorInt val color: Int, @@ -13,5 +13,5 @@ data class RecordsFilterDayOfWeekViewData( override fun getUniqueId(): Long = dayOfWeek.ordinal.toLong() override fun isValidType(other: ViewHolderType): Boolean = - other is RecordsFilterDayOfWeekViewData + other is DayOfWeekViewData } \ No newline at end of file diff --git a/features/feature_records_filter/src/main/res/layout/item_records_filter_day_of_week.xml b/features/feature_base_adapter/src/main/res/layout/item_day_of_week.xml similarity index 85% rename from features/feature_records_filter/src/main/res/layout/item_records_filter_day_of_week.xml rename to features/feature_base_adapter/src/main/res/layout/item_day_of_week.xml index a7f05513..435b9684 100644 --- a/features/feature_records_filter/src/main/res/layout/item_records_filter_day_of_week.xml +++ b/features/feature_base_adapter/src/main/res/layout/item_day_of_week.xml @@ -2,7 +2,7 @@ + tools:text="Sun" /> \ No newline at end of file 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 f6eb737e..c7acb1fe 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 @@ -18,6 +18,7 @@ import com.example.util.simpletimetracker.feature_base_adapter.BaseRecyclerAdapt import com.example.util.simpletimetracker.feature_base_adapter.category.CategoryViewData import com.example.util.simpletimetracker.feature_base_adapter.color.createColorAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.color.createColorPaletteAdapterDelegate +import com.example.util.simpletimetracker.feature_base_adapter.dayOfWeek.createDayOfWeekAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.divider.createDividerAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.empty.createEmptyAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.info.createInfoAdapterDelegate @@ -65,6 +66,11 @@ class ChangeCategoryFragment : createEmptyAdapterDelegate(), ) } + private val dailyGoalDayOfWeekAdapter: BaseRecyclerAdapter by lazy { + BaseRecyclerAdapter( + createDayOfWeekAdapterDelegate(viewModel::onDayOfWeekClick), + ) + } private val params: ChangeTagData by fragmentArgumentDelegate( key = ARGS_PARAMS, default = ChangeTagData.New(), @@ -97,7 +103,10 @@ class ChangeCategoryFragment : adapter = typesAdapter } - GoalsViewDelegate.initGoalUi(binding.layoutChangeCategoryGoals) + GoalsViewDelegate.initGoalUi( + layout = binding.layoutChangeCategoryGoals, + dayOfWeekAdapter = dailyGoalDayOfWeekAdapter + ) } override fun initUx() = with(binding) { diff --git a/features/feature_change_category/src/main/java/com/example/util/simpletimetracker/feature_change_category/viewModel/ChangeCategoryViewModel.kt b/features/feature_change_category/src/main/java/com/example/util/simpletimetracker/feature_change_category/viewModel/ChangeCategoryViewModel.kt index 8cafe650..bd4e4c3f 100644 --- a/features/feature_change_category/src/main/java/com/example/util/simpletimetracker/feature_change_category/viewModel/ChangeCategoryViewModel.kt +++ b/features/feature_change_category/src/main/java/com/example/util/simpletimetracker/feature_change_category/viewModel/ChangeCategoryViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.example.util.simpletimetracker.core.base.ViewModelDelegate import com.example.util.simpletimetracker.core.extension.set import com.example.util.simpletimetracker.core.interactor.ColorViewDataInteractor import com.example.util.simpletimetracker.core.mapper.CategoryViewDataMapper @@ -93,6 +94,11 @@ class ChangeCategoryViewModel @Inject constructor( private var newColor: AppColor = AppColor(colorId = (0..ColorMapper.colorsNumber).random(), colorInt = "") private var newTypes: MutableList = mutableListOf() + override fun onCleared() { + (goalsViewModelDelegate as? ViewModelDelegate)?.clear() + super.onCleared() + } + fun onVisible() = viewModelScope.launch { goalsViewModelDelegate.onVisible() } diff --git a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/goals/GoalsViewDataMapper.kt b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/goals/GoalsViewDataMapper.kt index 140ab660..e3238b98 100644 --- a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/goals/GoalsViewDataMapper.kt +++ b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/goals/GoalsViewDataMapper.kt @@ -1,9 +1,13 @@ package com.example.util.simpletimetracker.feature_change_record_type.goals +import com.example.util.simpletimetracker.core.mapper.ColorMapper import com.example.util.simpletimetracker.core.mapper.TimeMapper import com.example.util.simpletimetracker.core.repo.ResourceRepo import com.example.util.simpletimetracker.domain.extension.orZero +import com.example.util.simpletimetracker.domain.model.DayOfWeek import com.example.util.simpletimetracker.domain.model.RecordTypeGoal +import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType +import com.example.util.simpletimetracker.feature_base_adapter.dayOfWeek.DayOfWeekViewData import com.example.util.simpletimetracker.feature_change_record_type.R import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeGoalsState import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeGoalsViewData @@ -13,6 +17,7 @@ import javax.inject.Inject class GoalsViewDataMapper @Inject constructor( private val resourceRepo: ResourceRepo, private val timeMapper: TimeMapper, + private val colorMapper: ColorMapper, ) { private val goalTypeList: List = listOf( @@ -33,6 +38,7 @@ class GoalsViewDataMapper @Inject constructor( fun mapGoalsState( goalsState: ChangeRecordTypeGoalsState, + isDarkTheme: Boolean, ): ChangeRecordTypeGoalsViewData { return ChangeRecordTypeGoalsViewData( session = mapGoalViewData( @@ -51,6 +57,11 @@ class GoalsViewDataMapper @Inject constructor( title = resourceRepo.getString(R.string.change_record_type_monthly_goal_time), goal = goalsState.monthly, ), + daysOfWeek = mapDaysOfWeekViewData( + goal = goalsState.daily, + selectedDaysOfWeek = goalsState.daysOfWeek, + isDarkTheme = isDarkTheme, + ) ) } @@ -60,6 +71,7 @@ class GoalsViewDataMapper @Inject constructor( daily = getDefaultGoal(), weekly = getDefaultGoal(), monthly = getDefaultGoal(), + daysOfWeek = emptyList(), ) } @@ -108,4 +120,25 @@ class GoalsViewDataMapper @Inject constructor( resourceRepo.getString(R.string.change_record_type_goal_time_disabled) } } + + private fun mapDaysOfWeekViewData( + goal: RecordTypeGoal.Type, + selectedDaysOfWeek: List, + isDarkTheme: Boolean, + ): List { + if (goal.value == 0L) return emptyList() + + return DayOfWeek.values().map { + val selected = it in selectedDaysOfWeek + DayOfWeekViewData( + dayOfWeek = it, + text = timeMapper.toShortDayOfWeekName(it), + color = if (selected) { + colorMapper.toActiveColor(isDarkTheme) + } else { + colorMapper.toInactiveColor(isDarkTheme) + }, + ) + } + } } \ No newline at end of file diff --git a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/goals/GoalsViewDelegate.kt b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/goals/GoalsViewDelegate.kt index ad4127b6..14a6132c 100644 --- a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/goals/GoalsViewDelegate.kt +++ b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/goals/GoalsViewDelegate.kt @@ -7,6 +7,7 @@ import androidx.core.view.isVisible import androidx.core.widget.doAfterTextChanged import com.example.util.simpletimetracker.core.utils.setChooserColor import com.example.util.simpletimetracker.domain.model.RecordTypeGoal +import com.example.util.simpletimetracker.feature_base_adapter.BaseRecyclerAdapter import com.example.util.simpletimetracker.feature_change_record_type.databinding.ChangeRecordTypeGoalLayoutBinding import com.example.util.simpletimetracker.feature_change_record_type.databinding.GoalsLayoutBinding import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeChooserState @@ -16,6 +17,10 @@ import com.example.util.simpletimetracker.feature_views.extension.rotateDown import com.example.util.simpletimetracker.feature_views.extension.rotateUp import com.example.util.simpletimetracker.feature_views.extension.setOnClick import com.example.util.simpletimetracker.feature_views.extension.visible +import com.google.android.flexbox.FlexDirection +import com.google.android.flexbox.FlexWrap +import com.google.android.flexbox.FlexboxLayoutManager +import com.google.android.flexbox.JustifyContent object GoalsViewDelegate { @@ -39,6 +44,7 @@ object GoalsViewDelegate { fun initGoalUi( layout: GoalsLayoutBinding, + dayOfWeekAdapter: BaseRecyclerAdapter, ) = with(layout) { listOf( layoutChangeRecordTypeGoalSession, @@ -52,6 +58,23 @@ object GoalsViewDelegate { // No count goal for session. layoutChangeRecordTypeGoalSession.arrowChangeRecordTypeGoalType.visible = false layoutChangeRecordTypeGoalSession.fieldRecordTypeGoalType.isEnabled = false + + // Init goal days only for daily goal. + listOf( + layoutChangeRecordTypeGoalSession, + layoutChangeRecordTypeGoalWeekly, + layoutChangeRecordTypeGoalMonthly, + ).forEach { + it.rvChangeRecordTypeGoalDays.visible = false + } + layoutChangeRecordTypeGoalDaily.rvChangeRecordTypeGoalDays.apply { + layoutManager = FlexboxLayoutManager(context).apply { + flexDirection = FlexDirection.ROW + justifyContent = JustifyContent.CENTER + flexWrap = FlexWrap.WRAP + } + adapter = dayOfWeekAdapter + } } fun initGoalUx( @@ -130,5 +153,9 @@ object GoalsViewDelegate { applyGoalToView(state.daily, layoutChangeRecordTypeGoalDaily) applyGoalToView(state.weekly, layoutChangeRecordTypeGoalWeekly) applyGoalToView(state.monthly, layoutChangeRecordTypeGoalMonthly) + + layoutChangeRecordTypeGoalDaily.rvChangeRecordTypeGoalDays.apply { + (adapter as? BaseRecyclerAdapter)?.replace(state.daysOfWeek) + } } } \ No newline at end of file diff --git a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/goals/GoalsViewModelDelegate.kt b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/goals/GoalsViewModelDelegate.kt index bd40b128..9a08569f 100644 --- a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/goals/GoalsViewModelDelegate.kt +++ b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/goals/GoalsViewModelDelegate.kt @@ -2,6 +2,9 @@ package com.example.util.simpletimetracker.feature_change_record_type.goals import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData +import com.example.util.simpletimetracker.core.base.ViewModelDelegate +import com.example.util.simpletimetracker.core.extension.addOrRemove +import com.example.util.simpletimetracker.core.extension.lazySuspend import com.example.util.simpletimetracker.core.extension.set import com.example.util.simpletimetracker.core.interactor.CheckExactAlarmPermissionInteractor import com.example.util.simpletimetracker.core.repo.PermissionRepo @@ -10,19 +13,22 @@ import com.example.util.simpletimetracker.domain.extension.getMonthly import com.example.util.simpletimetracker.domain.extension.getSession import com.example.util.simpletimetracker.domain.extension.getWeekly import com.example.util.simpletimetracker.domain.extension.orZero +import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor import com.example.util.simpletimetracker.domain.interactor.RecordTypeGoalInteractor +import com.example.util.simpletimetracker.domain.model.DayOfWeek import com.example.util.simpletimetracker.domain.model.RecordTypeGoal +import com.example.util.simpletimetracker.feature_base_adapter.dayOfWeek.DayOfWeekViewData import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeGoalsState import com.example.util.simpletimetracker.feature_change_record_type.viewData.ChangeRecordTypeGoalsViewData import com.example.util.simpletimetracker.navigation.Router import com.example.util.simpletimetracker.navigation.params.action.OpenSystemSettings import com.example.util.simpletimetracker.navigation.params.screen.DurationDialogParams +import kotlinx.coroutines.launch import javax.inject.Inject interface GoalsViewModelDelegate { val goalsViewData: LiveData val notificationsHintVisible: LiveData - var newGoalsState: ChangeRecordTypeGoalsState fun onNotificationsHintClick() fun onDurationSet(tag: String?, duration: Long, anchor: Any) @@ -30,6 +36,7 @@ interface GoalsViewModelDelegate { fun onGoalTypeSelected(range: RecordTypeGoal.Range, position: Int) fun onGoalCountChange(range: RecordTypeGoal.Range, count: String) fun onGoalTimeClick(range: RecordTypeGoal.Range) + fun onDayOfWeekClick(data: DayOfWeekViewData) } class GoalsViewModelDelegateImpl @Inject constructor( @@ -38,15 +45,16 @@ class GoalsViewModelDelegateImpl @Inject constructor( private val goalsViewDataMapper: GoalsViewDataMapper, private val checkExactAlarmPermissionInteractor: CheckExactAlarmPermissionInteractor, private val permissionRepo: PermissionRepo, -) : GoalsViewModelDelegate { + private val prefsInteractor: PrefsInteractor, +) : GoalsViewModelDelegate, ViewModelDelegate() { - override val goalsViewData: LiveData by lazy { - return@lazy MutableLiveData(loadGoalsViewData()) + override val goalsViewData: LiveData by lazySuspend { + loadGoalsViewData() } override val notificationsHintVisible: LiveData by lazy { MutableLiveData(false) } - override var newGoalsState: ChangeRecordTypeGoalsState = goalsViewDataMapper.getDefaultGoalState() + private var newGoalsState: ChangeRecordTypeGoalsState = goalsViewDataMapper.getDefaultGoalState() override fun onNotificationsHintClick() { router.execute(OpenSystemSettings.Notifications) @@ -125,6 +133,13 @@ class GoalsViewModelDelegateImpl @Inject constructor( ) } + override fun onDayOfWeekClick(data: DayOfWeekViewData) { + val current = newGoalsState.daysOfWeek + val new = current.toMutableList().apply { addOrRemove(data.dayOfWeek) } + newGoalsState = newGoalsState.copy(daysOfWeek = new) + updateGoalsViewData() + } + fun onVisible() { updateNotificationsHintVisible() } @@ -186,6 +201,7 @@ class GoalsViewModelDelegateImpl @Inject constructor( daily = goals.getDaily()?.type ?: defaultGoal, weekly = goals.getWeekly()?.type ?: defaultGoal, monthly = goals.getMonthly()?.type ?: defaultGoal, + daysOfWeek = listOf(DayOfWeek.MONDAY) // TODO, ) updateGoalsViewData() @@ -219,13 +235,16 @@ class GoalsViewModelDelegateImpl @Inject constructor( } } - private fun updateGoalsViewData() { + private fun updateGoalsViewData() = delegateScope.launch { val data = loadGoalsViewData() goalsViewData.set(data) } - private fun loadGoalsViewData(): ChangeRecordTypeGoalsViewData { - return goalsViewDataMapper.mapGoalsState(newGoalsState) + private suspend fun loadGoalsViewData(): ChangeRecordTypeGoalsViewData { + return goalsViewDataMapper.mapGoalsState( + goalsState = newGoalsState, + isDarkTheme = prefsInteractor.getDarkMode(), + ) } private fun updateNotificationsHintVisible() { 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 22b5f205..ccfb4f58 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 @@ -27,6 +27,7 @@ import com.example.util.simpletimetracker.feature_base_adapter.category.createCa import com.example.util.simpletimetracker.feature_base_adapter.category.createCategoryAddAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.color.createColorAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.color.createColorPaletteAdapterDelegate +import com.example.util.simpletimetracker.feature_base_adapter.dayOfWeek.createDayOfWeekAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.divider.createDividerAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.emoji.createEmojiAdapterDelegate import com.example.util.simpletimetracker.feature_base_adapter.empty.createEmptyAdapterDelegate @@ -119,6 +120,11 @@ class ChangeRecordTypeFragment : createEmptyAdapterDelegate(), ) } + private val dailyGoalDayOfWeekAdapter: BaseRecyclerAdapter by lazy { + BaseRecyclerAdapter( + createDayOfWeekAdapterDelegate(viewModel::onDayOfWeekClick), + ) + } private var iconsLayoutManager: GridLayoutManager? = null private val params: ChangeRecordTypeParams by fragmentArgumentDelegate( key = ARGS_PARAMS, @@ -166,7 +172,10 @@ class ChangeRecordTypeFragment : adapter = categoriesAdapter } - GoalsViewDelegate.initGoalUi(binding.layoutChangeRecordTypeGoals) + GoalsViewDelegate.initGoalUi( + layout = binding.layoutChangeRecordTypeGoals, + dayOfWeekAdapter = dailyGoalDayOfWeekAdapter, + ) setOnPreDrawListener { startPostponedEnterTransition() diff --git a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewData/ChangeRecordTypeGoalsState.kt b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewData/ChangeRecordTypeGoalsState.kt index ef0a3412..72240bed 100644 --- a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewData/ChangeRecordTypeGoalsState.kt +++ b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewData/ChangeRecordTypeGoalsState.kt @@ -1,5 +1,6 @@ package com.example.util.simpletimetracker.feature_change_record_type.viewData +import com.example.util.simpletimetracker.domain.model.DayOfWeek import com.example.util.simpletimetracker.domain.model.RecordTypeGoal data class ChangeRecordTypeGoalsState( @@ -7,4 +8,5 @@ data class ChangeRecordTypeGoalsState( val daily: RecordTypeGoal.Type, val weekly: RecordTypeGoal.Type, val monthly: RecordTypeGoal.Type, + val daysOfWeek: List, ) \ No newline at end of file diff --git a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewData/ChangeRecordTypeGoalsViewData.kt b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewData/ChangeRecordTypeGoalsViewData.kt index 8be437d5..d9c109a0 100644 --- a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewData/ChangeRecordTypeGoalsViewData.kt +++ b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewData/ChangeRecordTypeGoalsViewData.kt @@ -1,5 +1,6 @@ package com.example.util.simpletimetracker.feature_change_record_type.viewData +import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType import com.example.util.simpletimetracker.feature_views.spinner.CustomSpinner data class ChangeRecordTypeGoalsViewData( @@ -7,6 +8,7 @@ data class ChangeRecordTypeGoalsViewData( val daily: GoalViewData, val weekly: GoalViewData, val monthly: GoalViewData, + val daysOfWeek: List, ) { data class GoalViewData( diff --git a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt index 6b2f58de..f81d4d94 100644 --- a/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt +++ b/features/feature_change_record_type/src/main/java/com/example/util/simpletimetracker/feature_change_record_type/viewModel/ChangeRecordTypeViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import com.example.util.simpletimetracker.core.base.ViewModelDelegate import com.example.util.simpletimetracker.core.extension.addOrRemove import com.example.util.simpletimetracker.core.extension.set import com.example.util.simpletimetracker.core.mapper.ColorMapper @@ -134,6 +135,11 @@ class ChangeRecordTypeViewModel @Inject constructor( private var newCategories: MutableList = mutableListOf() private var newColor: AppColor = AppColor(colorId = (0..ColorMapper.colorsNumber).random(), colorInt = "") + override fun onCleared() { + (goalsViewModelDelegate as? ViewModelDelegate)?.clear() + super.onCleared() + } + fun onVisible() = viewModelScope.launch { initializeSelectedCategories() updateCategoriesViewData() diff --git a/features/feature_change_record_type/src/main/res/layout/change_record_type_goal_layout.xml b/features/feature_change_record_type/src/main/res/layout/change_record_type_goal_layout.xml index 6eca9988..bb13174d 100644 --- a/features/feature_change_record_type/src/main/res/layout/change_record_type_goal_layout.xml +++ b/features/feature_change_record_type/src/main/res/layout/change_record_type_goal_layout.xml @@ -19,6 +19,7 @@ tools:text="Goal Range" /> @@ -153,4 +154,14 @@ + + \ No newline at end of file diff --git a/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/adapter/RecordsFilterDayOfWeekAdapterDelegate.kt b/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/adapter/RecordsFilterDayOfWeekAdapterDelegate.kt deleted file mode 100644 index 2be83f9e..00000000 --- a/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/adapter/RecordsFilterDayOfWeekAdapterDelegate.kt +++ /dev/null @@ -1,21 +0,0 @@ -package com.example.util.simpletimetracker.feature_records_filter.adapter - -import com.example.util.simpletimetracker.feature_base_adapter.createRecyclerBindingAdapterDelegate -import com.example.util.simpletimetracker.feature_views.extension.setOnClickWith -import com.example.util.simpletimetracker.feature_records_filter.adapter.RecordsFilterDayOfWeekViewData as ViewData -import com.example.util.simpletimetracker.feature_records_filter.databinding.ItemRecordsFilterDayOfWeekBinding as Binding - -fun createRecordsFilterDayOfWeekAdapterDelegate( - onClick: (ViewData) -> Unit, -) = createRecyclerBindingAdapterDelegate( - Binding::inflate -) { binding, item, _ -> - - with(binding) { - item as ViewData - - containerRecordFilterDayOfWeekItem.setCardBackgroundColor(item.color) - btnRecordsFilterDayOfWeekItem.text = item.text - btnRecordsFilterDayOfWeekItem.setOnClickWith(item, onClick) - } -} diff --git a/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/interactor/RecordsFilterViewDataInteractor.kt b/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/interactor/RecordsFilterViewDataInteractor.kt index e8ab978f..3bbf4426 100644 --- a/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/interactor/RecordsFilterViewDataInteractor.kt +++ b/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/interactor/RecordsFilterViewDataInteractor.kt @@ -52,7 +52,7 @@ import com.example.util.simpletimetracker.feature_base_adapter.recordFilter.Reco import com.example.util.simpletimetracker.feature_records_filter.R import com.example.util.simpletimetracker.feature_records_filter.adapter.RecordsFilterButtonViewData import com.example.util.simpletimetracker.feature_records_filter.adapter.RecordsFilterCommentViewData -import com.example.util.simpletimetracker.feature_records_filter.adapter.RecordsFilterDayOfWeekViewData +import com.example.util.simpletimetracker.feature_base_adapter.dayOfWeek.DayOfWeekViewData import com.example.util.simpletimetracker.feature_records_filter.adapter.RecordsFilterRangeViewData import com.example.util.simpletimetracker.feature_records_filter.mapper.RecordsFilterViewDataMapper import com.example.util.simpletimetracker.feature_records_filter.model.RecordsFilterSelectedRecordsViewData @@ -518,7 +518,7 @@ class RecordsFilterViewDataInteractor @Inject constructor( return@withContext DayOfWeek.values().map { val selected = it in selectedDays - RecordsFilterDayOfWeekViewData( + DayOfWeekViewData( dayOfWeek = it, text = timeMapper.toShortDayOfWeekName(it), color = if (selected) { diff --git a/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/view/RecordsFilterFragment.kt b/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/view/RecordsFilterFragment.kt index a0ef6c35..f067b5a7 100644 --- a/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/view/RecordsFilterFragment.kt +++ b/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/view/RecordsFilterFragment.kt @@ -33,7 +33,7 @@ import com.example.util.simpletimetracker.feature_base_adapter.recordsDateDivide import com.example.util.simpletimetracker.feature_base_adapter.runningRecord.createRunningRecordAdapterDelegate import com.example.util.simpletimetracker.feature_records_filter.adapter.createRecordsFilterButtonAdapterDelegate import com.example.util.simpletimetracker.feature_records_filter.adapter.createRecordsFilterCommentAdapterDelegate -import com.example.util.simpletimetracker.feature_records_filter.adapter.createRecordsFilterDayOfWeekAdapterDelegate +import com.example.util.simpletimetracker.feature_base_adapter.dayOfWeek.createDayOfWeekAdapterDelegate import com.example.util.simpletimetracker.feature_records_filter.adapter.createRecordsFilterRangeAdapterDelegate import com.example.util.simpletimetracker.feature_records_filter.model.RecordsFilterSelectedRecordsViewData import com.example.util.simpletimetracker.feature_records_filter.viewModel.RecordsFilterViewModel @@ -76,7 +76,7 @@ class RecordsFilterFragment : createRecordAdapterDelegate(viewModel::onRecordClick), createRecordsFilterCommentAdapterDelegate(viewModel::onCommentChange), createRecordsFilterButtonAdapterDelegate(viewModel::onInnerFilterButtonClick), - createRecordsFilterDayOfWeekAdapterDelegate(viewModel::onDayOfWeekClick), + createDayOfWeekAdapterDelegate(viewModel::onDayOfWeekClick), createRecordsFilterRangeAdapterDelegate(viewModel::onRangeTimeClick), createRecordFilterAdapterDelegate( onClick = viewModel::onInnerFilterClick, diff --git a/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/viewModel/RecordsFilterViewModel.kt b/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/viewModel/RecordsFilterViewModel.kt index 28c88923..56bcf1ca 100644 --- a/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/viewModel/RecordsFilterViewModel.kt +++ b/features/feature_records_filter/src/main/java/com/example/util/simpletimetracker/feature_records_filter/viewModel/RecordsFilterViewModel.kt @@ -47,7 +47,7 @@ import com.example.util.simpletimetracker.feature_base_adapter.record.RecordView import com.example.util.simpletimetracker.feature_base_adapter.recordFilter.RecordFilterViewData import com.example.util.simpletimetracker.feature_base_adapter.recordType.RecordTypeViewData import com.example.util.simpletimetracker.feature_records_filter.adapter.RecordsFilterButtonViewData -import com.example.util.simpletimetracker.feature_records_filter.adapter.RecordsFilterDayOfWeekViewData +import com.example.util.simpletimetracker.feature_base_adapter.dayOfWeek.DayOfWeekViewData import com.example.util.simpletimetracker.feature_records_filter.adapter.RecordsFilterRangeViewData import com.example.util.simpletimetracker.feature_records_filter.interactor.RecordsFilterViewDataInteractor import com.example.util.simpletimetracker.feature_records_filter.mapper.RecordsFilterViewDataMapper @@ -283,7 +283,7 @@ class RecordsFilterViewModel @Inject constructor( updateRecords() } - fun onDayOfWeekClick(viewData: RecordsFilterDayOfWeekViewData) { + fun onDayOfWeekClick(viewData: DayOfWeekViewData) { handleDayOfWeekClick(viewData.dayOfWeek) updateFilters()