Skip to content

Commit 424543c

Browse files
committed
#1818 set up PRO mode and use error colors for buttons
1 parent 343923c commit 424543c

5 files changed

Lines changed: 213 additions & 144 deletions

File tree

base/src/main/java/io/github/sds100/keymapper/base/actions/GetActionErrorUseCase.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ class GetActionErrorUseCaseImpl @Inject constructor(
4949
if (Build.VERSION.SDK_INT >= Constants.SYSTEM_BRIDGE_MIN_API) {
5050
merge(
5151
systemBridgeConnectionManager.connectionState.drop(1).map { },
52-
preferenceRepository.get(Keys.isSystemBridgeUsed),
52+
preferenceRepository.get(Keys.keyEventActionsUseSystemBridge),
5353
)
5454
} else {
5555
emptyFlow()

base/src/main/java/io/github/sds100/keymapper/base/actions/keyevent/FixKeyEventActionBottomSheet.kt

Lines changed: 33 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package io.github.sds100.keymapper.base.actions.keyevent
22

33
import androidx.compose.animation.animateContentSize
4+
import androidx.compose.foundation.BorderStroke
45
import androidx.compose.foundation.layout.Arrangement
56
import androidx.compose.foundation.layout.Column
67
import androidx.compose.foundation.layout.ColumnScope
@@ -19,6 +20,8 @@ import androidx.compose.material.icons.rounded.Add
1920
import androidx.compose.material.icons.rounded.Keyboard
2021
import androidx.compose.material.icons.rounded.Remove
2122
import androidx.compose.material3.Button
23+
import androidx.compose.material3.ButtonDefaults
24+
import androidx.compose.material3.CardDefaults
2225
import androidx.compose.material3.ExperimentalMaterial3Api
2326
import androidx.compose.material3.Icon
2427
import androidx.compose.material3.MaterialTheme
@@ -43,11 +46,13 @@ import androidx.compose.ui.unit.dp
4346
import io.github.sds100.keymapper.base.R
4447
import io.github.sds100.keymapper.base.compose.KeyMapperTheme
4548
import io.github.sds100.keymapper.base.compose.LocalCustomColorsPalette
46-
import io.github.sds100.keymapper.base.trigger.AccessibilityServiceRequirementRow
47-
import io.github.sds100.keymapper.base.trigger.InputMethodRequirementRow
4849
import io.github.sds100.keymapper.base.trigger.ProModeStatus
50+
import io.github.sds100.keymapper.base.utils.ui.compose.AccessibilityServiceRequirementRow
4951
import io.github.sds100.keymapper.base.utils.ui.compose.CheckBoxText
5052
import io.github.sds100.keymapper.base.utils.ui.compose.HeaderText
53+
import io.github.sds100.keymapper.base.utils.ui.compose.InputMethodRequirementRow
54+
import io.github.sds100.keymapper.base.utils.ui.compose.ProModeRequirementRow
55+
import io.github.sds100.keymapper.base.utils.ui.compose.filledTonalButtonColorsError
5156
import io.github.sds100.keymapper.base.utils.ui.compose.icons.KeyMapperIcons
5257
import io.github.sds100.keymapper.base.utils.ui.compose.icons.ProModeIcon
5358

@@ -190,6 +195,7 @@ fun FixKeyEventActionBottomSheet(
190195
AccessibilityServiceRequirementRow(
191196
modifier = Modifier.fillMaxWidth(),
192197
isServiceEnabled = state.isAccessibilityServiceEnabled,
198+
buttonColors = ButtonDefaults.filledTonalButtonColorsError(),
193199
onClick = onEnableAccessibilityServiceClick,
194200
)
195201

@@ -200,6 +206,7 @@ fun FixKeyEventActionBottomSheet(
200206
isChosen = state.isChosen,
201207
isEnabled = state.isEnabled,
202208
enablingRequiresUserInput = state.enablingRequiresUserInput,
209+
buttonColors = ButtonDefaults.filledTonalButtonColorsError(),
203210
onEnableClick = onEnableInputMethodClick,
204211
onChooseClick = onChooseInputMethodClick,
205212
)
@@ -215,6 +222,13 @@ fun FixKeyEventActionBottomSheet(
215222
}
216223

217224
is FixKeyEventActionState.ProMode -> {
225+
ProModeRequirementRow(
226+
modifier = Modifier.fillMaxWidth(),
227+
isVisible = true,
228+
proModeStatus = state.proModeStatus,
229+
buttonColors = ButtonDefaults.filledTonalButtonColorsError(),
230+
onClick = onEnableProModeClick,
231+
)
218232
}
219233
}
220234

@@ -235,10 +249,24 @@ private fun FixKeyEventActionOptionCard(
235249
enabled: Boolean = true,
236250
content: @Composable ColumnScope.() -> Unit,
237251
) {
252+
val cardBorder = if (selected) {
253+
BorderStroke(2.dp, MaterialTheme.colorScheme.primary)
254+
} else {
255+
CardDefaults.outlinedCardBorder()
256+
}
257+
258+
val cardElevation = if (selected) {
259+
CardDefaults.outlinedCardElevation(defaultElevation = 1.dp)
260+
} else {
261+
CardDefaults.outlinedCardElevation()
262+
}
263+
238264
OutlinedCard(
239265
modifier = modifier.fillMaxWidth(),
240266
onClick = onClick,
241267
enabled = enabled,
268+
border = cardBorder,
269+
elevation = cardElevation
242270
) {
243271
Row(
244272
modifier = Modifier
@@ -306,7 +334,7 @@ private fun ProModePreview() {
306334
FixKeyEventActionBottomSheet(
307335
sheetState = sheetState,
308336
state = FixKeyEventActionState.ProMode(
309-
proModeStatus = ProModeStatus.ENABLED,
337+
proModeStatus = ProModeStatus.DISABLED,
310338
isAccessibilityServiceEnabled = true,
311339
),
312340
)
@@ -328,8 +356,8 @@ private fun ProModeUnsupportedPreview() {
328356
sheetState = sheetState,
329357
state = FixKeyEventActionState.InputMethod(
330358
proModeStatus = ProModeStatus.UNSUPPORTED,
331-
isEnabled = true,
332-
isChosen = true,
359+
isEnabled = false,
360+
isChosen = false,
333361
enablingRequiresUserInput = true,
334362
isAutoSwitchImeEnabled = false,
335363
isAccessibilityServiceEnabled = true,

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

Lines changed: 3 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,7 @@
22

33
package io.github.sds100.keymapper.base.trigger
44

5-
import androidx.compose.animation.AnimatedVisibility
65
import androidx.compose.animation.animateContentSize
7-
import androidx.compose.animation.core.tween
8-
import androidx.compose.animation.fadeIn
9-
import androidx.compose.animation.fadeOut
10-
import androidx.compose.animation.shrinkVertically
116
import androidx.compose.foundation.background
127
import androidx.compose.foundation.layout.Arrangement
138
import androidx.compose.foundation.layout.Box
@@ -26,11 +21,9 @@ import androidx.compose.foundation.verticalScroll
2621
import androidx.compose.material.icons.Icons
2722
import androidx.compose.material.icons.automirrored.outlined.VolumeUp
2823
import androidx.compose.material.icons.outlined.Mouse
29-
import androidx.compose.material.icons.rounded.Check
3024
import androidx.compose.material.icons.rounded.Fingerprint
3125
import androidx.compose.material.icons.rounded.Keyboard
3226
import androidx.compose.material3.Button
33-
import androidx.compose.material3.ButtonColors
3427
import androidx.compose.material3.ButtonDefaults
3528
import androidx.compose.material3.ExperimentalMaterial3Api
3629
import androidx.compose.material3.FilledTonalButton
@@ -61,9 +54,12 @@ import io.github.sds100.keymapper.base.R
6154
import io.github.sds100.keymapper.base.compose.KeyMapperTheme
6255
import io.github.sds100.keymapper.base.compose.LocalCustomColorsPalette
6356
import io.github.sds100.keymapper.base.system.accessibility.FingerprintGestureType
57+
import io.github.sds100.keymapper.base.utils.ui.compose.AccessibilityServiceRequirementRow
6458
import io.github.sds100.keymapper.base.utils.ui.compose.CheckBoxText
6559
import io.github.sds100.keymapper.base.utils.ui.compose.HeaderText
60+
import io.github.sds100.keymapper.base.utils.ui.compose.InputMethodRequirementRow
6661
import io.github.sds100.keymapper.base.utils.ui.compose.KeyMapperSegmentedButtonRow
62+
import io.github.sds100.keymapper.base.utils.ui.compose.ProModeRequirementRow
6763
import io.github.sds100.keymapper.base.utils.ui.compose.RadioButtonText
6864
import io.github.sds100.keymapper.base.utils.ui.compose.icons.IndeterminateQuestionBox
6965
import io.github.sds100.keymapper.base.utils.ui.compose.icons.KeyMapperIcons
@@ -806,110 +802,6 @@ fun RemapStatusRow(
806802
}
807803
}
808804

809-
@Composable
810-
private fun ProModeRequirementRow(
811-
modifier: Modifier = Modifier,
812-
isVisible: Boolean,
813-
proModeStatus: ProModeStatus,
814-
onClick: () -> Unit,
815-
) {
816-
AnimatedVisibility(
817-
visible = isVisible,
818-
enter = fadeIn(animationSpec = tween(200)),
819-
exit = fadeOut(animationSpec = tween(200)) + shrinkVertically(animationSpec = tween(200)),
820-
) {
821-
TriggerRequirementRow(
822-
modifier = modifier,
823-
text = stringResource(R.string.trigger_setup_pro_mode_title),
824-
) {
825-
if (proModeStatus == ProModeStatus.UNSUPPORTED) {
826-
Text(
827-
text = stringResource(R.string.trigger_setup_pro_mode_unsupported),
828-
color = MaterialTheme.colorScheme.error,
829-
style = MaterialTheme.typography.bodyMedium,
830-
)
831-
} else {
832-
TriggerRequirementButton(
833-
enabledText = stringResource(R.string.trigger_setup_pro_mode_enable_button),
834-
disabledText = stringResource(R.string.trigger_setup_pro_mode_running_button),
835-
isEnabled = proModeStatus != ProModeStatus.ENABLED,
836-
onClick = onClick,
837-
)
838-
}
839-
}
840-
}
841-
}
842-
843-
@Composable
844-
fun AccessibilityServiceRequirementRow(
845-
modifier: Modifier = Modifier,
846-
isServiceEnabled: Boolean,
847-
onClick: () -> Unit,
848-
) {
849-
TriggerRequirementRow(
850-
modifier = modifier,
851-
text = stringResource(R.string.trigger_setup_accessibility_service_title),
852-
) {
853-
TriggerRequirementButton(
854-
enabledText = stringResource(R.string.trigger_setup_accessibility_service_enable_button),
855-
disabledText = stringResource(R.string.trigger_setup_accessibility_service_running_button),
856-
isEnabled = !isServiceEnabled,
857-
onClick = onClick,
858-
)
859-
}
860-
}
861-
862-
@Composable
863-
fun InputMethodRequirementRow(
864-
modifier: Modifier = Modifier,
865-
isEnabled: Boolean,
866-
isChosen: Boolean,
867-
enablingRequiresUserInput: Boolean,
868-
onEnableClick: () -> Unit,
869-
onChooseClick: () -> Unit,
870-
) {
871-
TriggerRequirementRow(
872-
modifier = modifier,
873-
text = stringResource(R.string.trigger_setup_input_method_title),
874-
) {
875-
val enabledText = when {
876-
!isEnabled && enablingRequiresUserInput -> stringResource(R.string.trigger_setup_input_method_enable_button)
877-
!isChosen -> stringResource(R.string.trigger_setup_input_method_choose_button)
878-
else -> ""
879-
}
880-
881-
val disabledText = stringResource(R.string.trigger_setup_input_method_running_button)
882-
883-
TriggerRequirementButton(
884-
enabledText = enabledText,
885-
disabledText = disabledText,
886-
isEnabled = !isEnabled || !isChosen,
887-
onClick = if (!isEnabled && enablingRequiresUserInput) onEnableClick else onChooseClick,
888-
)
889-
}
890-
}
891-
892-
@Composable
893-
fun TriggerRequirementRow(
894-
modifier: Modifier = Modifier,
895-
text: String,
896-
actionContent: @Composable () -> Unit,
897-
) {
898-
Row(modifier = modifier, verticalAlignment = Alignment.CenterVertically) {
899-
Spacer(Modifier.width(8.dp))
900-
901-
Text(
902-
modifier = Modifier.weight(1f),
903-
text = text,
904-
style = MaterialTheme.typography.bodyLarge,
905-
)
906-
907-
Spacer(Modifier.width(8.dp))
908-
909-
actionContent()
910-
}
911-
}
912-
913805
@Composable
914806
fun TriggerRequirementsNotMetButton(modifier: Modifier = Modifier) {
915807
FilledTonalButton(modifier = modifier, onClick = {}, enabled = false) {
@@ -924,33 +816,6 @@ fun AddTriggerButton(modifier: Modifier = Modifier, onClick: () -> Unit) {
924816
}
925817
}
926818

927-
@Composable
928-
fun TriggerRequirementButton(
929-
modifier: Modifier = Modifier,
930-
enabledText: String,
931-
disabledText: String,
932-
isEnabled: Boolean,
933-
colors: ButtonColors = ButtonDefaults.filledTonalButtonColors(),
934-
onClick: () -> Unit,
935-
) {
936-
FilledTonalButton(
937-
modifier = modifier,
938-
onClick = onClick,
939-
enabled = isEnabled,
940-
colors = colors,
941-
) {
942-
if (isEnabled) {
943-
Text(text = enabledText)
944-
} else {
945-
Row(verticalAlignment = Alignment.CenterVertically) {
946-
Icon(Icons.Rounded.Check, contentDescription = null)
947-
Spacer(modifier = Modifier.width(8.dp))
948-
Text(text = disabledText)
949-
}
950-
}
951-
}
952-
}
953-
954819
@Composable
955820
fun TriggerSetupBottomSheet(
956821
modifier: Modifier = Modifier,
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.github.sds100.keymapper.base.utils.ui.compose
2+
3+
import androidx.compose.material3.ButtonColors
4+
import androidx.compose.material3.ButtonDefaults
5+
import androidx.compose.material3.MaterialTheme
6+
import androidx.compose.runtime.Composable
7+
8+
@Composable
9+
fun ButtonDefaults.filledTonalButtonColorsError(): ButtonColors {
10+
return ButtonDefaults.filledTonalButtonColors(
11+
containerColor = MaterialTheme.colorScheme.errorContainer,
12+
contentColor = MaterialTheme.colorScheme.onErrorContainer
13+
)
14+
}

0 commit comments

Comments
 (0)