Merge "Go idle on docking and dreaming intent"

This commit is contained in:
Fiona Campbell
2021-12-16 11:22:36 +00:00
committed by Android (Google) Code Review
3 changed files with 64 additions and 5 deletions

View File

@@ -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();
}

View File

@@ -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;
}
}

View File

@@ -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;