Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
6fd3c18
#257 create accessibility node repository and WIP recording of nodes
sds100 Apr 2, 2025
4660c00
#257 add field for whether the user interacted with the node
sds100 Apr 2, 2025
4a30fdc
#699 WIP: time constraints
sds100 Apr 14, 2025
e7fc5a1
Merge branch 'develop' into feature/699-time-constraints
sds100 Apr 27, 2025
67e1df1
#699 feat: time constraints
sds100 Apr 29, 2025
f425481
Merge branch 'develop' into feature/699-time-constraints
sds100 Apr 29, 2025
43bace5
chore: add time constraints to changelog
sds100 Apr 29, 2025
c32862e
Merge branch 'feature/699-time-constraints' into develop
sds100 Apr 29, 2025
fd1e993
chore: bump version to 3.1.0
sds100 Apr 29, 2025
28333cb
Merge branch 'develop' into feature/257-interact-with-screen-element
sds100 Apr 29, 2025
d059864
#257 WIP: create interact with UI element action
sds100 Apr 30, 2025
f1e1ec5
#257 WIP: create interact with UI element screen
sds100 May 1, 2025
289b3c3
#257 start/stop recording UI elements
sds100 May 1, 2025
a55808a
feat: rename tap screen actions inside key maps
sds100 May 3, 2025
03b43b6
feat: rename tap screen actions inside key maps
sds100 May 3, 2025
21d0062
#257 feat: show teh number of interactions
sds100 May 3, 2025
22c3226
#257 recording nodes works
sds100 May 3, 2025
bb6ccba
#257 list recorded apps
sds100 May 3, 2025
410c1ae
#257 listing recorded UI elements works
sds100 May 4, 2025
6824ed3
#257 filter interaction types
sds100 May 4, 2025
3e1aba7
#257 complete creating interact UI element actions
sds100 May 4, 2025
670631e
#257 performing interact with UI element actions works
sds100 May 4, 2025
8296340
#257 save nodes to the database
sds100 May 4, 2025
6841c86
#257 save all nodes within the bounds of the source event node
sds100 May 4, 2025
44b66ad
#257 delete TODOs
sds100 May 4, 2025
b96fca3
#257 add to changelog
sds100 May 4, 2025
8c8e020
#257 fix style and free build compilation issues
sds100 May 4, 2025
00480dd
#257 fix tests and style
sds100 May 4, 2025
85bba02
#257 delete random characters
sds100 May 4, 2025
38b3f09
#257 fix style
sds100 May 4, 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
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.

22 changes: 22 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,25 @@
## [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
16 changes: 10 additions & 6 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@ android {
}

compileOptions {
// Required for desugaring new Java time API on lower than API 26
coreLibraryDesugaringEnabled = true

sourceCompatibility JavaVersion.VERSION_17
targetCompatibility JavaVersion.VERSION_17
}
Expand Down Expand Up @@ -162,7 +165,7 @@ dependencies {

compileOnly project(":systemstubs")

def room_version = "2.6.1"
def room_version = "2.7.1"
def coroutinesVersion = "1.9.0"
def nav_version = '2.8.9'
def epoxy_version = "4.6.2"
Expand All @@ -176,7 +179,7 @@ dependencies {
implementation "org.jetbrains.kotlinx:kotlinx-serialization-json:1.8.0"

// random stuff
implementation "com.google.android.material:material:1.13.0-alpha12"
implementation "com.google.android.material:material:1.13.0-alpha13"
implementation "com.github.salomonbrys.kotson:kotson:2.5.0"
implementation "com.airbnb.android:epoxy:$epoxy_version"
implementation "com.airbnb.android:epoxy-databinding:$epoxy_version"
Expand All @@ -189,9 +192,10 @@ 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.15.0'
proImplementation 'com.revenuecat.purchases:purchases:8.17.0'
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")

// splitties
implementation "com.louiscad.splitties:splitties-bitflags:$splitties_version"
Expand All @@ -203,7 +207,7 @@ dependencies {

// androidx
implementation "androidx.legacy:legacy-support-core-ui:1.0.0"
implementation "androidx.core:core-ktx:1.15.0"
implementation "androidx.core:core-ktx:1.16.0"

implementation "androidx.activity:activity-ktx:1.10.1"
implementation "androidx.fragment:fragment-ktx:1.8.6"
Expand All @@ -221,15 +225,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"
ksp "androidx.room:room-compiler:$room_version"

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