Skip to content

Commit 619b61e

Browse files
committed
remove runBlocking from card size
1 parent bfd3db1 commit 619b61e

6 files changed

Lines changed: 51 additions & 58 deletions

File tree

core/src/main/java/com/example/util/simpletimetracker/core/extension/FragmentExtensions.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import androidx.core.content.res.ResourcesCompat
99
import androidx.core.view.ViewCompat
1010
import androidx.fragment.app.Fragment
1111
import androidx.transition.TransitionInflater
12-
import com.example.util.simpletimetracker.core.utils.BuildVersions
1312
import com.example.util.simpletimetracker.core.utils.doOnEnd
1413
import com.example.util.simpletimetracker.feature_views.extension.animateScaleBoop
1514

@@ -32,7 +31,7 @@ inline fun Fragment.setSharedTransitions(
3231
sharedView: View,
3332
) {
3433
val context = this.context ?: return
35-
if (BuildVersions.isLollipopOrHigher() && additionalCondition.invoke()) {
34+
if (additionalCondition.invoke()) {
3635
val transition = TransitionInflater.from(context)
3736
.inflateTransition(android.R.transition.move)
3837
transition?.apply {

core/src/main/java/com/example/util/simpletimetracker/core/utils/BuildVersions.kt

Lines changed: 0 additions & 11 deletions
This file was deleted.
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.example.util.simpletimetracker.core.utils
2+
3+
class SuspendedValue<T>(val getter: suspend () -> T) {
4+
5+
private var value: T? = null
6+
7+
suspend fun get(): T {
8+
return value ?: getter.invoke().also { value = it }
9+
}
10+
11+
fun set(value: T) {
12+
this.value = value
13+
}
14+
}

features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/cardSize/viewModel/CardSizeViewModel.kt

Lines changed: 35 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package com.example.util.simpletimetracker.feature_dialogs.cardSize.viewModel
22

33
import androidx.lifecycle.LiveData
4-
import androidx.lifecycle.MutableLiveData
5-
import androidx.lifecycle.ViewModel
64
import androidx.lifecycle.viewModelScope
5+
import com.example.util.simpletimetracker.core.base.BaseViewModel
6+
import com.example.util.simpletimetracker.core.extension.lazySuspend
77
import com.example.util.simpletimetracker.feature_base_adapter.ViewHolderType
88
import com.example.util.simpletimetracker.feature_base_adapter.loader.LoaderViewData
99
import com.example.util.simpletimetracker.core.extension.set
1010
import com.example.util.simpletimetracker.core.mapper.RecordTypeViewDataMapper
11+
import com.example.util.simpletimetracker.core.utils.SuspendedValue
1112
import com.example.util.simpletimetracker.feature_base_adapter.buttonsRow.view.ButtonsRowViewData
1213
import com.example.util.simpletimetracker.domain.prefs.interactor.PrefsInteractor
1314
import com.example.util.simpletimetracker.domain.recordType.interactor.RecordTypeInteractor
@@ -18,7 +19,6 @@ import com.example.util.simpletimetracker.feature_dialogs.cardSize.viewData.Card
1819
import dagger.hilt.android.lifecycle.HiltViewModel
1920
import kotlinx.coroutines.MainScope
2021
import kotlinx.coroutines.launch
21-
import kotlinx.coroutines.runBlocking
2222
import javax.inject.Inject
2323

2424
@HiltViewModel
@@ -27,80 +27,71 @@ class CardSizeViewModel @Inject constructor(
2727
private val prefsInteractor: PrefsInteractor,
2828
private val cardSizeViewDataMapper: CardSizeViewDataMapper,
2929
private val recordTypeViewDataMapper: RecordTypeViewDataMapper,
30-
) : ViewModel() {
30+
) : BaseViewModel() {
3131

32-
val recordTypes: LiveData<List<ViewHolderType>> by lazy {
33-
return@lazy MutableLiveData<List<ViewHolderType>>().let { initial ->
34-
viewModelScope.launch {
35-
initial.value = listOf(LoaderViewData())
36-
initial.value = loadRecordTypes()
37-
}
38-
initial
39-
}
32+
val recordTypes: LiveData<List<ViewHolderType>> by lazySuspend {
33+
viewModelScope.launch { updateRecordTypes() }
34+
listOf(LoaderViewData())
4035
}
41-
val buttons: LiveData<List<ViewHolderType>> by lazy {
42-
MutableLiveData<List<ViewHolderType>>().let { initial ->
43-
initial.value = loadButtonsViewData()
44-
initial
45-
}
36+
val buttons: LiveData<List<ViewHolderType>> by lazySuspend {
37+
loadButtonsViewData()
4638
}
47-
val defaultButton: LiveData<CardSizeDefaultButtonViewData> by lazy {
48-
MutableLiveData<CardSizeDefaultButtonViewData>().let { initial ->
49-
viewModelScope.launch {
50-
initial.value = loadDefaultButtonViewData()
51-
}
52-
initial
53-
}
39+
val defaultButton: LiveData<CardSizeDefaultButtonViewData> by lazySuspend {
40+
loadDefaultButtonViewData()
5441
}
5542

56-
// TODO remove runBlocking
57-
private var numberOfCards: Int = runBlocking { prefsInteractor.getNumberOfCards() }
43+
private val numberOfCards = SuspendedValue(prefsInteractor::getNumberOfCards)
5844
private var types: List<RecordType> = emptyList()
5945

6046
fun onDismiss() {
6147
MainScope().launch {
62-
prefsInteractor.setNumberOfCards(numberOfCards)
48+
prefsInteractor.setNumberOfCards(numberOfCards.get())
6349
}
6450
}
6551

6652
fun onButtonClick(viewData: ButtonsRowViewData) {
6753
if (viewData !is CardSizeButtonsViewData) return
68-
numberOfCards = viewData.numberOfCards
69-
updateRecordTypes()
70-
updateButtonsViewData()
71-
updateDefaultButton()
54+
viewModelScope.launch {
55+
numberOfCards.set(viewData.numberOfCards)
56+
updateRecordTypes()
57+
updateButtonsViewData()
58+
updateDefaultButton()
59+
}
7260
}
7361

74-
fun onDefaultButtonClick() {
75-
numberOfCards = 0
62+
fun onDefaultButtonClick() = viewModelScope.launch {
63+
numberOfCards.set(0)
7664
updateRecordTypes()
7765
updateButtonsViewData()
7866
updateDefaultButton()
7967
}
8068

81-
private fun updateButtonsViewData() {
69+
private suspend fun updateButtonsViewData() {
8270
val data = loadButtonsViewData()
8371
buttons.set(data)
8472
}
8573

86-
private fun updateDefaultButton() = viewModelScope.launch {
74+
private suspend fun updateDefaultButton() {
8775
val data = loadDefaultButtonViewData()
8876
defaultButton.set(data)
8977
}
9078

91-
private fun updateRecordTypes() = viewModelScope.launch {
79+
private suspend fun updateRecordTypes() {
9280
val data = loadRecordTypes()
9381
recordTypes.set(data)
9482
}
9583

96-
private fun loadButtonsViewData(): List<ViewHolderType> {
97-
return cardSizeViewDataMapper.toToButtonsViewData(numberOfCards)
84+
private suspend fun loadButtonsViewData(): List<ViewHolderType> {
85+
return cardSizeViewDataMapper.toToButtonsViewData(numberOfCards.get())
9886
}
9987

10088
private suspend fun loadDefaultButtonViewData(): CardSizeDefaultButtonViewData {
10189
val isDarkTheme = prefsInteractor.getDarkMode()
10290

103-
return cardSizeViewDataMapper.toDefaultButtonViewData(numberOfCards, isDarkTheme)
91+
return cardSizeViewDataMapper.toDefaultButtonViewData(
92+
numberOfCards = numberOfCards.get(),
93+
isDarkTheme = isDarkTheme,
94+
)
10495
}
10596

10697
private suspend fun loadRecordTypes(): List<ViewHolderType> {
@@ -112,7 +103,11 @@ class CardSizeViewModel @Inject constructor(
112103

113104
return types
114105
.map { type ->
115-
cardSizeViewDataMapper.toToRecordTypeViewData(type, numberOfCards, isDarkTheme)
106+
cardSizeViewDataMapper.toToRecordTypeViewData(
107+
recordType = type,
108+
numberOfCards = numberOfCards.get(),
109+
isDarkTheme = isDarkTheme,
110+
)
116111
}
117112
.takeUnless { it.isEmpty() }
118113
?: recordTypeViewDataMapper.mapToEmpty()

features/feature_dialogs/src/main/java/com/example/util/simpletimetracker/feature_dialogs/dateTime/DateDialogFragment.kt

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import android.os.Bundle
44
import android.view.LayoutInflater
55
import android.view.ViewGroup
66
import com.example.util.simpletimetracker.core.base.BaseFragment
7-
import com.example.util.simpletimetracker.core.utils.BuildVersions
87
import com.example.util.simpletimetracker.core.utils.InsetConfiguration
98
import com.example.util.simpletimetracker.domain.extension.orZero
109
import java.util.Calendar
@@ -36,9 +35,7 @@ class DateDialogFragment : BaseFragment<Binding>() {
3635
val calendar = Calendar.getInstance()
3736
.apply { timeInMillis = timestamp }
3837

39-
if (BuildVersions.isLollipopOrHigher()) {
40-
datePicker.firstDayOfWeek = firstDayOfWeek
41-
}
38+
datePicker.firstDayOfWeek = firstDayOfWeek
4239
datePicker.init(
4340
calendar.get(Calendar.YEAR),
4441
calendar.get(Calendar.MONTH),

features/feature_notification/src/main/java/com/example/util/simpletimetracker/feature_notification/activitySwitch/manager/NotificationActivitySwitchManager.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ class NotificationActivitySwitchManager @Inject constructor(
7070

7171
// TODO fix default duration type click when show tags is enabled,
7272
// no animation / indication.
73-
// TODO reshow in dismiss to keep sticky on API 34? setDeleteIntent()
7473
return NotificationCompat.Builder(context, NOTIFICATIONS_CHANNEL_ID)
7574
.setSmallIcon(R.drawable.ic_notification)
7675
.setContentIntent(contentIntent)

0 commit comments

Comments
 (0)