Skip to content

Commit 58e98ab

Browse files
committed
switch settings widget to new range selection
1 parent c122a59 commit 58e98ab

File tree

10 files changed

+47
-106
lines changed

10 files changed

+47
-106
lines changed

buildSrc/src/main/kotlin/com/example/util/simpletimetracker/Base.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ object Base {
55
const val namespace = "com.example.util.simpletimetracker"
66

77
// Raise by 2 to account for wear version code.
8-
const val versionCode = 111
8+
const val versionCode = 113
99
const val versionName = "1.51"
1010
const val minSDK = 21
1111
const val currentSDK = 35

core/src/main/java/com/example/util/simpletimetracker/core/delegates/dateSelector/viewDelegate/DateSelectorViewDelegate.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -159,8 +159,6 @@ object DateSelectorViewDelegate {
159159
viewPager?.isUserInputEnabled = !isBlocked
160160
}
161161

162-
// TODO DATE add to details stats
163-
// TODO DATE rename ContainerRangeButton style
164162
private fun doScrollToPosition(
165163
binding: DateSelectorLayoutBinding,
166164
position: Int,

core/src/main/java/com/example/util/simpletimetracker/core/mapper/RangeViewDataMapper.kt

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@ import com.example.util.simpletimetracker.core.extension.toParams
55
import com.example.util.simpletimetracker.core.repo.ResourceRepo
66
import com.example.util.simpletimetracker.core.viewData.RangeSelectionOptionsListItem
77
import com.example.util.simpletimetracker.core.viewData.RangeViewData
8-
import com.example.util.simpletimetracker.core.viewData.RangesViewData
98
import com.example.util.simpletimetracker.core.viewData.SelectDateViewData
109
import com.example.util.simpletimetracker.core.viewData.SelectLastDaysViewData
1110
import com.example.util.simpletimetracker.core.viewData.SelectRangeViewData
12-
import com.example.util.simpletimetracker.domain.extension.orZero
1311
import com.example.util.simpletimetracker.domain.daysOfWeek.model.DayOfWeek
1412
import com.example.util.simpletimetracker.domain.record.model.Range
1513
import com.example.util.simpletimetracker.domain.statistics.model.RangeLength
@@ -22,37 +20,6 @@ class RangeViewDataMapper @Inject constructor(
2220
private val rangeTitleMapper: RangeTitleMapper,
2321
) {
2422

25-
// TODO DATE remove
26-
@Deprecated("Use new dialog and remove")
27-
fun mapToRanges(
28-
currentRange: RangeLength,
29-
addSelection: Boolean,
30-
lastDaysCount: Int,
31-
): RangesViewData {
32-
val selectDateButton = mapToSelectDateName(currentRange)
33-
?.takeIf { addSelection }?.let(::listOf) ?: emptyList()
34-
val selectRangeButton = mapToSelectRange()
35-
.takeIf { addSelection }?.let(::listOf) ?: emptyList()
36-
val selectLastDaysButton = mapToSelectLastDays(lastDaysCount)
37-
.let(::listOf)
38-
39-
val data = selectDateButton +
40-
selectRangeButton +
41-
selectLastDaysButton +
42-
ranges.mapNotNull(::mapToRangeName)
43-
44-
val selectedPosition = when (currentRange) {
45-
is RangeLength.Custom -> data.indexOfFirst { it is SelectRangeViewData }
46-
is RangeLength.Last -> data.indexOfFirst { it is SelectLastDaysViewData }
47-
else -> data.indexOfFirst { (it as? RangeViewData)?.range == currentRange }
48-
}.takeUnless { it == -1 }.orZero()
49-
50-
return RangesViewData(
51-
items = data,
52-
selectedPosition = selectedPosition,
53-
)
54-
}
55-
5623
fun mapToRangesOptions(
5724
currentRange: RangeLength,
5825
addSelection: Boolean,

core/src/main/java/com/example/util/simpletimetracker/core/viewData/RangesViewData.kt

Lines changed: 0 additions & 8 deletions
This file was deleted.

features/feature_records/src/main/java/com/example/util/simpletimetracker/feature_records/mapper/RecordsViewDataMapper.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,7 @@ class RecordsViewDataMapper @Inject constructor(
8080
)
8181
}
8282

83-
// TODO DATE remove?
84-
fun mapTitle(
83+
fun mapToShareCalendarTitle(
8584
shift: Int,
8685
startOfDayShift: Long,
8786
isCalendarView: Boolean,

features/feature_records/src/main/java/com/example/util/simpletimetracker/feature_records/viewModel/RecordsViewModel.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,7 +301,6 @@ class RecordsViewModel @Inject constructor(
301301
updateRecords()
302302
}
303303

304-
@Suppress("MoveVariableDeclarationIntoWhen")
305304
private suspend fun onShareClicked() {
306305
val state = loadRecordsViewData(true)
307306
val data = when (state) {
@@ -318,7 +317,7 @@ class RecordsViewModel @Inject constructor(
318317
}
319318
is RecordsState.CalendarData.Data -> {
320319
RecordsShareState(
321-
recordsViewDataMapper.mapTitle(
320+
recordsViewDataMapper.mapToShareCalendarTitle(
322321
shift = shift,
323322
startOfDayShift = prefsInteractor.getStartOfDayShift(),
324323
isCalendarView = prefsInteractor.getShowRecordsCalendar(),

features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/statistics/settings/WidgetStatisticsSettingsFragment.kt

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,17 @@ import android.view.ViewGroup
66
import androidx.fragment.app.viewModels
77
import com.example.util.simpletimetracker.core.base.BaseFragment
88
import com.example.util.simpletimetracker.core.dialog.DurationDialogListener
9+
import com.example.util.simpletimetracker.core.dialog.OptionsListDialogListener
910
import com.example.util.simpletimetracker.core.manager.ThemeManager
1011
import com.example.util.simpletimetracker.core.utils.InsetConfiguration
11-
import com.example.util.simpletimetracker.core.viewData.RangesViewData
12+
import com.example.util.simpletimetracker.core.viewData.RangeSelectionOptionsListItem
1213
import com.example.util.simpletimetracker.feature_base_adapter.BaseRecyclerAdapter
1314
import com.example.util.simpletimetracker.feature_base_adapter.category.createCategoryAdapterDelegate
1415
import com.example.util.simpletimetracker.feature_base_adapter.empty.createEmptyAdapterDelegate
1516
import com.example.util.simpletimetracker.feature_base_adapter.loader.createLoaderAdapterDelegate
1617
import com.example.util.simpletimetracker.feature_base_adapter.recordType.createRecordTypeAdapterDelegate
1718
import com.example.util.simpletimetracker.feature_views.extension.setOnClick
19+
import com.example.util.simpletimetracker.navigation.params.screen.OptionsListParams
1820
import com.google.android.flexbox.FlexDirection
1921
import com.google.android.flexbox.FlexWrap
2022
import com.google.android.flexbox.FlexboxLayoutManager
@@ -26,7 +28,8 @@ import com.example.util.simpletimetracker.feature_widget.databinding.WidgetStati
2628
@AndroidEntryPoint
2729
class WidgetStatisticsSettingsFragment :
2830
BaseFragment<Binding>(),
29-
DurationDialogListener {
31+
DurationDialogListener,
32+
OptionsListDialogListener {
3033

3134
override val inflater: (LayoutInflater, ViewGroup?, Boolean) -> Binding =
3235
Binding::inflate
@@ -64,10 +67,7 @@ class WidgetStatisticsSettingsFragment :
6467
btnWidgetStatisticsShowAll.setOnClick(viewModel::onShowAllClick)
6568
btnWidgetStatisticsHideAll.setOnClick(viewModel::onHideAllClick)
6669
btnWidgetStatisticsSettingsSave.setOnClick(throttle(viewModel::onSaveClick))
67-
spinnerWidgetStatisticsSettingsRange.onItemSelected = {
68-
viewModel.onRangeSelected(it)
69-
}
70-
btnWidgetStatisticsSettingsRange.setOnClick { spinnerWidgetStatisticsSettingsRange.performClick() }
70+
btnWidgetStatisticsSettingsRange.setOnClick(throttle(viewModel::onSelectRangeClick))
7171
checkboxWidgetStatisticsNewItems.setOnClick(throttle(viewModel::onDoNotIncludeNewItemsClick))
7272
}
7373

@@ -77,7 +77,6 @@ class WidgetStatisticsSettingsFragment :
7777
filterTypeViewData.observe(buttonsWidgetStatisticsSettingsFilterType.adapter::replace)
7878
types.observe(recordTypesAdapter::replace)
7979
title.observe(btnWidgetStatisticsSettingsRange::setText)
80-
rangeItems.observe(::setRangeItemsState)
8180
doNotIncludeNewItems.observe(::setDoNotIncludeItemsState)
8281
handled.observe(::exit)
8382
}
@@ -87,6 +86,14 @@ class WidgetStatisticsSettingsFragment :
8786
viewModel.onCountSet(count, tag)
8887
}
8988

89+
override fun onOptionsItemClick(id: OptionsListParams.Item.Id) {
90+
when (id) {
91+
is RangeSelectionOptionsListItem -> {
92+
viewModel.onRangeSelected(id)
93+
}
94+
}
95+
}
96+
9097
private fun getWidgetId(): Int {
9198
return activity?.intent?.extras
9299
?.getInt(
@@ -96,10 +103,6 @@ class WidgetStatisticsSettingsFragment :
96103
?: AppWidgetManager.INVALID_APPWIDGET_ID
97104
}
98105

99-
private fun setRangeItemsState(state: RangesViewData) = with(binding) {
100-
spinnerWidgetStatisticsSettingsRange.setData(state.items, state.selectedPosition)
101-
}
102-
103106
private fun setDoNotIncludeItemsState(isChecked: Boolean) = with(binding) {
104107
if (checkboxWidgetStatisticsNewItems.isChecked != isChecked) {
105108
checkboxWidgetStatisticsNewItems.isChecked = isChecked

features/feature_widget/src/main/java/com/example/util/simpletimetracker/feature_widget/statistics/settings/WidgetStatisticsSettingsViewModel.kt

Lines changed: 25 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,35 +4,33 @@ import androidx.lifecycle.LiveData
44
import androidx.lifecycle.MutableLiveData
55
import androidx.lifecycle.ViewModel
66
import androidx.lifecycle.viewModelScope
7-
import com.example.util.simpletimetracker.domain.extension.addOrRemove
87
import com.example.util.simpletimetracker.core.extension.set
8+
import com.example.util.simpletimetracker.core.extension.toModel
99
import com.example.util.simpletimetracker.core.interactor.ChartFilterViewDataInteractor
1010
import com.example.util.simpletimetracker.core.mapper.ChartFilterViewDataMapper
1111
import com.example.util.simpletimetracker.core.mapper.RangeTitleMapper
1212
import com.example.util.simpletimetracker.core.mapper.RangeViewDataMapper
13-
import com.example.util.simpletimetracker.feature_base_adapter.buttonsRow.view.ButtonsRowViewData
1413
import com.example.util.simpletimetracker.core.viewData.ChartFilterTypeViewData
15-
import com.example.util.simpletimetracker.core.viewData.RangeViewData
16-
import com.example.util.simpletimetracker.core.viewData.RangesViewData
17-
import com.example.util.simpletimetracker.core.viewData.SelectLastDaysViewData
14+
import com.example.util.simpletimetracker.core.viewData.RangeSelectionOptionsListItem
1815
import com.example.util.simpletimetracker.domain.base.ARCHIVED_BUTTON_ITEM_ID
1916
import com.example.util.simpletimetracker.domain.category.interactor.CategoryInteractor
2017
import com.example.util.simpletimetracker.domain.category.model.Category
2118
import com.example.util.simpletimetracker.domain.daysOfWeek.interactor.GetProcessedLastDaysCountInteractor
22-
import com.example.util.simpletimetracker.domain.statistics.model.StatisticsWidgetData
19+
import com.example.util.simpletimetracker.domain.extension.addOrRemove
2320
import com.example.util.simpletimetracker.domain.prefs.interactor.PrefsInteractor
2421
import com.example.util.simpletimetracker.domain.recordTag.interactor.RecordTagInteractor
22+
import com.example.util.simpletimetracker.domain.recordTag.model.RecordTag
2523
import com.example.util.simpletimetracker.domain.recordType.interactor.RecordTypeInteractor
26-
import com.example.util.simpletimetracker.domain.widget.interactor.WidgetInteractor
24+
import com.example.util.simpletimetracker.domain.recordType.model.RecordType
2725
import com.example.util.simpletimetracker.domain.statistics.model.ChartFilterType
2826
import com.example.util.simpletimetracker.domain.statistics.model.RangeLength
29-
import com.example.util.simpletimetracker.domain.recordTag.model.RecordTag
30-
import com.example.util.simpletimetracker.domain.recordType.model.RecordType
27+
import com.example.util.simpletimetracker.domain.statistics.model.StatisticsWidgetData
28+
import com.example.util.simpletimetracker.domain.widget.interactor.WidgetInteractor
3129
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
30+
import com.example.util.simpletimetracker.feature_base_adapter.buttonsRow.view.ButtonsRowViewData
3231
import com.example.util.simpletimetracker.feature_base_adapter.category.CategoryViewData
3332
import com.example.util.simpletimetracker.feature_base_adapter.loader.LoaderViewData
3433
import com.example.util.simpletimetracker.feature_base_adapter.recordType.RecordTypeViewData
35-
import com.example.util.simpletimetracker.feature_views.spinner.CustomSpinner
3634
import com.example.util.simpletimetracker.feature_widget.statistics.interactor.WidgetStatisticsIdsInteractor
3735
import com.example.util.simpletimetracker.navigation.Router
3836
import com.example.util.simpletimetracker.navigation.params.screen.DurationDialogParams
@@ -86,15 +84,6 @@ class WidgetStatisticsSettingsViewModel @Inject constructor(
8684
initial
8785
}
8886
}
89-
val rangeItems: LiveData<RangesViewData> by lazy {
90-
return@lazy MutableLiveData<RangesViewData>().let { initial ->
91-
viewModelScope.launch {
92-
initializeWidgetData()
93-
initial.value = loadRanges()
94-
}
95-
initial
96-
}
97-
}
9887
val doNotIncludeNewItems: LiveData<Boolean> by lazy {
9988
return@lazy MutableLiveData<Boolean>().let { initial ->
10089
viewModelScope.launch {
@@ -180,16 +169,18 @@ class WidgetStatisticsSettingsViewModel @Inject constructor(
180169
}
181170
}
182171

183-
fun onRangeSelected(item: CustomSpinner.CustomSpinnerItem) {
184-
when (item) {
185-
is RangeViewData -> {
186-
widgetData = widgetData.copy(rangeLength = item.range)
172+
fun onRangeSelected(id: RangeSelectionOptionsListItem) {
173+
when (id) {
174+
is RangeSelectionOptionsListItem.Simple -> {
175+
val newRange = id.rangeLengthParams.toModel()
176+
widgetData = widgetData.copy(rangeLength = newRange)
187177
updateTitle()
188-
updateRanges()
189178
}
190-
is SelectLastDaysViewData -> {
179+
is RangeSelectionOptionsListItem.Last -> {
191180
onSelectLastDaysClick()
192181
}
182+
RangeSelectionOptionsListItem.Custom,
183+
RangeSelectionOptionsListItem.SelectDate -> Unit
193184
}
194185
}
195186

@@ -200,7 +191,6 @@ class WidgetStatisticsSettingsViewModel @Inject constructor(
200191
val newRange = RangeLength.Last(lastDaysCount)
201192
widgetData = widgetData.copy(rangeLength = newRange)
202193
updateTitle()
203-
updateRanges()
204194
}
205195

206196
fun onDoNotIncludeNewItemsClick() = viewModelScope.launch {
@@ -238,6 +228,15 @@ class WidgetStatisticsSettingsViewModel @Inject constructor(
238228
}
239229
}
240230

231+
fun onSelectRangeClick() = viewModelScope.launch {
232+
val data = rangeViewDataMapper.mapToRangesOptions(
233+
currentRange = widgetData.rangeLength,
234+
addSelection = false,
235+
lastDaysCount = getCurrentLastDaysCount(),
236+
)
237+
router.navigate(data)
238+
}
239+
241240
private fun removeAllIds() = viewModelScope.launch {
242241
widgetData = when (widgetData.chartFilterType) {
243242
ChartFilterType.ACTIVITY -> widgetData.copy(typeIds = emptySet())
@@ -398,18 +397,6 @@ class WidgetStatisticsSettingsViewModel @Inject constructor(
398397
)
399398
}
400399

401-
private fun updateRanges() = viewModelScope.launch {
402-
rangeItems.set(loadRanges())
403-
}
404-
405-
private suspend fun loadRanges(): RangesViewData {
406-
return rangeViewDataMapper.mapToRanges(
407-
currentRange = widgetData.rangeLength,
408-
addSelection = false,
409-
lastDaysCount = getCurrentLastDaysCount(),
410-
)
411-
}
412-
413400
private fun updateDoNotIncludeNewItems() = viewModelScope.launch {
414401
doNotIncludeNewItems.set(loadDoNotIncludeNewItems())
415402
}

features/feature_widget/src/main/res/layout/widget_statistics_settings_fragment.xml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -92,15 +92,6 @@
9292
app:layout_constraintEnd_toEndOf="parent"
9393
app:layout_constraintStart_toEndOf="@id/btnWidgetStatisticsShowAll" />
9494

95-
<com.example.util.simpletimetracker.feature_views.spinner.CustomSpinner
96-
android:id="@+id/spinnerWidgetStatisticsSettingsRange"
97-
android:layout_width="0dp"
98-
android:layout_height="0dp"
99-
app:layout_constraintBottom_toBottomOf="@id/btnWidgetStatisticsSettingsRange"
100-
app:layout_constraintEnd_toEndOf="@id/btnWidgetStatisticsSettingsRange"
101-
app:layout_constraintStart_toStartOf="@id/btnWidgetStatisticsSettingsRange"
102-
app:layout_constraintTop_toTopOf="@id/btnWidgetStatisticsSettingsRange" />
103-
10495
<com.google.android.material.button.MaterialButton
10596
android:id="@+id/btnWidgetStatisticsSettingsRange"
10697
style="@style/ContainerRangeSelectableMainButton"

features/feature_widget/src/main/res/navigation/widget_statistics_nav_graph.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,9 @@
2020
android:name="com.example.util.simpletimetracker.feature_dialogs.duration.view.DurationDialogFragment"
2121
android:label="DurationDialog"
2222
tools:layout="@layout/duration_dialog_fragment" />
23+
<dialog
24+
android:id="@+id/optionsListDialogFragment"
25+
android:name="com.example.util.simpletimetracker.feature_dialogs.optionsDialog.OptionsListDialogFragment"
26+
android:label="OptionsListDialogFragment"
27+
tools:layout="@layout/options_list_dialog_fragment" />
2328
</navigation>

0 commit comments

Comments
 (0)