Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
87 commits
Select commit Hold shift + click to select a range
c7dad5a
fix: bottom sheet Compose previews work again.
sds100 Sep 14, 2026
3e4184e
fix: bottom sheet Compose previews work again.
sds100 Sep 14, 2026
2837e3a
update Compose BOM
sds100 Sep 14, 2026
7771181
update Compose BOM
sds100 Sep 14, 2026
904dafc
Merge branch 'develop' into feature/701-new-action-screen
sds100 Sep 14, 2026
8ef90be
Revert "fix: bottom sheet Compose previews work again."
sds100 Sep 15, 2026
4345098
fix: show previews for bottom sheets and dialogs by specifying showSy…
sds100 Sep 15, 2026
7e533e5
#701 feat: implement new design for action options bottom sheet and y…
sds100 Sep 15, 2026
c0beaa3
Merge branch 'develop' into feature/701-new-action-screen
sds100 Sep 15, 2026
1f9fa58
#701 feat: actions screen is overhauled
sds100 Sep 15, 2026
14af216
update changelog
sds100 Sep 15, 2026
b365690
fix drag and drop of actions in the list
sds100 Sep 15, 2026
b6982f0
fix changelog
sds100 Sep 15, 2026
1ce72a9
bump version code
sds100 Sep 15, 2026
cfe8542
Merge branch 'feature/701-new-action-screen' into develop-4.5
sds100 Sep 15, 2026
21cdfab
bump version code to 4.5
sds100 Sep 15, 2026
b4c1cd8
fix padding in ActionsScreen and ActionListItem
sds100 Sep 17, 2026
e613e9d
tweak animation of expanding action list item
sds100 Sep 17, 2026
c1daa10
create reusable CompactButton composable
sds100 Sep 17, 2026
d76e606
Merge branch 'develop-4.5' into feature/752-new-constraints-screen
sds100 Sep 17, 2026
d2b5f05
#752 feat: overhaul constraints with groups
sds100 Sep 17, 2026
19a5083
#752 adapt constraints screen to smaller screens
sds100 Sep 17, 2026
ef586d9
#752 use error icon instead of Fix text for medium sized constraint l…
sds100 Sep 17, 2026
d90bbd4
#752 share same expandable-collapsible card layout between actions an…
sds100 Sep 17, 2026
e120b31
Merge branch 'feature/752-new-constraints-screen' into develop-4.5
sds100 Sep 17, 2026
ae1f8cf
#1479 feat: duplicate actions
sds100 Sep 17, 2026
0c279f8
fix: make buttons on expanded action horizontally scrollable
sds100 Sep 17, 2026
a178083
fix: animate constraint group item header when expanding/collapsing
sds100 Sep 17, 2026
e03b541
fix: use horizontal scroll for icon buttons in constraint group and a…
sds100 Sep 17, 2026
91143a2
#2139 #1987 feat: color code groups if there are errors or disabled
sds100 Sep 17, 2026
1a329ff
#2246 feat: adjust padding and font size in trigger screen to match t…
sds100 Sep 18, 2026
06f8524
fix: do not crash if permission not granted for in phone call constra…
sds100 Sep 18, 2026
72d3051
#2250 feat: key map options screen redesign
sds100 Sep 18, 2026
eb76c27
fix padding in TriggerKeyListItem
sds100 Sep 18, 2026
6710fac
#1501 feat: new action to cycle through your enabled keyboards
sds100 Sep 18, 2026
604647e
fix running mockito tests on JDK 25 bundled with Android Studio
sds100 Sep 18, 2026
0ef35ee
Merge branch 'feature/1501-cycle-keyboard-action' into develop-4.5
sds100 Sep 18, 2026
eb758a2
refactor: move AndroidNotificationAdapter to system module and use th…
sds100 Sep 18, 2026
98caeb4
gitignore .kotlin folder
sds100 Sep 18, 2026
aaac5b7
feat: set constraint group mode as OR by default
sds100 Sep 19, 2026
7b75a62
#1341 feat: new constraint for when a notification from a specific ap…
sds100 Sep 19, 2026
2d042ab
Merge branch 'feature/1341-notification-constraint' into develop-4.5
sds100 Sep 19, 2026
e620f6e
use delete icon in trigger key list item
sds100 Sep 19, 2026
40c7d9f
grey out the action delay button when it is disabled
sds100 Sep 19, 2026
13c1408
fix: allow clearing action and constraint group names
sds100 Sep 19, 2026
e4447c2
fix: grey out drawable icons in disabled groups
sds100 Sep 19, 2026
9f7d125
fix: grey out drawable icons in key map list disabled actions and con…
sds100 Sep 19, 2026
25615ba
fix: do not animate a DraggableItem every time the list is drawn
sds100 Sep 19, 2026
8e9502b
fix: handle action list item expanded state in view model
sds100 Sep 19, 2026
11816dc
tell Claude to run ktlint format before check
sds100 Sep 19, 2026
19baeb9
fix: constraint groups remember whether they are expanded and auto ex…
sds100 Sep 20, 2026
cb11286
replace new screen off switch with the old tip card in key map options
sds100 Sep 20, 2026
5d9e406
use different icons for Enable/disable by intent and trigger by inten…
sds100 Sep 20, 2026
033eac3
#2249 feat: if all the keys are Internal or Any, then do not show any…
sds100 Sep 20, 2026
07f9654
#2249 feat: remove "Tap actions to fix!, Tap constraints to fix!" and…
sds100 Sep 20, 2026
8c3f04e
fix animation bugs with action and constraint group list items
sds100 Sep 20, 2026
b664d9b
#2258 fix: remember saved position in key map list when changing them…
sds100 Sep 20, 2026
82480bd
replace group constraints AND/OR switcher with segmented buttons inst…
sds100 Sep 20, 2026
829bd42
#2259 feat: all key maps can now be triggered by intent or shortcut w…
sds100 Sep 20, 2026
4089a37
#752 do not allow reordering constraints within a group
sds100 Sep 20, 2026
6fe5474
#752 allow switching NOT state of key map group constraints
sds100 Sep 20, 2026
e1d61c1
do not show whats new app bar button in group screens
sds100 Sep 20, 2026
15ae627
reduce padding on button in slider option
sds100 Sep 20, 2026
500edb9
only emit value change from SliderOptionText when it is stopped dragging
sds100 Sep 20, 2026
d260879
#982 feat: create vibrate action and select predefined vibration mode…
sds100 Sep 20, 2026
a88e196
change icon for Enable/disable by intent button
sds100 Sep 20, 2026
04bf92f
use more sensible names for NOT versions of phone ringing constraints
sds100 Sep 20, 2026
68b6fc5
#2167 fix: do not show errors for app not in foreground constraint wh…
sds100 Sep 20, 2026
08ada4e
move 4.4.1 changelog to 4.5.0
sds100 Sep 20, 2026
00c50f3
#2249 feat: use simple Fix button on key map list item instead of err…
sds100 Sep 20, 2026
b0e3cd2
fix: only show Fix button on key map if there are errors
sds100 Sep 20, 2026
520fed3
always allow users to play with key map vibration settings. Never dis…
sds100 Sep 20, 2026
3a19437
use different icon for whats new app bar icon
sds100 Sep 20, 2026
6d29d09
tap group constraints to invert them with a hint and add new fix butt…
sds100 Sep 20, 2026
fc64a0c
#2262 fix: request local network access permission for HTTP request a…
sds100 Sep 20, 2026
ca4e12d
#2261 fix: show the app's saved name instead of a generic label or ra…
sds100 Sep 21, 2026
a9e02da
use a fork of setup-android github action plugin
sds100 Sep 21, 2026
4d0412f
fix: use different colors for group constraint mode switcher
sds100 Sep 21, 2026
bb8a30b
use v4 of setup-android github action
sds100 Sep 21, 2026
af6a389
use v5 of setup-java github action
sds100 Sep 21, 2026
340c9bf
fix: show constraint groups in key map list item
sds100 Sep 21, 2026
8bbb689
fix tests
sds100 Sep 21, 2026
27e5496
use filled icon for whats new button in app bar
sds100 Sep 21, 2026
184a484
use less padding in whats new dialog
sds100 Sep 21, 2026
20e942a
write whats new
sds100 Sep 21, 2026
d1ff474
add more padding to spotlight cards in WhatsNewDialog
sds100 Sep 21, 2026
ac23895
gitignore .kotlin directory properly
sds100 Sep 21, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -102,14 +102,14 @@ jobs:
${{ runner.os }}-gradle-
- name: set up JDK 21
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'oracle'
java-version: 21
cache: 'gradle'

- name: Setup Android SDK
uses: android-actions/setup-android@v2
uses: android-actions/setup-android@v4
with:
ndk-version: "27.2.12479018"

Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -114,14 +114,14 @@ jobs:
value: ${{ github.run_number }}

- name: set up JDK 21
uses: actions/setup-java@v4
uses: actions/setup-java@v5
with:
distribution: 'oracle'
java-version: 21
cache: 'gradle'

- name: Setup Android SDK
uses: android-actions/setup-android@v2
uses: android-actions/setup-android@v4
with:
ndk-version: "27.2.12479018"

Expand Down
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,5 @@ app/.env

evdev/build
evdev/.cxx
evdev/src/main/rust/*/target
evdev/src/main/rust/*/target
.kotlin/*
31 changes: 30 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,40 @@
## [4.4.1](https://github.com/sds100/KeyMapper/releases/tag/v4.4.1)
## [4.5.0](https://github.com/sds100/KeyMapper/releases/tag/v4.5.0)

#### TO BE RELEASED

## Added

- #1341 new constraint for when a notification from a specific app, or with a specific title or text, is posted.
- #1501 new action to cycle through your enabled keyboards.
- #2250 redesigned the key map options screen with in-app guides for triggering and enabling/disabling a key map by intent.
- #701 new action options bottom sheet design.
- #701 you can now give custom names to actions, to make it easier to identify key maps.
- #701 redesigned the action list with expandable action cards that show each option and error.
- #1465 actions can be turned off individually without deleting them.
- #1479 you can now duplicate an action from the action list.
- #701 the delay before the next action is now set with a button between actions instead of in the action options.
- Redesigned the action options with grouped repeat, burst, hold down and delay sections.
- #752 Constraints can be organised into groups that each have their own AND/OR mode, and the groups are combined with AND or OR.
- #752 Constraint groups can be given a custom name.
- #752 Any constraint can be inverted.
- #752 Redesigned the constraints screen with expandable constraint group cards.
- #2139 color code disabled/enabled groups.
- #1987 groups are red if any key maps inside have errors.
- #2246 adjusted the trigger screen design to match the action and constraint screens.
- #2249 make key maps more compact in the home screen.
- #2259 all key maps can now be triggered by intent or shortcut without needing to enable it first.
- #982 new action to vibrate the device with a custom duration or a predefined haptic effect (Click, Double Click, Heavy Click, Tick).
- #982 the "vibrate on trigger" key map option can now also be customised with a predefined haptic effect instead of just a duration, via a new settings button next to the Vibrate option.
- #2243 Redesigned What's New dialog.

## Fixed

- Do not crash if permission not granted for in phone call constraint and trying to perform key map.
- #2258 remember saved position in key map list when changing them. Do not flash with loading indicator briefly as well.
- #2167 do not show errors for app not in foreground constraint when the app is uninstalled/disabled.
- #2262 request local network access permission for HTTP request action on Android 17+.
- #2261 show the app's saved name instead of a generic label or raw package name for app-related constraints and actions when the app has been uninstalled.

## [4.4.0](https://github.com/sds100/KeyMapper/releases/tag/v4.4.0)

#### 12 September 2026
Expand Down
5 changes: 3 additions & 2 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,9 @@ Android app for custom key/gamepad remapping, macros, and on-screen buttons. Sup
./gradlew :base:testDebugUnitTest # single module

# Kotlin lint
./gradlew ktlintCheck # check
./gradlew ktlintFormat # auto-fix
# First run format before doing check
./gradlew ktlintFormat
./gradlew ktlintCheck

# Rust (run from evdev/src/main/rust/evdev_manager)
cargo fmt --check
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import io.github.sds100.keymapper.base.trigger.TriggerSetupShortcut
import io.github.sds100.keymapper.base.utils.navigation.NavigationProvider
import io.github.sds100.keymapper.base.utils.ui.DialogProvider
import io.github.sds100.keymapper.base.utils.ui.ResourceProvider
import io.github.sds100.keymapper.base.vibration.VibrateConfigDelegate
import io.github.sds100.keymapper.sysbridge.manager.SystemBridgeConnectionManager
import javax.inject.Inject
import kotlinx.coroutines.launch
Expand All @@ -32,6 +33,7 @@ class ConfigTriggerViewModel @Inject constructor(
setupAccessibilityServiceDelegate: SetupAccessibilityServiceDelegate,
onboardingTipDelegate: OnboardingTipDelegate,
triggerSetupDelegate: TriggerSetupDelegate,
vibrateConfigDelegate: VibrateConfigDelegate,
resourceProvider: ResourceProvider,
navigationProvider: NavigationProvider,
dialogProvider: DialogProvider,
Expand All @@ -46,6 +48,7 @@ class ConfigTriggerViewModel @Inject constructor(
systemBridgeConnectionManager = systemBridgeConnectionManager,
onboardingTipDelegate = onboardingTipDelegate,
triggerSetupDelegate = triggerSetupDelegate,
vibrateConfigDelegate = vibrateConfigDelegate,
resourceProvider = resourceProvider,
navigationProvider = navigationProvider,
dialogProvider = dialogProvider,
Expand Down
4 changes: 2 additions & 2 deletions app/version.properties
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
VERSION_NAME=4.4.1
VERSION_CODE=265
VERSION_NAME=4.5.0
VERSION_CODE=269
1 change: 0 additions & 1 deletion base/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,6 @@ dependencies {
testImplementation(libs.junit.params)
testImplementation(libs.mockito.kotlin)
testImplementation(libs.mockito.core)
testImplementation(libs.mockito.inline)
testDebugImplementation(libs.androidx.fragment.testing)

// Dependencies for Android instrumented tests
Expand Down
15 changes: 7 additions & 8 deletions base/src/main/assets/whats-new-app.txt
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
+ Cycle keyboard language action | Switch between your keyboard's languages with a key press
+ Sort key maps by enabled/disabled
+ Custom seek amount for media step actions
+ Export/import key maps on Android TV
+ "Reduce app killing" tips for Xiaomi/Redmi/Poco devices
* Screen tap/swipe/pinch actions now scale to display resolution
- Fix some crashes when auto starting Expert Mode
- Many other bug fixes and improvements
! Group constraints | Organize constraints into groups with their own AND/OR logic
! Vibrate action | New action with custom duration or haptic effects like Click and Tick
+ • Cycle enabled keyboards action
+ • Notification constraint
* • Turn off, duplicate and rename actions
* • Redesigned action, constraint and trigger screens
- • Many other bug fixes and improvements
13 changes: 5 additions & 8 deletions base/src/main/assets/whats-new.txt
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
• "Reduce app killing" tips for Xiaomi/Redmi/Poco devices
• Sort key maps by enabled/disabled
• Cycle keyboard language action
• Custom seek amount for media step actions
• Export/import key maps on Android TV
• Fix some crashes when auto starting Expert Mode
• Fix shell commands failing with Windows line endings
• Screen tap/swipe/pinch actions now scale to display resolution
• Group constraints with their own AND/OR logic
• New vibrate action with custom duration or haptic effects
• Cycle enabled keyboards action
• Notification constraint
• Turn off, duplicate and rename actions
• Many other bug fixes and improvements

📖 View the complete changelog at: http://keymapper.app/changelog
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavHostController
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.toRoute
import io.github.sds100.keymapper.base.actions.ChooseActionScreen
import io.github.sds100.keymapper.base.actions.ChooseActionViewModel
import io.github.sds100.keymapper.base.actions.ChooseSettingScreen
Expand All @@ -25,10 +26,14 @@ import io.github.sds100.keymapper.base.actions.uielement.InteractUiElementScreen
import io.github.sds100.keymapper.base.actions.uielement.InteractUiElementViewModel
import io.github.sds100.keymapper.base.constraints.ChooseConstraintScreen
import io.github.sds100.keymapper.base.constraints.ChooseConstraintViewModel
import io.github.sds100.keymapper.base.constraints.ConfigNotificationConstraintScreen
import io.github.sds100.keymapper.base.constraints.ConfigNotificationConstraintViewModel
import io.github.sds100.keymapper.base.debug.GetEventScreen
import io.github.sds100.keymapper.base.expertmode.ExpertModeScreen
import io.github.sds100.keymapper.base.expertmode.ExpertModeSetupScreen
import io.github.sds100.keymapper.base.expertmode.xiaomi.XiaomiOptimizationScreen
import io.github.sds100.keymapper.base.keymaps.EnableByIntentScreen
import io.github.sds100.keymapper.base.keymaps.TriggerByIntentScreen
import io.github.sds100.keymapper.base.logging.LogScreen
import io.github.sds100.keymapper.base.onboarding.HandleAccessibilityServiceDialogs
import io.github.sds100.keymapper.base.onboarding.SetupAccessibilityServiceDelegateImpl
Expand Down Expand Up @@ -101,6 +106,15 @@ fun BaseMainNavHost(
)
}

composable<NavDestination.ConfigNotificationConstraint> {
val viewModel: ConfigNotificationConstraintViewModel = hiltViewModel()

ConfigNotificationConstraintScreen(
modifier = Modifier.fillMaxSize(),
viewModel = viewModel,
)
}

composable<NavDestination.ChooseAction> {
val viewModel: ChooseActionViewModel = hiltViewModel()

Expand Down Expand Up @@ -189,6 +203,26 @@ fun BaseMainNavHost(
)
}

composable<NavDestination.TriggerByIntent> { backStackEntry ->
val destination = backStackEntry.toRoute<NavDestination.TriggerByIntent>()

TriggerByIntentScreen(
modifier = Modifier.fillMaxSize(),
keyMapUid = destination.keyMapUid,
onBackClick = { navController.popBackStack() },
)
}

composable<NavDestination.EnableByIntent> { backStackEntry ->
val destination = backStackEntry.toRoute<NavDestination.EnableByIntent>()

EnableByIntentScreen(
modifier = Modifier.fillMaxSize(),
keyMapUid = destination.keyMapUid,
onBackClick = { navController.popBackStack() },
)
}

composableDestinations()
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@ import io.github.sds100.keymapper.base.system.inputmethod.SwitchImeAsyncImpl
import io.github.sds100.keymapper.base.system.inputmethod.SwitchImeInterface
import io.github.sds100.keymapper.base.system.inputmethod.ToggleCompatibleImeUseCase
import io.github.sds100.keymapper.base.system.inputmethod.ToggleCompatibleImeUseCaseImpl
import io.github.sds100.keymapper.base.system.notifications.AndroidNotificationAdapter
import io.github.sds100.keymapper.base.system.notifications.ManageNotificationsUseCase
import io.github.sds100.keymapper.base.system.notifications.ManageNotificationsUseCaseImpl
import io.github.sds100.keymapper.base.trigger.RecordTriggerController
Expand All @@ -63,16 +62,11 @@ import io.github.sds100.keymapper.common.utils.UuidGenerator
import io.github.sds100.keymapper.system.accessibility.AccessibilityServiceAdapter
import io.github.sds100.keymapper.system.inputmethod.KeyEventRelayServiceWrapper
import io.github.sds100.keymapper.system.inputmethod.KeyEventRelayServiceWrapperImpl
import io.github.sds100.keymapper.system.notifications.NotificationAdapter
import javax.inject.Singleton

@Module
@InstallIn(SingletonComponent::class)
abstract class BaseSingletonHiltModule {
@Singleton
@Binds
abstract fun provideNotificationAdapter(impl: AndroidNotificationAdapter): NotificationAdapter

@Singleton
@Binds
abstract fun provideAccessibilityAdapter(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ import io.github.sds100.keymapper.base.trigger.SetupInputMethodUseCase
import io.github.sds100.keymapper.base.trigger.SetupInputMethodUseCaseImpl
import io.github.sds100.keymapper.base.trigger.TriggerSetupDelegate
import io.github.sds100.keymapper.base.trigger.TriggerSetupDelegateImpl
import io.github.sds100.keymapper.base.vibration.VibrateConfigDelegate
import io.github.sds100.keymapper.base.vibration.VibrateConfigDelegateImpl

@Module
@InstallIn(ViewModelComponent::class)
Expand Down Expand Up @@ -197,6 +199,10 @@ abstract class BaseViewModelHiltModule {
impl: FixKeyEventActionDelegateImpl,
): FixKeyEventActionDelegate

@Binds
@ViewModelScoped
abstract fun bindVibrateConfigDelegate(impl: VibrateConfigDelegateImpl): VibrateConfigDelegate

@Binds
@ViewModelScoped
abstract fun bindExpertModeSetupDelegate(
Expand Down
10 changes: 10 additions & 0 deletions base/src/main/java/io/github/sds100/keymapper/base/IntentApi.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package io.github.sds100.keymapper.base

object IntentApi {
const val ACTION_TRIGGER_KEYMAP_BY_UID =
"io.github.sds100.keymapper.ACTION_TRIGGER_KEYMAP_BY_UID"
const val EXTRA_KEYMAP_UID = "io.github.sds100.keymapper.EXTRA_KEYMAP_UID"

const val TRIGGER_RECEIVER_CLASS =
"io.github.sds100.keymapper.api.TriggerKeyMapsBroadcastReceiver"
}
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,16 @@ data class Action(

val multiplier: Int? = null,
val delayBeforeNextAction: Int? = null,

/**
* A name set by the user that is shown instead of the generated title.
*/
val customName: String? = null,

/**
* Disabled actions are not performed when the key map is triggered.
*/
val isEnabled: Boolean = true,
)

object ActionEntityMapper {
Expand Down Expand Up @@ -85,6 +95,11 @@ object ActionEntityMapper {
.valueOrNull()
?.toIntOrNull()

val customName = entity.extras
.getData(ActionEntity.EXTRA_CUSTOM_NAME)
.valueOrNull()
?.takeIf { it.isNotBlank() }

return Action(
uid = entity.uid,
data = data,
Expand All @@ -98,6 +113,8 @@ object ActionEntityMapper {
holdDownDuration = holdDownDuration,
delayBeforeNextAction = delayBeforeNextAction,
multiplier = multiplier,
customName = customName,
isEnabled = !entity.flags.hasFlag(ActionEntity.ACTION_FLAG_DISABLED),
)
}

Expand All @@ -118,6 +135,10 @@ object ActionEntityMapper {
add(EntityExtra(ActionEntity.EXTRA_MULTIPLIER, action.multiplier.toString()))
}

if (!action.customName.isNullOrBlank()) {
add(EntityExtra(ActionEntity.EXTRA_CUSTOM_NAME, action.customName))
}

if (keyMap.isHoldingDownActionBeforeRepeatingAllowed(action) &&
action.holdDownDuration != null
) {
Expand Down Expand Up @@ -185,6 +206,10 @@ object ActionEntityMapper {
flags = flags.withFlag(ActionEntity.ACTION_FLAG_HOLD_DOWN)
}

if (!action.isEnabled) {
flags = flags.withFlag(ActionEntity.ACTION_FLAG_DISABLED)
}

return@map ActionEntity(
type = base.type,
data = base.data,
Expand Down
Loading
Loading