Adding feature: input device disable/enable.
This functionality will only be available for signed system applications.
A disable call will cause a file descriptor to the input device
driver to be closed, which in turn may cause the input device
to switch into a low-power mode.
An enable call will reopen the input device.
Bug: 30143923
Test: developed a custom apk with signature permission that
calls disable/enable on touchscreen device. Verified that
touchscreen stops working when disable is called and starts
working again when enable is called. Verified that the file
handle to the driver is closed and reopened. Verified that
the notification onInputDeviceChanged is received in the app.
CTS test - android.view.cts.InputDeviceEnabledTest
Change-Id: I1e42c6996e679c083cd3f0c9adfaef8ba22c4ee4
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index aafc9a8..0e52871 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -230,6 +230,9 @@
private static native void nativeReloadDeviceAliases(long ptr);
private static native String nativeDump(long ptr);
private static native void nativeMonitor(long ptr);
+ private static native boolean nativeIsInputDeviceEnabled(long ptr, int deviceId);
+ private static native void nativeEnableInputDevice(long ptr, int deviceId);
+ private static native void nativeDisableInputDevice(long ptr, int deviceId);
private static native void nativeSetPointerIconType(long ptr, int iconId);
private static native void nativeReloadPointerIcons(long ptr);
private static native void nativeSetCustomPointerIcon(long ptr, PointerIcon icon);
@@ -639,6 +642,32 @@
return null;
}
+ // Binder call
+ @Override
+ public boolean isInputDeviceEnabled(int deviceId) {
+ return nativeIsInputDeviceEnabled(mPtr, deviceId);
+ }
+
+ // Binder call
+ @Override
+ public void enableInputDevice(int deviceId) {
+ if (!checkCallingPermission(android.Manifest.permission.DISABLE_INPUT_DEVICE,
+ "enableInputDevice()")) {
+ throw new SecurityException("Requires DISABLE_INPUT_DEVICE permission");
+ }
+ nativeEnableInputDevice(mPtr, deviceId);
+ }
+
+ // Binder call
+ @Override
+ public void disableInputDevice(int deviceId) {
+ if (!checkCallingPermission(android.Manifest.permission.DISABLE_INPUT_DEVICE,
+ "disableInputDevice()")) {
+ throw new SecurityException("Requires DISABLE_INPUT_DEVICE permission");
+ }
+ nativeDisableInputDevice(mPtr, deviceId);
+ }
+
/**
* Gets the ids of all input devices in the system.
* @return The input device ids.