1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.server.input; 18 19 import android.annotation.NonNull; 20 import android.annotation.Nullable; 21 import android.hardware.display.DisplayTopologyGraph; 22 import android.hardware.display.DisplayViewport; 23 import android.hardware.input.InputSensorInfo; 24 import android.hardware.lights.Light; 25 import android.os.IBinder; 26 import android.os.MessageQueue; 27 import android.util.SparseArray; 28 import android.view.InputApplicationHandle; 29 import android.view.InputChannel; 30 import android.view.InputEvent; 31 import android.view.PointerIcon; 32 import android.view.VerifiedInputEvent; 33 34 import java.util.List; 35 36 /** 37 * An interface for the native methods of InputManagerService. We use a public interface so that 38 * this can be mocked for testing by Mockito. 39 */ 40 interface NativeInputManagerService { 41 start()42 void start(); 43 setDisplayViewports(DisplayViewport[] viewports)44 void setDisplayViewports(DisplayViewport[] viewports); 45 setDisplayTopology(DisplayTopologyGraph topologyGraph)46 void setDisplayTopology(DisplayTopologyGraph topologyGraph); 47 getScanCodeState(int deviceId, int sourceMask, int scanCode)48 int getScanCodeState(int deviceId, int sourceMask, int scanCode); 49 getKeyCodeState(int deviceId, int sourceMask, int keyCode)50 int getKeyCodeState(int deviceId, int sourceMask, int keyCode); 51 getSwitchState(int deviceId, int sourceMask, int sw)52 int getSwitchState(int deviceId, int sourceMask, int sw); 53 setKeyRemapping(int[] fromKeyCodes, int[] toKeyCodes)54 void setKeyRemapping(int[] fromKeyCodes, int[] toKeyCodes); 55 hasKeys(int deviceId, int sourceMask, int[] keyCodes, boolean[] keyExists)56 boolean hasKeys(int deviceId, int sourceMask, int[] keyCodes, boolean[] keyExists); 57 getKeyCodeForKeyLocation(int deviceId, int locationKeyCode)58 int getKeyCodeForKeyLocation(int deviceId, int locationKeyCode); 59 createInputChannel(String name)60 InputChannel createInputChannel(String name); 61 createInputMonitor(int displayId, String name, int pid)62 InputChannel createInputMonitor(int displayId, String name, int pid); 63 removeInputChannel(IBinder connectionToken)64 void removeInputChannel(IBinder connectionToken); 65 pilferPointers(IBinder token)66 void pilferPointers(IBinder token); 67 setInputFilterEnabled(boolean enable)68 void setInputFilterEnabled(boolean enable); 69 70 /** 71 * Set the touch mode state for the display passed as argument. 72 * 73 * @param inTouchMode true if the device is in touch mode 74 * @param pid the pid of the process that requested to switch touch mode state 75 * @param uid the uid of the process that requested to switch touch mode state 76 * @param hasPermission if set to {@code true} then no further authorization will be performed 77 * @param displayId the target display (ignored if device is configured with per display 78 * touch mode enabled) 79 * @return {@code true} if the touch mode was successfully changed, {@code false} otherwise 80 */ setInTouchMode(boolean inTouchMode, int pid, int uid, boolean hasPermission, int displayId)81 boolean setInTouchMode(boolean inTouchMode, int pid, int uid, boolean hasPermission, 82 int displayId); 83 setMaximumObscuringOpacityForTouch(float opacity)84 void setMaximumObscuringOpacityForTouch(float opacity); 85 86 /** 87 * Inject an input event into the system. 88 * 89 * @param event the input event to inject 90 * @param injectIntoUid true if the event should target windows owned by uid, false otherwise 91 * @param uid the uid whose windows should be targeted, if any 92 * @param syncMode {@link android.os.InputEventInjectionSync} 93 * @param timeoutMillis timeout to wait for input injection to complete, in milliseconds 94 * @param policyFlags defined in {@link android.view.WindowManagerPolicyConstants} 95 * @return {@link android.os.InputEventInjectionResult} 96 */ injectInputEvent(InputEvent event, boolean injectIntoUid, int uid, int syncMode, int timeoutMillis, int policyFlags)97 int injectInputEvent(InputEvent event, boolean injectIntoUid, int uid, int syncMode, 98 int timeoutMillis, int policyFlags); 99 verifyInputEvent(InputEvent event)100 VerifiedInputEvent verifyInputEvent(InputEvent event); 101 toggleCapsLock(int deviceId)102 void toggleCapsLock(int deviceId); 103 resetLockedModifierState()104 void resetLockedModifierState(); 105 displayRemoved(int displayId)106 void displayRemoved(int displayId); 107 setInputDispatchMode(boolean enabled, boolean frozen)108 void setInputDispatchMode(boolean enabled, boolean frozen); 109 setSystemUiLightsOut(boolean lightsOut)110 void setSystemUiLightsOut(boolean lightsOut); 111 setFocusedApplication(int displayId, InputApplicationHandle application)112 void setFocusedApplication(int displayId, InputApplicationHandle application); 113 setFocusedDisplay(int displayId)114 void setFocusedDisplay(int displayId); 115 setMinTimeBetweenUserActivityPokes(long millis)116 void setMinTimeBetweenUserActivityPokes(long millis); 117 transferTouchGesture(IBinder fromChannelToken, IBinder toChannelToken, boolean isDragDrop, boolean transferEntireGesture)118 boolean transferTouchGesture(IBinder fromChannelToken, IBinder toChannelToken, 119 boolean isDragDrop, boolean transferEntireGesture); 120 121 /** 122 * Transfer the current touch gesture to the window identified by 'destChannelToken' positioned 123 * on display with id 'displayId'. 124 * @deprecated Use {@link #transferTouchGesture(IBinder, IBinder, boolean)} 125 */ 126 @Deprecated transferTouch(IBinder destChannelToken, int displayId)127 boolean transferTouch(IBinder destChannelToken, int displayId); 128 getMousePointerSpeed()129 int getMousePointerSpeed(); 130 setPointerSpeed(int speed)131 void setPointerSpeed(int speed); 132 setMouseScalingEnabled(int displayId, boolean enabled)133 void setMouseScalingEnabled(int displayId, boolean enabled); 134 setMouseReverseVerticalScrollingEnabled(boolean enabled)135 void setMouseReverseVerticalScrollingEnabled(boolean enabled); 136 setMouseScrollingAccelerationEnabled(boolean enabled)137 void setMouseScrollingAccelerationEnabled(boolean enabled); 138 setMouseScrollingSpeed(int speed)139 void setMouseScrollingSpeed(int speed); 140 setMouseSwapPrimaryButtonEnabled(boolean enabled)141 void setMouseSwapPrimaryButtonEnabled(boolean enabled); 142 setMouseAccelerationEnabled(boolean enabled)143 void setMouseAccelerationEnabled(boolean enabled); 144 setTouchpadPointerSpeed(int speed)145 void setTouchpadPointerSpeed(int speed); 146 setTouchpadNaturalScrollingEnabled(boolean enabled)147 void setTouchpadNaturalScrollingEnabled(boolean enabled); 148 setTouchpadTapToClickEnabled(boolean enabled)149 void setTouchpadTapToClickEnabled(boolean enabled); 150 setTouchpadTapDraggingEnabled(boolean enabled)151 void setTouchpadTapDraggingEnabled(boolean enabled); 152 setShouldNotifyTouchpadHardwareState(boolean enabled)153 void setShouldNotifyTouchpadHardwareState(boolean enabled); 154 setTouchpadRightClickZoneEnabled(boolean enabled)155 void setTouchpadRightClickZoneEnabled(boolean enabled); 156 setTouchpadThreeFingerTapShortcutEnabled(boolean enabled)157 void setTouchpadThreeFingerTapShortcutEnabled(boolean enabled); 158 setTouchpadSystemGesturesEnabled(boolean enabled)159 void setTouchpadSystemGesturesEnabled(boolean enabled); 160 setTouchpadAccelerationEnabled(boolean enabled)161 void setTouchpadAccelerationEnabled(boolean enabled); 162 setShowTouches(boolean enabled)163 void setShowTouches(boolean enabled); 164 setNonInteractiveDisplays(int[] displayIds)165 void setNonInteractiveDisplays(int[] displayIds); 166 reloadCalibration()167 void reloadCalibration(); 168 vibrate(int deviceId, long[] pattern, int[] amplitudes, int repeat, int token)169 void vibrate(int deviceId, long[] pattern, int[] amplitudes, int repeat, int token); 170 vibrateCombined(int deviceId, long[] pattern, SparseArray<int[]> amplitudes, int repeat, int token)171 void vibrateCombined(int deviceId, long[] pattern, SparseArray<int[]> amplitudes, 172 int repeat, int token); 173 cancelVibrate(int deviceId, int token)174 void cancelVibrate(int deviceId, int token); 175 isVibrating(int deviceId)176 boolean isVibrating(int deviceId); 177 getVibratorIds(int deviceId)178 int[] getVibratorIds(int deviceId); 179 getBatteryCapacity(int deviceId)180 int getBatteryCapacity(int deviceId); 181 getBatteryStatus(int deviceId)182 int getBatteryStatus(int deviceId); 183 184 /** 185 * Get the device path of the battery for an input device. 186 * @return the path for the input device battery, or null if there is none. 187 */ 188 @Nullable getBatteryDevicePath(int deviceId)189 String getBatteryDevicePath(int deviceId); 190 getLights(int deviceId)191 List<Light> getLights(int deviceId); 192 getLightPlayerId(int deviceId, int lightId)193 int getLightPlayerId(int deviceId, int lightId); 194 getLightColor(int deviceId, int lightId)195 int getLightColor(int deviceId, int lightId); 196 setLightPlayerId(int deviceId, int lightId, int playerId)197 void setLightPlayerId(int deviceId, int lightId, int playerId); 198 setLightColor(int deviceId, int lightId, int color)199 void setLightColor(int deviceId, int lightId, int color); 200 reloadKeyboardLayouts()201 void reloadKeyboardLayouts(); 202 reloadDeviceAliases()203 void reloadDeviceAliases(); 204 dump()205 String dump(); 206 monitor()207 void monitor(); 208 enableInputDevice(int deviceId)209 void enableInputDevice(int deviceId); 210 disableInputDevice(int deviceId)211 void disableInputDevice(int deviceId); 212 reloadPointerIcons()213 void reloadPointerIcons(); 214 setPointerIcon(@onNull PointerIcon icon, int displayId, int deviceId, int pointerId, @NonNull IBinder inputToken)215 boolean setPointerIcon(@NonNull PointerIcon icon, int displayId, int deviceId, int pointerId, 216 @NonNull IBinder inputToken); 217 setPointerIconVisibility(int displayId, boolean visible)218 void setPointerIconVisibility(int displayId, boolean visible); 219 requestPointerCapture(IBinder windowToken, boolean enabled)220 void requestPointerCapture(IBinder windowToken, boolean enabled); 221 canDispatchToDisplay(int deviceId, int displayId)222 boolean canDispatchToDisplay(int deviceId, int displayId); 223 notifyPortAssociationsChanged()224 void notifyPortAssociationsChanged(); 225 changeUniqueIdAssociation()226 void changeUniqueIdAssociation(); 227 changeTypeAssociation()228 void changeTypeAssociation(); 229 changeKeyboardLayoutAssociation()230 void changeKeyboardLayoutAssociation(); 231 setDisplayEligibilityForPointerCapture(int displayId, boolean enabled)232 void setDisplayEligibilityForPointerCapture(int displayId, boolean enabled); 233 setMotionClassifierEnabled(boolean enabled)234 void setMotionClassifierEnabled(boolean enabled); 235 setKeyRepeatConfiguration(int timeoutMs, int delayMs, boolean keyRepeatEnabled)236 void setKeyRepeatConfiguration(int timeoutMs, int delayMs, boolean keyRepeatEnabled); 237 getSensorList(int deviceId)238 InputSensorInfo[] getSensorList(int deviceId); 239 240 @Nullable getTouchpadHardwareProperties(int deviceId)241 TouchpadHardwareProperties getTouchpadHardwareProperties(int deviceId); 242 flushSensor(int deviceId, int sensorType)243 boolean flushSensor(int deviceId, int sensorType); 244 enableSensor(int deviceId, int sensorType, int samplingPeriodUs, int maxBatchReportLatencyUs)245 boolean enableSensor(int deviceId, int sensorType, int samplingPeriodUs, 246 int maxBatchReportLatencyUs); 247 disableSensor(int deviceId, int sensorType)248 void disableSensor(int deviceId, int sensorType); 249 cancelCurrentTouch()250 void cancelCurrentTouch(); 251 252 /** Set the displayId on which the mouse cursor should be shown. */ setPointerDisplayId(int displayId)253 void setPointerDisplayId(int displayId); 254 255 /** Get the bluetooth address of an input device if known, otherwise return null. */ getBluetoothAddress(int deviceId)256 String getBluetoothAddress(int deviceId); 257 258 /** Set whether stylus button reporting through motion events should be enabled. */ setStylusButtonMotionEventsEnabled(boolean enabled)259 void setStylusButtonMotionEventsEnabled(boolean enabled); 260 261 /** 262 * Get the current position of the mouse cursor on the given display. 263 * 264 * If the mouse cursor is not currently shown, the coordinate values will be NaN-s. Use 265 * {@link android.view.Display#INVALID_DISPLAY} to get the position of the default mouse cursor. 266 * 267 * NOTE: This will grab the PointerController's lock, so we must be careful about calling this 268 * from the InputReader or Display threads, which may result in a deadlock. 269 */ getMouseCursorPosition(int displayId)270 float[] getMouseCursorPosition(int displayId); 271 272 /** Set whether showing a pointer icon for styluses is enabled. */ setStylusPointerIconEnabled(boolean enabled)273 void setStylusPointerIconEnabled(boolean enabled); 274 275 /** Get the sysfs root path of an input device if known, otherwise return null. */ getSysfsRootPath(int deviceId)276 @Nullable String getSysfsRootPath(int deviceId); 277 278 /** 279 * Report sysfs node changes. This may result in recreation of the corresponding InputDevice. 280 * The recreated device may contain new associated peripheral devices like Light, Battery, etc. 281 */ sysfsNodeChanged(String sysfsNodePath)282 void sysfsNodeChanged(String sysfsNodePath); 283 284 /** 285 * Notify if Accessibility bounce keys threshold is changed from InputSettings. 286 */ setAccessibilityBounceKeysThreshold(int thresholdTimeMs)287 void setAccessibilityBounceKeysThreshold(int thresholdTimeMs); 288 289 /** 290 * Notify if Accessibility slow keys threshold is changed from InputSettings. 291 */ setAccessibilitySlowKeysThreshold(int thresholdTimeMs)292 void setAccessibilitySlowKeysThreshold(int thresholdTimeMs); 293 294 /** 295 * Notify if Accessibility sticky keys is enabled/disabled from InputSettings. 296 */ setAccessibilityStickyKeysEnabled(boolean enabled)297 void setAccessibilityStickyKeysEnabled(boolean enabled); 298 setInputMethodConnectionIsActive(boolean isActive)299 void setInputMethodConnectionIsActive(boolean isActive); 300 301 /** 302 * Get the device ID of the InputDevice that used most recently. 303 * 304 * @return the last used input device ID, or 305 * {@link android.os.IInputConstants#INVALID_INPUT_DEVICE_ID} if no device has been used 306 * since boot. 307 */ getLastUsedInputDeviceId()308 int getLastUsedInputDeviceId(); 309 310 /** 311 * Set whether the given input device can wake up the kernel from sleep 312 * when it generates input events. By default, usually only internal (built-in) 313 * input devices can wake the kernel from sleep. For an external input device 314 * that supports remote wakeup to be able to wake the kernel, this must be called 315 * after each time the device is connected/added. 316 * 317 * Returns true if setting power wakeup was successful. 318 */ setKernelWakeEnabled(int deviceId, boolean enabled)319 boolean setKernelWakeEnabled(int deviceId, boolean enabled); 320 321 /** 322 * Set whether the accessibility pointer motion filter is enabled. 323 * <p> 324 * Once enabled, {@link InputManagerService#filterPointerMotion} is called for evety motion 325 * event from pointer devices. 326 * 327 * @param enabled {@code true} if the filter is enabled, {@code false} otherwise. 328 */ setAccessibilityPointerMotionFilterEnabled(boolean enabled)329 void setAccessibilityPointerMotionFilterEnabled(boolean enabled); 330 331 /** The native implementation of InputManagerService methods. */ 332 class NativeImpl implements NativeInputManagerService { 333 /** Pointer to native input manager service object, used by native code. */ 334 @SuppressWarnings({"unused", "FieldCanBeLocal"}) 335 private final long mPtr; 336 NativeImpl(InputManagerService service, MessageQueue messageQueue)337 NativeImpl(InputManagerService service, MessageQueue messageQueue) { 338 mPtr = init(service, messageQueue); 339 } 340 init(InputManagerService service, MessageQueue messageQueue)341 private native long init(InputManagerService service, MessageQueue messageQueue); 342 343 @Override start()344 public native void start(); 345 346 @Override setDisplayViewports(DisplayViewport[] viewports)347 public native void setDisplayViewports(DisplayViewport[] viewports); 348 349 @Override setDisplayTopology(DisplayTopologyGraph topologyGraph)350 public native void setDisplayTopology(DisplayTopologyGraph topologyGraph); 351 352 @Override getScanCodeState(int deviceId, int sourceMask, int scanCode)353 public native int getScanCodeState(int deviceId, int sourceMask, int scanCode); 354 355 @Override getKeyCodeState(int deviceId, int sourceMask, int keyCode)356 public native int getKeyCodeState(int deviceId, int sourceMask, int keyCode); 357 358 @Override getSwitchState(int deviceId, int sourceMask, int sw)359 public native int getSwitchState(int deviceId, int sourceMask, int sw); 360 361 @Override setKeyRemapping(int[] fromKeyCodes, int[] toKeyCodes)362 public native void setKeyRemapping(int[] fromKeyCodes, int[] toKeyCodes); 363 364 @Override hasKeys(int deviceId, int sourceMask, int[] keyCodes, boolean[] keyExists)365 public native boolean hasKeys(int deviceId, int sourceMask, int[] keyCodes, 366 boolean[] keyExists); 367 368 @Override getKeyCodeForKeyLocation(int deviceId, int locationKeyCode)369 public native int getKeyCodeForKeyLocation(int deviceId, int locationKeyCode); 370 371 @Override createInputChannel(String name)372 public native InputChannel createInputChannel(String name); 373 374 @Override createInputMonitor(int displayId, String name, int pid)375 public native InputChannel createInputMonitor(int displayId, String name, int pid); 376 377 @Override removeInputChannel(IBinder connectionToken)378 public native void removeInputChannel(IBinder connectionToken); 379 380 @Override pilferPointers(IBinder token)381 public native void pilferPointers(IBinder token); 382 383 @Override setInputFilterEnabled(boolean enable)384 public native void setInputFilterEnabled(boolean enable); 385 386 @Override setInTouchMode(boolean inTouchMode, int pid, int uid, boolean hasPermission, int displayId)387 public native boolean setInTouchMode(boolean inTouchMode, int pid, int uid, 388 boolean hasPermission, int displayId); 389 390 @Override setMaximumObscuringOpacityForTouch(float opacity)391 public native void setMaximumObscuringOpacityForTouch(float opacity); 392 393 @Override injectInputEvent(InputEvent event, boolean injectIntoUid, int uid, int syncMode, int timeoutMillis, int policyFlags)394 public native int injectInputEvent(InputEvent event, boolean injectIntoUid, int uid, 395 int syncMode, int timeoutMillis, int policyFlags); 396 397 @Override verifyInputEvent(InputEvent event)398 public native VerifiedInputEvent verifyInputEvent(InputEvent event); 399 400 @Override toggleCapsLock(int deviceId)401 public native void toggleCapsLock(int deviceId); 402 403 @Override resetLockedModifierState()404 public native void resetLockedModifierState(); 405 406 @Override displayRemoved(int displayId)407 public native void displayRemoved(int displayId); 408 409 @Override setInputDispatchMode(boolean enabled, boolean frozen)410 public native void setInputDispatchMode(boolean enabled, boolean frozen); 411 412 @Override setSystemUiLightsOut(boolean lightsOut)413 public native void setSystemUiLightsOut(boolean lightsOut); 414 415 @Override setFocusedApplication(int displayId, InputApplicationHandle application)416 public native void setFocusedApplication(int displayId, InputApplicationHandle application); 417 418 @Override setFocusedDisplay(int displayId)419 public native void setFocusedDisplay(int displayId); 420 421 @Override setMinTimeBetweenUserActivityPokes(long millis)422 public native void setMinTimeBetweenUserActivityPokes(long millis); 423 424 @Override transferTouchGesture(IBinder fromChannelToken, IBinder toChannelToken, boolean isDragDrop, boolean transferEntireGesture)425 public native boolean transferTouchGesture(IBinder fromChannelToken, IBinder toChannelToken, 426 boolean isDragDrop, boolean transferEntireGesture); 427 428 @Override 429 @Deprecated transferTouch(IBinder destChannelToken, int displayId)430 public native boolean transferTouch(IBinder destChannelToken, int displayId); 431 432 @Override getMousePointerSpeed()433 public native int getMousePointerSpeed(); 434 435 @Override setPointerSpeed(int speed)436 public native void setPointerSpeed(int speed); 437 438 @Override setMouseScalingEnabled(int displayId, boolean enabled)439 public native void setMouseScalingEnabled(int displayId, boolean enabled); 440 441 @Override setMouseReverseVerticalScrollingEnabled(boolean enabled)442 public native void setMouseReverseVerticalScrollingEnabled(boolean enabled); 443 444 @Override setMouseScrollingAccelerationEnabled(boolean enabled)445 public native void setMouseScrollingAccelerationEnabled(boolean enabled); 446 447 @Override setMouseScrollingSpeed(int speed)448 public native void setMouseScrollingSpeed(int speed); 449 450 @Override setMouseSwapPrimaryButtonEnabled(boolean enabled)451 public native void setMouseSwapPrimaryButtonEnabled(boolean enabled); 452 453 @Override setMouseAccelerationEnabled(boolean enabled)454 public native void setMouseAccelerationEnabled(boolean enabled); 455 456 @Override setTouchpadPointerSpeed(int speed)457 public native void setTouchpadPointerSpeed(int speed); 458 459 @Override setTouchpadNaturalScrollingEnabled(boolean enabled)460 public native void setTouchpadNaturalScrollingEnabled(boolean enabled); 461 462 @Override setTouchpadTapToClickEnabled(boolean enabled)463 public native void setTouchpadTapToClickEnabled(boolean enabled); 464 465 @Override setTouchpadTapDraggingEnabled(boolean enabled)466 public native void setTouchpadTapDraggingEnabled(boolean enabled); 467 468 @Override setShouldNotifyTouchpadHardwareState(boolean enabled)469 public native void setShouldNotifyTouchpadHardwareState(boolean enabled); 470 471 @Override setTouchpadRightClickZoneEnabled(boolean enabled)472 public native void setTouchpadRightClickZoneEnabled(boolean enabled); 473 474 @Override setTouchpadThreeFingerTapShortcutEnabled(boolean enabled)475 public native void setTouchpadThreeFingerTapShortcutEnabled(boolean enabled); 476 477 @Override setTouchpadSystemGesturesEnabled(boolean enabled)478 public native void setTouchpadSystemGesturesEnabled(boolean enabled); 479 480 @Override setTouchpadAccelerationEnabled(boolean enabled)481 public native void setTouchpadAccelerationEnabled(boolean enabled); 482 483 @Override setShowTouches(boolean enabled)484 public native void setShowTouches(boolean enabled); 485 486 @Override setNonInteractiveDisplays(int[] displayIds)487 public native void setNonInteractiveDisplays(int[] displayIds); 488 489 @Override reloadCalibration()490 public native void reloadCalibration(); 491 492 @Override vibrate(int deviceId, long[] pattern, int[] amplitudes, int repeat, int token)493 public native void vibrate(int deviceId, long[] pattern, int[] amplitudes, int repeat, 494 int token); 495 496 @Override vibrateCombined(int deviceId, long[] pattern, SparseArray<int[]> amplitudes, int repeat, int token)497 public native void vibrateCombined(int deviceId, long[] pattern, 498 SparseArray<int[]> amplitudes, 499 int repeat, int token); 500 501 @Override cancelVibrate(int deviceId, int token)502 public native void cancelVibrate(int deviceId, int token); 503 504 @Override isVibrating(int deviceId)505 public native boolean isVibrating(int deviceId); 506 507 @Override getVibratorIds(int deviceId)508 public native int[] getVibratorIds(int deviceId); 509 510 @Override getBatteryCapacity(int deviceId)511 public native int getBatteryCapacity(int deviceId); 512 513 @Override getBatteryStatus(int deviceId)514 public native int getBatteryStatus(int deviceId); 515 516 @Override getBatteryDevicePath(int deviceId)517 public native String getBatteryDevicePath(int deviceId); 518 519 @Override getLights(int deviceId)520 public native List<Light> getLights(int deviceId); 521 522 @Override getLightPlayerId(int deviceId, int lightId)523 public native int getLightPlayerId(int deviceId, int lightId); 524 525 @Override getLightColor(int deviceId, int lightId)526 public native int getLightColor(int deviceId, int lightId); 527 528 @Override setLightPlayerId(int deviceId, int lightId, int playerId)529 public native void setLightPlayerId(int deviceId, int lightId, int playerId); 530 531 @Override setLightColor(int deviceId, int lightId, int color)532 public native void setLightColor(int deviceId, int lightId, int color); 533 534 @Override reloadKeyboardLayouts()535 public native void reloadKeyboardLayouts(); 536 537 @Override reloadDeviceAliases()538 public native void reloadDeviceAliases(); 539 540 @Override dump()541 public native String dump(); 542 543 @Override monitor()544 public native void monitor(); 545 546 @Override enableInputDevice(int deviceId)547 public native void enableInputDevice(int deviceId); 548 549 @Override disableInputDevice(int deviceId)550 public native void disableInputDevice(int deviceId); 551 552 @Override reloadPointerIcons()553 public native void reloadPointerIcons(); 554 555 @Override setPointerIcon(PointerIcon icon, int displayId, int deviceId, int pointerId, IBinder inputToken)556 public native boolean setPointerIcon(PointerIcon icon, int displayId, int deviceId, 557 int pointerId, IBinder inputToken); 558 559 @Override setPointerIconVisibility(int displayId, boolean visible)560 public native void setPointerIconVisibility(int displayId, boolean visible); 561 562 @Override requestPointerCapture(IBinder windowToken, boolean enabled)563 public native void requestPointerCapture(IBinder windowToken, boolean enabled); 564 565 @Override canDispatchToDisplay(int deviceId, int displayId)566 public native boolean canDispatchToDisplay(int deviceId, int displayId); 567 568 @Override notifyPortAssociationsChanged()569 public native void notifyPortAssociationsChanged(); 570 571 @Override changeUniqueIdAssociation()572 public native void changeUniqueIdAssociation(); 573 574 @Override changeTypeAssociation()575 public native void changeTypeAssociation(); 576 577 @Override changeKeyboardLayoutAssociation()578 public native void changeKeyboardLayoutAssociation(); 579 580 @Override setDisplayEligibilityForPointerCapture(int displayId, boolean enabled)581 public native void setDisplayEligibilityForPointerCapture(int displayId, boolean enabled); 582 583 @Override setMotionClassifierEnabled(boolean enabled)584 public native void setMotionClassifierEnabled(boolean enabled); 585 586 @Override setKeyRepeatConfiguration(int timeoutMs, int delayMs, boolean keyRepeatEnabled)587 public native void setKeyRepeatConfiguration(int timeoutMs, int delayMs, 588 boolean keyRepeatEnabled); 589 590 @Override getSensorList(int deviceId)591 public native InputSensorInfo[] getSensorList(int deviceId); 592 593 @Override getTouchpadHardwareProperties(int deviceId)594 public native TouchpadHardwareProperties getTouchpadHardwareProperties(int deviceId); 595 596 @Override flushSensor(int deviceId, int sensorType)597 public native boolean flushSensor(int deviceId, int sensorType); 598 599 @Override enableSensor(int deviceId, int sensorType, int samplingPeriodUs, int maxBatchReportLatencyUs)600 public native boolean enableSensor(int deviceId, int sensorType, int samplingPeriodUs, 601 int maxBatchReportLatencyUs); 602 603 @Override disableSensor(int deviceId, int sensorType)604 public native void disableSensor(int deviceId, int sensorType); 605 606 @Override cancelCurrentTouch()607 public native void cancelCurrentTouch(); 608 609 @Override setPointerDisplayId(int displayId)610 public native void setPointerDisplayId(int displayId); 611 612 @Override getBluetoothAddress(int deviceId)613 public native String getBluetoothAddress(int deviceId); 614 615 @Override setStylusButtonMotionEventsEnabled(boolean enabled)616 public native void setStylusButtonMotionEventsEnabled(boolean enabled); 617 618 @Override getMouseCursorPosition(int displayId)619 public native float[] getMouseCursorPosition(int displayId); 620 621 @Override setStylusPointerIconEnabled(boolean enabled)622 public native void setStylusPointerIconEnabled(boolean enabled); 623 624 @Override getSysfsRootPath(int deviceId)625 public native String getSysfsRootPath(int deviceId); 626 627 @Override sysfsNodeChanged(String sysfsNodePath)628 public native void sysfsNodeChanged(String sysfsNodePath); 629 630 @Override setAccessibilityBounceKeysThreshold(int thresholdTimeMs)631 public native void setAccessibilityBounceKeysThreshold(int thresholdTimeMs); 632 633 @Override setAccessibilitySlowKeysThreshold(int thresholdTimeMs)634 public native void setAccessibilitySlowKeysThreshold(int thresholdTimeMs); 635 636 @Override setAccessibilityStickyKeysEnabled(boolean enabled)637 public native void setAccessibilityStickyKeysEnabled(boolean enabled); 638 639 @Override setInputMethodConnectionIsActive(boolean isActive)640 public native void setInputMethodConnectionIsActive(boolean isActive); 641 642 @Override getLastUsedInputDeviceId()643 public native int getLastUsedInputDeviceId(); 644 645 @Override setKernelWakeEnabled(int deviceId, boolean enabled)646 public native boolean setKernelWakeEnabled(int deviceId, boolean enabled); 647 648 @Override setAccessibilityPointerMotionFilterEnabled(boolean enabled)649 public native void setAccessibilityPointerMotionFilterEnabled(boolean enabled); 650 } 651 } 652