Skip to content

Commit 4e18af2

Browse files
committed
#1276 refactor: fallback to scanCode when keyCode unknown
1 parent 0b94b81 commit 4e18af2

File tree

1 file changed

+28
-7
lines changed

1 file changed

+28
-7
lines changed

app/src/main/java/io/github/sds100/keymapper/system/accessibility/BaseAccessibilityServiceController.kt

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import io.github.sds100.keymapper.mappings.keymaps.trigger.KeyEventDetectionSour
2424
import io.github.sds100.keymapper.reroutekeyevents.RerouteKeyEventsController
2525
import io.github.sds100.keymapper.reroutekeyevents.RerouteKeyEventsUseCase
2626
import io.github.sds100.keymapper.system.devices.DevicesAdapter
27+
import io.github.sds100.keymapper.system.inputevents.InputEventUtils
2728
import io.github.sds100.keymapper.system.inputevents.MyKeyEvent
2829
import io.github.sds100.keymapper.system.inputevents.MyMotionEvent
2930
import 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

Comments
 (0)