@@ -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,29 @@ 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+ // Don't offset negative values
308+ val scanCodeOffset: Int = if (event.scanCode >= 0 ) {
309+ InputEventUtils .KEYCODE_TO_SCANCODE_OFFSET
310+ } else {
311+ 0
312+ }
313+
314+ val eventProxy = event.copy(
315+ // Fallback to scanCode when keyCode is unknown as it's typically more unique
316+ // Add offset to go past possible keyCode values
317+ keyCode = event.scanCode + scanCodeOffset,
318+ )
319+
320+ return eventProxy
321+ }
322+
299323 fun onKeyEvent (
300324 event : MyKeyEvent ,
301325 detectionSource : KeyEventDetectionSource = KeyEventDetectionSource .ACCESSIBILITY_SERVICE ,
@@ -305,11 +329,14 @@ abstract class BaseAccessibilityServiceController(
305329 if (recordingTrigger) {
306330 if (event.action == KeyEvent .ACTION_DOWN ) {
307331 Timber .d(" Recorded key ${KeyEvent .keyCodeToString(event.keyCode)} , $detailedLogInfo " )
332+
333+ val uniqueEvent: MyKeyEvent = getUniqueEvent(event)
334+
308335 coroutineScope.launch {
309336 outputEvents.emit(
310337 ServiceEvent .RecordedTriggerKey (
311- event .keyCode,
312- event .device,
338+ uniqueEvent .keyCode,
339+ uniqueEvent .device,
313340 detectionSource,
314341 ),
315342 )
@@ -327,16 +354,17 @@ abstract class BaseAccessibilityServiceController(
327354 } else {
328355 try {
329356 var consume: Boolean
357+ val uniqueEvent: MyKeyEvent = getUniqueEvent(event)
330358
331- consume = keyMapController.onKeyEvent(event )
359+ consume = keyMapController.onKeyEvent(uniqueEvent )
332360
333361 if (! consume) {
334- consume = rerouteKeyEventsController.onKeyEvent(event )
362+ consume = rerouteKeyEventsController.onKeyEvent(uniqueEvent )
335363 }
336364
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 " )
365+ when (uniqueEvent .action) {
366+ KeyEvent .ACTION_DOWN -> Timber .d(" Down ${KeyEvent .keyCodeToString(uniqueEvent .keyCode)} - consumed: $consume , $detailedLogInfo " )
367+ KeyEvent .ACTION_UP -> Timber .d(" Up ${KeyEvent .keyCodeToString(uniqueEvent .keyCode)} - consumed: $consume , $detailedLogInfo " )
340368 }
341369
342370 return consume
0 commit comments