From 1e8b21ab86e608de457a56ed21a45557310d91e3 Mon Sep 17 00:00:00 2001 From: sds100 Date: Wed, 19 Feb 2025 12:52:20 -0600 Subject: [PATCH 1/7] chore: bump version to 2.8.2 --- app/version.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/version.properties b/app/version.properties index a6bfd62b14..ea27606da7 100644 --- a/app/version.properties +++ b/app/version.properties @@ -1,3 +1,3 @@ -VERSION_NAME=2.8.1 -VERSION_CODE=72 +VERSION_NAME=2.8.2 +VERSION_CODE=73 VERSION_NUM=0 \ No newline at end of file From 07c588a82ee6036f05f90436314997e2b39f91ea Mon Sep 17 00:00:00 2001 From: sds100 Date: Thu, 20 Feb 2025 12:31:01 -0600 Subject: [PATCH 2/7] #1461 fix: crash on startup due to getting MotionEvent device --- .../mappings/keymaps/detection/DpadMotionEventTracker.kt | 9 +++++++-- .../system/accessibility/MyAccessibilityService.kt | 6 +----- .../sds100/keymapper/system/inputevents/MyMotionEvent.kt | 4 ++-- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/detection/DpadMotionEventTracker.kt b/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/detection/DpadMotionEventTracker.kt index 0162c06913..202ba121ad 100644 --- a/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/detection/DpadMotionEventTracker.kt +++ b/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/detection/DpadMotionEventTracker.kt @@ -1,6 +1,7 @@ package io.github.sds100.keymapper.mappings.keymaps.detection import android.view.KeyEvent +import io.github.sds100.keymapper.system.devices.InputDeviceInfo import io.github.sds100.keymapper.system.inputevents.InputEventUtils import io.github.sds100.keymapper.system.inputevents.MyKeyEvent import io.github.sds100.keymapper.system.inputevents.MyMotionEvent @@ -62,11 +63,11 @@ class DpadMotionEventTracker { * @return An array of key events. Empty if no DPAD buttons changed. */ fun convertMotionEvent(event: MyMotionEvent): List { - val oldState = dpadState[event.device.descriptor] ?: 0 + val oldState = dpadState[event.device.getDescriptor()] ?: 0 val newState = eventToDpadState(event) val diff = oldState xor newState - dpadState[event.device.descriptor] = newState + dpadState[event.device.getDescriptor()] = newState // If no dpad keys changed then return null if (diff == 0) { @@ -114,6 +115,10 @@ class DpadMotionEventTracker { dpadState.clear() } + private fun InputDeviceInfo?.getDescriptor(): String { + return this?.descriptor ?: "" + } + private fun eventToDpadState(event: MyMotionEvent): Int { var state = 0 diff --git a/app/src/main/java/io/github/sds100/keymapper/system/accessibility/MyAccessibilityService.kt b/app/src/main/java/io/github/sds100/keymapper/system/accessibility/MyAccessibilityService.kt index 3ae7b881f3..66b3c330d3 100644 --- a/app/src/main/java/io/github/sds100/keymapper/system/accessibility/MyAccessibilityService.kt +++ b/app/src/main/java/io/github/sds100/keymapper/system/accessibility/MyAccessibilityService.kt @@ -111,11 +111,7 @@ class MyAccessibilityService : override fun onKeyEvent(event: KeyEvent?): Boolean { event ?: return false - val device = if (event.device == null) { - null - } else { - InputDeviceUtils.createInputDeviceInfo(event.device) - } + val device = event.device?.let { InputDeviceUtils.createInputDeviceInfo(it) } if (controller != null) { return controller!!.onKeyEventFromIme( diff --git a/app/src/main/java/io/github/sds100/keymapper/system/inputevents/MyMotionEvent.kt b/app/src/main/java/io/github/sds100/keymapper/system/inputevents/MyMotionEvent.kt index 2b80add05f..5e77e3b9f9 100644 --- a/app/src/main/java/io/github/sds100/keymapper/system/inputevents/MyMotionEvent.kt +++ b/app/src/main/java/io/github/sds100/keymapper/system/inputevents/MyMotionEvent.kt @@ -10,7 +10,7 @@ import io.github.sds100.keymapper.system.devices.InputDeviceUtils */ data class MyMotionEvent( val metaState: Int, - val device: InputDeviceInfo, + val device: InputDeviceInfo?, val axisHatX: Float, val axisHatY: Float, val isDpad: Boolean, @@ -19,7 +19,7 @@ data class MyMotionEvent( fun fromMotionEvent(event: MotionEvent): MyMotionEvent { return MyMotionEvent( metaState = event.metaState, - device = InputDeviceUtils.createInputDeviceInfo(event.device), + device = event.device?.let { InputDeviceUtils.createInputDeviceInfo(it) }, axisHatX = event.getAxisValue(MotionEvent.AXIS_HAT_X), axisHatY = event.getAxisValue(MotionEvent.AXIS_HAT_Y), isDpad = InputEventUtils.isDpadDevice(event), From 7e82b6868eea66efd2b6904904b1fb73c2cf1765 Mon Sep 17 00:00:00 2001 From: sds100 Date: Tue, 4 Mar 2025 17:55:40 -0700 Subject: [PATCH 3/7] fix: use relinquishTaskIdentity in SplashActivity --- app/src/main/AndroidManifest.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 605797a1de..2d6c7e184d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -81,9 +81,14 @@ android:theme="@style/AppTheme.NoActionBar" tools:ignore="GoogleAppIndexingWarning"> + From b375caf8019936d8df2a0690b0b4c7ce854c20c8 Mon Sep 17 00:00:00 2001 From: sds100 Date: Wed, 12 Mar 2025 18:00:41 -0600 Subject: [PATCH 4/7] #1514, #1454 rebrand assistant trigger to make more sense --- .../mappings/keymaps/DisplayKeyMapUseCase.kt | 9 --------- .../mappings/keymaps/KeyMapListItemCreator.kt | 6 ------ .../trigger/BaseConfigTriggerViewModel.kt | 9 --------- .../mappings/keymaps/trigger/TriggerError.kt | 4 ---- .../permissions/AndroidPermissionAdapter.kt | 8 -------- .../keymapper/system/permissions/Permission.kt | 1 - .../permissions/RequestPermissionDelegate.kt | 10 ---------- .../io/github/sds100/keymapper/util/Result.kt | 1 - app/src/main/res/values/strings.xml | 17 ++++++++--------- 9 files changed, 8 insertions(+), 57 deletions(-) diff --git a/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/DisplayKeyMapUseCase.kt b/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/DisplayKeyMapUseCase.kt index df6a7815ec..9ac34f897d 100644 --- a/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/DisplayKeyMapUseCase.kt +++ b/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/DisplayKeyMapUseCase.kt @@ -118,15 +118,6 @@ class DisplayKeyMapUseCaseImpl( errors.add(TriggerError.ASSISTANT_TRIGGER_NOT_PURCHASED) } - val isKeyMapperDeviceAssistant = permissionAdapter.isGranted(Permission.DEVICE_ASSISTANT) - - // Show an error if Key Mapper isn't selected as the device assistant - // and an assistant trigger is used. The error shouldn't be shown - // if the assistant trigger feature is not purchased. - if (containsDeviceAssistantTrigger && isAssistantTriggerPurchased && !isKeyMapperDeviceAssistant) { - errors.add(TriggerError.ASSISTANT_NOT_SELECTED) - } - val containsDpadKey = trigger.keys .mapNotNull { it as? KeyCodeTriggerKey } .any { InputEventUtils.isDpadKeyCode(it.keyCode) && it.detectionSource == KeyEventDetectionSource.INPUT_METHOD } diff --git a/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/KeyMapListItemCreator.kt b/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/KeyMapListItemCreator.kt index 1dd7c5a6a2..fb623ada7b 100644 --- a/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/KeyMapListItemCreator.kt +++ b/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/KeyMapListItemCreator.kt @@ -120,12 +120,6 @@ class KeyMapListItemCreator( error = Error.CantDetectKeyEventsInPhoneCall, ) - TriggerError.ASSISTANT_NOT_SELECTED -> ChipUi.Error( - id = error.toString(), - text = getString(R.string.trigger_error_assistant_activity_not_chosen), - error = Error.PermissionDenied(Permission.DEVICE_ASSISTANT), - ) - TriggerError.ASSISTANT_TRIGGER_NOT_PURCHASED -> ChipUi.Error( id = error.toString(), text = getString(R.string.trigger_error_assistant_not_purchased), diff --git a/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/trigger/BaseConfigTriggerViewModel.kt b/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/trigger/BaseConfigTriggerViewModel.kt index 6f7fe88e56..66e2ccb663 100644 --- a/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/trigger/BaseConfigTriggerViewModel.kt +++ b/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/trigger/BaseConfigTriggerViewModel.kt @@ -378,11 +378,6 @@ abstract class BaseConfigTriggerViewModel( text = getString(R.string.trigger_error_cant_detect_in_phone_call), ) - TriggerError.ASSISTANT_NOT_SELECTED -> TextListItem.Error( - id = error.toString(), - text = getString(R.string.trigger_error_assistant_activity_not_chosen), - ) - TriggerError.ASSISTANT_TRIGGER_NOT_PURCHASED -> TextListItem.Error( id = error.toString(), text = getString(R.string.trigger_error_assistant_not_purchased), @@ -521,10 +516,6 @@ abstract class BaseConfigTriggerViewModel( displayKeyMap.fixError(Error.CantDetectKeyEventsInPhoneCall) } - TriggerError.ASSISTANT_NOT_SELECTED -> { - displayKeyMap.fixError(Error.PermissionDenied(Permission.DEVICE_ASSISTANT)) - } - TriggerError.ASSISTANT_TRIGGER_NOT_PURCHASED -> { showAdvancedTriggersBottomSheet = true } diff --git a/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/trigger/TriggerError.kt b/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/trigger/TriggerError.kt index edd3dc7025..802332c0b0 100644 --- a/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/trigger/TriggerError.kt +++ b/app/src/main/java/io/github/sds100/keymapper/mappings/keymaps/trigger/TriggerError.kt @@ -8,10 +8,6 @@ enum class TriggerError { SCREEN_OFF_ROOT_DENIED, CANT_DETECT_IN_PHONE_CALL, - // Key Mapper is not selected as the assistant activity. This is required for assistant - // triggers. - ASSISTANT_NOT_SELECTED, - // This error appears when a key map has an assistant trigger but the user hasn't purchased // the product. ASSISTANT_TRIGGER_NOT_PURCHASED, diff --git a/app/src/main/java/io/github/sds100/keymapper/system/permissions/AndroidPermissionAdapter.kt b/app/src/main/java/io/github/sds100/keymapper/system/permissions/AndroidPermissionAdapter.kt index 423a033661..ed45682834 100644 --- a/app/src/main/java/io/github/sds100/keymapper/system/permissions/AndroidPermissionAdapter.kt +++ b/app/src/main/java/io/github/sds100/keymapper/system/permissions/AndroidPermissionAdapter.kt @@ -25,13 +25,10 @@ import io.github.sds100.keymapper.system.apps.PackageManagerAdapter import io.github.sds100.keymapper.system.root.SuAdapter import io.github.sds100.keymapper.util.Error import io.github.sds100.keymapper.util.Result -import io.github.sds100.keymapper.util.Success import io.github.sds100.keymapper.util.getIdentifier import io.github.sds100.keymapper.util.onFailure import io.github.sds100.keymapper.util.onSuccess import io.github.sds100.keymapper.util.success -import io.github.sds100.keymapper.util.then -import io.github.sds100.keymapper.util.valueIfFailure import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow @@ -338,11 +335,6 @@ class AndroidPermissionAdapter( } else { true } - - Permission.DEVICE_ASSISTANT -> - packageManagerAdapter.getDeviceAssistantPackage() - .then { Success(it == Constants.PACKAGE_NAME) } - .valueIfFailure { false } } override fun isGrantedFlow(permission: Permission): Flow = callbackFlow { diff --git a/app/src/main/java/io/github/sds100/keymapper/system/permissions/Permission.kt b/app/src/main/java/io/github/sds100/keymapper/system/permissions/Permission.kt index 2bd83e87a0..43319c74eb 100644 --- a/app/src/main/java/io/github/sds100/keymapper/system/permissions/Permission.kt +++ b/app/src/main/java/io/github/sds100/keymapper/system/permissions/Permission.kt @@ -19,5 +19,4 @@ enum class Permission { ANSWER_PHONE_CALL, FIND_NEARBY_DEVICES, POST_NOTIFICATIONS, - DEVICE_ASSISTANT, } diff --git a/app/src/main/java/io/github/sds100/keymapper/system/permissions/RequestPermissionDelegate.kt b/app/src/main/java/io/github/sds100/keymapper/system/permissions/RequestPermissionDelegate.kt index 1004393c73..2089876320 100644 --- a/app/src/main/java/io/github/sds100/keymapper/system/permissions/RequestPermissionDelegate.kt +++ b/app/src/main/java/io/github/sds100/keymapper/system/permissions/RequestPermissionDelegate.kt @@ -100,16 +100,6 @@ class RequestPermissionDelegate( Permission.POST_NOTIFICATIONS -> if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) } - - Permission.DEVICE_ASSISTANT -> { - try { - Intent(Settings.ACTION_VOICE_INPUT_SETTINGS).apply { - flags = Intent.FLAG_ACTIVITY_NEW_TASK - startActivityForResultLauncher.launch(this) - } - } catch (e: ActivityNotFoundException) { - } - } } } diff --git a/app/src/main/java/io/github/sds100/keymapper/util/Result.kt b/app/src/main/java/io/github/sds100/keymapper/util/Result.kt index 786a07fb8f..1e7a8d1d0e 100644 --- a/app/src/main/java/io/github/sds100/keymapper/util/Result.kt +++ b/app/src/main/java/io/github/sds100/keymapper/util/Result.kt @@ -80,7 +80,6 @@ sealed class Error : Result() { Permission.ANSWER_PHONE_CALL -> R.string.error_answer_end_phone_call_permission_denied Permission.FIND_NEARBY_DEVICES -> R.string.error_find_nearby_devices_permission_denied Permission.POST_NOTIFICATIONS -> R.string.error_notifications_permission_denied - Permission.DEVICE_ASSISTANT -> R.string.trigger_error_assistant_activity_not_chosen_short } return resourceProvider.getString(resId) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b7461530d1..82f25bb3af 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1402,18 +1402,17 @@ + Key Mapper: side key Any assistant - Device assistant + Side key/power button Voice assistant Advanced triggers - The developer doesn\'t believe ads are a sustainable or user-friendly form of monetization so these paid triggers help support development ❤️. You will be given priority support as well. - Assistant trigger - Did you know you can remap your device assistant? Instead of launching Google Assistant or Bixby, your device can perform an action of your choice. It works even when the screen is off! - Thank you for supporting the app! ❤️ - Your purchase was successful and you can now use the assistant triggers. As a paying user of Key Mapper you will receive priority support to help you use the app. There is now a button on this page to contact the developer. - You must select Key Mapper as the default digital assistant app for this trigger to work. - Key Mapper must be the default assistant. - You must purchase the assistant trigger feature! + The developer doesn\'t believe ads are a sustainable or user-friendly form of monetization so these paid triggers help support development\u00A0❤️. You will be given priority support as well. + Side\u00A0key & Assistant trigger + Did you know you can remap your side key, power button, or device assistant? Instead of launching the assistant or the power menu, your device can perform an action of your choice. It works even when the screen is off! + Thank you for supporting the app\u00A0❤️! + Your purchase was successful. As a paying user of Key\u00A0Mapper you will receive priority support to help you use the app. There is now a button on this page to contact the developer. + You must purchase the assistant trigger feature. Learn more New trigger! Did you know you can remap your digital assistant? Instead of launching Google Assistant or Bixby, you can perform an action of your choice. Tap to learn more. From d5794d8954c5bc3521e72679a48f28673bb6f9fb Mon Sep 17 00:00:00 2001 From: sds100 Date: Wed, 12 Mar 2025 18:05:32 -0600 Subject: [PATCH 5/7] delete unused strings --- app/src/main/res/values-pl/strings.xml | 2 -- app/src/main/res/values-vi/strings.xml | 2 -- 2 files changed, 4 deletions(-) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 50a4feaca4..d0317f17a8 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1065,8 +1065,6 @@ Czy wiesz, że możesz zmienić przycisk asystenta urządzenia? Zamiast uruchamiać asystenta Google lub Bixby, urządzenie może wykonać niestandardową akcję. Działa nawet, gdy ekran jest wyłączony! Dziękujemy za wsparcie aplikacji! ❤️ Zakup zakończył się sukcesem i teraz możesz używać wyzwalaczy asystenta. Jako płatny użytkownik Key Mapper otrzymasz priorytetową pomoc w korzystaniu z aplikacji. Na tej stronie znajduje się teraz przycisk, aby skontaktować się z programistą. - Aby ten wyzwalacz działał, musisz ustawić Key Mapper jako domyślną aplikację asystenta cyfrowego. - Key Mapper musi być domyślnym asystentem. Musisz kupić funkcję wyzwalacza asystenta! Dowiedz się więcej Nowy wyzwalacz! Czy wiesz, że możesz zmienić przycisk asystenta? diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 7020c7a717..7919451b80 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1043,8 +1043,6 @@ Bạn có biết bạn có thể ánh xạ lại trợ lý thiết bị của mình không? Thay vì khởi chạy Google Assistant hoặc Bixby, thiết bị của bạn có thể thực hiện hành động mà bạn chọn. Nó hoạt động ngay cả khi màn hình tắt! Cảm ơn bạn đã ủng hộ ứng dụng! ❤️ Giao dịch mua hàng của bạn đã thành công và bây giờ bạn có thể sử dụng trình kích hoạt trợ lý. Là người dùng trả phí của Key Mapper, bạn sẽ nhận được hỗ trợ ưu tiên để giúp bạn sử dụng ứng dụng. Hiện tại có một nút trên trang này để liên hệ với nhà phát triển. - Bạn phải chọn Key Mapper làm ứng dụng trợ lý kỹ thuật số mặc định để trình kích hoạt này hoạt động. - Key Mapper phải là trợ lý mặc định. Bạn phải mua tính năng kích hoạt trợ lý! Tìm hiểu thêm Kích hoạt mới! Bạn có biết bạn có thể sắp xếp lại trợ lý kỹ thuật số của mình không? From acd668d479778038bf007847abc7dd21ff9c9e0a Mon Sep 17 00:00:00 2001 From: Crowdin Bot Date: Thu, 13 Mar 2025 00:05:59 +0000 Subject: [PATCH 6/7] New Crowdin translations by GitHub Action --- app/src/main/res/values-pl/strings.xml | 7 ------- app/src/main/res/values-vi/strings.xml | 7 ------- 2 files changed, 14 deletions(-) diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index d0317f17a8..d112ef7655 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -1057,15 +1057,8 @@ Dowolny asystent - Asystent urządzenia Asystent głosowy Zaawansowane wyzwalacze - Programista nie wierzy, że reklamy są zrównoważoną lub przyjazną użytkownikowi formą monetyzacji, więc te płatne wyzwalacze pomagają wspierać rozwój ❤️. Otrzymasz również priorytetowe wsparcie. - Wyzwalacz asystenta - Czy wiesz, że możesz zmienić przycisk asystenta urządzenia? Zamiast uruchamiać asystenta Google lub Bixby, urządzenie może wykonać niestandardową akcję. Działa nawet, gdy ekran jest wyłączony! - Dziękujemy za wsparcie aplikacji! ❤️ - Zakup zakończył się sukcesem i teraz możesz używać wyzwalaczy asystenta. Jako płatny użytkownik Key Mapper otrzymasz priorytetową pomoc w korzystaniu z aplikacji. Na tej stronie znajduje się teraz przycisk, aby skontaktować się z programistą. - Musisz kupić funkcję wyzwalacza asystenta! Dowiedz się więcej Nowy wyzwalacz! Czy wiesz, że możesz zmienić przycisk asystenta? Zamiast uruchamiać Asystenta Google lub Bixby, możesz wykonać wybrane działanie. Kliknij, aby dowiedzieć się więcej. diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 7919451b80..107d1bf617 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -1035,15 +1035,8 @@ Trợ lý bất kỳ - Trợ lý thiết bị Trợ lý giọng nói Trình kích hoạt nâng cao - Nhà phát triển không tin rằng quảng cáo là hình thức kiếm tiền bền vững hoặc thân thiện với người dùng nên những trình kích hoạt trả phí này sẽ giúp hỗ trợ sự phát triển ❤️. Bạn cũng sẽ được ưu tiên hỗ trợ. - Trình kích hoạt trợ lý - Bạn có biết bạn có thể ánh xạ lại trợ lý thiết bị của mình không? Thay vì khởi chạy Google Assistant hoặc Bixby, thiết bị của bạn có thể thực hiện hành động mà bạn chọn. Nó hoạt động ngay cả khi màn hình tắt! - Cảm ơn bạn đã ủng hộ ứng dụng! ❤️ - Giao dịch mua hàng của bạn đã thành công và bây giờ bạn có thể sử dụng trình kích hoạt trợ lý. Là người dùng trả phí của Key Mapper, bạn sẽ nhận được hỗ trợ ưu tiên để giúp bạn sử dụng ứng dụng. Hiện tại có một nút trên trang này để liên hệ với nhà phát triển. - Bạn phải mua tính năng kích hoạt trợ lý! Tìm hiểu thêm Kích hoạt mới! Bạn có biết bạn có thể sắp xếp lại trợ lý kỹ thuật số của mình không? Thay vì khởi chạy Google Assistant hoặc Bixby, bạn có thể thực hiện hành động mà mình chọn. Nhấn để tìm hiểu thêm. From 53cce73ef0300324abe42ffe7be56991d1a606e6 Mon Sep 17 00:00:00 2001 From: sds100 Date: Wed, 12 Mar 2025 18:17:17 -0600 Subject: [PATCH 7/7] chore: write changelog for 2.8.2 --- CHANGELOG.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2bf5eb8861..f629989fa2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,12 @@ +## [2.8.2](https://github.com/sds100/KeyMapper/releases/tag/v2.8.2) + +## Changes + +- #1514, #1454 Improving naming of assistant trigger to also refer to the side key and do not force the user to select Key Mapper as the assistant. + +## Bug fixes +- #1461 fix: crash on startup due to getting MotionEvent device +- ## [2.8.1](https://github.com/sds100/KeyMapper/releases/tag/v2.8.1) #### 18 February 2025