Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release 2.7.0 #1357

Merged
merged 134 commits into from
Dec 8, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
76840fe
chore: add pro build flavor
sds100 Aug 11, 2024
c7445f8
Merge branch 'refs/heads/develop' into develop-pro
sds100 Aug 11, 2024
09bd3c1
#1274 add empty assistant trigger fragment
sds100 Aug 13, 2024
bd4768d
fix KeyMapController
sds100 Aug 13, 2024
b353671
chore: upgrade kotlin version
sds100 Aug 13, 2024
aa9986f
#1274 use build flavor source directory rather than gradle module
sds100 Aug 13, 2024
e92d6d3
#1274 update text for free version
sds100 Aug 13, 2024
a7d3fbc
#1274 add billing library dependency for pro build
sds100 Aug 13, 2024
6d3dde3
Merge branch 'develop' into 1274-set-key-mapper-as-the-device-assista…
sds100 Aug 13, 2024
c279616
Update README.md
sds100 Sep 14, 2024
03242f8
Merge branch 'develop' into 1274-set-key-mapper-as-the-device-assista…
sds100 Sep 14, 2024
e30e30e
delete home tab for assistant trigger
sds100 Sep 14, 2024
f738776
tests: duplicate shared test utils across android and unit tests beca…
sds100 Sep 16, 2024
9e04eb6
tests: duplicate shared test utils across android and unit tests beca…
sds100 Sep 16, 2024
731a329
#1297: send events to accessibility service asynchronously
sds100 Sep 16, 2024
3c39f57
#1297: make accessibility service controller an abstract class
sds100 Sep 16, 2024
e6f3bbc
#1304 docs: add vietnamese translations badge to README
sds100 Sep 25, 2024
9c35460
chore: use github actions checkout@v4
sds100 Sep 25, 2024
6886e22
chore: use github actions upload-artifact@v4
sds100 Sep 25, 2024
6d54885
New Crowdin translations by GitHub Action
crowdin-bot Sep 25, 2024
5fa1698
Merge pull request #1305 from keymapperorg/l10n/develop
sds100 Sep 25, 2024
6652bd4
Merge branch 'refs/heads/develop' into 1274-set-key-mapper-as-the-dev…
sds100 Sep 26, 2024
5be22b9
#1297 change trigger screen placeholder text to mention advanced trig…
sds100 Sep 26, 2024
3c5b7e1
#1297 only show the trigger mode buttons if there are keys recorded
sds100 Sep 26, 2024
7cdca46
#1297 add theme for jetpack compose
sds100 Sep 26, 2024
286b0bf
#1297 add empty Jetpack Compose record trigger button
sds100 Sep 26, 2024
8f57a60
#1297 use dynamic Material You colors for compose theme
sds100 Sep 26, 2024
00bf278
fix (ConfigMappingFragment): Don't show the swipe animations for reac…
sds100 Sep 26, 2024
1433ee5
#1297 complete new record trigger button
sds100 Sep 28, 2024
8df65ce
#1297 create empty bottom sheet for choosing advanced triggers
sds100 Sep 29, 2024
6519be5
#1297 create stubbed advanced triggers bottom sheet for free build
sds100 Sep 29, 2024
b16c234
#1297 add NEW! badge to advanced triggers button
sds100 Sep 29, 2024
7f32657
#1297 add system bars padding to advanced triggers bottomsheet
sds100 Sep 29, 2024
bb01372
#1297 complete assistant trigger product card
sds100 Sep 29, 2024
5f2c051
#1222 #1307 fix: execute the correct app shortcut action if multiple …
sds100 Sep 29, 2024
b7d6a9c
chore: set version to 2.6.3
sds100 Sep 29, 2024
6baf224
delete AutoSwitchImeControllerTest
sds100 Sep 29, 2024
60baa82
chore: upgrade coroutines version to 1.9.0
sds100 Sep 29, 2024
2d29dbe
use new testdispatcher in TestDispatcherProvider
sds100 Sep 29, 2024
c89b8a5
tests: fix GetActionErrorUseCaseTest
sds100 Sep 29, 2024
04bd7a8
run unit tests in github actions workflows
sds100 Sep 29, 2024
b2ac3eb
#1308 fix tests to use new Coroutines library in 1.6.0
sds100 Sep 29, 2024
b18a2cb
use Java 17 for unit tests in github actions
sds100 Sep 29, 2024
5b67bec
Merge pull request #1309 from keymapperorg/fix-tests
sds100 Sep 29, 2024
b7dcace
#1271 fix: ignore double press key maps overlapping short press key m…
sds100 Oct 1, 2024
a9159f3
docs: remove maintenance notice header
sds100 Oct 1, 2024
e1c1afc
Merge branch 'develop' into 1274-set-key-mapper-as-the-device-assista…
sds100 Oct 3, 2024
be93e77
#1274 name KeyMapTrigger to CustomTrigger
sds100 Oct 3, 2024
6ae4cc9
#1274 move TriggerKeyEntity to its own file
sds100 Oct 3, 2024
2b2ac17
use kotlinx.parcelize instead of kotlinx.android.parcel
sds100 Oct 3, 2024
db8b2d4
refactor: rename CustomTrigger to Trigger
sds100 Oct 3, 2024
af0c895
refactor: move TriggerKeyMapFromOtherAppsController to different package
sds100 Oct 3, 2024
c82459a
#1274: represent assistant triggers as normal key map trigger keys
sds100 Oct 3, 2024
3022249
refactor: move all click types and annotation to TriggerKey
sds100 Oct 4, 2024
0dbd022
chore: disable writing function bodies inline
sds100 Oct 5, 2024
bafb15b
#1274 WIP: add assistant trigger key
sds100 Oct 5, 2024
4ac8364
delete code that migrates device names for triggers from before versi…
sds100 Oct 5, 2024
0fe594f
New Crowdin translations by GitHub Action
crowdin-bot Oct 5, 2024
a3dc103
Merge branch 'develop' into 1274-set-key-mapper-as-the-device-assista…
sds100 Oct 5, 2024
3df2d65
Merge pull request #1315 from keymapperorg/l10n/develop
sds100 Oct 6, 2024
5403af4
Update issue templates
sds100 Oct 6, 2024
b3125be
#1274 wip: support assistant trigger in keymapcontroller
sds100 Oct 6, 2024
11752b1
#1274 move all strings for advanced triggers into the public repo
sds100 Oct 6, 2024
4cf532f
readme: Hide translation badges until the shield link is fixed
sds100 Oct 8, 2024
3521dac
tests: remove tests for issue #612.
sds100 Oct 8, 2024
995176a
New Crowdin translations by GitHub Action
crowdin-bot Oct 8, 2024
8753e90
Merge pull request #1317 from keymapperorg/l10n/develop
sds100 Oct 8, 2024
ad9bd58
tests: add tests from pro build flavor
sds100 Oct 12, 2024
9bca41b
#1274 use SplashActivity explicitly in app run configuration because …
sds100 Oct 12, 2024
b45a800
#1274 allow using the screen off constraint with assistant triggers s…
sds100 Oct 12, 2024
cc84b3f
#1274 style: rename variable
sds100 Oct 13, 2024
717de79
fix: add padding between tabs and trigger list
sds100 Oct 13, 2024
f6e1e95
#1274 fix: hide click type buttons if a parallel trigger has an assis…
sds100 Oct 13, 2024
d5f335b
#1274 set parallel trigger to short press when adding assistant key
sds100 Oct 13, 2024
83e3d69
#1274 fix: use custom JSON name for type field in AssistantTriggerKey
sds100 Oct 13, 2024
9b7c0a7
#1274 show dialog to select which assistant type when clicking more o…
sds100 Oct 13, 2024
5bbf802
#1274 update google play billing library
sds100 Oct 13, 2024
ff67ae8
#1274 set version to 2.7.0
sds100 Oct 13, 2024
454dd82
#1274 set version to 2.7.0 alpha
sds100 Oct 13, 2024
917981f
#1274 add Dagger Hilt dependency injection and split up MainActivity …
sds100 Oct 15, 2024
155bde5
refactor: use data object instead of object for Result errors
sds100 Oct 15, 2024
9c8582d
#1274 fix errors for free build
sds100 Oct 15, 2024
7baf108
#1274 add revenuecat public api key to BuildConfig from local.properties
sds100 Oct 15, 2024
a5ba747
#1274 pass viewmodel to AdvancedTriggersBottomSheet so it is compatib…
sds100 Oct 15, 2024
3b19cfb
#1274 delete hilt and inject PurchasingUseCase into ConfigTriggerView…
sds100 Oct 16, 2024
121f4f8
remove unused home_tab_titles string array from resources
sds100 Oct 16, 2024
00ed19c
#1274 add debug_release build type that does not alter the package na…
sds100 Oct 16, 2024
381c874
#1274 bump compose library versions and add tooling for debug_release…
sds100 Oct 16, 2024
fc22ab0
#1274 extend debug_release from debug build type
sds100 Oct 16, 2024
48aac71
#1274 purchase assistant trigger and check whether it is purchased
sds100 Oct 16, 2024
89948a9
#1328 fix: don't crash when generating the key events for a non-ASCII…
sds100 Nov 7, 2024
ce49d6f
New Crowdin translations by GitHub Action
crowdin-bot Nov 7, 2024
9fbe7c9
Merge pull request #1334 from keymapperorg/l10n/develop
sds100 Nov 7, 2024
5b232f2
#1274 feat: show dialog if an error is encountered while purchasing
sds100 Nov 7, 2024
8b4c088
Merge branch 'develop' into 1274-set-key-mapper-as-the-device-assista…
sds100 Nov 7, 2024
5235760
#1274 dismiss advanced triggers bottom sheet after choosing assistant…
sds100 Nov 7, 2024
628dfd3
#1274 dismiss bottom sheet after it is hidden
sds100 Nov 7, 2024
2db6560
#1274 fix: do not allow multiple trigger keys when switching to a par…
sds100 Nov 7, 2024
cdc1a31
#1274 feat: show a button to contact the developer if they have purch…
sds100 Nov 8, 2024
e1c16b1
#1274 feat: show thank you dialog after purchasing
sds100 Nov 8, 2024
028a8cd
#1274 feat: show errors if the assistant is not purchased or key mapp…
sds100 Nov 12, 2024
38bde34
#1274 feat: instruct the user to buy the advanced trigger on the home…
sds100 Nov 12, 2024
a4723b6
#1274 feat: inform the user that advanced triggers are only available…
sds100 Nov 12, 2024
3cc1549
#1274 feat: show error when Key Mapper is not selected as the device …
sds100 Nov 14, 2024
ad1af28
#1274 fix: only show button for long press if all the keys are key co…
sds100 Nov 14, 2024
7142f2c
#1274 fix: restore key maps by using gson instance that uses the dese…
sds100 Nov 14, 2024
9fbb316
#1274 fix: missing member in free PurchasingManagerImpl
sds100 Nov 14, 2024
8e4a1c3
update libraries
sds100 Nov 16, 2024
3071715
#1274 update store description to say Google Assistant, Pixel Active …
sds100 Nov 16, 2024
32012b9
docs: fix translations badges in website and readme
sds100 Nov 16, 2024
58500e6
#1274 reword strings related to default assistant app
sds100 Nov 24, 2024
102fc95
#1274 document the new assistant trigger
sds100 Nov 24, 2024
69eae2e
#1274 document the build flavors and build types
sds100 Nov 24, 2024
6136c73
#1274 update maintenance notice
sds100 Nov 24, 2024
7ac3ccb
#1274 fix docs website redirects and add redirect to advanced triggers
sds100 Nov 24, 2024
f70a860
#1274 add button to learn more about advanced triggers that opens the…
sds100 Nov 24, 2024
947c641
no longer show notifications or app intro slides for the fingerprint …
sds100 Nov 24, 2024
cff5897
#1274 feat: show a notification presenting the new assistant trigger …
sds100 Dec 4, 2024
a641f91
fix: do not fail gradle sync if local.properties doesn't exist for th…
sds100 Dec 4, 2024
70acd62
#1274 chore: assemble free CI build when creating testing builds and …
sds100 Dec 4, 2024
7f630c2
fix: remove unused home_tab_titles string array in polish strings
sds100 Dec 4, 2024
8fad3e2
Merge pull request #1351 from keymapperorg/1274-set-key-mapper-as-the…
sds100 Dec 4, 2024
2727353
New Crowdin translations by GitHub Action
crowdin-bot Dec 4, 2024
53233fc
Merge pull request #1352 from keymapperorg/l10n/develop
sds100 Dec 4, 2024
525641a
chore: delete production github actions since Pro builds for the play…
sds100 Dec 4, 2024
1100a34
update whats-new.txt
sds100 Dec 4, 2024
8e02a62
fix: use correct path for CI testing builds
sds100 Dec 4, 2024
de67923
#1274 fix: after tapping the notification, do not navigate to the adv…
sds100 Dec 8, 2024
2f3958a
chore: write changelog for 2.7.0
sds100 Dec 8, 2024
296a1ec
New Crowdin translations by GitHub Action
crowdin-bot Dec 8, 2024
01d29fd
chore: update changelog for 2.7.0
sds100 Dec 8, 2024
d5eae77
Merge pull request #1356 from keymapperorg/l10n/develop
sds100 Dec 8, 2024
5f8469d
chore: make releasing to production manual in fastlane
sds100 Dec 8, 2024
c3b3a26
Merge remote-tracking branch 'origin/develop' into develop
sds100 Dec 8, 2024
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
1 change: 1 addition & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
[*.{kt,kts}]
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
4 changes: 1 addition & 3 deletions .github/ISSUE_TEMPLATE/bug_report.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,14 @@
name: Bug report
about: Create a report to help us improve
title: ''
labels: bug
labels: bug, needs triage
assignees: sds100

---

**Developer TODO (don't remove)**
- [ ] create new branch. put issue number at start of name if not a very quick fix.
- [ ] write tests. put issue number in comment
- [ ] update documentation
- [ ] merge and delete branch (don't squash because want commit history to see why I made changes)

**Discord message link/email recipient**

Expand Down
4 changes: 1 addition & 3 deletions .github/ISSUE_TEMPLATE/new-feature.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@
name: New Feature
about: Add a new feature or enhancement to the app.
title: ''
labels: enhancement
labels: enhancement, needs triage
assignees: sds100

---

**Developer TODO (don't remove)**
- [ ] create new branch. put issue number at start of name
- [ ] update documentation
- [ ] merge and delete branch (don't squash because want commit history to see why I made changes)
2 changes: 1 addition & 1 deletion .github/workflows/build-mkdocs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4
- uses: actions/setup-python@v4
with:
python-version: 3.x
Expand Down
62 changes: 0 additions & 62 deletions .github/workflows/production.yml

This file was deleted.

23 changes: 21 additions & 2 deletions .github/workflows/pull-request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,31 @@ on:
pull_request:

jobs:
test:
name: Run unit tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'oracle'
java-version: 17
cache: 'gradle'

- name: Setup Android SDK
uses: android-actions/setup-android@v2

- name: Unit tests
run: bash ./gradlew testDebugUnitTest

style:
name: Code style check
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4

- uses: actions/cache@v3
with:
Expand Down Expand Up @@ -38,7 +57,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4

- uses: actions/cache@v3
with:
Expand Down
27 changes: 23 additions & 4 deletions .github/workflows/testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,31 @@ concurrency:
cancel-in-progress: true

jobs:
test:
name: Run unit tests
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- name: set up JDK 17
uses: actions/setup-java@v3
with:
distribution: 'oracle'
java-version: 17
cache: 'gradle'

- name: Setup Android SDK
uses: android-actions/setup-android@v2

- name: Unit tests
run: bash ./gradlew testDebugUnitTest

style:
name: Code style check
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4

- uses: actions/cache@v3
with:
Expand Down Expand Up @@ -44,7 +63,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
uses: actions/checkout@v4

- uses: actions/cache@v3
with:
Expand Down Expand Up @@ -97,7 +116,7 @@ jobs:
run: echo "APK_NAME=$(basename app/build/outputs/apk/ci/*.apk .apk)" >> $GITHUB_ENV

- name: Upload APK
uses: actions/upload-artifact@v1
uses: actions/upload-artifact@v4
with:
name: ${{ env.APK_NAME }}
path: app/build/outputs/apk/ci/${{ env.APK_NAME }}.apk
Expand All @@ -107,7 +126,7 @@ jobs:
env:
DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }}
with:
args: app/build/outputs/apk/ci/${{ env.APK_NAME }}.apk
args: app/build/outputs/apk/free/ci/${{ env.APK_NAME }}.apk

- name: Report build status to Discord
uses: sarisia/actions-status-discord@v1
Expand Down
68 changes: 68 additions & 0 deletions .idea/runConfigurations/app.xml

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

14 changes: 14 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,17 @@
## [2.7.0](https://github.com/sds100/KeyMapper/releases/tag/v2.7.0)

#### 8 December 2024

## Added

- #1274 New trigger! You can now trigger your key maps from any of the ways your phone launches the assistant! This could be the Bixby button, Power button, or a button on your headset.
- #1304 Vietnamese translations.

## Bug fixes

- #1222 #1307 Key Mapper doesn't execute the correct app shortcut action if you created multiple from the same app.
- #1328 Single-character non-ASCII TEXT_BLOCK input crashes the service

## [2.6.2](https://github.com/sds100/KeyMapper/releases/tag/v2.6.2)

#### 9 September 2024
Expand Down
17 changes: 10 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
**Project in maintenance mode.**
**Project under slower development.**
> Well, working on this project was a fun ride 🎢! This project has taught me so much about Android, software development and how to collaborate with an online community. It has been my dream to lead a big FOSS project with people from all over the world so a **huge** thank you goes to everyone that spread the word and helped on GitHub along the way ☺. Unfortunately, I do not have any more time to work on this project - I'm now studying Computer Science at university and I have landed software-dev side jobs, which has taken up any free-time I did have to code on the side.
>
> A special thank you goes to everyone in the [Team](https://docs.keymapper.club/#our-team) for their long-term
Expand Down Expand Up @@ -27,14 +27,17 @@ Key Mapper is a free and open source Android app that can remap your buttons and

🎉 Check out the [website](https://docs.keymapper.club) for more information and help! 🎉


## Translations

![cs translation](https://img.shields.io/badge/dynamic/json?color=blue&label=Czech&style=flat&logo=crowdin&query=%24.progress[?(@.data.languageId==%27cs%27)].data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-13864667-360045.json)
![es-ES translation](https://img.shields.io/badge/dynamic/json?color=blue&label=Spanish&style=flat&logo=crowdin&query=%24.progress[?(@.data.languageId==%27es-ES%27)].data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-13864667-360045.json)
![pl translation](https://img.shields.io/badge/dynamic/json?color=blue&label=Polish&style=flat&logo=crowdin&query=%24.progress[?(@.data.languageId==%27pl%27)].data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-13864667-360045.json)
![ru translation](https://img.shields.io/badge/dynamic/json?color=blue&label=Russian&style=flat&logo=crowdin&query=%24.progress[?(@.data.languageId==%27ru%27)].data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-13864667-360045.json)
![sk translation](https://img.shields.io/badge/dynamic/json?color=blue&label=Slovak&style=flat&logo=crowdin&query=%24.progress[?(@.data.languageId==%27sk%27)].data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-13864667-360045.json)
![zh-CN translation](https://img.shields.io/badge/dynamic/json?color=blue&label=Chinese%20(Simplified)&style=flat&logo=crowdin&query=%24.progress[?(@.data.languageId==%27zh-CN%27)].data.translationProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-13864667-360045.json)
[![cs proofreading](https://img.shields.io/badge/dynamic/json?color=green&label=cs&style=flat&logo=crowdin&query=%24.progress.1.data.approvalProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-13864667-360045-update.json)](https://crowdin.com/project/key-mapper)
[![es-ES proofreading](https://img.shields.io/badge/dynamic/json?color=green&label=es-ES&style=flat&logo=crowdin&query=%24.progress.3.data.approvalProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-13864667-360045-update.json)](https://crowdin.com/project/key-mapper)
[![pl proofreading](https://img.shields.io/badge/dynamic/json?color=green&label=pl&style=flat&logo=crowdin&query=%24.progress.8.data.approvalProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-13864667-360045-update.json)](https://crowdin.com/project/key-mapper)
[![pt-BR proofreading](https://img.shields.io/badge/dynamic/json?color=green&label=pt-BR&style=flat&logo=crowdin&query=%24.progress.9.data.approvalProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-13864667-360045-update.json)](https://crowdin.com/project/key-mapper)
[![ru proofreading](https://img.shields.io/badge/dynamic/json?color=green&label=ru&style=flat&logo=crowdin&query=%24.progress.10.data.approvalProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-13864667-360045-update.json)](https://crowdin.com/project/key-mapper)
[![sk proofreading](https://img.shields.io/badge/dynamic/json?color=green&label=sk&style=flat&logo=crowdin&query=%24.progress.11.data.approvalProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-13864667-360045-update.json)](https://crowdin.com/project/key-mapper)
[![zh-CN proofreading](https://img.shields.io/badge/dynamic/json?color=green&label=zh-CN&style=flat&logo=crowdin&query=%24.progress.15.data.approvalProgress&url=https%3A%2F%2Fbadges.awesome-crowdin.com%2Fstats-13864667-360045-update.json)](https://crowdin.com/project/key-mapper)


## Star History

Expand Down
Loading
Loading