@@ -24,6 +24,7 @@ import io.github.sds100.keymapper.mappings.keymaps.trigger.KeyEventDetectionSour
2424import io.github.sds100.keymapper.reroutekeyevents.RerouteKeyEventsController
2525import io.github.sds100.keymapper.reroutekeyevents.RerouteKeyEventsUseCase
2626import io.github.sds100.keymapper.system.devices.DevicesAdapter
27+ import io.github.sds100.keymapper.system.inputevents.InputEventUtils
2728import io.github.sds100.keymapper.system.inputevents.MyKeyEvent
2829import io.github.sds100.keymapper.system.inputevents.MyMotionEvent
2930import io.github.sds100.keymapper.system.inputmethod.InputMethodAdapter
@@ -296,6 +297,22 @@ abstract class BaseAccessibilityServiceController(
296297 open fun onConfigurationChanged (newConfig : Configuration ) {
297298 }
298299
300+ /* *
301+ * Returns an MyKeyEvent which is either the same or more unique
302+ */
303+ private fun getUniqueEvent (event : MyKeyEvent ): MyKeyEvent {
304+ // Guard to ignore processing when not applicable
305+ if (event.keyCode != KeyEvent .KEYCODE_UNKNOWN ) return event
306+
307+ val eventProxy = event.copy(
308+ // Fallback to scanCode when keyCode is unknown as it's typically more unique
309+ // Add offset to go past possible keyCode values
310+ keyCode = event.scanCode + InputEventUtils .KEYCODE_TO_SCANCODE_OFFSET ,
311+ )
312+
313+ return eventProxy
314+ }
315+
299316 fun onKeyEvent (
300317 event : MyKeyEvent ,
301318 detectionSource : KeyEventDetectionSource = KeyEventDetectionSource .ACCESSIBILITY_SERVICE ,
@@ -305,11 +322,14 @@ abstract class BaseAccessibilityServiceController(
305322 if (recordingTrigger) {
306323 if (event.action == KeyEvent .ACTION_DOWN ) {
307324 Timber .d(" Recorded key ${KeyEvent .keyCodeToString(event.keyCode)} , $detailedLogInfo " )
325+
326+ val uniqueEvent: MyKeyEvent = getUniqueEvent(event)
327+
308328 coroutineScope.launch {
309329 outputEvents.emit(
310330 ServiceEvent .RecordedTriggerKey (
311- event .keyCode,
312- event .device,
331+ uniqueEvent .keyCode,
332+ uniqueEvent .device,
313333 detectionSource,
314334 ),
315335 )
@@ -327,16 +347,17 @@ abstract class BaseAccessibilityServiceController(
327347 } else {
328348 try {
329349 var consume: Boolean
350+ val uniqueEvent: MyKeyEvent = getUniqueEvent(event)
330351
331- consume = keyMapController.onKeyEvent(event )
352+ consume = keyMapController.onKeyEvent(uniqueEvent )
332353
333354 if (! consume) {
334- consume = rerouteKeyEventsController.onKeyEvent(event )
355+ consume = rerouteKeyEventsController.onKeyEvent(uniqueEvent )
335356 }
336357
337- when (event .action) {
338- KeyEvent .ACTION_DOWN -> Timber .d(" Down ${KeyEvent .keyCodeToString(event .keyCode)} - consumed: $consume , $detailedLogInfo " )
339- KeyEvent .ACTION_UP -> Timber .d(" Up ${KeyEvent .keyCodeToString(event .keyCode)} - consumed: $consume , $detailedLogInfo " )
358+ when (uniqueEvent .action) {
359+ KeyEvent .ACTION_DOWN -> Timber .d(" Down ${KeyEvent .keyCodeToString(uniqueEvent .keyCode)} - consumed: $consume , $detailedLogInfo " )
360+ KeyEvent .ACTION_UP -> Timber .d(" Up ${KeyEvent .keyCodeToString(uniqueEvent .keyCode)} - consumed: $consume , $detailedLogInfo " )
340361 }
341362
342363 return consume
0 commit comments