Skip to content

Commit e734cda

Browse files
committed
split change category params ito sealed class, improve shared transitions
1 parent a2656ad commit e734cda

File tree

8 files changed

+57
-32
lines changed

8 files changed

+57
-32
lines changed

feature_categories/src/main/java/com/example/util/simpletimetracker/feature_categories/adapter/CategoriesAdapter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,12 @@ import com.example.util.simpletimetracker.core.adapter.loader.LoaderAdapterDeleg
77
import com.example.util.simpletimetracker.core.viewData.CategoryViewData
88

99
class CategoriesAdapter(
10-
onLongClick: ((CategoryViewData, Map<Any, String>) -> Unit),
10+
onClick: ((CategoryViewData, Map<Any, String>) -> Unit),
1111
onAddClick: (() -> Unit)
1212
) : BaseRecyclerAdapter() {
1313

1414
init {
15-
delegates[ViewHolderType.CATEGORY] = CategoryAdapterDelegate(onLongClick)
15+
delegates[ViewHolderType.CATEGORY] = CategoryAdapterDelegate(onClick)
1616
delegates[ViewHolderType.LOADER] = LoaderAdapterDelegate()
1717
delegates[ViewHolderType.EMPTY] = EmptyAdapterDelegate()
1818
delegates[ViewHolderType.FOOTER] = CategoryAddAdapterDelegate(onAddClick)

feature_categories/src/main/java/com/example/util/simpletimetracker/feature_categories/adapter/CategoryAdapterDelegate.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@ import androidx.core.view.ViewCompat
55
import com.example.util.simpletimetracker.core.adapter.BaseRecyclerAdapterDelegate
66
import com.example.util.simpletimetracker.core.adapter.BaseRecyclerViewHolder
77
import com.example.util.simpletimetracker.core.adapter.ViewHolderType
8-
import com.example.util.simpletimetracker.core.extension.setOnLongClick
8+
import com.example.util.simpletimetracker.core.extension.setOnClick
99
import com.example.util.simpletimetracker.core.view.TransitionNames
10-
import com.example.util.simpletimetracker.feature_categories.R
1110
import com.example.util.simpletimetracker.core.viewData.CategoryViewData
12-
import kotlinx.android.synthetic.main.item_category_layout.view.*
11+
import com.example.util.simpletimetracker.feature_categories.R
12+
import kotlinx.android.synthetic.main.item_category_layout.view.viewCategoryItem
1313

1414
class CategoryAdapterDelegate(
1515
private val onItemLongClick: ((CategoryViewData, Map<Any, String>) -> Unit)
@@ -30,7 +30,7 @@ class CategoryAdapterDelegate(
3030

3131
itemColor = item.color
3232
itemName = item.name
33-
setOnLongClick { onItemLongClick(item, mapOf(this to transitionName)) }
33+
setOnClick { onItemLongClick(item, mapOf(this to transitionName)) }
3434
ViewCompat.setTransitionName(this, transitionName)
3535
}
3636
}

feature_categories/src/main/java/com/example/util/simpletimetracker/feature_categories/view/CategoriesFragment.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ class CategoriesFragment : BaseFragment(R.layout.categories_fragment) {
2626

2727
private val categoriesAdapter: CategoriesAdapter by lazy {
2828
CategoriesAdapter(
29-
viewModel::onCategoryLongClick,
29+
viewModel::onCategoryClick,
3030
viewModel::onAddCategoryClick
3131
)
3232
}

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

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,19 +23,22 @@ class CategoriesViewModel @Inject constructor(
2323
MutableLiveData(listOf(LoaderViewData() as ViewHolderType))
2424
}
2525

26-
fun onCategoryLongClick(item: CategoryViewData, sharedElements: Map<Any, String>) {
27-
// TODO change to dialog?
26+
fun onCategoryClick(item: CategoryViewData, sharedElements: Map<Any, String>) {
2827
router.navigate(
2928
screen = Screen.CHANGE_CATEGORY,
30-
data = ChangeCategoryParams(item.id),
29+
data = ChangeCategoryParams.Change(
30+
id = item.id,
31+
name = item.name,
32+
color = item.color
33+
),
3134
sharedElements = sharedElements
3235
)
3336
}
3437

3538
fun onAddCategoryClick() {
3639
router.navigate(
3740
screen = Screen.CHANGE_CATEGORY,
38-
data = ChangeCategoryParams(0)
41+
data = ChangeCategoryParams.New
3942
)
4043
}
4144

feature_change_category/src/main/java/com/example/util/simpletimetracker/feature_change_category/extra/ChangeCategoryExtra.kt

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

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

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,22 @@ import com.example.util.simpletimetracker.feature_change_category.R
2222
import com.example.util.simpletimetracker.feature_change_category.adapter.ChangeCategoryColorAdapter
2323
import com.example.util.simpletimetracker.feature_change_category.adapter.ChangeCategoryTypeAdapter
2424
import com.example.util.simpletimetracker.feature_change_category.di.ChangeCategoryComponentProvider
25-
import com.example.util.simpletimetracker.feature_change_category.extra.ChangeCategoryExtra
2625
import com.example.util.simpletimetracker.feature_change_category.viewModel.ChangeCategoryViewModel
2726
import com.example.util.simpletimetracker.navigation.params.ChangeCategoryParams
2827
import com.google.android.flexbox.FlexDirection
2928
import com.google.android.flexbox.FlexWrap
3029
import com.google.android.flexbox.FlexboxLayoutManager
3130
import com.google.android.flexbox.JustifyContent
32-
import kotlinx.android.synthetic.main.change_category_fragment.*
31+
import kotlinx.android.synthetic.main.change_category_fragment.arrowChangeCategoryColor
32+
import kotlinx.android.synthetic.main.change_category_fragment.arrowChangeCategoryType
33+
import kotlinx.android.synthetic.main.change_category_fragment.btnChangeCategoryDelete
34+
import kotlinx.android.synthetic.main.change_category_fragment.btnChangeCategorySave
35+
import kotlinx.android.synthetic.main.change_category_fragment.etChangeCategoryName
36+
import kotlinx.android.synthetic.main.change_category_fragment.fieldChangeCategoryColor
37+
import kotlinx.android.synthetic.main.change_category_fragment.fieldChangeCategoryType
38+
import kotlinx.android.synthetic.main.change_category_fragment.previewChangeCategory
39+
import kotlinx.android.synthetic.main.change_category_fragment.rvChangeCategoryColor
40+
import kotlinx.android.synthetic.main.change_category_fragment.rvChangeCategoryType
3341
import javax.inject.Inject
3442

3543
class ChangeCategoryFragment : BaseFragment(R.layout.change_category_fragment) {
@@ -46,8 +54,9 @@ class ChangeCategoryFragment : BaseFragment(R.layout.change_category_fragment) {
4654
private val typesAdapter: ChangeCategoryTypeAdapter by lazy {
4755
ChangeCategoryTypeAdapter(viewModel::onTypeClick)
4856
}
57+
// TODO by delegate?
4958
private val params: ChangeCategoryParams by lazy {
50-
arguments?.getParcelable(ARGS_PARAMS) ?: ChangeCategoryParams()
59+
arguments?.getParcelable<ChangeCategoryParams>(ARGS_PARAMS) ?: ChangeCategoryParams.New
5160
}
5261

5362
override fun initDi() {
@@ -57,6 +66,9 @@ class ChangeCategoryFragment : BaseFragment(R.layout.change_category_fragment) {
5766
}
5867

5968
override fun initUi() {
69+
setPreview()
70+
71+
// TODO move to utils
6072
if (BuildVersions.isLollipopOrHigher()) {
6173
sharedElementEnterTransition = TransitionInflater.from(context)
6274
.inflateTransition(android.R.transition.move)
@@ -95,7 +107,7 @@ class ChangeCategoryFragment : BaseFragment(R.layout.change_category_fragment) {
95107
}
96108

97109
override fun initViewModel(): Unit = with(viewModel) {
98-
extra = ChangeCategoryExtra(params.id)
110+
extra = params
99111
deleteIconVisibility.observeOnce(viewLifecycleOwner, btnChangeCategoryDelete::visible::set)
100112
saveButtonEnabled.observe(viewLifecycleOwner, btnChangeCategorySave::setEnabled)
101113
deleteButtonEnabled.observe(viewLifecycleOwner, btnChangeCategoryDelete::setEnabled)
@@ -125,6 +137,15 @@ class ChangeCategoryFragment : BaseFragment(R.layout.change_category_fragment) {
125137
etChangeCategoryName.setSelection(item.name.length)
126138
}
127139

140+
private fun setPreview() {
141+
(params as? ChangeCategoryParams.Change)?.let { item ->
142+
with(previewChangeCategory) {
143+
itemName = item.name
144+
itemColor = item.color
145+
}
146+
}
147+
}
148+
128149
private fun updatePreview(item: CategoryViewData) {
129150
with(previewChangeCategory) {
130151
itemName = item.name

feature_change_category/src/main/java/com/example/util/simpletimetracker/feature_change_category/viewModel/ChangeCategoryViewModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ import com.example.util.simpletimetracker.domain.interactor.PrefsInteractor
1818
import com.example.util.simpletimetracker.domain.interactor.RecordTypeCategoryInteractor
1919
import com.example.util.simpletimetracker.domain.model.Category
2020
import com.example.util.simpletimetracker.feature_change_category.R
21-
import com.example.util.simpletimetracker.feature_change_category.extra.ChangeCategoryExtra
2221
import com.example.util.simpletimetracker.feature_change_category.interactor.ChangeCategoryViewDataInteractor
2322
import com.example.util.simpletimetracker.navigation.Notification
2423
import com.example.util.simpletimetracker.navigation.Router
24+
import com.example.util.simpletimetracker.navigation.params.ChangeCategoryParams
2525
import com.example.util.simpletimetracker.navigation.params.ToastParams
2626
import kotlinx.coroutines.launch
2727
import javax.inject.Inject
@@ -36,7 +36,7 @@ class ChangeCategoryViewModel @Inject constructor(
3636
private val resourceRepo: ResourceRepo
3737
) : ViewModel() {
3838

39-
lateinit var extra: ChangeCategoryExtra
39+
lateinit var extra: ChangeCategoryParams
4040

4141
val categoryPreview: LiveData<CategoryViewData> by lazy {
4242
return@lazy MutableLiveData<CategoryViewData>().let { initial ->
Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,21 @@
11
package com.example.util.simpletimetracker.navigation.params
22

33
import android.os.Parcelable
4+
import androidx.annotation.ColorInt
45
import kotlinx.android.parcel.Parcelize
56

6-
@Parcelize
7-
data class ChangeCategoryParams(
8-
// id of the Category to change, if no id - creating new one.
9-
val id: Long = 0
10-
// TODO send size also
11-
) : Parcelable
7+
sealed class ChangeCategoryParams : Parcelable {
8+
abstract val id: Long
9+
10+
@Parcelize
11+
data class Change(
12+
override val id: Long,
13+
val name: String,
14+
@ColorInt val color: Int
15+
) : ChangeCategoryParams()
16+
17+
@Parcelize
18+
object New : ChangeCategoryParams() {
19+
override val id: Long get() = 0
20+
}
21+
}

0 commit comments

Comments
 (0)