[AAE display] Disable touch input when the display is off
Disable touch inputs when we turn the display off. This prevents
the user from waking the system by touching a dark display. (Which
could otherwise happen in Garage Mode.)
This CL also re-enables touch input when we turn the display on.
Fixes: 140564727
Test: On Hawk using 'adb shell dumpsys car_service suspend'
Merged-In: I29a218a4a98ab65ff1742143d7a4213e8f2c4eaa
Change-Id: I29a218a4a98ab65ff1742143d7a4213e8f2c4eaa
diff --git a/service/src/com/android/car/systeminterface/DisplayInterface.java b/service/src/com/android/car/systeminterface/DisplayInterface.java
index 4d8f180..d20a177 100644
--- a/service/src/com/android/car/systeminterface/DisplayInterface.java
+++ b/service/src/com/android/car/systeminterface/DisplayInterface.java
@@ -28,6 +28,7 @@
import android.database.ContentObserver;
import android.hardware.display.DisplayManager;
import android.hardware.display.DisplayManager.DisplayListener;
+import android.hardware.input.InputManager;
import android.os.Handler;
import android.os.Looper;
import android.os.PowerManager;
@@ -41,6 +42,7 @@
import android.view.Display;
import android.view.DisplayAddress;
import android.view.IWindowManager;
+import android.view.InputDevice;
import com.android.car.CarLog;
import com.android.car.CarPowerManagementService;
@@ -76,6 +78,7 @@
private final ContentResolver mContentResolver;
private final Context mContext;
private final DisplayManager mDisplayManager;
+ private final InputManager mInputManager;
private final int mMaximumBacklight;
private final int mMinimumBacklight;
private final PowerManager mPowerManager;
@@ -117,6 +120,7 @@
mContext = context;
mContentResolver = mContext.getContentResolver();
mDisplayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
+ mInputManager = (InputManager) mContext.getSystemService(Context.INPUT_SERVICE);
mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mMaximumBacklight = mPowerManager.getMaximumScreenBrightnessSetting();
mMinimumBacklight = mPowerManager.getMinimumScreenBrightnessSetting();
@@ -209,6 +213,19 @@
Log.i(CarLog.TAG_POWER, "off display");
mPowerManager.goToSleep(SystemClock.uptimeMillis());
}
+ // Turn touchscreen input devices on or off, the same as the display
+ for (int deviceId : mInputManager.getInputDeviceIds()) {
+ InputDevice inputDevice = mInputManager.getInputDevice(deviceId);
+ if (inputDevice != null
+ && (inputDevice.getSources() & InputDevice.SOURCE_TOUCHSCREEN)
+ == InputDevice.SOURCE_TOUCHSCREEN) {
+ if (on) {
+ mInputManager.enableInputDevice(deviceId);
+ } else {
+ mInputManager.disableInputDevice(deviceId);
+ }
+ }
+ }
}
@Override