Skip to content

Commit 669bcc4

Browse files
committed
add history back callback
1 parent 85a91dd commit 669bcc4

File tree

2 files changed

+51
-12
lines changed

2 files changed

+51
-12
lines changed

components/remote-controls/setup/impl/src/main/kotlin/com/flipperdevices/remotecontrols/impl/setup/presentation/decompose/internal/SetupComponentImpl.kt

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.flipperdevices.remotecontrols.impl.setup.presentation.decompose.internal
22

33
import com.arkivanov.decompose.ComponentContext
4+
import com.arkivanov.essenty.backhandler.BackCallback
45
import com.arkivanov.essenty.instancekeeper.getOrCreate
56
import com.flipperdevices.bridge.dao.api.model.FlipperFilePath
67
import com.flipperdevices.bridge.dao.api.model.FlipperKeyType
@@ -136,10 +137,11 @@ class SetupComponentImpl @AssistedInject constructor(
136137
override fun tryLoad() {
137138
if (dispatchSignalApi.state.value is DispatchSignalApi.State.Emulating) return
138139
dispatchSignalApi.reset()
140+
val historyData = historyViewModel.data
139141
createCurrentSignalViewModel.load(
140-
successResults = historyViewModel.state.value.successfulSignals,
141-
failedResults = historyViewModel.state.value.failedSignals,
142-
skippedResults = historyViewModel.state.value.skippedSignals
142+
successResults = historyData.successfulSignals,
143+
failedResults = historyData.failedSignals,
144+
skippedResults = historyData.skippedSignals
143145
)
144146
_lastEmulatedSignal.value = null
145147
}
@@ -201,7 +203,20 @@ class SetupComponentImpl @AssistedInject constructor(
201203
)
202204
}
203205

204-
override fun onBackClick() = onBackClick.invoke()
206+
private val backCallback = BackCallback(true) {
207+
if (historyViewModel.isEmpty) {
208+
onBackClick.invoke()
209+
} else {
210+
historyViewModel.forgetLast()
211+
}
212+
tryLoad()
213+
}
214+
215+
override fun onBackClick() = backCallback.onBack()
216+
217+
init {
218+
backHandler.register(backCallback)
219+
}
205220
}
206221

207222
private val ABSOLUTE_TEMP_FOLDER_PATH = "/${FlipperKeyType.INFRARED.flipperDir}/temp"

components/remote-controls/setup/impl/src/main/kotlin/com/flipperdevices/remotecontrols/impl/setup/presentation/viewmodel/HistoryViewModel.kt

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,39 +3,63 @@ package com.flipperdevices.remotecontrols.impl.setup.presentation.viewmodel
33
import com.flipperdevices.core.ui.lifecycle.DecomposeViewModel
44
import com.flipperdevices.ifrmvp.backend.model.SignalModel
55
import com.flipperdevices.ifrmvp.backend.model.SignalRequestModel.SignalResultData
6-
import kotlinx.coroutines.flow.MutableStateFlow
7-
import kotlinx.coroutines.flow.asStateFlow
8-
import kotlinx.coroutines.flow.update
96
import javax.inject.Inject
107

118
class HistoryViewModel @Inject constructor() : DecomposeViewModel() {
12-
private val _state = MutableStateFlow(State())
13-
val state = _state.asStateFlow()
9+
private val flatData = mutableListOf<FlatData>()
10+
11+
val data: State
12+
get() = State(
13+
successfulSignals = flatData
14+
.filter { it.type == FlatData.FlatDataType.SUCCESS }
15+
.map(FlatData::data),
16+
failedSignals = flatData
17+
.filter { it.type == FlatData.FlatDataType.FAILED }
18+
.map(FlatData::data),
19+
skippedSignals = flatData
20+
.filter { it.type == FlatData.FlatDataType.SKIPPED }
21+
.map(FlatData::data),
22+
)
23+
val isEmpty: Boolean
24+
get() = flatData.isEmpty()
25+
26+
fun forgetLast() {
27+
flatData.removeLast()
28+
}
1429

1530
fun rememberSuccessful(signalModel: SignalModel) {
1631
val signalResultData = SignalResultData(
1732
signalId = signalModel.id,
1833
)
19-
_state.update { it.copy(successfulSignals = it.successfulSignals + signalResultData) }
34+
flatData += FlatData(signalResultData, FlatData.FlatDataType.SUCCESS)
2035
}
2136

2237
fun rememberFailed(signalModel: SignalModel) {
2338
val signalResultData = SignalResultData(
2439
signalId = signalModel.id,
2540
)
26-
_state.update { it.copy(failedSignals = it.failedSignals + signalResultData) }
41+
flatData += FlatData(signalResultData, FlatData.FlatDataType.FAILED)
2742
}
2843

2944
fun rememberSkipped(signalModel: SignalModel) {
3045
val signalResultData = SignalResultData(
3146
signalId = signalModel.id,
3247
)
33-
_state.update { it.copy(skippedSignals = it.skippedSignals + signalResultData) }
48+
flatData += FlatData(signalResultData, FlatData.FlatDataType.SKIPPED)
3449
}
3550

3651
data class State(
3752
val successfulSignals: List<SignalResultData> = emptyList(),
3853
val failedSignals: List<SignalResultData> = emptyList(),
3954
val skippedSignals: List<SignalResultData> = emptyList()
4055
)
56+
57+
class FlatData(
58+
val data: SignalResultData,
59+
val type: FlatDataType
60+
) {
61+
enum class FlatDataType {
62+
SUCCESS, FAILED, SKIPPED
63+
}
64+
}
4165
}

0 commit comments

Comments
 (0)