Skip to content

Commit 32133f4

Browse files
committed
improve change record shared transitions
1 parent 28dad3b commit 32133f4

File tree

6 files changed

+97
-71
lines changed

6 files changed

+97
-71
lines changed

feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/extra/ChangeRecordExtra.kt

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

feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/view/ChangeRecordFragment.kt

Lines changed: 38 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,24 @@ import com.example.util.simpletimetracker.domain.extension.orZero
2222
import com.example.util.simpletimetracker.feature_change_record.R
2323
import com.example.util.simpletimetracker.feature_change_record.adapter.ChangeRecordAdapter
2424
import com.example.util.simpletimetracker.feature_change_record.di.ChangeRecordComponentProvider
25-
import com.example.util.simpletimetracker.feature_change_record.extra.ChangeRecordExtra
2625
import com.example.util.simpletimetracker.feature_change_record.viewData.ChangeRecordViewData
2726
import com.example.util.simpletimetracker.feature_change_record.viewModel.ChangeRecordViewModel
2827
import com.example.util.simpletimetracker.navigation.params.ChangeRecordParams
2928
import com.google.android.flexbox.FlexDirection
3029
import com.google.android.flexbox.FlexWrap
3130
import com.google.android.flexbox.FlexboxLayoutManager
3231
import com.google.android.flexbox.JustifyContent
33-
import kotlinx.android.synthetic.main.change_record_fragment.*
32+
import kotlinx.android.synthetic.main.change_record_fragment.arrowChangeRecordType
33+
import kotlinx.android.synthetic.main.change_record_fragment.btnChangeRecordDelete
34+
import kotlinx.android.synthetic.main.change_record_fragment.btnChangeRecordSave
35+
import kotlinx.android.synthetic.main.change_record_fragment.etChangeRecordComment
36+
import kotlinx.android.synthetic.main.change_record_fragment.fieldChangeRecordTimeEnded
37+
import kotlinx.android.synthetic.main.change_record_fragment.fieldChangeRecordTimeStarted
38+
import kotlinx.android.synthetic.main.change_record_fragment.fieldChangeRecordType
39+
import kotlinx.android.synthetic.main.change_record_fragment.previewChangeRecord
40+
import kotlinx.android.synthetic.main.change_record_fragment.rvChangeRecordType
41+
import kotlinx.android.synthetic.main.change_record_fragment.tvChangeRecordTimeEnded
42+
import kotlinx.android.synthetic.main.change_record_fragment.tvChangeRecordTimeStarted
3443
import javax.inject.Inject
3544

3645
class ChangeRecordFragment : BaseFragment(R.layout.change_record_fragment),
@@ -52,8 +61,8 @@ class ChangeRecordFragment : BaseFragment(R.layout.change_record_fragment),
5261
private val typesAdapter: ChangeRecordAdapter by lazy {
5362
ChangeRecordAdapter(viewModel::onTypeClick)
5463
}
55-
private val extra: ChangeRecordExtra by lazy {
56-
arguments?.getParcelable<ChangeRecordExtra>(ARGS_EXTRA) ?: ChangeRecordExtra.New()
64+
private val extra: ChangeRecordParams by lazy {
65+
arguments?.getParcelable<ChangeRecordParams>(ARGS_PARAMS) ?: ChangeRecordParams.New()
5766
}
5867

5968
override fun initDi() {
@@ -63,14 +72,16 @@ class ChangeRecordFragment : BaseFragment(R.layout.change_record_fragment),
6372
}
6473

6574
override fun initUi() {
75+
setPreview()
76+
6677
if (BuildVersions.isLollipopOrHigher()) {
6778
sharedElementEnterTransition = TransitionInflater.from(context)
6879
.inflateTransition(android.R.transition.move)
6980
}
7081

7182
val transitionName: String = when (extra) {
72-
is ChangeRecordExtra.Tracked -> (extra as? ChangeRecordExtra.Tracked)?.transitionName.orEmpty()
73-
is ChangeRecordExtra.Untracked -> (extra as? ChangeRecordExtra.Untracked)?.transitionName.orEmpty()
83+
is ChangeRecordParams.Tracked -> (extra as? ChangeRecordParams.Tracked)?.transitionName.orEmpty()
84+
is ChangeRecordParams.Untracked -> (extra as? ChangeRecordParams.Untracked)?.transitionName.orEmpty()
7485
else -> ""
7586
}
7687
ViewCompat.setTransitionName(previewChangeRecord, transitionName)
@@ -112,7 +123,7 @@ class ChangeRecordFragment : BaseFragment(R.layout.change_record_fragment),
112123
}
113124
}
114125
with(removeRecordViewModel) {
115-
prepare((extra as? ChangeRecordExtra.Tracked)?.id.orZero())
126+
prepare((extra as? ChangeRecordParams.Tracked)?.id.orZero())
116127
deleteButtonEnabled.observe(viewLifecycleOwner, btnChangeRecordDelete::setEnabled)
117128
deleteIconVisibility.observe(viewLifecycleOwner, btnChangeRecordDelete::visible::set)
118129
}
@@ -127,6 +138,24 @@ class ChangeRecordFragment : BaseFragment(R.layout.change_record_fragment),
127138
etChangeRecordComment.setSelection(item.comment.length)
128139
}
129140

141+
private fun setPreview() = when (extra) {
142+
is ChangeRecordParams.Tracked -> (extra as? ChangeRecordParams.Tracked)?.preview
143+
is ChangeRecordParams.Untracked -> (extra as? ChangeRecordParams.Untracked)?.preview
144+
else -> null
145+
}?.let { preview ->
146+
ChangeRecordViewData(
147+
name = preview.name,
148+
timeStarted = preview.timeStarted,
149+
timeFinished = preview.timeFinished,
150+
dateTimeStarted = "",
151+
dateTimeFinished = "",
152+
duration = preview.duration,
153+
iconId = preview.iconId,
154+
color = preview.color,
155+
comment = preview.comment
156+
).let(::updatePreview)
157+
}
158+
130159
private fun updatePreview(item: ChangeRecordViewData) {
131160
with(previewChangeRecord) {
132161
itemName = item.name
@@ -142,31 +171,11 @@ class ChangeRecordFragment : BaseFragment(R.layout.change_record_fragment),
142171
}
143172

144173
companion object {
145-
private const val ARGS_EXTRA = "args_extra"
174+
private const val ARGS_PARAMS = "args_change_record_params"
146175

147176
fun createBundle(data: Any?): Bundle = Bundle().apply {
148177
when (data) {
149-
is ChangeRecordParams -> {
150-
val extra = when (data) {
151-
is ChangeRecordParams.Tracked -> {
152-
ChangeRecordExtra.Tracked(
153-
transitionName = data.transitionName,
154-
id = data.id
155-
)
156-
}
157-
is ChangeRecordParams.Untracked -> {
158-
ChangeRecordExtra.Untracked(
159-
transitionName = data.transitionName,
160-
timeStarted = data.timeStarted,
161-
timeEnded = data.timeEnded
162-
)
163-
}
164-
is ChangeRecordParams.New -> {
165-
ChangeRecordExtra.New(data.daysFromToday)
166-
}
167-
}
168-
putParcelable(ARGS_EXTRA, extra)
169-
}
178+
is ChangeRecordParams -> putParcelable(ARGS_PARAMS, data)
170179
}
171180
}
172181
}

feature_change_record/src/main/java/com/example/util/simpletimetracker/feature_change_record/viewModel/ChangeRecordViewModel.kt

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ import com.example.util.simpletimetracker.domain.interactor.RecordInteractor
1717
import com.example.util.simpletimetracker.domain.interactor.RecordTypeInteractor
1818
import com.example.util.simpletimetracker.domain.model.Record
1919
import com.example.util.simpletimetracker.feature_change_record.R
20-
import com.example.util.simpletimetracker.feature_change_record.extra.ChangeRecordExtra
2120
import com.example.util.simpletimetracker.feature_change_record.mapper.ChangeRecordViewDataMapper
2221
import com.example.util.simpletimetracker.feature_change_record.viewData.ChangeRecordViewData
2322
import com.example.util.simpletimetracker.navigation.Notification
2423
import com.example.util.simpletimetracker.navigation.Router
2524
import com.example.util.simpletimetracker.navigation.Screen
25+
import com.example.util.simpletimetracker.navigation.params.ChangeRecordParams
2626
import com.example.util.simpletimetracker.navigation.params.DateTimeDialogParams
2727
import com.example.util.simpletimetracker.navigation.params.ToastParams
2828
import kotlinx.coroutines.launch
@@ -39,7 +39,7 @@ class ChangeRecordViewModel @Inject constructor(
3939
private val prefsInteractor: PrefsInteractor
4040
) : ViewModel() {
4141

42-
lateinit var extra: ChangeRecordExtra
42+
lateinit var extra: ChangeRecordParams
4343

4444
val record: LiveData<ChangeRecordViewData> by lazy {
4545
return@lazy MutableLiveData<ChangeRecordViewData>().let { initial ->
@@ -101,7 +101,7 @@ class ChangeRecordViewModel @Inject constructor(
101101
(saveButtonEnabled as MutableLiveData).value = false
102102
viewModelScope.launch {
103103
// Zero id creates new record
104-
val id = (extra as? ChangeRecordExtra.Tracked)?.id.orZero()
104+
val id = (extra as? ChangeRecordParams.Tracked)?.id.orZero()
105105
Record(
106106
id = id,
107107
typeId = newTypeId,
@@ -164,20 +164,20 @@ class ChangeRecordViewModel @Inject constructor(
164164

165165
private suspend fun initializePreviewViewData() {
166166
when (extra) {
167-
is ChangeRecordExtra.Tracked -> {
168-
recordInteractor.get((extra as ChangeRecordExtra.Tracked).id)?.let { record ->
167+
is ChangeRecordParams.Tracked -> {
168+
recordInteractor.get((extra as ChangeRecordParams.Tracked).id)?.let { record ->
169169
newTypeId = record.typeId.orZero()
170170
newTimeStarted = record.timeStarted
171171
newTimeEnded = record.timeEnded
172172
newComment = record.comment
173173
}
174174
}
175-
is ChangeRecordExtra.Untracked -> {
176-
newTimeStarted = (extra as ChangeRecordExtra.Untracked).timeStarted
177-
newTimeEnded = (extra as ChangeRecordExtra.Untracked).timeEnded
175+
is ChangeRecordParams.Untracked -> {
176+
newTimeStarted = (extra as ChangeRecordParams.Untracked).timeStarted
177+
newTimeEnded = (extra as ChangeRecordParams.Untracked).timeEnded
178178
}
179-
is ChangeRecordExtra.New -> {
180-
newTimeEnded = getInitialDate((extra as ChangeRecordExtra.New).daysFromToday)
179+
is ChangeRecordParams.New -> {
180+
newTimeEnded = getInitialDate((extra as ChangeRecordParams.New).daysFromToday)
181181
newTimeStarted = newTimeEnded - ONE_HOUR
182182
}
183183
}

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

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,27 @@ class RecordsViewModel @Inject constructor(
3030
}
3131

3232
fun onRecordClick(item: RecordViewData, sharedElements: Map<Any, String>) {
33+
val preview = ChangeRecordParams.Preview(
34+
name = item.name,
35+
timeStarted = item.timeStarted,
36+
timeFinished = item.timeFinished,
37+
duration = item.duration,
38+
iconId = item.iconId,
39+
color = item.color,
40+
comment = item.comment
41+
)
42+
3343
val params = when (item) {
3444
is RecordViewData.Tracked -> ChangeRecordParams.Tracked(
3545
transitionName = TransitionNames.RECORD + item.id,
36-
id = item.id
46+
id = item.id,
47+
preview = preview
3748
)
3849
is RecordViewData.Untracked -> ChangeRecordParams.Untracked(
3950
transitionName = TransitionNames.RECORD + item.getUniqueId(),
4051
timeStarted = item.timeStartedTimestamp,
41-
timeEnded = item.timeEndedTimestamp
52+
timeEnded = item.timeEndedTimestamp,
53+
preview = preview
4254
)
4355
}
4456
router.navigate(

feature_records_all/src/main/java/com/example/util/simpletimetracker/feature_records_all/viewModel/RecordsAllViewModel.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,16 @@ class RecordsAllViewModel @Inject constructor(
4747
if (item is RecordViewData.Tracked) {
4848
ChangeRecordParams.Tracked(
4949
transitionName = TransitionNames.RECORD + item.id,
50-
id = item.id
50+
id = item.id,
51+
preview = ChangeRecordParams.Preview(
52+
name = item.name,
53+
timeStarted = item.timeStarted,
54+
timeFinished = item.timeFinished,
55+
duration = item.duration,
56+
iconId = item.iconId,
57+
color = item.color,
58+
comment = item.comment
59+
)
5160
).let { params ->
5261
router.navigate(
5362
screen = Screen.CHANGE_RECORD_FROM_RECORDS_ALL,
Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,40 @@
11
package com.example.util.simpletimetracker.navigation.params
22

3-
sealed class ChangeRecordParams {
3+
import android.os.Parcelable
4+
import androidx.annotation.ColorInt
5+
import androidx.annotation.DrawableRes
6+
import kotlinx.android.parcel.Parcelize
47

8+
sealed class ChangeRecordParams: Parcelable {
9+
10+
@Parcelize
511
data class Tracked(
612
val transitionName: String,
7-
val id: Long
13+
val id: Long,
14+
val preview: Preview
815
) : ChangeRecordParams()
916

17+
@Parcelize
1018
data class Untracked(
1119
val transitionName: String,
1220
val timeStarted: Long,
13-
val timeEnded: Long
21+
val timeEnded: Long,
22+
val preview: Preview
1423
) : ChangeRecordParams()
1524

25+
@Parcelize
1626
data class New(
17-
val daysFromToday: Int
27+
val daysFromToday: Int = 0
1828
) : ChangeRecordParams()
29+
30+
@Parcelize
31+
data class Preview(
32+
val name: String,
33+
val timeStarted: String,
34+
val timeFinished: String,
35+
val duration: String,
36+
@DrawableRes val iconId: Int,
37+
@ColorInt val color: Int,
38+
val comment: String
39+
): Parcelable
1940
}

0 commit comments

Comments
 (0)