A14 Physical Pointer Routing
SmartDock is a priv-app with ASSOCIATE_INPUT_DEVICE_TO_DISPLAY. On Android 14,
physical mice and touchpads should be routed via framework APIs — not the software
overlay relay used as a fallback.
Correct API (A14+)
Association uses display uniqueId, not numeric displayId:
// InputManager / InputManagerGlobal / IInputManager
addUniqueIdAssociationByDescriptor(inputDeviceDescriptor, displayUniqueId);
addUniqueIdAssociationByPort(inputPort, displayUniqueId);
SmartDock calls these via reflection in InputRoutingManager.routeDeviceByUniqueId().
Logcat on success:
SmartDock Input Routing: SUCCESS: Routed '...' via InputManager.addUniqueIdAssociationByDescriptor -> displayUniqueId=local:...
SmartDock Input Routing: Physical pointer mode: PHYSICAL_HARDWARE
Verify on device
adb logcat -s "SmartDock Input Routing" DisplayPointerController
# List input device locations (ports)
adb shell dumpsys input | grep -A5 "Input Device"
# List display unique IDs
adb shell dumpsys display | grep -i unique
If routing still fails (0/N devices)
Your A14 build may not expose the association APIs to priv-apps, or pointer-class devices need a framework patch. Options:
1. Enable cmd input shell commands (recommended for vendor trees)
Add to frameworks/base/services/core/java/com/android/server/input/InputShellCommand.java:
set-pointer-display-id <displayId>associate <descriptor> <displayId>→ callsaddUniqueIdAssociationByDescriptor
SmartDock already tries these shell commands as a fallback.
2. Static port associations
For fixed kiosk wiring, /vendor/etc/input-port-associations.xml maps USB input
ports to display ports (see AOSP input routing).
3. Software relay (interim)
When hardware routing fails, SmartDock uses PHYSICAL_SOFTWARE mode:
- SmartDock cursor overlay on target display
- Relative movement relay from off-target displays
- Click injection via
dispatchGestureat overlay position - Native cursor hidden on all displays (best-effort)
This is not equivalent to true routing — hover events cannot be pilfered on A14
(Can't pilfer: no touching devices in logcat). Virtual touchpad remains the
recommended precise input path.
Pointer modes
Permissions
Already in aosp/privapp-permissions-smartdock.xml:
ASSOCIATE_INPUT_DEVICE_TO_DISPLAYMONITOR_INPUTINJECT_EVENTS