Skip to content

Commit 9d7c8d2

Browse files
committed
#1577 Move unsupported actions to the bottom of the list and do not allow selecting root actions if root permission is not granted.
1 parent 85edf19 commit 9d7c8d2

File tree

7 files changed

+47
-10
lines changed

7 files changed

+47
-10
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ _See the changes from previous 3.0 Beta releases as well._
88

99
- #1560 Action to change flashlight brightness and also set a custom brightness when enabling the flashlight.
1010

11+
## Changed
12+
13+
- #1577 Move unsupported actions to the bottom of the list and do not allow selecting root actions if root permission is not granted.
14+
1115
## Bug fixes
1216

1317
- #1585 Track changes when editing key maps and only prompt to discard changes if there were indeed changes.

app/src/main/java/io/github/sds100/keymapper/UseCases.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -195,6 +195,7 @@ object UseCases {
195195
ServiceLocator.inputMethodAdapter(ctx),
196196
ServiceLocator.systemFeatureAdapter(ctx),
197197
ServiceLocator.cameraAdapter(ctx),
198+
ServiceLocator.permissionAdapter(ctx),
198199
)
199200

200201
private fun keyMapperImeMessenger(

app/src/main/java/io/github/sds100/keymapper/actions/ActionErrorSnapshot.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,11 @@ class LazyActionErrorSnapshot(
2323
private val soundsManager: SoundsManager,
2424
shizukuAdapter: ShizukuAdapter,
2525
) : ActionErrorSnapshot,
26-
IsActionSupportedUseCase by IsActionSupportedUseCaseImpl(systemFeatureAdapter, cameraAdapter) {
26+
IsActionSupportedUseCase by IsActionSupportedUseCaseImpl(
27+
systemFeatureAdapter,
28+
cameraAdapter,
29+
permissionAdapter,
30+
) {
2731
private val keyMapperImeHelper = KeyMapperImeHelper(inputMethodAdapter)
2832

2933
private val isCompatibleImeEnabled by lazy { keyMapperImeHelper.isCompatibleImeEnabled() }

app/src/main/java/io/github/sds100/keymapper/actions/ChooseActionViewModel.kt

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import androidx.lifecycle.ViewModelProvider
55
import androidx.lifecycle.viewModelScope
66
import io.github.sds100.keymapper.R
77
import io.github.sds100.keymapper.system.permissions.Permission
8+
import io.github.sds100.keymapper.util.Error
89
import io.github.sds100.keymapper.util.State
910
import io.github.sds100.keymapper.util.containsQuery
1011
import io.github.sds100.keymapper.util.getFullMessage
@@ -99,14 +100,26 @@ class ChooseActionViewModel(
99100
}
100101

101102
private fun buildListGroups(): List<SimpleListItemGroup> = buildList {
102-
CATEGORY_ORDER.forEach { category ->
103+
val listItems = buildListItems(ActionId.entries)
103104

105+
for (category in CATEGORY_ORDER) {
104106
val header = getString(ActionUtils.getCategoryLabel(category))
105107

106-
val actionIds = ActionId.entries.filter { ActionUtils.getCategory(it) == category }
107-
108-
add(SimpleListItemGroup(header, buildListItems(actionIds)))
108+
val group = SimpleListItemGroup(
109+
header,
110+
items = listItems.filter {
111+
it.isEnabled &&
112+
ActionUtils.getCategory(ActionId.valueOf(it.id)) == category
113+
},
114+
)
115+
add(group)
109116
}
117+
118+
val unsupportedGroup = SimpleListItemGroup(
119+
header = getString(R.string.choose_action_group_unsupported),
120+
items = listItems.filter { !it.isEnabled },
121+
)
122+
add(unsupportedGroup)
110123
}
111124

112125
private fun buildListItems(
@@ -119,12 +132,9 @@ class ChooseActionViewModel(
119132
val title = getString(ActionUtils.getTitle(actionId))
120133
val icon = ActionUtils.getComposeIcon(actionId)
121134

122-
val requiresRoot = ActionUtils.getRequiredPermissions(actionId)
123-
.contains(Permission.ROOT)
124-
125135
val subtitle = when {
136+
error == Error.PermissionDenied(Permission.ROOT) -> getString(R.string.choose_action_warning_requires_root)
126137
error != null -> error.getFullMessage(this@ChooseActionViewModel)
127-
requiresRoot -> getString(R.string.choose_action_warning_requires_root)
128138
else -> null
129139
}
130140

app/src/main/java/io/github/sds100/keymapper/actions/CreateActionUseCase.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import io.github.sds100.keymapper.system.camera.CameraFlashInfo
55
import io.github.sds100.keymapper.system.camera.CameraLens
66
import io.github.sds100.keymapper.system.inputmethod.ImeInfo
77
import io.github.sds100.keymapper.system.inputmethod.InputMethodAdapter
8+
import io.github.sds100.keymapper.system.permissions.PermissionAdapter
89
import io.github.sds100.keymapper.system.permissions.SystemFeatureAdapter
910
import kotlinx.coroutines.flow.Flow
1011
import kotlinx.coroutines.flow.first
@@ -18,8 +19,13 @@ class CreateActionUseCaseImpl(
1819
private val inputMethodAdapter: InputMethodAdapter,
1920
private val systemFeatureAdapter: SystemFeatureAdapter,
2021
private val cameraAdapter: CameraAdapter,
22+
private val permissionAdapter: PermissionAdapter,
2123
) : CreateActionUseCase,
22-
IsActionSupportedUseCase by IsActionSupportedUseCaseImpl(systemFeatureAdapter, cameraAdapter) {
24+
IsActionSupportedUseCase by IsActionSupportedUseCaseImpl(
25+
systemFeatureAdapter,
26+
cameraAdapter,
27+
permissionAdapter,
28+
) {
2329
override suspend fun getInputMethods(): List<ImeInfo> = inputMethodAdapter.inputMethods.first()
2430

2531
override fun getFlashlightLenses(): Set<CameraLens> {

app/src/main/java/io/github/sds100/keymapper/actions/IsActionSupportedUseCase.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,15 @@ import android.content.pm.PackageManager
44
import android.os.Build
55
import io.github.sds100.keymapper.system.camera.CameraAdapter
66
import io.github.sds100.keymapper.system.camera.CameraLens
7+
import io.github.sds100.keymapper.system.permissions.Permission
8+
import io.github.sds100.keymapper.system.permissions.PermissionAdapter
79
import io.github.sds100.keymapper.system.permissions.SystemFeatureAdapter
810
import io.github.sds100.keymapper.util.Error
911

1012
class IsActionSupportedUseCaseImpl(
1113
private val adapter: SystemFeatureAdapter,
1214
private val cameraAdapter: CameraAdapter,
15+
private val permissionAdapter: PermissionAdapter,
1316
) : IsActionSupportedUseCase {
1417

1518
override fun isSupported(id: ActionId): Error? {
@@ -49,6 +52,13 @@ class IsActionSupportedUseCaseImpl(
4952
}
5053
}
5154

55+
if (ActionUtils.getRequiredPermissions(id)
56+
.contains(Permission.ROOT) &&
57+
!permissionAdapter.isGranted(Permission.ROOT)
58+
) {
59+
return Error.PermissionDenied(Permission.ROOT)
60+
}
61+
5262
return null
5363
}
5464
}

app/src/main/res/values/strings.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1402,6 +1402,8 @@
14021402
<string name="action_config_flashlight_brightness_unsupported">This flash does not let you change the brightness.</string>
14031403
<string name="action_config_flashlight_brightness_factor">Brightness change</string>
14041404

1405+
<string name="choose_action_group_unsupported">Unsupported</string>
1406+
14051407
<!-- Constraint screen -->
14061408
<string name="constraints_recyclerview_placeholder">Add constraints if you want key maps to only work in some situations.</string>
14071409
<string name="recently_used_constraints">Recently used constraints</string>

0 commit comments

Comments
 (0)