Skip to content

Commit 9f5de35

Browse files
authored
Merge pull request #14322 from woocommerce/woomob-842-woo-posbarcodes-other-should-open-the-state-of-the-dialog
[WOOMOB-842][Woo POS][Barcodes] Other device opens Scanning info state instead of the dialog
2 parents 15a1fb2 + d9e95b7 commit 9f5de35

File tree

8 files changed

+398
-95
lines changed

8 files changed

+398
-95
lines changed

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeScreen.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -194,9 +194,6 @@ private fun Dialogs(
194194
isVisible = dialogState is WooPosHomeState.DialogState.ScanningSetupDialog,
195195
onDismissRequest = {
196196
onHomeUIEvent(WooPosHomeUIEvent.DismissScanningSetupDialog)
197-
},
198-
onShowBarcodeInfoDialog = {
199-
onHomeUIEvent(WooPosHomeUIEvent.ShowBarcodeInfoDialog)
200197
}
201198
)
202199

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeUIEvent.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ sealed class WooPosHomeUIEvent {
88
data object DismissProductsInfoDialog : WooPosHomeUIEvent()
99
data object DismissBarcodeInfoDialog : WooPosHomeUIEvent()
1010
data object DismissScanningSetupDialog : WooPosHomeUIEvent()
11-
data object ShowBarcodeInfoDialog : WooPosHomeUIEvent()
1211
data object OnPaymentCompletedViaCash : WooPosHomeUIEvent()
1312
data object ExitPosClicked : WooPosHomeUIEvent()
1413
data class OnBarcodeEvent(

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/WooPosHomeViewModel.kt

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -90,12 +90,6 @@ class WooPosHomeViewModel @Inject constructor(
9090
)
9191
}
9292

93-
WooPosHomeUIEvent.ShowBarcodeInfoDialog -> {
94-
_state.value = _state.value.copy(
95-
dialogState = DialogState.BarcodeInfoDialog
96-
)
97-
}
98-
9993
WooPosHomeUIEvent.OnPaymentCompletedViaCash -> onOrderSuccessfullyPaid(
10094
PaymentMethod.CASH
10195
)

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/scanningsetup/WooPosScanningSetupDialog.kt

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,6 @@ import com.woocommerce.android.util.WooLog
7676
fun WooPosScanningSetupDialog(
7777
isVisible: Boolean,
7878
onDismissRequest: () -> Unit,
79-
onShowBarcodeInfoDialog: () -> Unit = {},
8079
) {
8180
val viewModel = hiltViewModel<WooPosScanningSetupViewModel>()
8281
val context = LocalContext.current
@@ -85,11 +84,6 @@ fun WooPosScanningSetupDialog(
8584
viewModel.resetToInitialState()
8685
}
8786

88-
LaunchedEffect(Unit) {
89-
viewModel.showBarcodeInfoDialogEvent.collect {
90-
onShowBarcodeInfoDialog()
91-
}
92-
}
9387
LaunchedEffect(Unit) {
9488
viewModel.openBluetoothSettingsEvent.collect {
9589
try {
@@ -203,7 +197,7 @@ fun WooPosScanningSetupDialog(
203197

204198
is ScanningSetupStep.ScannerSetupSuccess -> ScannerSetupSuccessContent(
205199
step = step,
206-
onSecondaryClick = { viewModel.onUiEvent(WooPosScanningSetupUiEvent.OnSecondaryButtonClicked) }
200+
onPrimaryClick = { viewModel.onUiEvent(WooPosScanningSetupUiEvent.OnPrimaryButtonClicked) }
207201
)
208202

209203
is ScanningSetupStep.ScannerSetupInfo -> ScannerSetupInfoContent(
@@ -496,7 +490,7 @@ private fun SetupButtonsRow(
496490
@Composable
497491
private fun ScannerSetupSuccessContent(
498492
step: ScanningSetupStep.ScannerSetupSuccess,
499-
onSecondaryClick: () -> Unit,
493+
onPrimaryClick: () -> Unit,
500494
) {
501495
Column(
502496
modifier = Modifier
@@ -527,7 +521,7 @@ private fun ScannerSetupSuccessContent(
527521
Spacer(modifier = Modifier.height(WooPosSpacing.XLarge.value.toAdaptivePadding()))
528522

529523
WooPosOutlinedButton(
530-
onClick = onSecondaryClick,
524+
onClick = onPrimaryClick,
531525
text = step.moreInfoButtonText,
532526
modifier = Modifier.fillMaxWidth()
533527
)
@@ -637,7 +631,8 @@ fun WooPosScanningSetupDialogPreview() {
637631
BarcodeReaderDevice.STAR_BSH_20B,
638632
BarcodeReaderDevice.INATECK_BLUETOOTH,
639633
BarcodeReaderDevice.OTHER
640-
)
634+
),
635+
previousStep = null
641636
),
642637
onDeviceSelected = {}
643638
)

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/scanningsetup/WooPosScanningSetupState.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@ data class WooPosScanningSetupState(
1919
OTHER(R.string.woopos_scanning_setup_device_other)
2020
}
2121
sealed class ScanningSetupStep : Parcelable {
22+
abstract val previousStep: ScanningSetupStep?
2223

2324
@Parcelize
2425
data class DeviceSelection(
2526
val title: String,
2627
val devices: List<BarcodeReaderDevice>,
28+
override val previousStep: ScanningSetupStep?
2729
) : ScanningSetupStep()
2830

2931
@Parcelize
@@ -33,6 +35,7 @@ data class WooPosScanningSetupState(
3335
@DrawableRes val qrCodeImageRes: Int,
3436
val primaryButtonText: String,
3537
val secondaryButtonText: String,
38+
override val previousStep: ScanningSetupStep
3639
) : ScanningSetupStep()
3740

3841
@Parcelize
@@ -42,6 +45,7 @@ data class WooPosScanningSetupState(
4245
@DrawableRes val qrCodeImageRes: Int,
4346
val primaryButtonText: String,
4447
val secondaryButtonText: String,
48+
override val previousStep: ScanningSetupStep
4549
) : ScanningSetupStep()
4650

4751
@Parcelize
@@ -52,6 +56,7 @@ data class WooPosScanningSetupState(
5256
val primaryButtonText: String,
5357
val secondaryButtonText: String,
5458
val bluetoothSettingsButtonText: String,
59+
override val previousStep: ScanningSetupStep
5560
) : ScanningSetupStep()
5661

5762
@Parcelize
@@ -60,13 +65,15 @@ data class WooPosScanningSetupState(
6065
val message: String,
6166
@DrawableRes val barcodeImageRes: Int,
6267
val secondaryButtonText: String,
68+
override val previousStep: ScanningSetupStep
6369
) : ScanningSetupStep()
6470

6571
@Parcelize
6672
data class ScannerSetupSuccess(
6773
val title: String,
6874
val message: String,
6975
val moreInfoButtonText: String,
76+
override val previousStep: ScanningSetupStep?
7077
) : ScanningSetupStep()
7178

7279
@Parcelize
@@ -77,6 +84,7 @@ data class WooPosScanningSetupState(
7784
val infoText: String,
7885
val backButtonText: String,
7986
val doneButtonText: String,
87+
override val previousStep: ScanningSetupStep?
8088
) : ScanningSetupStep()
8189
}
8290
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.woocommerce.android.ui.woopos.home.scanningsetup
2+
3+
import com.woocommerce.android.ui.woopos.home.scanningsetup.WooPosScanningSetupState.BarcodeReaderDevice
4+
5+
sealed class WooPosScanningSetupUiEvent {
6+
data object OnPrimaryButtonClicked : WooPosScanningSetupUiEvent()
7+
data object OnSecondaryButtonClicked : WooPosScanningSetupUiEvent()
8+
data object OnOpenBluetoothSettings : WooPosScanningSetupUiEvent()
9+
data class OnDeviceSelected(val device: BarcodeReaderDevice) : WooPosScanningSetupUiEvent()
10+
}

WooCommerce/src/main/kotlin/com/woocommerce/android/ui/woopos/home/scanningsetup/WooPosScanningSetupViewModel.kt

Lines changed: 43 additions & 75 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ class WooPosScanningSetupViewModel @Inject constructor(
3131
)
3232
val state: StateFlow<WooPosScanningSetupState> = _state.asStateFlow()
3333

34-
private val _showBarcodeInfoDialogEvent = MutableSharedFlow<Unit>()
35-
val showBarcodeInfoDialogEvent: SharedFlow<Unit> = _showBarcodeInfoDialogEvent.asSharedFlow()
36-
3734
private val _openBluetoothSettingsEvent = MutableSharedFlow<Unit>()
3835
val openBluetoothSettingsEvent: SharedFlow<Unit> = _openBluetoothSettingsEvent.asSharedFlow()
3936

@@ -48,12 +45,12 @@ class WooPosScanningSetupViewModel @Inject constructor(
4845
)
4946

5047
when (event.device) {
51-
BarcodeReaderDevice.OTHER -> viewModelScope.launch {
52-
_showBarcodeInfoDialogEvent.emit(Unit)
53-
}
48+
BarcodeReaderDevice.OTHER -> _state.value = _state.value.copy(
49+
currentStep = createScannerSetupInfoStep(_state.value.currentStep)
50+
)
5451

5552
else -> _state.value = _state.value.copy(
56-
currentStep = createScannerHIDModeSetupStep()
53+
currentStep = createScannerHIDModeSetupStep(_state.value.currentStep)
5754
)
5855
}
5956
}
@@ -89,18 +86,19 @@ class WooPosScanningSetupViewModel @Inject constructor(
8986

9087
is ScanningSetupStep.ScannerHIDModeSetup -> {
9188
_state.value = _state.value.copy(
92-
currentStep = createScannerPairModeSetupStep()
89+
currentStep = createScannerPairModeSetupStep(_state.value.currentStep)
9390
)
9491
}
9592

9693
is ScanningSetupStep.ScannerPairModeSetup -> {
9794
_state.value = _state.value.copy(
98-
currentStep = createPairYourScannerStep()
95+
currentStep = createPairYourScannerStep(_state.value.currentStep)
9996
)
10097
}
98+
10199
is ScanningSetupStep.PairYourScanner -> {
102100
_state.value = _state.value.copy(
103-
currentStep = createTestYourScannerStep()
101+
currentStep = createTestYourScannerStep(_state.value.currentStep)
104102
)
105103
startAutoNavigationToSuccess()
106104
}
@@ -110,7 +108,7 @@ class WooPosScanningSetupViewModel @Inject constructor(
110108
}
111109

112110
is ScanningSetupStep.ScannerSetupSuccess -> {
113-
error("Primary button should not be available on ScannerSetupSuccess step")
111+
error("Not implemented yet")
114112
}
115113

116114
is ScanningSetupStep.ScannerSetupInfo -> {
@@ -122,46 +120,10 @@ class WooPosScanningSetupViewModel @Inject constructor(
122120
}
123121

124122
private fun handleSecondaryButtonClick() {
125-
when (_state.value.currentStep) {
126-
is ScanningSetupStep.DeviceSelection -> error(
127-
"Secondary button should not be available on DeviceSelection step"
128-
)
129-
130-
is ScanningSetupStep.ScannerHIDModeSetup -> {
131-
_state.value = _state.value.copy(
132-
currentStep = createDeviceSelectionStep()
133-
)
134-
}
135-
136-
is ScanningSetupStep.ScannerPairModeSetup -> {
137-
_state.value = _state.value.copy(
138-
currentStep = createScannerHIDModeSetupStep()
139-
)
140-
}
141-
is ScanningSetupStep.PairYourScanner -> {
142-
_state.value = _state.value.copy(
143-
currentStep = createScannerPairModeSetupStep()
144-
)
145-
}
146-
147-
is ScanningSetupStep.TestYourScanner -> {
148-
_state.value = _state.value.copy(
149-
currentStep = createPairYourScannerStep()
150-
)
151-
}
152-
153-
is ScanningSetupStep.ScannerSetupSuccess -> {
154-
_state.value = _state.value.copy(
155-
currentStep = createScannerSetupInfoStep()
156-
)
157-
}
158-
159-
is ScanningSetupStep.ScannerSetupInfo -> {
160-
_state.value = _state.value.copy(
161-
currentStep = createScannerSetupSuccessStep()
162-
)
163-
}
164-
}
123+
val previousStep = requireNotNull(
124+
_state.value.currentStep.previousStep
125+
) { "Previous step cannot be null if secondary button present" }
126+
_state.value = _state.value.copy(currentStep = previousStep)
165127
}
166128

167129
private fun createDeviceSelectionStep() = ScanningSetupStep.DeviceSelection(
@@ -171,25 +133,32 @@ class WooPosScanningSetupViewModel @Inject constructor(
171133
BarcodeReaderDevice.STAR_BSH_20B,
172134
BarcodeReaderDevice.INATECK_BLUETOOTH,
173135
BarcodeReaderDevice.OTHER
174-
)
136+
),
137+
previousStep = null
175138
)
176139

177-
private fun createScannerHIDModeSetupStep() = ScanningSetupStep.ScannerHIDModeSetup(
140+
private fun createScannerHIDModeSetupStep(previousStep: ScanningSetupStep) = ScanningSetupStep.ScannerHIDModeSetup(
178141
title = resourceProvider.getString(R.string.woopos_scanning_setup_introduction_title),
179142
message = resourceProvider.getString(R.string.woopos_scanning_setup_introduction_message),
180143
qrCodeImageRes = R.drawable.ic_barcode,
181144
primaryButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_next),
182-
secondaryButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_back)
145+
secondaryButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_back),
146+
previousStep = previousStep
183147
)
184148

185-
private fun createScannerPairModeSetupStep() = ScanningSetupStep.ScannerPairModeSetup(
186-
title = resourceProvider.getString(R.string.woopos_scanning_setup_scanner_pair_mode_title),
187-
message = resourceProvider.getString(R.string.woopos_scanning_setup_scanner_pair_mode_message),
188-
qrCodeImageRes = R.drawable.ic_barcode,
189-
primaryButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_next),
190-
secondaryButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_back)
191-
)
192-
private fun createPairYourScannerStep() = ScanningSetupStep.PairYourScanner(
149+
private fun createScannerPairModeSetupStep(previousStep: ScanningSetupStep) =
150+
ScanningSetupStep.ScannerPairModeSetup(
151+
title = resourceProvider.getString(R.string.woopos_scanning_setup_scanner_pair_mode_title),
152+
message = resourceProvider.getString(R.string.woopos_scanning_setup_scanner_pair_mode_message),
153+
qrCodeImageRes = R.drawable.ic_barcode,
154+
primaryButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_next),
155+
secondaryButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_back),
156+
previousStep = previousStep
157+
)
158+
159+
private fun createPairYourScannerStep(
160+
previousStep: ScanningSetupStep
161+
) = ScanningSetupStep.PairYourScanner(
193162
title = resourceProvider.getString(R.string.woopos_scanning_setup_pair_your_scanner_title),
194163
message = resourceProvider.getString(
195164
R.string.woopos_scanning_setup_pair_your_scanner_message,
@@ -198,23 +167,28 @@ class WooPosScanningSetupViewModel @Inject constructor(
198167
iconRes = R.drawable.ic_woopos_bluetooth_settings,
199168
primaryButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_next),
200169
secondaryButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_back),
201-
bluetoothSettingsButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_go_to_settings)
170+
bluetoothSettingsButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_go_to_settings),
171+
previousStep = previousStep
202172
)
203173

204-
private fun createTestYourScannerStep() = ScanningSetupStep.TestYourScanner(
174+
private fun createTestYourScannerStep(
175+
previousStep: ScanningSetupStep
176+
) = ScanningSetupStep.TestYourScanner(
205177
title = resourceProvider.getString(R.string.woopos_scanning_setup_test_scanner_title),
206178
message = resourceProvider.getString(R.string.woopos_scanning_setup_test_scanner_message),
207179
barcodeImageRes = R.drawable.ic_barcode,
208-
secondaryButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_back)
180+
secondaryButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_back),
181+
previousStep = previousStep
209182
)
210183

211184
private fun createScannerSetupSuccessStep() = ScanningSetupStep.ScannerSetupSuccess(
212185
title = resourceProvider.getString(R.string.woopos_scanning_setup_success_title),
213186
message = resourceProvider.getString(R.string.woopos_scanning_setup_success_message),
214-
moreInfoButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_more_information)
187+
moreInfoButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_more_information),
188+
previousStep = null
215189
)
216190

217-
private fun createScannerSetupInfoStep() = ScanningSetupStep.ScannerSetupInfo(
191+
private fun createScannerSetupInfoStep(previousStep: ScanningSetupStep) = ScanningSetupStep.ScannerSetupInfo(
218192
title = resourceProvider.getString(R.string.woopos_scanning_setup_info_title),
219193
message = resourceProvider.getString(R.string.woopos_scanning_setup_info_message),
220194
bulletPoints = listOf(
@@ -224,7 +198,8 @@ class WooPosScanningSetupViewModel @Inject constructor(
224198
),
225199
infoText = resourceProvider.getString(R.string.woopos_scanning_setup_info_text),
226200
backButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_back),
227-
doneButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_done)
201+
doneButtonText = resourceProvider.getString(R.string.woopos_scanning_setup_button_done),
202+
previousStep = previousStep
228203
)
229204

230205
private fun startAutoNavigationToSuccess() {
@@ -242,10 +217,3 @@ class WooPosScanningSetupViewModel @Inject constructor(
242217
private const val AUTO_NAVIGATION_DELAY_MS = 3000L
243218
}
244219
}
245-
246-
sealed class WooPosScanningSetupUiEvent {
247-
data object OnPrimaryButtonClicked : WooPosScanningSetupUiEvent()
248-
data object OnSecondaryButtonClicked : WooPosScanningSetupUiEvent()
249-
data object OnOpenBluetoothSettings : WooPosScanningSetupUiEvent()
250-
data class OnDeviceSelected(val device: BarcodeReaderDevice) : WooPosScanningSetupUiEvent()
251-
}

0 commit comments

Comments
 (0)