Skip to content

Commit 4dfd61a

Browse files
authored
add skip for signals (#934)
**Background** When setup of remote in progress, some button can be not avaliable, thus we need to skip them instead of yes/no **Changes** - Add signal skip backend integration **Test plan** - Open setup and try skip some buttons
1 parent 149de2e commit 4dfd61a

File tree

9 files changed

+50
-7
lines changed

9 files changed

+50
-7
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ Attention: don't forget to add the flag for F-Droid before release
1010
- [Feature] Add onetap widget
1111
- [Feature] Save, edit, share remote control
1212
- [Feature] More UI elements for remote-controls
13+
- [Feature] Skip infrared signals on setup screen
1314
- [Refactor] Load RemoteControls from flipper, emulating animation
1415
- [Refactor] Update to Kotlin 2.0
1516
- [Refactor] Replace Ktorfit with Ktor requests in remote-controls

components/remote-controls/api-backend/src/commonMain/kotlin/com/flipperdevices/ifrmvp/backend/model/SignalRequestModel.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ data class SignalRequestModel(
99
val successResults: List<SignalResultData> = emptyList(),
1010
@SerialName("failed_results")
1111
val failedResults: List<SignalResultData> = emptyList(),
12+
@SerialName("skipped_results")
13+
val skippedResults: List<SignalResultData> = emptyList(),
1214
@SerialName("brand_id")
1315
val brandId: Long
1416
) {

components/remote-controls/setup/impl/src/main/kotlin/com/flipperdevices/remotecontrols/impl/setup/composable/SetupScreen.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ fun SetupScreen(
109109
.padding(scaffoldPaddings),
110110
onNegativeClick = setupComponent::onFailedClick,
111111
onSuccessClick = setupComponent::onSuccessClick,
112+
onSkipClick = setupComponent::onSkipClicked
112113
)
113114
}
114115
}

components/remote-controls/setup/impl/src/main/kotlin/com/flipperdevices/remotecontrols/impl/setup/composable/components/ConfirmContent.kt

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,13 @@ import com.flipperdevices.core.ui.theme.LocalTypography
3838
import com.flipperdevices.ifrmvp.backend.model.SignalResponse
3939
import com.flipperdevices.remotecontrols.setup.impl.R as SetupR
4040

41+
@Suppress("LongMethod")
4142
@Composable
4243
fun ConfirmContent(
4344
text: String,
4445
onPositiveClick: () -> Unit,
4546
onNegativeClick: () -> Unit,
47+
onSkipClick: () -> Unit,
4648
modifier: Modifier = Modifier,
4749
) {
4850
Box(
@@ -76,7 +78,8 @@ fun ConfirmContent(
7678
horizontalArrangement = Arrangement.SpaceBetween,
7779
modifier = Modifier
7880
.fillMaxWidth()
79-
.padding(vertical = 42.dp, horizontal = 38.dp)
81+
.padding(horizontal = 38.dp)
82+
.padding(top = 42.dp)
8083
) {
8184
Text(
8285
text = stringResource(SetupR.string.no),
@@ -93,6 +96,17 @@ fun ConfirmContent(
9396
onClick = onPositiveClick
9497
)
9598
}
99+
Text(
100+
text = stringResource(SetupR.string.skip),
101+
style = LocalTypography.current.buttonB16,
102+
color = LocalPalletV2.current.action.blue.text.default,
103+
textAlign = TextAlign.Center,
104+
modifier = Modifier
105+
.clip(RoundedCornerShape(30.dp))
106+
.clickableRipple(onClick = onSkipClick)
107+
.padding(vertical = 18.dp, horizontal = 36.dp)
108+
.padding(bottom = 22.dp),
109+
)
96110
}
97111
}
98112
)
@@ -103,6 +117,7 @@ fun AnimatedConfirmContent(
103117
lastEmulatedSignal: SignalResponse?,
104118
onNegativeClick: () -> Unit,
105119
onSuccessClick: () -> Unit,
120+
onSkipClick: () -> Unit,
106121
modifier: Modifier = Modifier,
107122
) {
108123
Box(
@@ -135,6 +150,7 @@ fun AnimatedConfirmContent(
135150
},
136151
onNegativeClick = onNegativeClick,
137152
onPositiveClick = onSuccessClick,
153+
onSkipClick = onSkipClick,
138154
modifier = Modifier.align(Alignment.BottomCenter)
139155
)
140156
}
@@ -152,7 +168,8 @@ private fun ComposableConfirmContentLightPreview() {
152168
ConfirmContent(
153169
text = "Super mega text of preview confirm element",
154170
onPositiveClick = {},
155-
onNegativeClick = {}
171+
onNegativeClick = {},
172+
onSkipClick = {}
156173
)
157174
}
158175
}
@@ -168,7 +185,8 @@ private fun ComposableConfirmContentDarkPreview() {
168185
ConfirmContent(
169186
text = "Super mega text of preview confirm element",
170187
onPositiveClick = {},
171-
onNegativeClick = {}
188+
onNegativeClick = {},
189+
onSkipClick = {}
172190
)
173191
}
174192
}

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ interface SetupComponent {
2323

2424
fun onSuccessClick()
2525
fun onFailedClick()
26+
fun onSkipClicked()
2627
fun dispatchSignal()
2728

2829
fun dismissBusyDialog()

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ class SetupComponentImpl @AssistedInject constructor(
138138
dispatchSignalApi.reset()
139139
createCurrentSignalViewModel.load(
140140
successResults = historyViewModel.state.value.successfulSignals,
141-
failedResults = historyViewModel.state.value.failedSignals
141+
failedResults = historyViewModel.state.value.failedSignals,
142+
skippedResults = historyViewModel.state.value.skippedSignals
142143
)
143144
_lastEmulatedSignal.value = null
144145
}
@@ -163,6 +164,14 @@ class SetupComponentImpl @AssistedInject constructor(
163164
tryLoad()
164165
}
165166

167+
override fun onSkipClicked() {
168+
val state = createCurrentSignalViewModel.state.value as? CurrentSignalViewModel.State.Loaded
169+
?: return
170+
val signalModel = state.response.signalResponse?.signalModel ?: return
171+
historyViewModel.rememberSkipped(signalModel)
172+
tryLoad()
173+
}
174+
166175
override fun dispatchSignal() {
167176
val state = createCurrentSignalViewModel.state.value
168177
val loadedState = state as? CurrentSignalViewModel.State.Loaded ?: run {

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,15 @@ class CurrentSignalViewModel @AssistedInject constructor(
2626

2727
fun load(
2828
successResults: List<SignalResultData>,
29-
failedResults: List<SignalResultData>
29+
failedResults: List<SignalResultData>,
30+
skippedResults: List<SignalResultData>
3031
) = viewModelScope.launch {
3132
_state.emit(State.Loading)
3233
val result = runCatching {
3334
val request = SignalRequestModel(
3435
successResults = successResults,
3536
failedResults = failedResults,
37+
skippedResults = skippedResults,
3638
brandId = param.brandId,
3739
)
3840
infraredBackendApi.getSignal(request)
@@ -45,7 +47,7 @@ class CurrentSignalViewModel @AssistedInject constructor(
4547
}
4648

4749
init {
48-
load(emptyList(), emptyList())
50+
load(emptyList(), emptyList(), emptyList())
4951
}
5052

5153
sealed interface State {

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,16 @@ class HistoryViewModel @Inject constructor() : DecomposeViewModel() {
2626
_state.update { it.copy(failedSignals = it.failedSignals + signalResultData) }
2727
}
2828

29+
fun rememberSkipped(signalModel: SignalModel) {
30+
val signalResultData = SignalResultData(
31+
signalId = signalModel.id,
32+
)
33+
_state.update { it.copy(skippedSignals = it.skippedSignals + signalResultData) }
34+
}
35+
2936
data class State(
3037
val successfulSignals: List<SignalResultData> = emptyList(),
31-
val failedSignals: List<SignalResultData> = emptyList()
38+
val failedSignals: List<SignalResultData> = emptyList(),
39+
val skippedSignals: List<SignalResultData> = emptyList()
3240
)
3341
}

components/remote-controls/setup/impl/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
<!-- Settings-->
44
<string name="yes">Yes</string>
55
<string name="no">No</string>
6+
<string name="skip">Skip</string>
67
<string name="not_found_signal">Not found signal for your preferences</string>
78
<string name="point_flipper">Point Flipper Zero at the %s and tap the button</string>
89
<string name="setup_title">Set Up Remote</string>

0 commit comments

Comments
 (0)