Merge "Revert "Per-display group PowerManager APIs by default"" into main
diff --git a/core/java/android/hardware/display/DisplayManagerInternal.java b/core/java/android/hardware/display/DisplayManagerInternal.java
index 6c1aa90..36e816a 100644
--- a/core/java/android/hardware/display/DisplayManagerInternal.java
+++ b/core/java/android/hardware/display/DisplayManagerInternal.java
@@ -92,10 +92,9 @@
boolean waitForNegativeProximity);
/**
- * Returns {@code true} if the proximity sensor screen-off function is available for the given
- * display.
+ * Returns {@code true} if the proximity sensor screen-off function is available.
*/
- public abstract boolean isProximitySensorAvailable(int displayId);
+ public abstract boolean isProximitySensorAvailable();
/**
* Registers a display group listener which will be informed of the addition, removal, or change
diff --git a/core/java/android/os/IPowerManager.aidl b/core/java/android/os/IPowerManager.aidl
index e85e580..5f62b8b 100644
--- a/core/java/android/os/IPowerManager.aidl
+++ b/core/java/android/os/IPowerManager.aidl
@@ -42,9 +42,7 @@
void updateWakeLockWorkSource(IBinder lock, in WorkSource ws, String historyTag);
void updateWakeLockCallback(IBinder lock, IWakeLockCallback callback);
- @UnsupportedAppUsage
boolean isWakeLockLevelSupported(int level);
- boolean isWakeLockLevelSupportedWithDisplayId(int level, int displayId);
void userActivity(int displayId, long time, int event, int flags);
void wakeUp(long time, int reason, String details, String opPackageName);
diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java
index 32db3be..b9bae5b 100644
--- a/core/java/android/os/PowerManager.java
+++ b/core/java/android/os/PowerManager.java
@@ -1344,9 +1344,6 @@
* @see #ON_AFTER_RELEASE
*/
public WakeLock newWakeLock(int levelAndFlags, String tag) {
- if (android.companion.virtualdevice.flags.Flags.displayPowerManagerApis()) {
- return newWakeLock(levelAndFlags, tag, mContext.getDisplayId());
- }
validateWakeLockParameters(levelAndFlags, tag);
return new WakeLock(levelAndFlags, tag, mContext.getOpPackageName(),
Display.INVALID_DISPLAY);
@@ -1737,10 +1734,6 @@
*/
public boolean isWakeLockLevelSupported(int level) {
try {
- if (android.companion.virtualdevice.flags.Flags.displayPowerManagerApis()) {
- return mService.isWakeLockLevelSupportedWithDisplayId(
- level, mContext.getDisplayId());
- }
return mService.isWakeLockLevelSupported(level);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
@@ -1804,9 +1797,6 @@
* @see android.content.Intent#ACTION_SCREEN_OFF
*/
public boolean isInteractive() {
- if (android.companion.virtualdevice.flags.Flags.displayPowerManagerApis()) {
- return isInteractive(mContext.getDisplayId());
- }
return mInteractiveCache.query(null);
}
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 3dc531e..bb503aa 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -5233,9 +5233,10 @@
}
@Override
- public boolean isProximitySensorAvailable(int displayId) {
+ public boolean isProximitySensorAvailable() {
synchronized (mSyncRoot) {
- return mDisplayPowerControllers.get(displayId).isProximitySensorAvailable();
+ return mDisplayPowerControllers.get(Display.DEFAULT_DISPLAY)
+ .isProximitySensorAvailable();
}
}
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 65f2241..21ab781 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -743,7 +743,6 @@
int reason, int uid, int opUid, String opPackageName, String details) {
mWakefulnessChanging = true;
mDirty |= DIRTY_WAKEFULNESS;
- mInjector.invalidateIsInteractiveCaches();
if (wakefulness == WAKEFULNESS_AWAKE) {
// Kick user activity to prevent newly awake group from timing out instantly.
// The dream may end without user activity if the dream app crashes / is updated,
@@ -2036,7 +2035,7 @@
}
@SuppressWarnings("deprecation")
- private boolean isWakeLockLevelSupportedInternal(int level, int displayId) {
+ private boolean isWakeLockLevelSupportedInternal(int level) {
synchronized (mLock) {
switch (level) {
case PowerManager.PARTIAL_WAKE_LOCK:
@@ -2048,8 +2047,7 @@
return true;
case PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK:
- return mSystemReady
- && mDisplayManagerInternal.isProximitySensorAvailable(displayId);
+ return mSystemReady && mDisplayManagerInternal.isProximitySensorAvailable();
case PowerManager.SCREEN_TIMEOUT_OVERRIDE_WAKE_LOCK:
return mSystemReady && mFeatureFlags.isEarlyScreenTimeoutDetectorEnabled()
&& mScreenTimeoutOverridePolicy != null;
@@ -2266,6 +2264,7 @@
int opUid, String opPackageName, String details) {
mPowerGroups.get(groupId).setWakefulnessLocked(wakefulness, eventTime, uid, reason, opUid,
opPackageName, details);
+ mInjector.invalidateIsInteractiveCaches();
}
@SuppressWarnings("deprecation")
@@ -2330,6 +2329,8 @@
Trace.traceBegin(Trace.TRACE_TAG_POWER, traceMethodName);
try {
// Phase 2: Handle wakefulness change and bookkeeping.
+ // Under lock, invalidate before set ensures caches won't return stale values.
+ mInjector.invalidateIsInteractiveCaches();
mWakefulnessRaw = newWakefulness;
mWakefulnessChanging = true;
mDirty |= DIRTY_WAKEFULNESS;
@@ -2427,7 +2428,6 @@
void onPowerGroupEventLocked(int event, PowerGroup powerGroup) {
mWakefulnessChanging = true;
mDirty |= DIRTY_WAKEFULNESS;
- mInjector.invalidateIsInteractiveCaches();
final int groupId = powerGroup.getGroupId();
if (event == DisplayGroupPowerChangeListener.DISPLAY_GROUP_REMOVED) {
mPowerGroups.delete(groupId);
@@ -3975,9 +3975,6 @@
private boolean isInteractiveInternal(int displayId, int uid) {
synchronized (mLock) {
- if (!mSystemReady) {
- return isGloballyInteractiveInternal();
- }
DisplayInfo displayInfo = mDisplayManagerInternal.getDisplayInfo(displayId);
if (displayInfo == null) {
Slog.w(TAG, "Did not find DisplayInfo for displayId " + displayId);
@@ -5978,17 +5975,7 @@
public boolean isWakeLockLevelSupported(int level) {
final long ident = Binder.clearCallingIdentity();
try {
- return isWakeLockLevelSupportedInternal(level, Display.DEFAULT_DISPLAY);
- } finally {
- Binder.restoreCallingIdentity(ident);
- }
- }
-
- @Override // Binder call
- public boolean isWakeLockLevelSupportedWithDisplayId(int level, int displayId) {
- final long ident = Binder.clearCallingIdentity();
- try {
- return isWakeLockLevelSupportedInternal(level, displayId);
+ return isWakeLockLevelSupportedInternal(level);
} finally {
Binder.restoreCallingIdentity(ident);
}
diff --git a/services/tests/powerservicetests/src/com/android/server/power/LowPowerStandbyControllerTest.java b/services/tests/powerservicetests/src/com/android/server/power/LowPowerStandbyControllerTest.java
index 3e731a3..0e815d0 100644
--- a/services/tests/powerservicetests/src/com/android/server/power/LowPowerStandbyControllerTest.java
+++ b/services/tests/powerservicetests/src/com/android/server/power/LowPowerStandbyControllerTest.java
@@ -163,7 +163,6 @@
addLocalServiceMock(ActivityManagerInternal.class, mActivityManagerInternalMock);
when(mIPowerManagerMock.isInteractive()).thenReturn(true);
- when(mIPowerManagerMock.isDisplayInteractive(anyInt())).thenReturn(true);
when(mDeviceConfigWrapperMock.enableCustomPolicy()).thenReturn(true);
when(mDeviceConfigWrapperMock.enableStandbyPorts()).thenReturn(true);
@@ -900,13 +899,11 @@
private void setInteractive() throws Exception {
when(mIPowerManagerMock.isInteractive()).thenReturn(true);
- when(mIPowerManagerMock.isDisplayInteractive(anyInt())).thenReturn(true);
mContextSpy.sendBroadcast(new Intent(Intent.ACTION_SCREEN_ON));
}
private void setNonInteractive() throws Exception {
when(mIPowerManagerMock.isInteractive()).thenReturn(false);
- when(mIPowerManagerMock.isDisplayInteractive(anyInt())).thenReturn(false);
mContextSpy.sendBroadcast(new Intent(Intent.ACTION_SCREEN_OFF));
}
diff --git a/services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java b/services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java
index e9e21de..54a02cf 100644
--- a/services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java
+++ b/services/tests/powerservicetests/src/com/android/server/power/PowerManagerServiceTest.java
@@ -1659,64 +1659,6 @@
}
@Test
- public void testIsWakeLockLevelSupported_returnsCorrectValue() {
- createService();
- startSystem();
- PowerManagerService.BinderService service = mService.getBinderServiceInstance();
- assertThat(service.isWakeLockLevelSupported(PowerManager.PARTIAL_WAKE_LOCK)).isTrue();
- assertThat(service.isWakeLockLevelSupported(PowerManager.SCREEN_BRIGHT_WAKE_LOCK)).isTrue();
- assertThat(service.isWakeLockLevelSupported(PowerManager.FULL_WAKE_LOCK)).isTrue();
- assertThat(service.isWakeLockLevelSupported(PowerManager.DOZE_WAKE_LOCK)).isTrue();
- assertThat(service.isWakeLockLevelSupported(PowerManager.DRAW_WAKE_LOCK)).isTrue();
-
- when(mDisplayManagerInternalMock.isProximitySensorAvailable(eq(Display.DEFAULT_DISPLAY)))
- .thenReturn(true);
- assertThat(service.isWakeLockLevelSupported(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK))
- .isTrue();
-
- when(mDisplayManagerInternalMock.isProximitySensorAvailable(eq(Display.DEFAULT_DISPLAY)))
- .thenReturn(false);
- assertThat(service.isWakeLockLevelSupported(PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK))
- .isFalse();
- }
-
- @Test
- public void testIsWakeLockLevelSupportedWithDisplayId_nonDefaultDisplay_returnsCorrectValue() {
- createService();
- startSystem();
- int displayId = Display.DEFAULT_DISPLAY + 1;
- PowerManagerService.BinderService service = mService.getBinderServiceInstance();
- assertThat(service.isWakeLockLevelSupportedWithDisplayId(
- PowerManager.PARTIAL_WAKE_LOCK, displayId))
- .isTrue();
- assertThat(service.isWakeLockLevelSupportedWithDisplayId(
- PowerManager.SCREEN_BRIGHT_WAKE_LOCK, displayId))
- .isTrue();
- assertThat(service.isWakeLockLevelSupportedWithDisplayId(
- PowerManager.FULL_WAKE_LOCK, displayId))
- .isTrue();
- assertThat(service.isWakeLockLevelSupportedWithDisplayId(
- PowerManager.DOZE_WAKE_LOCK, displayId))
- .isTrue();
- assertThat(service.isWakeLockLevelSupportedWithDisplayId(
- PowerManager.DRAW_WAKE_LOCK, displayId))
- .isTrue();
-
- when(mDisplayManagerInternalMock.isProximitySensorAvailable(eq(displayId)))
- .thenReturn(true);
- assertThat(service.isWakeLockLevelSupportedWithDisplayId(
- PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, displayId))
- .isTrue();
-
- when(mDisplayManagerInternalMock.isProximitySensorAvailable(eq(displayId)))
- .thenReturn(false);
- assertThat(service.isWakeLockLevelSupportedWithDisplayId(
- PowerManager.PROXIMITY_SCREEN_OFF_WAKE_LOCK, displayId))
- .isFalse();
- }
-
-
- @Test
public void testWakeLock_affectsProperDisplayGroup() {
final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
@@ -1757,47 +1699,6 @@
}
@Test
- public void testWakeLock_nonDefaultDisplay_affectsProperDisplayGroup() {
- final int nonDefaultDisplayId = Display.DEFAULT_DISPLAY + 1;
- final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
- final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
- new AtomicReference<>();
- doAnswer((Answer<Void>) invocation -> {
- listener.set(invocation.getArgument(0));
- return null;
- }).when(mDisplayManagerInternalMock).registerDisplayGroupListener(any());
- final DisplayInfo info = new DisplayInfo();
- info.displayGroupId = nonDefaultDisplayGroupId;
- when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplayId)).thenReturn(info);
-
- final String pkg = mContextSpy.getOpPackageName();
- final Binder token = new Binder();
- final String tag = "testWakeLock_nonDefaultDisplay_affectsProperDisplayGroup";
-
- setMinimumScreenOffTimeoutConfig(5);
- createService();
- startSystem();
- listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
-
- mService.getBinderServiceInstance().acquireWakeLock(token,
- PowerManager.SCREEN_BRIGHT_WAKE_LOCK, tag, pkg,
- null /* workSource */, null /* historyTag */, nonDefaultDisplayId, null);
-
- assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
- assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
- WAKEFULNESS_AWAKE);
- assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
- WAKEFULNESS_AWAKE);
-
- advanceTime(15000);
- assertThat(mService.getGlobalWakefulnessLocked()).isEqualTo(WAKEFULNESS_AWAKE);
- assertThat(mService.getWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP)).isEqualTo(
- WAKEFULNESS_ASLEEP);
- assertThat(mService.getWakefulnessLocked(nonDefaultDisplayGroupId)).isEqualTo(
- WAKEFULNESS_AWAKE);
- }
-
- @Test
public void testInvalidDisplayGroupWakeLock_affectsAllDisplayGroups() {
final int nonDefaultDisplayGroupId = Display.DEFAULT_DISPLAY_GROUP + 1;
final AtomicReference<DisplayManagerInternal.DisplayGroupListener> listener =
@@ -2689,15 +2590,14 @@
when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
createService();
startSystem();
- verify(mInvalidateInteractiveCachesMock).call();
-
listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
- verify(mInvalidateInteractiveCachesMock, times(2)).call();
+
+ verify(mInvalidateInteractiveCachesMock).call();
mService.setWakefulnessLocked(Display.DEFAULT_DISPLAY_GROUP, WAKEFULNESS_ASLEEP,
mClock.now(), 0, PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
- verify(mInvalidateInteractiveCachesMock, times(3)).call();
+ verify(mInvalidateInteractiveCachesMock, times(2)).call();
}
@Test
@@ -2716,15 +2616,14 @@
when(mDisplayManagerInternalMock.getDisplayInfo(nonDefaultDisplay)).thenReturn(info);
createService();
startSystem();
- verify(mInvalidateInteractiveCachesMock).call();
-
listener.get().onDisplayGroupAdded(nonDefaultDisplayGroupId);
- verify(mInvalidateInteractiveCachesMock, times(2)).call();
+
+ verify(mInvalidateInteractiveCachesMock).call();
mService.setWakefulnessLocked(nonDefaultDisplayGroupId, WAKEFULNESS_ASLEEP, mClock.now(),
0, PowerManager.GO_TO_SLEEP_REASON_APPLICATION, 0, null, null);
- verify(mInvalidateInteractiveCachesMock, times(3)).call();
+ verify(mInvalidateInteractiveCachesMock, times(2)).call();
}
@Test