Skip to content

Commit

Permalink
add click on statistics total tracked
Browse files Browse the repository at this point in the history
  • Loading branch information
Razeeman committed Sep 1, 2024
1 parent bd6102c commit e5140fc
Show file tree
Hide file tree
Showing 8 changed files with 149 additions and 40 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package com.example.util.simpletimetracker.core.interactor

import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor
import com.example.util.simpletimetracker.domain.model.RangeLength
import com.example.util.simpletimetracker.navigation.params.screen.StatisticsDetailParams.RangeLengthParams
import javax.inject.Inject

class GetStatisticsDetailRangeInteractor @Inject constructor(
private val prefsInteractor: PrefsInteractor,
) {

suspend fun execute(): RangeLengthParams {
return when (val rangeLength = getRangeLength()) {
is RangeLength.Day -> RangeLengthParams.Day
is RangeLength.Week -> RangeLengthParams.Week
is RangeLength.Month -> RangeLengthParams.Month
is RangeLength.Year -> RangeLengthParams.Year
is RangeLength.All -> RangeLengthParams.All
is RangeLength.Custom -> RangeLengthParams.Custom(
start = rangeLength.range.timeStarted,
end = rangeLength.range.timeEnded,
)
is RangeLength.Last -> RangeLengthParams.Last(
days = rangeLength.days,
)
}
}

private suspend fun getRangeLength(): RangeLength {
return if (prefsInteractor.getKeepStatisticsRange()) {
prefsInteractor.getStatisticsRange()
} else {
prefsInteractor.getStatisticsDetailRange()
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor
import com.example.util.simpletimetracker.domain.interactor.RecordTypeGoalInteractor
import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor
import com.example.util.simpletimetracker.domain.model.ChartFilterType
import com.example.util.simpletimetracker.domain.model.RangeLength
import com.example.util.simpletimetracker.domain.model.RecordTypeGoal
import com.example.util.simpletimetracker.domain.model.RecordsFilter
import com.example.util.simpletimetracker.feature_views.viewData.RecordTypeIcon
Expand All @@ -26,6 +25,7 @@ class StatisticsDetailNavigationInteractor @Inject constructor(
private val categoryInteractor: CategoryInteractor,
private val recordTypeInteractor: RecordTypeInteractor,
private val recordTypeGoalInteractor: RecordTypeGoalInteractor,
private val getStatisticsDetailRangeInteractor: GetStatisticsDetailRangeInteractor,
) {

suspend fun navigate(
Expand All @@ -38,33 +38,14 @@ class StatisticsDetailNavigationInteractor @Inject constructor(
itemIcon: RecordTypeIcon?,
itemColor: Int,
) {
val rangeLength = if (prefsInteractor.getKeepStatisticsRange()) {
prefsInteractor.getStatisticsRange()
} else {
prefsInteractor.getStatisticsDetailRange()
}

router.navigate(
data = StatisticsDetailParams(
transitionName = transitionName,
filter = recordsFilterMapper.mapFilter(
filterType = filterType,
selectedId = itemId,
).let(::listOf).map(RecordsFilter::toParams),
range = when (rangeLength) {
is RangeLength.Day -> StatisticsDetailParams.RangeLengthParams.Day
is RangeLength.Week -> StatisticsDetailParams.RangeLengthParams.Week
is RangeLength.Month -> StatisticsDetailParams.RangeLengthParams.Month
is RangeLength.Year -> StatisticsDetailParams.RangeLengthParams.Year
is RangeLength.All -> StatisticsDetailParams.RangeLengthParams.All
is RangeLength.Custom -> StatisticsDetailParams.RangeLengthParams.Custom(
start = rangeLength.range.timeStarted,
end = rangeLength.range.timeEnded,
)
is RangeLength.Last -> StatisticsDetailParams.RangeLengthParams.Last(
days = rangeLength.days,
)
},
range = getStatisticsDetailRangeInteractor.execute(),
shift = shift,
preview = StatisticsDetailParams.Preview(
name = itemName,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,18 +1,22 @@
package com.example.util.simpletimetracker.feature_statistics.adapter

import com.example.util.simpletimetracker.feature_base_adapter.createRecyclerBindingAdapterDelegate
import com.example.util.simpletimetracker.feature_views.extension.setOnClick
import com.example.util.simpletimetracker.feature_statistics.databinding.ItemStatisticsInfoLayoutBinding as Binding
import com.example.util.simpletimetracker.feature_statistics.viewData.StatisticsInfoViewData as ViewData

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

with(binding) {
item as ViewData
with(binding) {
item as ViewData

tvStatisticsInfoName.text = item.name
tvStatisticsInfoText.text = item.text
}
}
tvStatisticsInfoName.text = item.name
tvStatisticsInfoText.text = item.text

root.setOnClick(onClick)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package com.example.util.simpletimetracker.feature_statistics.interactor

import com.example.util.simpletimetracker.core.extension.toParams
import com.example.util.simpletimetracker.core.interactor.GetStatisticsDetailRangeInteractor
import com.example.util.simpletimetracker.domain.interactor.CategoryInteractor
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.Category
import com.example.util.simpletimetracker.domain.model.ChartFilterType
import com.example.util.simpletimetracker.domain.model.RecordTag
import com.example.util.simpletimetracker.domain.model.RecordType
import com.example.util.simpletimetracker.domain.model.RecordsFilter
import com.example.util.simpletimetracker.navigation.Router
import com.example.util.simpletimetracker.navigation.params.screen.StatisticsDetailParams
import javax.inject.Inject

class StatisticsDetailTotalNavigator @Inject constructor(
private val router: Router,
private val prefsInteractor: PrefsInteractor,
private val getStatisticsDetailRangeInteractor: GetStatisticsDetailRangeInteractor,
private val recordTypeInteractor: RecordTypeInteractor,
private val categoryInteractor: CategoryInteractor,
private val recordTagInteractor: RecordTagInteractor,
) {

suspend fun execute(
shift: Int,
) {
val filter = when (prefsInteractor.getChartFilterType()) {
ChartFilterType.ACTIVITY -> {
val typeIds = recordTypeInteractor.getAll()
.map(RecordType::id)
RecordsFilter.Activity(typeIds)
}
ChartFilterType.CATEGORY -> {
val categoryIds = categoryInteractor.getAll()
.map(Category::id)
val items = categoryIds
.map(RecordsFilter.CategoryItem::Categorized) +
RecordsFilter.CategoryItem.Uncategorized
RecordsFilter.Category(items)
}
ChartFilterType.RECORD_TAG -> {
val tagIds = recordTagInteractor.getAll()
.map(RecordTag::id)
val items = tagIds
.map(RecordsFilter.TagItem::Tagged) +
RecordsFilter.TagItem.Untagged
RecordsFilter.SelectedTags(items)
}
}

val params = StatisticsDetailParams(
transitionName = "",
filter = filter.let(::listOf).map(RecordsFilter::toParams),
range = getStatisticsDetailRangeInteractor.execute(),
shift = shift,
preview = null,
)

router.navigate(params)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -145,7 +145,9 @@ class StatisticsFragment :
onShareClick = throttle(viewModel::onShareClick),
onChartAttached = viewModel::onChartAttached,
),
createStatisticsInfoAdapterDelegate(),
createStatisticsInfoAdapterDelegate(
onClick = viewModel::onTotalClicked,
),
createStatisticsAdapterDelegate(
onItemClick = throttle(viewModel::onItemClick),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import com.example.util.simpletimetracker.feature_base_adapter.loader.LoaderView
import com.example.util.simpletimetracker.feature_base_adapter.statistics.StatisticsViewData
import com.example.util.simpletimetracker.feature_base_adapter.statisticsGoal.StatisticsGoalViewData
import com.example.util.simpletimetracker.feature_statistics.extra.StatisticsExtra
import com.example.util.simpletimetracker.feature_statistics.interactor.StatisticsDetailTotalNavigator
import com.example.util.simpletimetracker.feature_statistics.interactor.StatisticsViewDataInteractor
import com.example.util.simpletimetracker.navigation.Router
import com.example.util.simpletimetracker.navigation.params.screen.ChartFilterDialogParams
Expand All @@ -34,6 +35,7 @@ class StatisticsViewModel @Inject constructor(
private val sharingInteractor: SharingInteractor,
private val prefsInteractor: PrefsInteractor,
private val statisticsDetailNavigationInteractor: StatisticsDetailNavigationInteractor,
private val statisticsDetailTotalNavigator: StatisticsDetailTotalNavigator,
) : ViewModel() {

var extra: StatisticsExtra? = null
Expand Down Expand Up @@ -100,7 +102,7 @@ class StatisticsViewModel @Inject constructor(
statisticsDetailNavigationInteractor.navigate(
transitionName = item.transitionName,
filterType = prefsInteractor.getChartFilterType(),
shift = if (prefsInteractor.getKeepStatisticsRange()) shift else 0,
shift = getShift(),
sharedElements = sharedElements,
itemId = item.id,
itemName = item.name,
Expand All @@ -112,7 +114,13 @@ class StatisticsViewModel @Inject constructor(
fun onGoalClick(item: StatisticsGoalViewData) = viewModelScope.launch {
statisticsDetailNavigationInteractor.navigateByGoal(
goalId = item.id,
shift = if (prefsInteractor.getKeepStatisticsRange()) shift else 0,
shift = getShift(),
)
}

fun onTotalClicked() = viewModelScope.launch {
statisticsDetailTotalNavigator.execute(
shift = getShift(),
)
}

Expand All @@ -132,6 +140,10 @@ class StatisticsViewModel @Inject constructor(
}
}

private suspend fun getShift(): Int {
return if (prefsInteractor.getKeepStatisticsRange()) shift else 0
}

private fun updateAnimateChartParticles() {
val shouldAnimate = isVisible && isChartAttached && !isTabScrolling && !isChartFilterOpened
animateChartParticles.set(shouldAnimate)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ class StatisticsDetailFragment :
)
}
private val params: StatisticsDetailParams by fragmentArgumentDelegate(
key = ARGS_PARAMS, default = StatisticsDetailParams(),
key = ARGS_PARAMS, default = StatisticsDetailParams.Empty,
)

override fun initUi(): Unit = with(binding) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ import kotlinx.parcelize.Parcelize

@Parcelize
data class StatisticsDetailParams(
val transitionName: String = "",
val filter: List<RecordsFilterParam> = emptyList(),
val range: RangeLengthParams = RangeLengthParams.All,
val shift: Int = 0,
val preview: Preview? = null,
val transitionName: String,
val filter: List<RecordsFilterParam>,
val range: RangeLengthParams,
val shift: Int,
val preview: Preview?,
) : Parcelable, ScreenParams {

@Parcelize
Expand Down Expand Up @@ -42,4 +42,14 @@ data class StatisticsDetailParams(
@Parcelize
data class Last(val days: Int) : RangeLengthParams()
}

companion object {
val Empty = StatisticsDetailParams(
transitionName = "",
filter = emptyList(),
range = RangeLengthParams.All,
shift = 0,
preview = null,
)
}
}

0 comments on commit e5140fc

Please sign in to comment.