Skip to content

Commit 340f0e4

Browse files
committed
#905 feat: show tip to use PRO mode for remapping caps lock key
1 parent d00fac0 commit 340f0e4

8 files changed

Lines changed: 114 additions & 70 deletions

File tree

app/src/main/java/io/github/sds100/keymapper/trigger/ConfigTriggerViewModel.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,13 +51,13 @@ class ConfigTriggerViewModel @Inject constructor(
5151

5252
override fun onEditFloatingLayoutClick() {}
5353

54-
override fun showTriggerSetup(shortcut: TriggerSetupShortcut) {
54+
override fun showTriggerSetup(shortcut: TriggerSetupShortcut, forceProMode: Boolean) {
5555
when (shortcut) {
5656
TriggerSetupShortcut.ASSISTANT -> viewModelScope.launch {
5757
navigateToAdvancedTriggers("purchase_assistant_trigger")
5858
}
5959

60-
else -> super.showTriggerSetup(shortcut)
60+
else -> super.showTriggerSetup(shortcut, forceProMode)
6161
}
6262
}
6363
}

base/src/main/java/io/github/sds100/keymapper/base/onboarding/OnboardingTipDelegate.kt

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ class OnboardingTipDelegateImpl @Inject constructor(
4848
private const val PARALLEL_TRIGGER_TIP_ID = "parallel_trigger_tip"
4949
private const val SEQUENCE_TRIGGER_TIP_ID = "sequence_trigger_tip"
5050
private const val TRIGGER_CONSTRAINTS_TIP_ID = "trigger_constraints_tip"
51-
const val CAPS_LOCK_TIP_ID = "caps_lock_tip"
51+
const val CAPS_LOCK_PRO_MODE_COMPATIBILITY_TIP_ID = "caps_lock_pro_mode_compatibility_tip"
5252
const val SCREEN_PINNING_TIP_ID = "screen_pinning_tip"
5353
const val IME_DETECTION_TIP_ID = "ime_detection_tip"
5454
const val RINGER_MODE_TIP_ID = "ringer_mode_tip"
@@ -72,8 +72,8 @@ class OnboardingTipDelegateImpl @Inject constructor(
7272
false,
7373
)
7474

75-
private var shownCapsLockTip: Boolean by PrefDelegate(
76-
Keys.shownCapsLockTip,
75+
private var shownCapsLockProModeTip: Boolean by PrefDelegate(
76+
Keys.shownCapsLockProModeTip,
7777
false,
7878
)
7979

@@ -126,8 +126,8 @@ class OnboardingTipDelegateImpl @Inject constructor(
126126
shownTriggerConstraintsTip = true
127127
}
128128

129-
CAPS_LOCK_TIP_ID -> {
130-
shownCapsLockTip = true
129+
CAPS_LOCK_PRO_MODE_COMPATIBILITY_TIP_ID -> {
130+
shownCapsLockProModeTip = true
131131
}
132132

133133
SCREEN_PINNING_TIP_ID -> {
@@ -225,12 +225,13 @@ class OnboardingTipDelegateImpl @Inject constructor(
225225
triggerTip.value = tipModel
226226
}
227227

228-
hasCapsLockKey && !shownCapsLockTip -> {
228+
hasCapsLockKey && !shownCapsLockProModeTip -> {
229229
val tip = OnboardingTipModel(
230-
id = CAPS_LOCK_TIP_ID,
231-
title = getString(R.string.tip_caps_lock_title),
232-
message = getString(R.string.tip_caps_lock_text),
230+
id = CAPS_LOCK_PRO_MODE_COMPATIBILITY_TIP_ID,
231+
title = getString(R.string.tip_caps_lock_pro_mode_title),
232+
message = getString(R.string.tip_caps_lock_pro_mode_text),
233233
isDismissable = true,
234+
buttonText = getString(R.string.tip_caps_lock_pro_mode_button),
234235
)
235236
triggerTip.value = tip
236237
}

base/src/main/java/io/github/sds100/keymapper/base/trigger/BaseConfigTriggerViewModel.kt

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import io.github.sds100.keymapper.base.keymaps.DisplayKeyMapUseCase
1313
import io.github.sds100.keymapper.base.keymaps.FingerprintGesturesSupportedUseCase
1414
import io.github.sds100.keymapper.base.keymaps.KeyMap
1515
import io.github.sds100.keymapper.base.onboarding.OnboardingTipDelegate
16+
import io.github.sds100.keymapper.base.onboarding.OnboardingTipDelegateImpl
1617
import io.github.sds100.keymapper.base.onboarding.OnboardingUseCase
1718
import io.github.sds100.keymapper.base.onboarding.SetupAccessibilityServiceDelegate
1819
import io.github.sds100.keymapper.base.shortcuts.CreateKeyMapShortcutUseCase
@@ -472,20 +473,26 @@ abstract class BaseConfigTriggerViewModel(
472473

473474
is RecordTriggerState.Completed,
474475
RecordTriggerState.Idle,
475-
-> recordTrigger.startRecording(enableEvdevRecording = false)
476+
-> recordTrigger.startRecording(enableEvdevRecording = false)
476477
}
477478

478479
// Show dialog if the accessibility service is disabled or crashed
479480
handleServiceEventResult(result)
480481
}
481482
}
482483

483-
suspend fun handleServiceEventResult(result: KMResult<*>) {
484+
fun handleServiceEventResult(result: KMResult<*>) {
484485
if (result is AccessibilityServiceError) {
485486
showFixAccessibilityServiceDialog(result)
486487
}
487488
}
488489

490+
override fun onTipButtonClick(tipId: String) {
491+
if (tipId == OnboardingTipDelegateImpl.CAPS_LOCK_PRO_MODE_COMPATIBILITY_TIP_ID) {
492+
showTriggerSetup(TriggerSetupShortcut.KEYBOARD, forceProMode = true)
493+
}
494+
}
495+
489496
open fun onTriggerErrorClick(error: TriggerError) {
490497
viewModelScope.launch {
491498
when (error) {

base/src/main/java/io/github/sds100/keymapper/base/trigger/TriggerSetupBottomSheet.kt

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ fun HandleTriggerSetupBottomSheet(
8484
onEnableAccessibilityServiceClick = delegate::onEnableAccessibilityServiceClick,
8585
onEnableProModeClick = delegate::onEnableProModeClick,
8686
onRecordTriggerClick = delegate::onTriggerSetupRecordClick,
87-
onScreenOffCheckedChange = delegate::onScreenOffTriggerSetupCheckedChange,
87+
onUseProModeCheckedChange = delegate::onUseProModeCheckedChange,
8888
)
8989

9090
is TriggerSetupState.Power -> PowerTriggerSetupBottomSheet(
@@ -112,7 +112,7 @@ fun HandleTriggerSetupBottomSheet(
112112
onEnableAccessibilityServiceClick = delegate::onEnableAccessibilityServiceClick,
113113
onEnableProModeClick = delegate::onEnableProModeClick,
114114
onRecordTriggerClick = delegate::onTriggerSetupRecordClick,
115-
onScreenOffCheckedChange = delegate::onScreenOffTriggerSetupCheckedChange,
115+
onUseProModeCheckedChange = delegate::onUseProModeCheckedChange,
116116
)
117117

118118
is TriggerSetupState.Mouse -> MouseTriggerSetupBottomSheet(
@@ -131,7 +131,7 @@ fun HandleTriggerSetupBottomSheet(
131131
onEnableAccessibilityServiceClick = delegate::onEnableAccessibilityServiceClick,
132132
onEnableProModeClick = delegate::onEnableProModeClick,
133133
onRecordTriggerClick = delegate::onTriggerSetupRecordClick,
134-
onScreenOffCheckedChange = delegate::onScreenOffTriggerSetupCheckedChange,
134+
onUseProModeCheckedChange = delegate::onUseProModeCheckedChange,
135135
)
136136

137137
is TriggerSetupState.NotDetected -> NotDetectedSetupBottomSheet(
@@ -152,7 +152,7 @@ fun HandleTriggerSetupBottomSheet(
152152
onRecordTriggerClick = delegate::onTriggerSetupRecordClick,
153153
onEnableInputMethodClick = delegate::onEnableImeClick,
154154
onChooseInputMethodClick = delegate::onChooseImeClick,
155-
onScreenOffCheckedChange = delegate::onScreenOffTriggerSetupCheckedChange,
155+
onUseProModeCheckedChange = delegate::onUseProModeCheckedChange,
156156
onEnableProModeClick = delegate::onEnableProModeClick,
157157
)
158158

@@ -173,7 +173,7 @@ private fun GamepadTriggerSetupBottomSheet(
173173
onEnableProModeClick: () -> Unit = {},
174174
onEnableInputMethodClick: () -> Unit = { },
175175
onChooseInputMethodClick: () -> Unit = { },
176-
onScreenOffCheckedChange: (Boolean) -> Unit = {},
176+
onUseProModeCheckedChange: (Boolean) -> Unit = {},
177177
) {
178178
TriggerSetupBottomSheet(
179179
modifier = modifier,
@@ -219,22 +219,22 @@ private fun GamepadTriggerSetupBottomSheet(
219219
onStateSelected = onSelectButtonType,
220220
)
221221

222-
val isScreenOffChecked = when (state) {
222+
val isUseProModeChecked = when (state) {
223223
is TriggerSetupState.Gamepad.Dpad -> false
224-
is TriggerSetupState.Gamepad.SimpleButtons -> state.isScreenOffChecked
224+
is TriggerSetupState.Gamepad.SimpleButtons -> state.isUseProModeChecked
225225
}
226226

227-
val isScreenOffEnabled = when (state) {
227+
val isUseProModeEnabled = when (state) {
228228
is TriggerSetupState.Gamepad.Dpad -> false
229229
is TriggerSetupState.Gamepad.SimpleButtons -> true
230230
}
231231

232232
CheckBoxText(
233233
modifier = Modifier.fillMaxWidth(),
234234
text = stringResource(R.string.trigger_setup_screen_off_option),
235-
isChecked = isScreenOffChecked,
236-
isEnabled = isScreenOffEnabled,
237-
onCheckedChange = onScreenOffCheckedChange,
235+
isChecked = isUseProModeChecked,
236+
isEnabled = isUseProModeEnabled,
237+
onCheckedChange = onUseProModeCheckedChange,
238238
)
239239

240240
HeaderText(text = stringResource(R.string.trigger_setup_requirements_title))
@@ -258,7 +258,7 @@ private fun GamepadTriggerSetupBottomSheet(
258258
is TriggerSetupState.Gamepad.SimpleButtons -> {
259259
ProModeRequirementRow(
260260
modifier = Modifier.fillMaxWidth(),
261-
isVisible = state.isScreenOffChecked,
261+
isVisible = state.isUseProModeChecked,
262262
proModeStatus = state.proModeStatus,
263263
onClick = onEnableProModeClick,
264264
)
@@ -425,7 +425,7 @@ private fun VolumeTriggerSetupBottomSheet(
425425
onEnableAccessibilityServiceClick: () -> Unit = {},
426426
onEnableProModeClick: () -> Unit = {},
427427
onRecordTriggerClick: () -> Unit = {},
428-
onScreenOffCheckedChange: (Boolean) -> Unit = {},
428+
onUseProModeCheckedChange: (Boolean) -> Unit = {},
429429
) {
430430
TriggerSetupBottomSheet(
431431
modifier = modifier,
@@ -457,9 +457,9 @@ private fun VolumeTriggerSetupBottomSheet(
457457
CheckBoxText(
458458
modifier = Modifier.fillMaxWidth(),
459459
text = stringResource(R.string.trigger_setup_screen_off_option),
460-
isChecked = state.isScreenOffChecked,
461-
isEnabled = true,
462-
onCheckedChange = onScreenOffCheckedChange,
460+
isChecked = state.isUseProModeChecked,
461+
isEnabled = !state.forceProMode,
462+
onCheckedChange = onUseProModeCheckedChange,
463463
)
464464

465465
HeaderText(text = stringResource(R.string.trigger_setup_requirements_title))
@@ -470,7 +470,7 @@ private fun VolumeTriggerSetupBottomSheet(
470470
)
471471

472472
ProModeRequirementRow(
473-
isVisible = state.isScreenOffChecked,
473+
isVisible = state.isUseProModeChecked,
474474
proModeStatus = state.proModeStatus,
475475
onClick = onEnableProModeClick,
476476
)
@@ -571,7 +571,7 @@ private fun OtherTriggerSetupBottomSheet(
571571
onEnableAccessibilityServiceClick: () -> Unit = {},
572572
onEnableProModeClick: () -> Unit = {},
573573
onRecordTriggerClick: () -> Unit = {},
574-
onScreenOffCheckedChange: (Boolean) -> Unit = {},
574+
onUseProModeCheckedChange: (Boolean) -> Unit = {},
575575
) {
576576
TriggerSetupBottomSheet(
577577
modifier = modifier,
@@ -603,9 +603,9 @@ private fun OtherTriggerSetupBottomSheet(
603603
CheckBoxText(
604604
modifier = Modifier.fillMaxWidth(),
605605
text = stringResource(R.string.trigger_setup_screen_off_option),
606-
isChecked = state.isScreenOffChecked,
607-
isEnabled = true,
608-
onCheckedChange = onScreenOffCheckedChange,
606+
isChecked = state.isUseProModeChecked,
607+
isEnabled = !state.forceProMode,
608+
onCheckedChange = onUseProModeCheckedChange,
609609
)
610610

611611
HeaderText(text = stringResource(R.string.trigger_setup_requirements_title))
@@ -616,7 +616,7 @@ private fun OtherTriggerSetupBottomSheet(
616616
)
617617

618618
ProModeRequirementRow(
619-
isVisible = state.isScreenOffChecked,
619+
isVisible = state.isUseProModeChecked,
620620
proModeStatus = state.proModeStatus,
621621
onClick = onEnableProModeClick,
622622
)
@@ -655,7 +655,7 @@ private fun KeyboardTriggerSetupBottomSheet(
655655
onEnableAccessibilityServiceClick: () -> Unit = {},
656656
onEnableProModeClick: () -> Unit = {},
657657
onRecordTriggerClick: () -> Unit = {},
658-
onScreenOffCheckedChange: (Boolean) -> Unit = {},
658+
onUseProModeCheckedChange: (Boolean) -> Unit = {},
659659
) {
660660
TriggerSetupBottomSheet(
661661
modifier = modifier,
@@ -687,9 +687,9 @@ private fun KeyboardTriggerSetupBottomSheet(
687687
CheckBoxText(
688688
modifier = Modifier.fillMaxWidth(),
689689
text = stringResource(R.string.trigger_setup_screen_off_option),
690-
isChecked = state.isScreenOffChecked,
691-
isEnabled = true,
692-
onCheckedChange = onScreenOffCheckedChange,
690+
isChecked = state.isUseProModeChecked,
691+
isEnabled = !state.forceProMode,
692+
onCheckedChange = onUseProModeCheckedChange,
693693
)
694694

695695
HeaderText(text = stringResource(R.string.trigger_setup_requirements_title))
@@ -700,7 +700,7 @@ private fun KeyboardTriggerSetupBottomSheet(
700700
)
701701

702702
ProModeRequirementRow(
703-
isVisible = state.isScreenOffChecked,
703+
isVisible = state.isUseProModeChecked,
704704
proModeStatus = state.proModeStatus,
705705
onClick = onEnableProModeClick,
706706
)
@@ -962,10 +962,11 @@ private fun VolumeButtonPreview() {
962962
sheetState = sheetState,
963963
state = TriggerSetupState.Volume(
964964
isAccessibilityServiceEnabled = true,
965-
isScreenOffChecked = true,
965+
isUseProModeChecked = true,
966966
proModeStatus = ProModeStatus.ENABLED,
967967
areRequirementsMet = true,
968968
recordTriggerState = RecordTriggerState.Idle,
969+
forceProMode = false,
969970
),
970971
)
971972
}
@@ -986,10 +987,11 @@ private fun VolumeButtonDisabledPreview() {
986987
sheetState = sheetState,
987988
state = TriggerSetupState.Volume(
988989
isAccessibilityServiceEnabled = false,
989-
isScreenOffChecked = true,
990+
isUseProModeChecked = true,
990991
proModeStatus = ProModeStatus.DISABLED,
991992
areRequirementsMet = false,
992993
recordTriggerState = RecordTriggerState.Idle,
994+
forceProMode = false,
993995
),
994996
)
995997
}
@@ -1054,10 +1056,11 @@ private fun KeyboardButtonEnabledPreview() {
10541056
sheetState = sheetState,
10551057
state = TriggerSetupState.Keyboard(
10561058
isAccessibilityServiceEnabled = true,
1057-
isScreenOffChecked = false,
1059+
isUseProModeChecked = false,
10581060
proModeStatus = ProModeStatus.DISABLED,
10591061
areRequirementsMet = true,
10601062
recordTriggerState = RecordTriggerState.Idle,
1063+
forceProMode = false,
10611064
),
10621065
)
10631066
}
@@ -1078,10 +1081,11 @@ private fun KeyboardButtonDisabledPreview() {
10781081
sheetState = sheetState,
10791082
state = TriggerSetupState.Keyboard(
10801083
isAccessibilityServiceEnabled = false,
1081-
isScreenOffChecked = true,
1084+
isUseProModeChecked = true,
10821085
proModeStatus = ProModeStatus.DISABLED,
10831086
areRequirementsMet = false,
10841087
recordTriggerState = RecordTriggerState.Idle,
1088+
forceProMode = false,
10851089
),
10861090
)
10871091
}
@@ -1150,10 +1154,11 @@ private fun OtherButtonPreview() {
11501154
sheetState = sheetState,
11511155
state = TriggerSetupState.Other(
11521156
isAccessibilityServiceEnabled = true,
1153-
isScreenOffChecked = true,
1157+
isUseProModeChecked = true,
11541158
proModeStatus = ProModeStatus.ENABLED,
11551159
areRequirementsMet = true,
11561160
recordTriggerState = RecordTriggerState.Idle,
1161+
forceProMode = false,
11571162
),
11581163
)
11591164
}
@@ -1174,10 +1179,11 @@ private fun OtherButtonDisabledPreview() {
11741179
sheetState = sheetState,
11751180
state = TriggerSetupState.Other(
11761181
isAccessibilityServiceEnabled = false,
1177-
isScreenOffChecked = true,
1182+
isUseProModeChecked = true,
11781183
proModeStatus = ProModeStatus.DISABLED,
11791184
areRequirementsMet = false,
11801185
recordTriggerState = RecordTriggerState.Idle,
1186+
forceProMode = false,
11811187
),
11821188
)
11831189
}
@@ -1248,10 +1254,11 @@ private fun GamepadSimpleButtonsPreview() {
12481254
sheetState = sheetState,
12491255
state = TriggerSetupState.Gamepad.SimpleButtons(
12501256
isAccessibilityServiceEnabled = true,
1251-
isScreenOffChecked = true,
1257+
isUseProModeChecked = true,
12521258
proModeStatus = ProModeStatus.ENABLED,
12531259
areRequirementsMet = true,
12541260
recordTriggerState = RecordTriggerState.Idle,
1261+
forceProMode = false,
12551262
),
12561263
)
12571264
}
@@ -1272,10 +1279,11 @@ private fun GamepadSimpleButtonsDisabledPreview() {
12721279
sheetState = sheetState,
12731280
state = TriggerSetupState.Gamepad.SimpleButtons(
12741281
isAccessibilityServiceEnabled = false,
1275-
isScreenOffChecked = false,
1282+
isUseProModeChecked = false,
12761283
proModeStatus = ProModeStatus.DISABLED,
12771284
areRequirementsMet = false,
12781285
recordTriggerState = RecordTriggerState.Idle,
1286+
forceProMode = false,
12791287
),
12801288
)
12811289
}

0 commit comments

Comments
 (0)