Skip to content

Commit

Permalink
change display settings block to recycler
Browse files Browse the repository at this point in the history
  • Loading branch information
Razeeman committed Jan 9, 2024
1 parent f4d706c commit ab2a679
Show file tree
Hide file tree
Showing 17 changed files with 769 additions and 1,024 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,4 +27,26 @@ enum class SettingsBlock {
NotificationsActivityRecurrent,
NotificationsActivityDoNotDisturb,
NotificationsBottom,

DisplayTop,
DisplayCollapse,
DisplayUntrackedHint,
DisplayUntrackedInRecords,
DisplayUntrackedInStatistics,
DisplayUntrackedIgnoreShort,
DisplayUntrackedRange,
DisplayCalendarView,
DisplayReverseOrder,
DisplayDaysInCalendar,
DisplayShowActivityFilters,
DisplayGoalsOnSeparateTabs,
DisplayKeepScreenOn,
DisplayWidgetBackground,
DisplayMilitaryFormat,
DisplayMonthDayFormat,
DisplayProportionalFormat,
DisplayShowSeconds,
DisplaySortActivities,
DisplayCardSize,
DisplayBottom,
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ fun createSettingsCheckboxAdapterDelegate(
checkboxItemSettings.isChecked = item.isChecked
}

spaceItemSettingsBottom.visible = item.bottomSpaceIsVisible

viewItemSettingsDivider.visible = item.dividerIsVisible

checkboxItemSettings.setOnClick { onClick(item.block) }
Expand All @@ -40,6 +42,7 @@ data class SettingsCheckboxViewData(
val title: String,
val subtitle: String,
val isChecked: Boolean,
val bottomSpaceIsVisible: Boolean = true,
val dividerIsVisible: Boolean = true,
) : ViewHolderType {

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
package com.example.util.simpletimetracker.feature_settings.adapter

import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
import com.example.util.simpletimetracker.feature_base_adapter.createRecyclerBindingAdapterDelegate
import com.example.util.simpletimetracker.feature_settings.adapter.SettingsCheckboxWithRangeViewData
import com.example.util.simpletimetracker.feature_views.extension.setOnClick
import com.example.util.simpletimetracker.feature_views.extension.visible
import com.example.util.simpletimetracker.feature_settings.adapter.SettingsCheckboxWithRangeViewData as ViewData
import com.example.util.simpletimetracker.feature_settings.databinding.ItemSettingsCheckboxWithRangeBinding as Binding

fun createSettingsCheckboxWithRangeAdapterDelegate(
onClick: (SettingsBlock) -> Unit,
onStartClick: (SettingsBlock) -> Unit,
onEndClick: (SettingsBlock) -> Unit,
) = createRecyclerBindingAdapterDelegate<ViewData, Binding>(
Binding::inflate,
) { binding, item, _ ->

with(binding) {
item as ViewData

tvItemSettingsCheckboxWithRangeTitle.text = item.title

tvItemSettingsCheckboxWithRangeSubtitle.text = item.subtitle

if (checkboxItemSettingsCheckboxWithRange.isChecked != item.isChecked) {
checkboxItemSettingsCheckboxWithRange.isChecked = item.isChecked
}

groupItemSettingsCheckboxWithRange.visible =
item.range is SettingsCheckboxWithRangeViewData.RangeViewData.Enabled

if (item.range is SettingsCheckboxWithRangeViewData.RangeViewData.Enabled) {
tvItemSettingsCheckboxWithRangeStart.text = item.range.rangeStart
tvItemSettingsCheckboxWithRangeEnd.text = item.range.rangeEnd
}

checkboxItemSettingsCheckboxWithRange.setOnClick { onClick(item.block) }
tvItemSettingsCheckboxWithRangeStart.setOnClick { onStartClick(item.block) }
tvItemSettingsCheckboxWithRangeEnd.setOnClick { onEndClick(item.block) }
}
}

data class SettingsCheckboxWithRangeViewData(
val block: SettingsBlock,
val title: String,
val subtitle: String,
val isChecked: Boolean,
val range: RangeViewData,
) : ViewHolderType {

override fun getUniqueId(): Long = block.ordinal.toLong()

override fun isValidType(other: ViewHolderType): Boolean = other is ViewData

sealed interface RangeViewData {
object Disabled : RangeViewData
data class Enabled(
val rangeStart: String,
val rangeEnd: String,
) : RangeViewData
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package com.example.util.simpletimetracker.feature_settings.adapter

import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
import com.example.util.simpletimetracker.feature_base_adapter.createRecyclerBindingAdapterDelegate
import com.example.util.simpletimetracker.feature_settings.adapter.SettingsHintViewData as ViewData
import com.example.util.simpletimetracker.feature_settings.databinding.ItemSettingsHintBinding as Binding

fun createSettingsHintAdapterDelegate() = createRecyclerBindingAdapterDelegate<ViewData, Binding>(
Binding::inflate,
) { binding, item, _ ->

with(binding) {
item as ViewData

tvItemSettingsHint.text = item.text
}
}

data class SettingsHintViewData(
val block: SettingsBlock,
val text: String,
) : ViewHolderType {

override fun getUniqueId(): Long = block.ordinal.toLong()

override fun isValidType(other: ViewHolderType): Boolean = other is ViewData
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.example.util.simpletimetracker.feature_settings.adapter

import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
import com.example.util.simpletimetracker.feature_base_adapter.createRecyclerBindingAdapterDelegate
import com.example.util.simpletimetracker.feature_views.extension.setOnClick
import com.example.util.simpletimetracker.feature_views.extension.visible
import com.example.util.simpletimetracker.feature_settings.adapter.SettingsSpinnerWithButtonViewData as ViewData
import com.example.util.simpletimetracker.feature_settings.databinding.ItemSettingsSpinnerWithButtonBinding as Binding

fun createSettingsSpinnerWithButtonAdapterDelegate(
onPositionSelected: (block: SettingsBlock, position: Int) -> Unit,
onButtonClicked: (block: SettingsBlock) -> Unit,
) = createRecyclerBindingAdapterDelegate<ViewData, Binding>(
Binding::inflate,
) { binding, item, _ ->

with(binding) {
item as ViewData

spinnerAdapterBindDelegate(
item = item.data,
title = tvItemSettingsTitle,
value = tvItemSettingsValue,
spinner = spinnerItemSettings,
onPositionSelected = onPositionSelected,
)

btnItemSettingsSpinner.visible = item.isButtonVisible
btnItemSettingsSpinner.setOnClick { onButtonClicked(item.data.block) }
}
}

data class SettingsSpinnerWithButtonViewData(
val data: SettingsSpinnerViewData,
val isButtonVisible: Boolean,
) : ViewHolderType {

override fun getUniqueId(): Long = data.block.ordinal.toLong()

override fun isValidType(other: ViewHolderType): Boolean = other is ViewData
}
Loading

0 comments on commit ab2a679

Please sign in to comment.