Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
112 commits
Select commit Hold shift + click to select a range
a60c345
update whats-new
sds100 Sep 12, 2026
a729563
read offering metadata from revenuecat
sds100 Sep 13, 2026
c6ca203
bump version to 4.4.1
sds100 Sep 13, 2026
4a632d8
fix padding in trigger and action screen
sds100 Sep 14, 2026
88d6a8c
#1927 feat: promote Key Mapper Gaming PRO in the app
sds100 Sep 14, 2026
1474292
fix missing parameter in MainFragment
sds100 Sep 14, 2026
70a4247
bump version code
sds100 Sep 14, 2026
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
cc3d807
update Compose BOM
sds100 Sep 14, 2026
8ef90be
Revert "fix: bottom sheet Compose previews work again."
sds100 Sep 15, 2026
fc434e1
fix: show previews for bottom sheets and dialogs by specifying showSy…
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
014715c
update string
sds100 Sep 15, 2026
039bf05
make title optional in CustomDialog and adjust padding
sds100 Sep 15, 2026
4db2e86
#2243 feat: redesigned whats new dialog
sds100 Sep 15, 2026
72ab4ad
use package manager install and update time to determine whether it i…
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
abfa3b8
fix running mockito tests on JDK 25 bundled with Android Studio
sds100 Sep 18, 2026
f5e9b74
add trendshift badge to readme
sds100 Sep 18, 2026
568f9a2
Update strings.xml
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
09d1e2b
Update crowdin.yaml
sds100 Sep 19, 2026
69eebdd
New Crowdin translations by GitHub Action
crowdin-bot Sep 19, 2026
11816dc
tell Claude to run ktlint format before check
sds100 Sep 19, 2026
90fb9ea
Merge pull request #2257 from keymapperorg/l10n/develop
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
d5c9620
Merge pull request #2265 from keymapperorg/develop-4.5
sds100 Sep 21, 2026
25e09c9
Merge branch 'master' into develop
sds100 Sep 21, 2026
5dce21e
set release date for 4.5.0
sds100 Sep 21, 2026
a20f8a8
Merge remote-tracking branch 'origin/develop' into develop
sds100 Sep 21, 2026
063694e
#2244 fix: only show "Expert mode started" notification the first tim…
sds100 Sep 21, 2026
e237a8d
bump version code
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/*
40 changes: 39 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,42 @@
## [4.4.0](https://github.com/sds100/KeyMapper/releases/tag/v4.3.2)
## [4.5.0](https://github.com/sds100/KeyMapper/releases/tag/v4.5.0)

#### 21 September 2026

## 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.
- #2244 only show "Expert mode started" notification the first time it is auto started. Not every time the Key Mapper process starts and the system bridge connects.

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

#### 12 September 2026

Expand Down
8 changes: 6 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 Expand Up @@ -90,6 +91,9 @@ Example: `#2025 feat: add button to report bug on home screen`
- Use `LocalUriHandler.openUriSafe` extension for URL launching — do not hoist URL launching logic up the call stack
- Use import statements; never use fully qualified names in Compose code
- Write `@Preview` composables for every screen
- Dialog and modal bottom sheet previews render blank by default because they open a separate
window. Use `@Preview(showSystemUi = true)` for both. For bottom sheets, also create the
preview's `SheetState` with `initialValue = SheetValue.Expanded`.

## Adding a New Action (10-step checklist)

Expand Down
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,10 @@
</b>
</p>

<p align="center">
<a href="https://trendshift.io/repositories/13504?utm_source=repository-badge&amp;utm_medium=badge&amp;utm_campaign=badge-repository-13504" target="_blank" rel="noopener noreferrer"><img src="https://trendshift.io/api/badge/repositories/13504" alt="keymapperorg%2FKeyMapper | Trendshift" width="250" height="55"/></a>
</p>

<p align="center">
<a href='https://play.google.com/store/apps/details?id=io.github.sds100.keymapper&pcampaignid=pcampaignidMKT-Other-global-all-co-prtnr-py-PartBadge-Mar2515-1'><img alt='Get it on Google Play' src='https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png' height='75px'/></a>
<a href="https://f-droid.org/packages/io.github.sds100.keymapper/" rel="nofollow"><img alt="Get it on F-Droid" height="75" src="https://user-images.githubusercontent.com/53379023/142497343-0e635fc5-056b-46ff-8d8e-d607ed95527e.png" data-canonical-src="https://fdroid.gitlab.io/artwork/badge/get-it-on.png" style="max-width: 100%;"></a>
Expand Down
11 changes: 11 additions & 0 deletions app/src/main/java/io/github/sds100/keymapper/MainFragment.kt
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,15 @@ import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.systemBars
import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.compose.ui.unit.dp
import androidx.fragment.app.Fragment
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import androidx.navigation.NavController
import androidx.navigation.NavGraphBuilder
import androidx.navigation.NavHostController
Expand All @@ -34,6 +36,7 @@ import io.github.sds100.keymapper.base.compose.KeyMapperTheme
import io.github.sds100.keymapper.base.constraints.ConfigConstraintsViewModel
import io.github.sds100.keymapper.base.constraints.ConstraintsScreen
import io.github.sds100.keymapper.base.home.HomeKeyMapListScreen
import io.github.sds100.keymapper.base.home.WhatsNewDialog
import io.github.sds100.keymapper.base.keymaps.ConfigKeyMapScreen
import io.github.sds100.keymapper.base.keymaps.ConfigKeyMapViewModel
import io.github.sds100.keymapper.base.keymaps.KeyMapOptionsScreen
Expand Down Expand Up @@ -142,16 +145,24 @@ class MainFragment : Fragment() {

val viewModel: HomeViewModel = hiltViewModel()

val whatsNewState by viewModel.whatsNewState.collectAsStateWithLifecycle()

whatsNewState?.let { state ->
WhatsNewDialog(state = state, onDismissRequest = viewModel::onDismissWhatsNew)
}

HomeKeyMapListScreen(
modifier = Modifier.fillMaxSize(),
viewModel = viewModel.keyMapListViewModel,
snackbarState = snackbarState,
onSettingsClick = viewModel::launchSettings,
onAboutClick = viewModel::launchAbout,
onWhatsNewClick = viewModel::onWhatsNewClick,
finishActivity = {
requireActivity().finish()
},
fabBottomPadding = 0.dp,
headerExtraContent = {},
)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package io.github.sds100.keymapper.purchasing
import io.github.sds100.keymapper.base.purchasing.PurchasingError
import io.github.sds100.keymapper.base.purchasing.PurchasingManager
import io.github.sds100.keymapper.base.purchasing.RevenueCatEntitlementId
import io.github.sds100.keymapper.base.purchasing.RevenueCatState
import io.github.sds100.keymapper.common.utils.KMResult
import io.github.sds100.keymapper.common.utils.State
import kotlinx.coroutines.flow.Flow
Expand All @@ -12,7 +13,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
class PurchasingManagerImpl : PurchasingManager {
override val onCompleteProductPurchase: MutableSharedFlow<RevenueCatEntitlementId> =
MutableSharedFlow()
override val entitlements: Flow<State<KMResult<Set<RevenueCatEntitlementId>>>> =
override val state: Flow<State<KMResult<RevenueCatState>>> =
MutableStateFlow(State.Data(PurchasingError.PurchasingNotImplemented))

override suspend fun launchPurchasingFlow(
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.0
VERSION_CODE=264
VERSION_NAME=4.5.0
VERSION_CODE=271
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
7 changes: 7 additions & 0 deletions base/src/main/assets/whats-new-app.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
! 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"
}
Loading
Loading