summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fiona Campbell <flc@google.com> 2021-12-07 17:58:21 +0000
committer Fiona Campbell <flc@google.com> 2021-12-15 17:38:35 +0000
commitacd7debc658ac6bbcf3cc8c2173ce4a99d2ce113 (patch)
treed2b751bc30eca819727bc7a09268c72333105c10
parentddae9c92a22d8ad9f411013fe5a9f27fc32cfdef (diff)
Go idle on docking and dreaming intent
Listen to docking and undocking intents in display manager. Then call DPC to call ABC to set the docked and idle mode. We do this for the default display. The adb command will set docked and idle mode, regardless of whether we are actually idle or not. Bug: 205686215 Test: atest AutomaticBrightnessControllerTest logcat | grep -i idle adb shell dumpsys DockObserver set state [0|3] adb shell cmd display [dock|undock] // this goes straight to docked+idlemode Change-Id: I5b999439a3681c7c7a8398d7493a66ab132ea41b
-rw-r--r--services/core/java/com/android/server/display/DisplayManagerService.java46
-rw-r--r--services/core/java/com/android/server/display/DisplayManagerShellCommand.java18
-rw-r--r--services/core/java/com/android/server/display/DisplayPowerController.java5
3 files changed, 64 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 4c569996817d..c0a6abf3a121 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -45,7 +45,10 @@ import android.app.compat.CompatChanges;
import android.companion.virtual.IVirtualDevice;
import android.compat.annotation.ChangeId;
import android.compat.annotation.EnabledSince;
+import android.content.BroadcastReceiver;
import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.pm.ParceledListSlice;
import android.content.res.Resources;
@@ -421,6 +424,32 @@ public final class DisplayManagerService extends SystemService {
// Receives notifications about changes to Settings.
private SettingsObserver mSettingsObserver;
+ // Keeps note of what state the device is in, used for idle screen brightness mode.
+ private boolean mIsDocked;
+ private boolean mIsDreaming;
+
+ private final BroadcastReceiver mIdleModeReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ final DisplayManagerInternal dmi =
+ LocalServices.getService(DisplayManagerInternal.class);
+ if (Intent.ACTION_DOCK_EVENT.equals(intent.getAction())) {
+ int dockState = intent.getIntExtra(Intent.EXTRA_DOCK_STATE,
+ Intent.EXTRA_DOCK_STATE_UNDOCKED);
+ mIsDocked = dockState == Intent.EXTRA_DOCK_STATE_DESK
+ || dockState == Intent.EXTRA_DOCK_STATE_LE_DESK
+ || dockState == Intent.EXTRA_DOCK_STATE_HE_DESK;
+ }
+ if (Intent.ACTION_DREAMING_STARTED.equals(intent.getAction())) {
+ mIsDreaming = true;
+ } else if (Intent.ACTION_DREAMING_STOPPED.equals(intent.getAction())) {
+ mIsDreaming = false;
+ }
+ setDockedAndIdleEnabled(/* enabled= */(mIsDocked && mIsDreaming),
+ Display.DEFAULT_DISPLAY);
+ }
+ };
+
private final boolean mAllowNonNativeRefreshRateOverride;
private final BrightnessSynchronizer mBrightnessSynchronizer;
@@ -616,6 +645,13 @@ public final class DisplayManagerService extends SystemService {
mSettingsObserver = new SettingsObserver();
mBrightnessSynchronizer.startSynchronizing();
+
+ final IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_DREAMING_STARTED);
+ filter.addAction(Intent.ACTION_DREAMING_STOPPED);
+ filter.addAction(Intent.ACTION_DOCK_EVENT);
+
+ mContext.registerReceiver(mIdleModeReceiver, filter);
}
@VisibleForTesting
@@ -2096,6 +2132,16 @@ public final class DisplayManagerService extends SystemService {
}
}
+ void setDockedAndIdleEnabled(boolean enabled, int displayId) {
+ synchronized (mSyncRoot) {
+ final DisplayPowerController displayPowerController = mDisplayPowerControllers.get(
+ displayId);
+ if (displayPowerController != null) {
+ displayPowerController.setAutomaticScreenBrightnessMode(enabled);
+ }
+ }
+ }
+
private void clearViewportsLocked() {
mViewports.clear();
}
diff --git a/services/core/java/com/android/server/display/DisplayManagerShellCommand.java b/services/core/java/com/android/server/display/DisplayManagerShellCommand.java
index 43a850c5d626..9a7ddcb2ff91 100644
--- a/services/core/java/com/android/server/display/DisplayManagerShellCommand.java
+++ b/services/core/java/com/android/server/display/DisplayManagerShellCommand.java
@@ -76,6 +76,10 @@ class DisplayManagerShellCommand extends ShellCommand {
return setUserDisabledHdrTypes();
case "get-user-disabled-hdr-types":
return getUserDisabledHdrTypes();
+ case "dock":
+ return setDockedAndIdle();
+ case "undock":
+ return unsetDockedAndIdle();
default:
return handleDefaultCommands(cmd);
}
@@ -124,6 +128,10 @@ class DisplayManagerShellCommand extends ShellCommand {
pw.println(" Sets the user disabled HDR types as TYPES");
pw.println(" get-user-disabled-hdr-types");
pw.println(" Returns the user disabled HDR types");
+ pw.println(" dock");
+ pw.println(" Sets brightness to docked + idle screen brightness mode");
+ pw.println(" undock");
+ pw.println(" Sets brightness to active (normal) screen brightness mode");
pw.println();
Intent.printIntentArgsHelp(pw , "");
}
@@ -345,4 +353,14 @@ class DisplayManagerShellCommand extends ShellCommand {
return -1;
}
}
+
+ private int setDockedAndIdle() {
+ mService.setDockedAndIdleEnabled(true, Display.DEFAULT_DISPLAY);
+ return 0;
+ }
+
+ private int unsetDockedAndIdle() {
+ mService.setDockedAndIdleEnabled(false, Display.DEFAULT_DISPLAY);
+ return 0;
+ }
}
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index b46ee27d30cb..2dfaa8bad380 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -395,11 +395,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
@Nullable
private BrightnessMappingStrategy mIdleModeBrightnessMapper;
- // If these are both true, and mIdleModeBrightnessMapper != null,
- // then we are in idle screen brightness mode.
- private boolean mIsDreaming;
- private boolean mIsDocked;
-
// The current brightness configuration.
@Nullable
private BrightnessConfiguration mBrightnessConfiguration;