Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
477 commits
Select commit Hold shift + click to select a range
93fd749
fix: save navhostcontroller state in onDestroyView
sds100 Sep 8, 2025
2bbf95a
feat: discover bottom sheet WIP
sds100 Sep 9, 2025
7bb7993
chore: bump version code
sds100 Sep 9, 2025
5b06261
fix: enable legacy packaging for native libs so system bridge is extr…
sds100 Sep 9, 2025
9c92e82
Merge branch 'develop' into feature/new-trigger-screen
sds100 Sep 9, 2025
045938c
fix: do not obfuscate ShizukuStarterService
sds100 Sep 9, 2025
eaf43de
chore: bump version code
sds100 Sep 9, 2025
012fe9f
feat: replace trigger shortcuts with button to show discover bottom s…
sds100 Sep 9, 2025
8363660
fix: set min sdk to Oreo in AppHiltModule
sds100 Sep 10, 2025
5601514
feat: create VolumeTriggerSetupBottomSheet
sds100 Sep 11, 2025
4518090
feat: only record evdev events if screen off remapping is enabled
sds100 Sep 11, 2025
be4f61f
Merge branch 'develop' into feature/new-trigger-screen
sds100 Sep 11, 2025
c9f28d1
style: reformat
sds100 Sep 11, 2025
3c79d5b
update string
sds100 Sep 11, 2025
585c754
chore: bump version code
sds100 Sep 11, 2025
917966b
do not disable trigger shop when recording
sds100 Sep 11, 2025
bd9aa4b
fix: stop recording trigger when leaving trigger screen
sds100 Sep 11, 2025
a993771
fix animation when showing/hiding PRO mode requirement
sds100 Sep 11, 2025
dc824a3
feat: show remap status for volume button trigger setup
sds100 Sep 13, 2025
054b329
feat: create new assistant trigger setup bottom sheet
sds100 Sep 13, 2025
b6cd78b
feat: create power button trigger setup bottom sheet
sds100 Sep 13, 2025
4cde2a6
feat: only show fingerprint gestures shortcut if it is supported
sds100 Sep 13, 2025
8ad31b2
feat: create fingerprint gesture setup bottom sheet
sds100 Sep 13, 2025
32745fc
fix: allow adding multiple assistant triggers and fingerprint gesture…
sds100 Sep 13, 2025
68e17df
feat: create keyboard trigger setup bottom sheet
sds100 Sep 13, 2025
2cb5323
feat: create mouse trigger setup bottom sheet
sds100 Sep 13, 2025
a9e99ad
fix: do not crash if key map algorithm receives gamepad event
sds100 Sep 13, 2025
9298ee9
feat: create other trigger setup bottom sheet
sds100 Sep 13, 2025
5d0113e
feat: create gamepad trigger setup bottom sheet
sds100 Sep 14, 2025
48129eb
feat: create new bottom sheet explaining what to do when a trigger is…
sds100 Sep 14, 2025
907ca4e
fix various floating button bugs and implement shortcut to add floati…
sds100 Sep 14, 2025
c5dfaa9
Merge branch 'feature/new-trigger-screen' into develop
sds100 Sep 14, 2025
bee13bd
style: reformat
sds100 Sep 14, 2025
ee81c31
chore: bump version code
sds100 Sep 14, 2025
91ddacd
delete old trigger shortcut code
sds100 Sep 14, 2025
9dc5a28
fix bugs in TriggerSetupBottomSheet.kt
sds100 Sep 14, 2025
0ac7d98
set version to 4.0.0-beta.1
sds100 Sep 14, 2025
64e5fd2
chore: bump version code
sds100 Sep 15, 2025
93c8bf9
#1788 feat: dismiss lockscreen when launching app action from lockscreen
sds100 Sep 15, 2025
7ee9ca1
fix: do not allow adding duplicate constraints
sds100 Sep 15, 2025
ed1a3dc
chore: bump version code
sds100 Sep 16, 2025
3db65e5
chore: update whats new for 4.0
sds100 Sep 17, 2025
136a6ae
fix: use different and correct strings for trigger setup
sds100 Sep 17, 2025
1332c71
fix: stop logging whether constraints are satisfied because it spams …
sds100 Sep 17, 2025
6ea1178
fix: fix various bugs with starting the system bridge due to native l…
sds100 Sep 17, 2025
17744f3
chore: bump version code
sds100 Sep 17, 2025
ee20a69
feat: update strings
sds100 Sep 17, 2025
dfbe9aa
fix amber colors in dark mode
sds100 Sep 17, 2025
1ffbc62
feat: move emergency tip for power button remapping to trigger screen
sds100 Sep 17, 2025
4c64b33
#1797 feat: add button in Settings to share entire system logcat
sds100 Sep 17, 2025
939460c
style: reformat
sds100 Sep 17, 2025
8536bc4
use IO dispatcher in PreferenceRepository
sds100 Sep 24, 2025
a02ddbc
fix: close channels in AdbMdns properly
sds100 Sep 26, 2025
20cdfd2
fix: add padding at bottom of pro mode screen
sds100 Sep 26, 2025
41177b6
refactor: remove unnecessary min sdk checks in CameraAdapter
sds100 Sep 26, 2025
b1fc75a
#1798 feat: do not autostart PRO mode if device was not shutdown grac…
sds100 Sep 26, 2025
12e6e25
chore: bump version code
sds100 Sep 26, 2025
a849938
New Crowdin translations by GitHub Action
crowdin-bot Sep 26, 2025
8c34f14
feat: show tips for parallel and sequence triggers, and constraints i…
sds100 Sep 26, 2025
fc3c605
feat: convert more dialog messages into trigger tips
sds100 Sep 26, 2025
eb5806c
style: reformat
sds100 Sep 26, 2025
baf32a0
remove unused strings
sds100 Sep 26, 2025
11d6a71
Merge branch 'develop' into l10n/develop
sds100 Sep 26, 2025
4796e28
Merge pull request #1814 from keymapperorg/l10n/develop
sds100 Sep 26, 2025
bcdc075
chore: bump version code
sds100 Sep 27, 2025
e02ffbf
fix: do not show duplicate constraint shortcuts
sds100 Sep 27, 2025
3e21787
fix: make WiFi connected constraints more reliable
sds100 Sep 27, 2025
67f40ea
style: reformat
sds100 Sep 27, 2025
8763505
fix tests due to new ConstraintData class
sds100 Sep 27, 2025
e1fb7d4
chore: bump version code
sds100 Sep 27, 2025
7e3c6ed
style: reformat
sds100 Sep 27, 2025
d231c5f
refactor: remove unnecessary min sdk checks for Android Oreo
sds100 Sep 27, 2025
78a13e9
refactor: remove unnecessary min sdk checks
sds100 Sep 27, 2025
ede17d5
refactor: remove more min sdk checks
sds100 Sep 27, 2025
4007e03
fix: remove code to automatically show ime picker
sds100 Sep 28, 2025
b90053a
#1818 refactor how input methods are switched and improve latency of …
sds100 Sep 28, 2025
94715fd
#1818 automatic switching of the key mapper keyboard now requires And…
sds100 Sep 28, 2025
3a9e0c5
#1818 update changelog
sds100 Sep 28, 2025
8bf21cd
remove SDK 28 preview from settings
sds100 Sep 28, 2025
a57db45
dispatch navigation events immediately on the main thread
sds100 Sep 28, 2025
9e03703
remove constraint tap target because the constraint tip is shown inst…
sds100 Sep 28, 2025
7cd42c5
#1818 auto switching IME on input focus works more reliably on Androi…
sds100 Sep 28, 2025
91aa3e5
#1818 remove "basic" from key mapper input method name
sds100 Sep 28, 2025
733e001
#1818 remove dialog prompting the user to install the GUI keyboard
sds100 Sep 28, 2025
d6fb7bc
#1818 fix tests and reformat
sds100 Sep 28, 2025
f8e143c
#1818 rename debug and CI input methods
sds100 Sep 29, 2025
6a099cf
#1818 correctly auto switch ime in more edge cases
sds100 Sep 29, 2025
5af1f23
style: reformat
sds100 Sep 29, 2025
a05967b
fix: remove duplicate key codes
sds100 Sep 29, 2025
3d933f1
#1818 reword strings to use Key Mapper Input Method instead of Key Ma…
sds100 Sep 30, 2025
e8fb32b
refactor: remove unused methods in SettingsViewModel
sds100 Sep 30, 2025
f308f84
chore: bump version code
sds100 Sep 30, 2025
f708c36
#1818 automatically enable the Key Mapper input method before choosin…
sds100 Oct 2, 2025
c1223b0
remove unnecessary min sdk checks
sds100 Oct 2, 2025
018f6f4
fix: center align SwitchPreferenceCompose icon
sds100 Oct 2, 2025
84c4e8a
fix: remove log spam when network capabilities change
sds100 Oct 2, 2025
53941d5
#1818 WIP: create bottom sheet to fix key event actions
sds100 Oct 3, 2025
ea7792d
fix: do not auto switch ime to the key mapper keyboard on the lockscreen
sds100 Oct 9, 2025
9e64eed
refactor: remove unnecessary sdk checks
sds100 Oct 9, 2025
e84fc32
style: reformat
sds100 Oct 9, 2025
f595517
fix: implement BuildConfigProvider properly
sds100 Oct 9, 2025
b5ccba2
#1818 set up input method for key event actions
sds100 Oct 9, 2025
343923c
fix tests
sds100 Oct 9, 2025
424543c
#1818 set up PRO mode and use error colors for buttons
sds100 Oct 9, 2025
8941a0a
#1818 add buttons to setting to switch key event action method
sds100 Oct 10, 2025
57bf8da
chore: bump version code
sds100 Oct 10, 2025
b8e6502
Merge branch 'feature/1818-deprecate-gui-keyboard' into develop
sds100 Oct 10, 2025
c58f88e
style: reformat
sds100 Oct 10, 2025
858a57e
feat: create new screen for purchasing advanced triggers
sds100 Oct 10, 2025
9f47822
feat: further improve the advanced triggers screen
sds100 Oct 11, 2025
d679113
feat: complete the new advanced triggers screen
sds100 Oct 11, 2025
ba05741
#397 feat: add switch to enable/disable all the key maps in a subgroup
sds100 Oct 11, 2025
0721bf0
#1778 feat: show trigger error if evdev device is disconnected, PRO m…
sds100 Oct 11, 2025
79ad637
#1773 feat: allow showing floating buttons on top of the status bar o…
sds100 Oct 11, 2025
29bcbfc
style: reformat
sds100 Oct 11, 2025
1eb34ef
fix: migrate database version 20 to 21 properly
sds100 Oct 11, 2025
d507070
style: reformat
sds100 Oct 11, 2025
44e7f02
fix tests
sds100 Oct 11, 2025
f82829b
fix: keep TriggerSetupShortcut so it is not obfuscated
sds100 Oct 13, 2025
0885077
update whats-new
sds100 Oct 13, 2025
42e5a33
#1844 show that PRO mode has better compatibility with apps and games
sds100 Oct 13, 2025
3ff1da2
add more logging for back up and restore errors
sds100 Oct 13, 2025
926c569
chore: bump version code
sds100 Oct 13, 2025
07ee1b0
feat: add link to Key Mapper youtube video
sds100 Oct 13, 2025
5b2a05a
add method to get offering metadata
sds100 Oct 13, 2025
70359f4
#1818 actually use the input method for performing key event actions …
sds100 Oct 14, 2025
44db74a
chore: bump version code
sds100 Oct 15, 2025
637216d
remove and ignore generated AIDL cpp files
sds100 Oct 15, 2025
b5cd20b
fix: add missing parameter for PerformActionsUseCase injection
sds100 Oct 15, 2025
0565874
#1335 feat: intent API to enable/disable/toggle a key map
sds100 Oct 15, 2025
150a095
fix tests
sds100 Oct 15, 2025
ae49941
style: reformat
sds100 Oct 15, 2025
5e82357
#114 feat: action to force stop app, and an action to clear an app fr…
sds100 Oct 16, 2025
54c5595
style: reformat
sds100 Oct 16, 2025
b825a25
update credits
sds100 Oct 16, 2025
b5f3ac0
Initial plan
Copilot Oct 19, 2025
726384b
Add SMS action implementation (Send SMS and Compose SMS)
Copilot Oct 19, 2025
863bc41
Add SEND_SMS permission to manifest and update changelog
Copilot Oct 19, 2025
9eef520
fix: Allow selecting notification and alarm sound and not just ringto…
sds100 Oct 19, 2025
09f5bca
Add database entity mapping for SMS actions
Copilot Oct 19, 2025
d774d78
Refactor SMS actions to use bottom sheet and remove parent sealed class
Copilot Oct 19, 2025
b5123e8
Merge branch 'develop' into copilot/action-send-sms
sds100 Oct 19, 2025
d606a79
style: update editorconfig to have indent before when statement arrow
sds100 Oct 19, 2025
f3fc3e6
#727 feat: complete action for sending an SMS message
sds100 Oct 19, 2025
32e511e
Merge pull request #1849 from keymapperorg/copilot/action-send-sms
sds100 Oct 19, 2025
42bf384
Merge branch 'develop' into feature/1819-restricted-setting
sds100 Oct 19, 2025
eab570a
Initial plan
Copilot Oct 19, 2025
105dd0b
Add shell command action feature with full-screen UI
Copilot Oct 19, 2025
fb2570d
Fix shell command execution to support root mode with output
Copilot Oct 19, 2025
9319173
Add shell command description display in UI
Copilot Oct 19, 2025
df12acc
Add tests for shell command action
Copilot Oct 19, 2025
de607f5
#1819 feat: refactor dialogs for setting up the accessibility service
sds100 Oct 19, 2025
6e7c5db
#1819 change text for restricted settings
sds100 Oct 19, 2025
52b9207
Merge branch 'feature/1819-restricted-setting' into develop
sds100 Oct 19, 2025
d2eb033
Refactor shell command to use state class and improve error handling
Copilot Oct 19, 2025
0205e30
delete cursor rules
sds100 Oct 19, 2025
7634f99
Merge branch 'develop' into copilot/add-shell-command-execution
sds100 Oct 19, 2025
86cd243
#661 feat: add timeout and description to Shell command action
sds100 Oct 19, 2025
72faecb
#661 refactor shell adapters to return a ShellResult class and tweak …
sds100 Oct 19, 2025
be0b226
#661 refactor ShellResult to be a simple data class and use it in Sys…
sds100 Oct 19, 2025
b3249f6
#661 add ADB as execution mode for shell command action that uses pro…
sds100 Oct 19, 2025
af42c9d
#661 save shell script so progress isn't lost when navigating back to…
sds100 Oct 19, 2025
ab4d5d8
fix: show error message for SMS system feature unavailable
sds100 Oct 19, 2025
34317bc
fix: check for shizuku permission before granting permissions with sh…
sds100 Oct 19, 2025
a7d3094
#661 fix streaming output when testing shell action
sds100 Oct 19, 2025
beb0747
Merge pull request #1850 from keymapperorg/copilot/add-shell-command-…
sds100 Oct 19, 2025
da0fd24
reformat style and fix tests
sds100 Oct 19, 2025
aaf5735
update changelog
sds100 Oct 19, 2025
4a6512e
fix: do not require telephony features in manifest
sds100 Oct 20, 2025
eb238bf
feat: only allow sending SMS messages once per second to prevent incu…
sds100 Oct 20, 2025
e1d3582
feat: show warning in SMS bottom sheet that Key Mapper devs are not l…
sds100 Oct 20, 2025
1e38f70
fix: do not check for FEATURE_TELEPHONY_SMS or FEATURE_TELEPHONY_DATA…
sds100 Oct 20, 2025
5f4577d
fix: do not allow force stopping SystemUI or key mapper app
sds100 Oct 20, 2025
a22fe49
fix: remove unnecessary min SDK checks in AndroidVolumeAdapter.kt
sds100 Oct 20, 2025
8c799eb
#661 fix: shell command timeouts work properly
sds100 Oct 20, 2025
9030c53
#661 fix: executing shell commands works properly and all exceptions …
sds100 Oct 20, 2025
2e558ac
#762 fix: ringer mode actions do not enable do not disturb when the s…
sds100 Oct 22, 2025
de8ad46
Initial plan
Copilot Oct 25, 2025
92597f4
Initial plan
Copilot Oct 25, 2025
e1a315a
Add hinge constraint implementation for foldable devices
Copilot Oct 25, 2025
7248549
Add error handling and documentation for hinge constraint
Copilot Oct 25, 2025
8e11e92
Add volume stream selection to volume up/down actions
Copilot Oct 25, 2025
df609da
Add entity mapping for volume stream parameter
Copilot Oct 25, 2025
3c97a49
Fix potential NPE in volume stream deserialization
Copilot Oct 25, 2025
99e7780
Use safe null handling for volume stream serialization
Copilot Oct 25, 2025
17cf309
Implement feedback: Use Sensor API, rename to FoldableAdapter, remove…
Copilot Oct 25, 2025
d17f487
Initial plan
Copilot Oct 25, 2025
a76796b
Add microphone mute action feature
Copilot Oct 25, 2025
e00ddb2
Add drawable icon mappings for microphone actions
Copilot Oct 25, 2025
f94cc64
Add microphone action creation in CreateActionDelegate
Copilot Oct 25, 2025
3a6ac16
Refactor volume action state management and deprecate stream actions
Copilot Oct 25, 2025
faa66c9
Refine FoldableAdapter: sealed class, StateFlow, API level check
Copilot Oct 25, 2025
1498541
#762 show a tip card to use PRO mode for ringer mode actions
sds100 Oct 25, 2025
1629fc2
add color parameter to TipCard
sds100 Oct 25, 2025
2774038
Merge branch 'develop' into copilot/mute-microphone-action
sds100 Oct 25, 2025
b8f32da
Merge branch 'develop' into copilot/refactor-volume-actions
sds100 Oct 25, 2025
cea95d4
Merge branch 'develop' into copilot/hinge-closed-open-constraint
sds100 Oct 25, 2025
39ca2c4
Delete ActionData.Volume.Stream classes
Copilot Oct 25, 2025
096d489
#1846 animate new key map floating action instead of showing tap target
sds100 Oct 25, 2025
90efb82
style: reformat
sds100 Oct 25, 2025
16ec2eb
#1846 do not animate FAB again after it is finished
sds100 Oct 25, 2025
ee34f87
#1846 stop animating new key map FAB when clicking it
sds100 Oct 26, 2025
914d96c
fix: do not try getting evdev devices if sysbridge is disconnected
sds100 Oct 26, 2025
7476b3b
#1846 feat: replace tap target on actions tab with pulsing animation
sds100 Oct 26, 2025
616a0c2
#1846 feat: do not pulse the new key map button after it has been cli…
sds100 Oct 26, 2025
d00fac0
fix: navigating back from editing actions work
sds100 Oct 26, 2025
340f0e4
#905 feat: show tip to use PRO mode for remapping caps lock key
sds100 Oct 26, 2025
4c3cfb0
#1857 feat: show a tip to use pro mode for volume button screen off r…
sds100 Oct 26, 2025
309c596
#1702 feat: prompt users to rate floating buttons
sds100 Oct 26, 2025
ae6293c
fix: do not add floating buttons twice
sds100 Oct 26, 2025
64df6f1
chore: update ktlint version
sds100 Oct 26, 2025
dd3ea73
style: reformat
sds100 Oct 26, 2025
24b4cf9
#1064 fix: wait for switch keyboard action to complete before doing n…
sds100 Oct 26, 2025
b06b40d
Merge branch 'develop' into copilot/mute-microphone-action
sds100 Oct 26, 2025
0edd32d
#1066 feat: complete action to mute/unmute microphone
sds100 Oct 26, 2025
8fb08f3
Merge branch 'copilot/mute-microphone-action' into develop
sds100 Oct 26, 2025
4055f09
Merge branch 'develop' into copilot/refactor-volume-actions
sds100 Oct 26, 2025
3b4104a
#991 feat: consolidate volume stream actions
sds100 Oct 26, 2025
fa34fd5
Merge branch 'copilot/refactor-volume-actions' into develop
sds100 Oct 26, 2025
cecbb02
Merge branch 'develop' into copilot/hinge-closed-open-constraint
sds100 Oct 26, 2025
5de977a
#985 feat: constraints for foldable hinge being open/closed.
sds100 Oct 26, 2025
2616a43
Merge branch 'copilot/hinge-closed-open-constraint' into develop
sds100 Oct 26, 2025
5019eb6
style: use android_studio ktlint style
sds100 Oct 26, 2025
52abd17
style: reformat with android studio ktlint style
sds100 Oct 26, 2025
8cdc72d
style: fix more style issues manually
sds100 Oct 26, 2025
0c6e067
style: fix more style issues manually
sds100 Oct 27, 2025
a97aa01
Merge branch 'reformat-android' into develop
sds100 Oct 27, 2025
cc48707
ci: move crowdin workflow to a job in testing
sds100 Oct 27, 2025
de008c6
fix tests
sds100 Oct 27, 2025
feb9c0e
style: reformat testing.yml
sds100 Oct 27, 2025
0504b6d
fix: use develop branch for changelog url
sds100 Oct 27, 2025
17e158e
chore: bump version code
sds100 Oct 27, 2025
9c587c2
chore: update whats new
sds100 Oct 27, 2025
40aed39
log input method chosen as debug message
sds100 Oct 27, 2025
a8716ef
fix: auto start PRO mode when upgrading to 4.0 on a rooted device
sds100 Oct 27, 2025
9a78741
chore: bump version code
sds100 Oct 27, 2025
64df7bd
rephrase string
sds100 Oct 27, 2025
8b5dcd2
chore: bump version code
sds100 Oct 28, 2025
55ade1d
chore: update rikka stubs library
sds100 Oct 28, 2025
4e9f24b
feat: auto start system bridge on debug builds every time app launches
sds100 Oct 28, 2025
0bd4966
style: add ktlint dependency to sysbridge module and reformat
sds100 Oct 28, 2025
3ad9d7e
#1864 fix: request READ_LOGS permission when system bridge starts
sds100 Oct 29, 2025
f7a0f87
style: reformat
sds100 Oct 29, 2025
888a356
chore: bump version code
sds100 Oct 29, 2025
230a08b
chore: bump version code
sds100 Nov 1, 2025
a73cd25
Merge branch 'master' into develop
sds100 Nov 1, 2025
1c5b0a6
Merge remote-tracking branch 'origin/develop' into develop
sds100 Nov 1, 2025
a8b059a
style: reformat
sds100 Nov 1, 2025
5de459e
update .editorconfig
sds100 Nov 1, 2025
ac2eb6f
style: reformat
sds100 Nov 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
27 changes: 0 additions & 27 deletions .cursor/rules/create-action.mdc

This file was deleted.

71 changes: 0 additions & 71 deletions .cursor/rules/jetpack-compose.mdc

This file was deleted.

5 changes: 4 additions & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,10 @@
ktlint_standard_function-expression-body = disabled
ktlint_function_naming_ignore_when_annotated_with = Composable
ktlint_ignore_back_ticked_identifier = true
ktlint_code_style = intellij_idea # Use IntelliJ style because it has trailing commas
ktlint_code_style = android_studio
ij_kotlin_indent_before_arrow_on_new_line = true
ij_kotlin_allow_trailing_comma = true
ij_kotlin_allow_trailing_comma_on_call_site = true

[base/src/main/java/io/github/sds100/keymapper/base/utils/ui/compose/icons/*.{kt,kts}]
ktlint_standard_property-naming = disabled
Expand Down
41 changes: 0 additions & 41 deletions .github/workflows/crowdin-actions.yml

This file was deleted.

31 changes: 30 additions & 1 deletion .github/workflows/testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -135,4 +135,33 @@ jobs:
if: github.event.repository.fork == false && failure()
with:
title: "Build apk"
webhook: ${{ secrets.DISCORD_BUILD_STATUS_WEBHOOK }}
webhook: ${{ secrets.DISCORD_BUILD_STATUS_WEBHOOK }}

synchronize-with-crowdin:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: crowdin action
uses: crowdin/github-action@v2
if: github.event.repository.fork == false
with:
upload_sources: true
upload_translations: false
download_translations: true
localization_branch_name: l10n/develop
create_pull_request: true
pull_request_title: 'New Crowdin Translations'
pull_request_body: 'New Crowdin translations by [Crowdin GH Action](https://github.com/crowdin/github-action)'
pull_request_base_branch_name: 'develop'
env:
# A classic GitHub Personal Access Token with the 'repo' scope selected (the user should have write access to the repository).
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

# A numeric ID, found at https://crowdin.com/project/<projectName>/tools/api
CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }}

# Visit https://crowdin.com/settings#api-key to create this token
CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }}
98 changes: 74 additions & 24 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,53 @@
## [4.0.0 Beta 1](https://github.com/sds100/KeyMapper/releases/tag/v4.0.0-beta.01)

#### TO BE RELEASED

## Added

- #761 Detect keys with scancodes. Key Mapper will do this automatically if the key code is unknown
or you record different physical keys from the same device with the same key code.
- Redesign the Settings screen.
- Shortcuts on the trigger screen that guide you how to set up different types of buttons.
- #1788 dismiss lockscreen when launching app action from lockscreen
- Show tips for parallel and sequence triggers, and constraints in the trigger screen
- #397 enable/disable all key maps in a group
- #1773 Option to show floating buttons on top of keyboard or notification panel.
- #1335 Intent API to enable/disable/toggle a key map.
- #114 action to force stop app, and an action to clear an app from recents
- #727 Actions to send SMS messages: "Send SMS" and "Compose SMS"
- #1819 Explain how to enable the accessibility service restricted setting
- #661 Action to execute shell commands.
- #991 Consolidated volume and stream actions.
- #1066 Action to mute/unmute microphone.
- #985 Constraints for foldable hinge being open/closed.

## Removed

- The key event relay service is now also used on all Android versions below Android 14. The
broadcast receiver method is no longer used.
- Minimum supported Android version is now 8.0. Less than 1% of users are on older versions than
this and dropping support simplifies the codebase and maintenance.
- Dropped support for showing a keyboard picker notification and automatically showing it when a
device connects. This is only supported on Android 8.1 and is extra work to maintain it.
- Dropped support for rerouting key events on Android 11. This was a workaround for a specific bug
in Android 11 which fewer than 10% of users are using and less are probably using that feature.

## Fixed

- Restoring subgroups works and does not freeze Key Mapper.
- Do not show duplicate constraint shortcuts.
- Make WiFi connected constraints more reliable
- #1818 auto switching of the Key Mapper keyboard when typing is more reliable and quicker on
Android 13+
- #1818 auto switching of the Key Mapper keyboard now requires Android 11+. On older versions it was
only possible with WRITE_SECURE_SETTINGS but very few users are on these old Android versions so
it is not worth the extra maintenance effort.
- #1818 the Key Mapper GUI Keyboard is no longer mentioned in the app. It still works but PRO mode
and the auto switching feature are the preferred way to work around the limitations of the Key
Mapper keyboard.
- Allow selecting notification and alarm sound and not just ringtones for Sound action.
- #1064 wait for switch keyboard action to complete before doing next action.

## [3.2.1](https://github.com/sds100/KeyMapper/releases/tag/v3.2.1)

#### 03 Sept 2025
Expand Down Expand Up @@ -1332,26 +1382,26 @@ This summarises the changes since 2.0.2.
- Dark mode! 🕶
- A keymap can have multiple actions.
- Triggers
- 2 modes. The keys can all be pressed at the same time or one after another in a sequence.
- Keys can be limited to a specific external device, any device or the device the app is
installed on.
- Double press support.
- 2 modes. The keys can all be pressed at the same time or one after another in a sequence.
- Keys can be limited to a specific external device, any device or the device the app is
installed on.
- Double press support.
- Constraints. Keymaps can be restricted to only work in certain situations. Constraints can be
mixed in OR mode or AND mode.
- App in foreground
- App not in foreground
- Bluetooth device connected
- Bluetooth device not connected
- Screen on/off (ROOT only).
- App in foreground
- App not in foreground
- Bluetooth device connected
- Bluetooth device not connected
- Screen on/off (ROOT only).

- Actions
- Toggle/enable/disable a Do Not Disturb mode (Android 6.0+).
- Toggle/enable/disable airplane mode (ROOT only).
- Switch between vibrate and ring.
- Launch the device assistant rather than the voice assistant.
- Take screenshots on rooted devices older than Pie.
- Can now have unique repeat options and any action is allowed to be repeated now.
- Show the keycode number when picking a Keycode action.
- Toggle/enable/disable a Do Not Disturb mode (Android 6.0+).
- Toggle/enable/disable airplane mode (ROOT only).
- Switch between vibrate and ring.
- Launch the device assistant rather than the voice assistant.
- Take screenshots on rooted devices older than Pie.
- Can now have unique repeat options and any action is allowed to be repeated now.
- Show the keycode number when picking a Keycode action.

- Renamed "Repeat Delay" to "Repeat Rate".
- Renamed "Hold Down Delay" to "Repeat Delay"
Expand Down Expand Up @@ -1482,16 +1532,16 @@ Significantly improved the input latency.

- A keymap can have multiple actions.
- Triggers
- 2 modes. The keys can all be pressed at the same time or one after another in a sequence.
- Keys can be limited to a specific external device, any device or the device the app is
installed on.
- Double press support.
- 2 modes. The keys can all be pressed at the same time or one after another in a sequence.
- Keys can be limited to a specific external device, any device or the device the app is
installed on.
- Double press support.
- Constraints. Keymaps can be restricted to only work in certain situations. Constraints can be
mixed in OR mode or AND mode.
- App in foreground
- App not in foreground
- Bluetooth device connected
- Bluetooth device not connected
- App in foreground
- App not in foreground
- Bluetooth device connected
- Bluetooth device not connected
- The option to show the "performing action" toast has been moved to a toggle in each keymap.
- The long press delay, double press timeout, sequence trigger timeout, action repeat delay,
hold-down delay until actions are repeated and vibrate delay can be changed per keymap.
Expand Down
36 changes: 25 additions & 11 deletions CREDITS.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,33 @@

Many thanks to...

- @[dslul](https://github.com/dslul) for their [OpenBoard](https://github.com/dslul/openboard) fork of the AOSP keyboard! This made adding a GUI keyboard for Key Mapper _much_ easier. 🎉
- @[salomonbrys] for his [Kotson] library so I can easily use Gson in Kotlin.
- The [Material Design Icons] community for various icons that are not provided by Google.
- [App Mockup] for their screenshot utility.
- Airbnb for their [Epoxy](https://github.com/airbnb/epoxy) RecyclerView. They made having multiple itemview types and dragging and dropping super easy!
- @[Jake Wharton](https://github.com/JakeWharton) for his [Timber](https://github.com/JakeWharton/timber) logging library.
- @[srikanth-lingala](https://github.com/srikanth-lingala) for their Java zip file [library](https://github.com/srikanth-lingala/zip4j).
- @[anggrayudi](https://github.com/anggrayudi) for their [Simple Storage](https://github.com/anggrayudi/SimpleStorage) library that makes working with Scoped Storage and the Storage Access Framework on Android much easier.
- @[MFlisar](https://github.com/MFlisar) for their [drag and select](https://github.com/MFlisar/DragSelectRecyclerView) library.
- @[RikkaApps](https://github.com/RikkaApps) for Shizuku! It is amazing.
- @[canopas](https://github.com/canopas) for their Jetpack Compose Tap Target library https://github.com/canopas/compose-intro-showcase.
- @[dslul](https://github.com/dslul) for their [OpenBoard](https://github.com/dslul/openboard) fork
of the AOSP keyboard! This made adding a GUI keyboard for Key Mapper _much_ easier. 🎉
- @[salomonbrys] for his [Kotson] library so I can easily use Gson in Kotlin.
- The [Material Design Icons] community for various icons that are not provided by Google.
- [App Mockup] for their screenshot utility.
- Airbnb for their [Epoxy](https://github.com/airbnb/epoxy) RecyclerView. They made having multiple
itemview types and dragging and dropping super easy!
- @[Jake Wharton](https://github.com/JakeWharton) for
his [Timber](https://github.com/JakeWharton/timber) logging library.
- @[srikanth-lingala](https://github.com/srikanth-lingala) for their Java zip
file [library](https://github.com/srikanth-lingala/zip4j).
- @[anggrayudi](https://github.com/anggrayudi) for
their [Simple Storage](https://github.com/anggrayudi/SimpleStorage) library that makes working
with Scoped Storage and the Storage Access Framework on Android much easier.
- @[MFlisar](https://github.com/MFlisar) for
their [drag and select](https://github.com/MFlisar/DragSelectRecyclerView) library.
- @[RikkaApps](https://github.com/RikkaApps) for Shizuku! It is amazing and was used as the base for
PRO mode (system bridge).
- @[canopas](https://github.com/canopas) for their Jetpack Compose Tap Target
library https://github.com/canopas/compose-intro-showcase.
- @[topjohnwu](https://github.com/topjohnwu) for Magisk
and [libsu](https://github.com/topjohnwu/libsu).

[salomonbrys]: https://github.com/salomonbrys

[Kotson]: https://github.com/salomonbrys/Kotson

[Material Design Icons]: https://materialdesignicons.com/

[App Mockup]: https://app-mockup.com/
10 changes: 10 additions & 0 deletions api/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,16 @@
</intent-filter>
</receiver>

<receiver
android:name=".EnableKeyMapsBroadcastReceiver"
android:exported="true">
<intent-filter>
<action android:name="io.github.sds100.keymapper.ACTION_ENABLE_KEY_MAP" />
<action android:name="io.github.sds100.keymapper.ACTION_DISABLE_KEY_MAP" />
<action android:name="io.github.sds100.keymapper.ACTION_TOGGLE_KEY_MAP" />
</intent-filter>
</receiver>

<!-- Don't require a permission because we want other apps to bind
to this service. The permission wouldn't be signature-level so
if a nefarious app wants to talk to Key Mapper they could add the permission anyway. -->
Expand Down
6 changes: 5 additions & 1 deletion api/src/main/java/io/github/sds100/keymapper/api/Api.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,13 @@ object Api {
// Do not use the package name for debug/ci builds
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 EXTRA_KEYMAP_ID = "io.github.sds100.keymapper.EXTRA_KEYMAP_UID"

const val ACTION_PAUSE_MAPPINGS = "io.github.sds100.keymapper.ACTION_PAUSE_MAPPINGS"
const val ACTION_RESUME_MAPPINGS = "io.github.sds100.keymapper.ACTION_RESUME_MAPPINGS"
const val ACTION_TOGGLE_MAPPINGS = "io.github.sds100.keymapper.ACTION_TOGGLE_MAPPINGS"

const val ACTION_ENABLE_KEY_MAP = "io.github.sds100.keymapper.ACTION_ENABLE_KEY_MAP"
const val ACTION_DISABLE_KEY_MAP = "io.github.sds100.keymapper.ACTION_DISABLE_KEY_MAP"
const val ACTION_TOGGLE_KEY_MAP = "io.github.sds100.keymapper.ACTION_TOGGLE_KEY_MAP"
}
Loading