summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/os/PowerManagerInternal.java6
-rw-r--r--services/core/java/com/android/server/UiModeManagerService.java19
-rw-r--r--services/core/java/com/android/server/power/PowerManagerService.java5
-rw-r--r--services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java33
4 files changed, 60 insertions, 3 deletions
diff --git a/core/java/android/os/PowerManagerInternal.java b/core/java/android/os/PowerManagerInternal.java
index f62cc879cce3..8afd6de235a0 100644
--- a/core/java/android/os/PowerManagerInternal.java
+++ b/core/java/android/os/PowerManagerInternal.java
@@ -341,4 +341,10 @@ public abstract class PowerManagerInternal {
* device is not awake.
*/
public abstract void nap(long eventTime, boolean allowWake);
+
+ /**
+ * Returns true if ambient display is suppressed by any app with any token. This method will
+ * return false if ambient display is not available.
+ */
+ public abstract boolean isAmbientDisplaySuppressed();
}
diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java
index 8d878af4b788..fcc1ef2a3882 100644
--- a/services/core/java/com/android/server/UiModeManagerService.java
+++ b/services/core/java/com/android/server/UiModeManagerService.java
@@ -152,6 +152,8 @@ final class UiModeManagerService extends SystemService {
// flag set by resource, whether to start dream immediately upon docking even if unlocked.
private boolean mStartDreamImmediatelyOnDock = true;
+ // flag set by resource, whether to disable dreams when ambient mode suppression is enabled.
+ private boolean mDreamsDisabledByAmbientModeSuppression = false;
// flag set by resource, whether to enable Car dock launch when starting car mode.
private boolean mEnableCarDockLaunch = true;
// flag set by resource, whether to lock UI mode to the default one or not.
@@ -364,6 +366,11 @@ final class UiModeManagerService extends SystemService {
mStartDreamImmediatelyOnDock = startDreamImmediatelyOnDock;
}
+ @VisibleForTesting
+ void setDreamsDisabledByAmbientModeSuppression(boolean disabledByAmbientModeSuppression) {
+ mDreamsDisabledByAmbientModeSuppression = disabledByAmbientModeSuppression;
+ }
+
@Override
public void onUserSwitching(@Nullable TargetUser from, @NonNull TargetUser to) {
mCurrentUser = to.getUserIdentifier();
@@ -424,6 +431,8 @@ final class UiModeManagerService extends SystemService {
final Resources res = context.getResources();
mStartDreamImmediatelyOnDock = res.getBoolean(
com.android.internal.R.bool.config_startDreamImmediatelyOnDock);
+ mDreamsDisabledByAmbientModeSuppression = res.getBoolean(
+ com.android.internal.R.bool.config_dreamsDisabledByAmbientModeSuppressionConfig);
mNightMode = res.getInteger(
com.android.internal.R.integer.config_defaultNightMode);
mDefaultUiModeType = res.getInteger(
@@ -1827,10 +1836,14 @@ final class UiModeManagerService extends SystemService {
// Send the new configuration.
applyConfigurationExternallyLocked();
+ final boolean dreamsSuppressed = mDreamsDisabledByAmbientModeSuppression
+ && mLocalPowerManager.isAmbientDisplaySuppressed();
+
// If we did not start a dock app, then start dreaming if appropriate.
- if (category != null && !dockAppStarted && (mStartDreamImmediatelyOnDock
- || mWindowManager.isKeyguardShowingAndNotOccluded()
- || !mPowerManager.isInteractive())) {
+ if (category != null && !dockAppStarted && !dreamsSuppressed && (
+ mStartDreamImmediatelyOnDock
+ || mWindowManager.isKeyguardShowingAndNotOccluded()
+ || !mPowerManager.isInteractive())) {
mInjector.startDreamWhenDockedIfAppropriate(getContext());
}
}
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 4ec92ec9190b..725fb3fec616 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -6695,6 +6695,11 @@ public final class PowerManagerService extends SystemService
public void nap(long eventTime, boolean allowWake) {
napInternal(eventTime, Process.SYSTEM_UID, allowWake);
}
+
+ @Override
+ public boolean isAmbientDisplaySuppressed() {
+ return mAmbientDisplaySuppressionController.isSuppressed();
+ }
}
/**
diff --git a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java
index 91c2fe0eb262..8e81e2d8997c 100644
--- a/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java
+++ b/services/tests/uiservicestests/src/com/android/server/UiModeManagerServiceTest.java
@@ -1371,6 +1371,39 @@ public class UiModeManagerServiceTest extends UiServiceTestCase {
verify(mInjector).startDreamWhenDockedIfAppropriate(mContext);
}
+ @Test
+ public void dreamWhenDocked_ambientModeSuppressed_suppressionEnabled() {
+ mUiManagerService.setStartDreamImmediatelyOnDock(true);
+ mUiManagerService.setDreamsDisabledByAmbientModeSuppression(true);
+
+ when(mLocalPowerManager.isAmbientDisplaySuppressed()).thenReturn(true);
+ triggerDockIntent();
+ verifyAndSendResultBroadcast();
+ verify(mInjector, never()).startDreamWhenDockedIfAppropriate(mContext);
+ }
+
+ @Test
+ public void dreamWhenDocked_ambientModeSuppressed_suppressionDisabled() {
+ mUiManagerService.setStartDreamImmediatelyOnDock(true);
+ mUiManagerService.setDreamsDisabledByAmbientModeSuppression(false);
+
+ when(mLocalPowerManager.isAmbientDisplaySuppressed()).thenReturn(true);
+ triggerDockIntent();
+ verifyAndSendResultBroadcast();
+ verify(mInjector).startDreamWhenDockedIfAppropriate(mContext);
+ }
+
+ @Test
+ public void dreamWhenDocked_ambientModeNotSuppressed_suppressionEnabled() {
+ mUiManagerService.setStartDreamImmediatelyOnDock(true);
+ mUiManagerService.setDreamsDisabledByAmbientModeSuppression(true);
+
+ when(mLocalPowerManager.isAmbientDisplaySuppressed()).thenReturn(false);
+ triggerDockIntent();
+ verifyAndSendResultBroadcast();
+ verify(mInjector).startDreamWhenDockedIfAppropriate(mContext);
+ }
+
private void triggerDockIntent() {
final Intent dockedIntent =
new Intent(Intent.ACTION_DOCK_EVENT)