summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Ashley Holton <ashleyholton@google.com> 2024-10-10 15:44:27 +0000
committer Ashley Holton <ashleyholton@google.com> 2024-10-14 19:05:27 +0000
commit131ac7758ca30922bb203e74b519c99cacba78ab (patch)
tree384ab51f9477490e6b8d1ad797bfc1aa5cf12747
parentf7faa16424437b82a7d06422828687b8c4b163b1 (diff)
Update native input manager when display group removed
If per-display wake by touch flag is enabled, reset display interactivities with current existing displays and inform native input manager of the change. Flag: com.android.server.power.feature.flags.per_display_wake_by_touch Bug: 372680564 Test: atest NotifierTest, CtsInputTestCases Change-Id: Ic6095d53322cb7cf91d06bb3f1b3900ea5768a80
-rw-r--r--services/core/java/com/android/server/power/Notifier.java4
-rw-r--r--services/tests/powerservicetests/src/com/android/server/power/NotifierTest.java27
2 files changed, 31 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/power/Notifier.java b/services/core/java/com/android/server/power/Notifier.java
index 4fae798f0cef..4ecc860e691e 100644
--- a/services/core/java/com/android/server/power/Notifier.java
+++ b/services/core/java/com/android/server/power/Notifier.java
@@ -771,6 +771,10 @@ public class Notifier {
public void onGroupRemoved(int groupId) {
mInteractivityByGroupId.remove(groupId);
mWakefulnessSessionObserver.removePowerGroup(groupId);
+ if (mFlags.isPerDisplayWakeByTouchEnabled()) {
+ resetDisplayInteractivities();
+ mInputManagerInternal.setDisplayInteractivities(mDisplayInteractivities);
+ }
}
/**
diff --git a/services/tests/powerservicetests/src/com/android/server/power/NotifierTest.java b/services/tests/powerservicetests/src/com/android/server/power/NotifierTest.java
index a1db18232c09..1c7fc63efd41 100644
--- a/services/tests/powerservicetests/src/com/android/server/power/NotifierTest.java
+++ b/services/tests/powerservicetests/src/com/android/server/power/NotifierTest.java
@@ -54,6 +54,7 @@ import android.os.test.TestLooper;
import android.provider.Settings;
import android.testing.TestableContext;
import android.util.IntArray;
+import android.util.SparseArray;
import android.util.SparseBooleanArray;
import android.view.Display;
import android.view.DisplayAddress;
@@ -384,6 +385,32 @@ public class NotifierTest {
}
@Test
+ public void testOnGroupRemoved_perDisplayWakeByTouchEnabled() {
+ createNotifier();
+ // GIVEN per-display wake by touch is enabled and one display group has been defined
+ when(mPowerManagerFlags.isPerDisplayWakeByTouchEnabled()).thenReturn(true);
+ final int groupId = 313;
+ final int displayId1 = 3113;
+ final int displayId2 = 4114;
+ final int[] displays = new int[]{displayId1, displayId2};
+ when(mDisplayManagerInternal.getDisplayIds()).thenReturn(IntArray.wrap(displays));
+ when(mDisplayManagerInternal.getDisplayIdsForGroup(groupId)).thenReturn(displays);
+ mNotifier.onGroupWakefulnessChangeStarted(
+ groupId, WAKEFULNESS_AWAKE, PowerManager.WAKE_REASON_TAP, /* eventTime= */ 1000);
+ final SparseBooleanArray expectedDisplayInteractivities = new SparseBooleanArray();
+ expectedDisplayInteractivities.put(displayId1, true);
+ expectedDisplayInteractivities.put(displayId2, true);
+ verify(mInputManagerInternal).setDisplayInteractivities(expectedDisplayInteractivities);
+
+ // WHEN display group is removed
+ when(mDisplayManagerInternal.getDisplayIdsByGroupsIds()).thenReturn(new SparseArray<>());
+ mNotifier.onGroupRemoved(groupId);
+
+ // THEN native input manager is informed that displays in that group no longer exist
+ verify(mInputManagerInternal).setDisplayInteractivities(new SparseBooleanArray());
+ }
+
+ @Test
public void testOnWakeLockListener_RemoteException_NoRethrow() throws RemoteException {
when(mPowerManagerFlags.improveWakelockLatency()).thenReturn(true);
createNotifier();