Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
03b43b6
feat: rename tap screen actions inside key maps
sds100 May 3, 2025
b450597
Merge pull request #1678 from keymapperorg/feature/257-interact-with-…
sds100 May 4, 2025
684de16
chore: update version code
sds100 May 4, 2025
7b11e4c
fix: editing actions works again
sds100 May 4, 2025
3d4b5c9
chore: update whats new
sds100 May 4, 2025
0cd1c34
chore: bump version code
sds100 May 5, 2025
ee0e225
update strings for interact with ui element screen
sds100 May 7, 2025
7438c6d
chore: bump version code
sds100 May 7, 2025
d1064ce
fastlane: update app title to be title case
sds100 May 7, 2025
f3f47a3
chore: update whats new
sds100 May 7, 2025
8b4c59b
fix: use correct app title for choosing app element app and single li…
sds100 May 7, 2025
9a926b7
fix: max 1 line for action/constraint shortcut buttons
sds100 May 7, 2025
1ea2b26
refactor: move draggable compose code to utils/ui/compose
sds100 May 7, 2025
4d9aa31
#1663 feat: add action to stop media playback
sds100 May 7, 2025
0279bbd
chore: create Cursor IDE rule for creating an action
sds100 May 7, 2025
334e624
chore: create Cursor IDE rule for jetpack compose code
sds100 May 7, 2025
6375136
#1663 feat: add action to step forward/backward media
sds100 May 7, 2025
475e651
Merge branch 'feature/1663-more-media-actions' into develop
sds100 May 7, 2025
f29c29e
fix changelog
sds100 May 7, 2025
e1b46ce
#1683 fix: Key event actions do not work in some apps due to missing …
sds100 May 8, 2025
ac9dc91
chore: update whats new
sds100 May 8, 2025
7b36280
fix style
sds100 May 8, 2025
72f0cd8
#1683 when reinjecting/imitating a key event set the same source as t…
sds100 May 8, 2025
9918cf0
chore: bump version code
sds100 May 8, 2025
d4a9202
New Crowdin translations by GitHub Action
crowdin-bot May 8, 2025
da7bc20
Merge pull request #1644 from keymapperorg/l10n/develop
sds100 May 8, 2025
5e18b3e
#257 add option to show additional elements that dumps all the elemen…
sds100 May 8, 2025
31b0c39
Merge remote-tracking branch 'origin/develop' into develop
sds100 May 8, 2025
110e136
#257 change how nodes are matched
sds100 May 8, 2025
d56f7a7
fix: export log files as .txt instead of .zip files.
sds100 May 9, 2025
f79f738
chore: bump version code
sds100 May 9, 2025
d900fe8
delete unused turkish translation
sds100 May 9, 2025
7d3744b
#257 show tooltip and hint text
sds100 May 9, 2025
887a866
#257 automatically show additional elements if there are none that we…
sds100 May 9, 2025
f1420d6
#257 automatically fill a description if the node has text or a view …
sds100 May 9, 2025
d03db42
#257 adapt layouts for screens with a small height
sds100 May 9, 2025
9855cc7
#1682 feat: show "Purchased!" text next to the use button for advance…
sds100 May 9, 2025
e7b3403
#1684 fix: removed the redundant and broken refresh devices button w…
sds100 May 9, 2025
6c09a43
#1684 fix: attempt to fix the list of devices going empty randomly
sds100 May 9, 2025
0c4f4ab
#1687 fix: restoring key map groups would sometimes fail due to impr…
sds100 May 9, 2025
d9462bd
fix: update datastore library to try and fix the InvalidProtocolBuffe…
sds100 May 9, 2025
162651a
#1688 fix: do not crash when inserting key maps if they already exist
sds100 May 9, 2025
6f2a6f7
#1684 fix: devices in config key event screen are cleared
sds100 May 10, 2025
f4b1b05
chore: bump version code
sds100 May 10, 2025
d846114
New Crowdin translations by GitHub Action
crowdin-bot May 10, 2025
f1cffed
chore: update changelog and whats new
sds100 May 10, 2025
aad848a
fix test for ConfigKeyEventActionViewModel
sds100 May 10, 2025
e351f21
Merge pull request #1685 from keymapperorg/l10n/develop
sds100 May 10, 2025
301f108
fastlane: delete redundant translations
sds100 May 10, 2025
992354a
fastlane: shorten turkish short description
sds100 May 10, 2025
13a1d0c
chore: bump version to 3.1.1
sds100 May 10, 2025
551a95d
fix: do not automatically select the key mapper keyboard when the acc…
sds100 May 10, 2025
241ac70
#1686 fix: do not show some screens behind system bars on the left/ri…
sds100 May 10, 2025
6bf9e99
fix: Use same sized list items when choosing a constraint.
sds100 May 10, 2025
58c15ca
#1637 feat: show a home screen error if notification permission is no…
sds100 May 10, 2025
8832c2b
fix: trim search query string when filtering
sds100 May 10, 2025
25004de
#1435 feat: allow playing system sounds/ringtones for the Sound action
sds100 May 10, 2025
b178d97
Merge branch 'develop' into feature/mouse-remapping
sds100 May 10, 2025
b186091
fix tests
sds100 May 10, 2025
a29cc6c
#1394 WIP: compile libevdev
sds100 May 10, 2025
6f8e16b
#1394 log errors from native library
sds100 May 10, 2025
7cab3a3
#1394 grabbing an input device and detect input events works
sds100 May 10, 2025
f8557ff
#1394 WIP: build project with Shizuku ADB and server starter code
sds100 May 10, 2025
f26c045
#1394 pairing with ADB works
sds100 May 10, 2025
01f2c29
#1394 our own shizuku implementation to start the Evdev service is wo…
sds100 May 12, 2025
433936a
write changelog for 3.1.1
sds100 May 12, 2025
030ea75
New Crowdin translations by GitHub Action
crowdin-bot May 12, 2025
012b1f5
Merge pull request #1691 from keymapperorg/l10n/develop
sds100 May 12, 2025
10c0fe2
fix: shorten turkish translation of short description
sds100 May 12, 2025
91562d9
fix tests
sds100 May 10, 2025
a8cf612
style: fix
sds100 May 12, 2025
ea897e2
#1637 give option to never show notification permission alert again
sds100 May 12, 2025
71a1961
chore: bump version code
sds100 May 12, 2025
a0cd468
chore: bump version code
sds100 May 12, 2025
aa5cfcc
chore: bump version to 3.1.2
sds100 May 13, 2025
1a7f09c
chore: update libraries
sds100 May 13, 2025
5ec90ee
fix: floating button sliders weren't rounding properly.
sds100 May 13, 2025
90e5af1
#1686 fix: do not draw behind horizontal system bars or display cut outs
sds100 May 13, 2025
fa1510f
Merge branch 'develop' into feature/1394-kernel-remapping
sds100 May 13, 2025
ccadd85
#1394 examples for opening developer options and highlighting the bui…
sds100 May 14, 2025
2407d1c
#1466 demo tap target on home screen to create a key map
sds100 May 14, 2025
119dd8b
refactor: move files to better package names
sds100 May 14, 2025
2db20a6
Merge branch 'develop' into feature/1466-tap-target-onboarding
sds100 May 14, 2025
6fe4da9
fix style and tests
sds100 May 14, 2025
3e0136a
Merge branch 'develop' into feature/1466-tap-target-onboarding
sds100 May 14, 2025
9b2092b
#1466 feat: add tap target to create a key map
sds100 May 14, 2025
bb2181c
#1466 feat: add tap targets to record a trigger and view advanced tri…
sds100 May 14, 2025
0a6240a
#1466 update CREDITS.md
sds100 May 14, 2025
e6421f8
#1466 feat: show tap targets for actions and constraints
sds100 May 14, 2025
529ad08
#1466 feat: only show the advanced triggers tap target if they made a…
sds100 May 14, 2025
81b5bc0
#1466 upgrade tap target library
sds100 May 14, 2025
a141fad
#1466 remove unused turkish translation
sds100 May 14, 2025
162ce47
chore: bump version code
sds100 May 14, 2025
18cafba
Merge branch 'feature/1466-tap-target-onboarding' into develop
sds100 May 15, 2025
23fe601
#1701 feat: improve the ordering of actions and categories
sds100 May 15, 2025
4bcbaa7
#1706 fix: optimize the trigger screen for smaller screens
sds100 May 15, 2025
b046a28
#1699 fix: do not highlight a floating button as if it is pressed aft…
sds100 May 15, 2025
3bc3f48
delete untranslated fastlane files
sds100 May 15, 2025
468afce
New Crowdin translations by GitHub Action
crowdin-bot May 15, 2025
3230815
Merge pull request #1692 from keymapperorg/l10n/develop
sds100 May 15, 2025
5a5fe08
Merge branch 'develop' into feature/1394-kernel-remapping
sds100 May 15, 2025
1b373b0
#1394 feat: add empty PRO mode screen
sds100 May 15, 2025
6bb3ea7
#1394 feat: show warning at the top of PRO mode set up page
sds100 May 15, 2025
eb3554a
#1394 feat: add cards to set up PRO mode with root or shizuku
sds100 May 15, 2025
9975c00
#1394 feat: use libsu library to detect and request root permission
sds100 May 15, 2025
6282d9a
#1394 feat: use libsu Shell for executing root commands
sds100 May 15, 2025
7a1118c
#1394 delete redundant linux header files that are included in the An…
sds100 May 15, 2025
00eefa3
#1394 create separate libraries for the evdev service and the ADB sta…
sds100 May 15, 2025
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
27 changes: 27 additions & 0 deletions .cursor/rules/create-action.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
---
description:
globs:
alwaysApply: false
---
[ActionEntity.kt](mdc:app/src/main/java/io/github/sds100/keymapper/data/entities/ActionEntity.kt) [ActionDataEntityMapper.kt](mdc:app/src/main/java/io/github/sds100/keymapper/actions/ActionDataEntityMapper.kt) [ActionData.kt](mdc:app/src/main/java/io/github/sds100/keymapper/actions/ActionData.kt) [ActionId.kt](mdc:app/src/main/java/io/github/sds100/keymapper/actions/ActionId.kt) [PerformActionsUseCase.kt](mdc:app/src/main/java/io/github/sds100/keymapper/actions/PerformActionsUseCase.kt) [ActionUtils.kt](mdc:app/src/main/java/io/github/sds100/keymapper/actions/ActionUtils.kt) [strings.xml](mdc:app/src/main/res/values/strings.xml) [ActionUiHelper.kt](mdc:app/src/main/java/io/github/sds100/keymapper/actions/ActionUiHelper.kt) [CreateActionDelegate.kt](mdc:app/src/main/java/io/github/sds100/keymapper/actions/CreateActionDelegate.kt)


When you create an action you must follow these steps:

0. Ask me whether the action is editable.
1. Create a new id in ActionId
2. Create a new ActionData
3. Map the data to and from an entity in ActionDataEntityMapper
4. Give the action a category in ActionUtils
5. If the action is editable then add it to the isEditable function in ActionUtils
6. Create a title for the action in strings.xml
7. Give the action a title and icon in ActionUtils. Only create a compose Icon. Ignore the drawable one.
8. Give the action a title in ActionUiHelper
9. Stub out the action in PerformActionsUseCase
10. Handle creating the action in CreateActionDelegate

Important things to remember:

- Do not delete any existing code for other actions.
- Follow the naming of existing code and strings and do not change them.
- Add code near existing code for similar actions.
71 changes: 71 additions & 0 deletions .cursor/rules/jetpack-compose.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
---
description:
globs:
alwaysApply: false
---

# Android Native (Jetpack Compose)

# Android Jetpack Compose .cursorrules

## Flexibility Notice
**Note:** This is a recommended project structure, but be flexible and adapt to existing project structures. Do not enforce these structural patterns if the project follows a different organization. Focus on maintaining consistency with the existing project architecture while applying Jetpack Compose best practices.

## Project Architecture and Best Practices
```kotlin
val androidJetpackComposeBestPractices = listOf(
"Adapt to existing project architecture while maintaining clean code principles",
"Follow Material Design 3 guidelines and components",
"Implement clean architecture with domain, data, and presentation layers",
"Use Kotlin coroutines and Flow for asynchronous operations",
"Implement dependency injection using Hilt",
"Follow unidirectional data flow with ViewModel and UI State",
"Use Compose navigation for screen management",
"Implement proper state hoisting and composition"
)
```

## Folder Structure
**Note:** This is a reference structure. Adapt to the project's existing organization.
```plaintext
app/
src/
main/
java/io/github/sds100/keymapper
actions/
constraints/
groups/
home/
mappings/
keymaps/
utils/
res/
values/
drawable/
mipmap/
test/
androidTest/
```

## Compose UI Guidelines
1. Use `remember` and `derivedStateOf` appropriately
2. Implement proper recomposition optimization
3. Use proper Compose modifiers ordering
4. Follow composable function naming conventions
5. Implement proper preview annotations
6. Use proper state management with `MutableState`
7. Implement proper error handling and loading states
8. Use proper theming with `MaterialTheme`
9. Follow accessibility guidelines
10. Implement proper animation patterns

## Performance Guidelines
1. Minimize recomposition using proper keys
2. Use proper lazy loading with `LazyColumn` and `LazyRow`
3. Implement efficient image loading
4. Use proper state management to prevent unnecessary updates
5. Follow proper lifecycle awareness
6. Implement proper memory management
7. Use proper background processing


35 changes: 35 additions & 0 deletions .idea/codeStyles/Project.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

44 changes: 43 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,58 @@
## [3.1.0](https://github.com/sds100/KeyMapper/releases/tag/v3.1.0)
## [3.1.2](https://github.com/sds100/KeyMapper/releases/tag/v3.1.2)

#### TO BE RELEASED

## Added

- #1466 show onboarding when creating a key map for the first time

## Changed

- #1701 improve the order of the actions and categories

## Bug fixes

- #1686 (more fixes) do not show some screens behind system bars on the left/right side of the device.
- #1701 optimize the trigger screen for smaller screens so elements are less cut off.
- #1699 Do not highlight a floating button as if it is pressed after triggering a key event action from it.

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

#### 12 May 2025

## Added

- #1637 show a home screen error if notification permission is not granted.
- #1435 Pick system sounds/ringtones for the Sound action.

## Bug fixes

- Do not automatically select the key mapper keyboard when the accessibility service starts.
- #1686 do not show some screens behind system bars on the left/right side of the device.
- Use same sized list items when choosing a constraint.

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

#### 10 May 2025

## Added

- #699 Time constraints ⏰
- #257 Action to interact with user interface elements inside other apps.
- #1663 Actions to stop, step forward, and step backward playing media.
- #1682 Show "Purchased!" text next to the use button for advanced triggers.

## Changed

- Rename tap screen actions inside key maps.

## Bug fixes

- #1683 key event actions work in Minecraft and other apps again.
- Export log files as .txt instead of .zip files.
- #1684 Removed the redundant and broken refresh devices button when configuring a key event action because they are automatically refreshed anyway.
- #1687 restoring key map groups would sometimes fail.

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

#### 28 April 2025
Expand Down
3 changes: 2 additions & 1 deletion CREDITS.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@ Many thanks to...
- [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.
- @[AppIntro](https://github.com/AppIntro) for their [AppIntro](https://github.com/AppIntro/AppIntro) 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.
- @[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
Expand Down
22 changes: 13 additions & 9 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -162,12 +162,14 @@ android {

dependencies {
implementation fileTree(include: ["*.jar"], dir: "libs")
implementation project(':nativelib')
implementation project(':privstarter')

compileOnly project(":systemstubs")

def room_version = "2.7.1"
def coroutinesVersion = "1.9.0"
def nav_version = '2.8.9'
def nav_version = '2.9.0'
def epoxy_version = "4.6.2"
def splitties_version = "3.0.0"
def multidex_version = "2.0.1"
Expand All @@ -192,10 +194,12 @@ dependencies {
implementation "dev.rikka.shizuku:api:$shizuku_version"
implementation "dev.rikka.shizuku:provider:$shizuku_version"
implementation "org.lsposed.hiddenapibypass:hiddenapibypass:4.3"
proImplementation 'com.revenuecat.purchases:purchases:8.17.0'
proImplementation 'com.revenuecat.purchases:purchases:8.17.1'
proImplementation "com.airbnb.android:lottie-compose:6.6.3"
implementation("com.squareup.okhttp3:okhttp:4.12.0")
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.5")
implementation 'com.canopas.intro-showcase-view:introshowcaseview:2.0.2'
implementation "com.github.topjohnwu.libsu:core:6.0.0"

// splitties
implementation "com.louiscad.splitties:splitties-bitflags:$splitties_version"
Expand All @@ -211,9 +215,9 @@ dependencies {

implementation "androidx.activity:activity-ktx:1.10.1"
implementation "androidx.fragment:fragment-ktx:1.8.6"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.7"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.8.7"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.8.7"
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.9.0"
implementation "androidx.lifecycle:lifecycle-runtime-ktx:2.9.0"
implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.9.0"
implementation "androidx.room:room-ktx:$room_version"
implementation "androidx.navigation:navigation-fragment-ktx:$nav_version"
implementation "androidx.navigation:navigation-ui-ktx:$nav_version"
Expand All @@ -225,15 +229,15 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-extensions:2.2.0"
implementation "androidx.room:room-runtime:$room_version"
implementation "androidx.viewpager2:viewpager2:1.1.0"
implementation "androidx.datastore:datastore-preferences:1.2.0-alpha01"
implementation "androidx.datastore:datastore-preferences:1.2.0-alpha02"
implementation "androidx.core:core-splashscreen:1.0.1"
implementation "androidx.activity:activity-compose:1.10.1"
implementation "androidx.navigation:navigation-compose:2.8.9"
implementation "androidx.navigation:navigation-fragment-compose:2.8.9"
implementation "androidx.navigation:navigation-compose:2.9.0"
implementation "androidx.navigation:navigation-fragment-compose:2.9.0"
ksp "androidx.room:room-compiler:$room_version"

// Compose
Dependency composeBom = platform('androidx.compose:compose-bom-beta:2025.04.01')
Dependency composeBom = platform('androidx.compose:compose-bom-beta:2025.05.00')
implementation composeBom
implementation 'androidx.compose.foundation:foundation'
implementation "androidx.compose.ui:ui-android"
Expand Down
Loading
Loading