Skip to content

Commit 426a3d6

Browse files
committed
improve detailed statistics shared transitions
1 parent e734cda commit 426a3d6

File tree

8 files changed

+63
-38
lines changed

8 files changed

+63
-38
lines changed

feature_categories/src/main/java/com/example/util/simpletimetracker/feature_categories/viewModel/CategoriesViewModel.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,10 @@ class CategoriesViewModel @Inject constructor(
2828
screen = Screen.CHANGE_CATEGORY,
2929
data = ChangeCategoryParams.Change(
3030
id = item.id,
31-
name = item.name,
32-
color = item.color
31+
preview = ChangeCategoryParams.Change.Preview(
32+
name = item.name,
33+
color = item.color
34+
)
3335
),
3436
sharedElements = sharedElements
3537
)

feature_change_category/src/main/java/com/example/util/simpletimetracker/feature_change_category/view/ChangeCategoryFragment.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class ChangeCategoryFragment : BaseFragment(R.layout.change_category_fragment) {
5454
private val typesAdapter: ChangeCategoryTypeAdapter by lazy {
5555
ChangeCategoryTypeAdapter(viewModel::onTypeClick)
5656
}
57+
5758
// TODO by delegate?
5859
private val params: ChangeCategoryParams by lazy {
5960
arguments?.getParcelable<ChangeCategoryParams>(ARGS_PARAMS) ?: ChangeCategoryParams.New
@@ -137,12 +138,10 @@ class ChangeCategoryFragment : BaseFragment(R.layout.change_category_fragment) {
137138
etChangeCategoryName.setSelection(item.name.length)
138139
}
139140

140-
private fun setPreview() {
141-
(params as? ChangeCategoryParams.Change)?.let { item ->
142-
with(previewChangeCategory) {
143-
itemName = item.name
144-
itemColor = item.color
145-
}
141+
private fun setPreview() = (params as? ChangeCategoryParams.Change)?.preview?.run {
142+
with(previewChangeCategory) {
143+
itemName = name
144+
itemColor = color
146145
}
147146
}
148147

feature_statistics/src/main/java/com/example/util/simpletimetracker/feature_statistics/viewModel/StatisticsViewModel.kt

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,15 @@ class StatisticsViewModel @Inject constructor(
6161

6262
router.navigate(
6363
screen = Screen.STATISTICS_DETAIL,
64-
data = StatisticsDetailParams(item.id, filterType),
64+
data = StatisticsDetailParams(
65+
id = item.id,
66+
filterType = filterType,
67+
preview = StatisticsDetailParams.Preview(
68+
name = item.name,
69+
iconId = (item as? StatisticsViewData.Activity)?.iconId,
70+
color = item.color
71+
)
72+
),
6573
sharedElements = sharedElements
6674
)
6775
}

feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/extra/StatisticsDetailExtra.kt

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

feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/view/StatisticsDetailFragment.kt

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,8 @@ import com.example.util.simpletimetracker.core.dialog.StandardDialogListener
1111
import com.example.util.simpletimetracker.core.extension.visible
1212
import com.example.util.simpletimetracker.core.utils.BuildVersions
1313
import com.example.util.simpletimetracker.core.view.TransitionNames
14-
import com.example.util.simpletimetracker.domain.extension.orZero
15-
import com.example.util.simpletimetracker.domain.model.ChartFilterType
1614
import com.example.util.simpletimetracker.feature_statistics_detail.R
1715
import com.example.util.simpletimetracker.feature_statistics_detail.di.StatisticsDetailComponentProvider
18-
import com.example.util.simpletimetracker.feature_statistics_detail.extra.StatisticsDetailExtra
1916
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailChartViewData
2017
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailPreviewViewData
2118
import com.example.util.simpletimetracker.feature_statistics_detail.viewData.StatisticsDetailViewData
@@ -43,7 +40,9 @@ class StatisticsDetailFragment : BaseFragment(R.layout.statistics_detail_fragmen
4340
private val viewModel: StatisticsDetailViewModel by viewModels(
4441
factoryProducer = { viewModelFactory }
4542
)
46-
private val typeId: Long by lazy { arguments?.getLong(ARGS_ID).orZero() }
43+
private val params: StatisticsDetailParams by lazy {
44+
arguments?.getParcelable(ARGS_PARAMS) ?: StatisticsDetailParams()
45+
}
4746

4847
override fun initDi() {
4948
(activity?.application as StatisticsDetailComponentProvider)
@@ -52,14 +51,16 @@ class StatisticsDetailFragment : BaseFragment(R.layout.statistics_detail_fragmen
5251
}
5352

5453
override fun initUi() {
54+
setPreview()
55+
5556
if (BuildVersions.isLollipopOrHigher()) {
5657
sharedElementEnterTransition = TransitionInflater.from(context)
5758
.inflateTransition(android.R.transition.move)
5859
}
5960

6061
ViewCompat.setTransitionName(
6162
layoutStatisticsDetailItem,
62-
TransitionNames.STATISTICS_DETAIL + typeId
63+
TransitionNames.STATISTICS_DETAIL + params.id
6364
)
6465
}
6566

@@ -70,8 +71,7 @@ class StatisticsDetailFragment : BaseFragment(R.layout.statistics_detail_fragmen
7071
}
7172

7273
override fun initViewModel(): Unit = with(viewModel) {
73-
val filterType = arguments?.getSerializable(ARGS_FILTER_TYPE) as? ChartFilterType
74-
extra = StatisticsDetailExtra(typeId, filterType ?: ChartFilterType.ACTIVITY)
74+
extra = params
7575
previewViewData.observe(viewLifecycleOwner, ::setPreviewViewData)
7676
viewData.observe(viewLifecycleOwner, ::setViewData)
7777
chartViewData.observe(viewLifecycleOwner, ::updateChartViewData)
@@ -85,6 +85,14 @@ class StatisticsDetailFragment : BaseFragment(R.layout.statistics_detail_fragmen
8585
viewModel.onVisible()
8686
}
8787

88+
private fun setPreview() = params.preview?.run {
89+
StatisticsDetailPreviewViewData(
90+
name = name,
91+
iconId = iconId,
92+
color = color
93+
).let(::setPreviewViewData)
94+
}
95+
8896
private fun setPreviewViewData(viewData: StatisticsDetailPreviewViewData) {
8997
tvStatisticsDetailItemName.text = viewData.name
9098
layoutStatisticsDetailItem.setCardBackgroundColor(viewData.color)
@@ -117,15 +125,11 @@ class StatisticsDetailFragment : BaseFragment(R.layout.statistics_detail_fragmen
117125
}
118126

119127
companion object {
120-
private const val ARGS_ID = "args_id"
121-
private const val ARGS_FILTER_TYPE = "args_filter_type"
128+
private const val ARGS_PARAMS = "args_params"
122129

123130
fun createBundle(data: Any?): Bundle = Bundle().apply {
124131
when (data) {
125-
is StatisticsDetailParams -> {
126-
putLong(ARGS_ID, data.id)
127-
putSerializable(ARGS_FILTER_TYPE, data.filterType)
128-
}
132+
is StatisticsDetailParams -> putParcelable(ARGS_PARAMS, data)
129133
}
130134
}
131135
}

feature_statistics_detail/src/main/java/com/example/util/simpletimetracker/feature_statistics_detail/viewModel/StatisticsDetailViewModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import com.example.util.simpletimetracker.core.adapter.ViewHolderType
88
import com.example.util.simpletimetracker.core.view.buttonsRowView.ButtonsRowViewData
99
import com.example.util.simpletimetracker.domain.interactor.RecordTypeCategoryInteractor
1010
import com.example.util.simpletimetracker.domain.model.ChartFilterType
11-
import com.example.util.simpletimetracker.feature_statistics_detail.extra.StatisticsDetailExtra
1211
import com.example.util.simpletimetracker.feature_statistics_detail.interactor.StatisticsDetailViewDataInteractor
1312
import com.example.util.simpletimetracker.feature_statistics_detail.mapper.StatisticsDetailViewDataMapper
1413
import com.example.util.simpletimetracker.feature_statistics_detail.model.ChartGrouping
@@ -21,6 +20,7 @@ import com.example.util.simpletimetracker.feature_statistics_detail.viewData.Sta
2120
import com.example.util.simpletimetracker.navigation.Router
2221
import com.example.util.simpletimetracker.navigation.Screen
2322
import com.example.util.simpletimetracker.navigation.params.RecordsAllParams
23+
import com.example.util.simpletimetracker.navigation.params.StatisticsDetailParams
2424
import kotlinx.coroutines.launch
2525
import javax.inject.Inject
2626

@@ -31,7 +31,7 @@ class StatisticsDetailViewModel @Inject constructor(
3131
private val mapper: StatisticsDetailViewDataMapper
3232
) : ViewModel() {
3333

34-
lateinit var extra: StatisticsDetailExtra
34+
lateinit var extra: StatisticsDetailParams
3535

3636
val viewData: LiveData<StatisticsDetailViewData> by lazy {
3737
return@lazy MutableLiveData(loadInitialViewData())

navigation/src/main/java/com/example/util/simpletimetracker/navigation/params/ChangeCategoryParams.kt

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,15 @@ sealed class ChangeCategoryParams : Parcelable {
1010
@Parcelize
1111
data class Change(
1212
override val id: Long,
13-
val name: String,
14-
@ColorInt val color: Int
15-
) : ChangeCategoryParams()
13+
val preview: Preview? = null
14+
) : ChangeCategoryParams() {
15+
16+
@Parcelize
17+
data class Preview(
18+
val name: String,
19+
@ColorInt val color: Int
20+
) : Parcelable
21+
}
1622

1723
@Parcelize
1824
object New : ChangeCategoryParams() {
Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,22 @@
11
package com.example.util.simpletimetracker.navigation.params
22

3+
import android.os.Parcelable
4+
import androidx.annotation.ColorInt
5+
import androidx.annotation.DrawableRes
36
import com.example.util.simpletimetracker.domain.model.ChartFilterType
7+
import kotlinx.android.parcel.Parcelize
48

9+
@Parcelize
510
data class StatisticsDetailParams(
6-
val id: Long,
7-
val filterType: ChartFilterType
8-
)
11+
val id: Long = 0,
12+
val filterType: ChartFilterType = ChartFilterType.ACTIVITY,
13+
val preview: Preview? = null
14+
) : Parcelable {
15+
16+
@Parcelize
17+
data class Preview(
18+
val name: String,
19+
@DrawableRes val iconId: Int? = null,
20+
@ColorInt val color: Int
21+
) : Parcelable
22+
}

0 commit comments

Comments
 (0)