From 7e96654f1b2e7c97f52cdc68d343139a5186d54d Mon Sep 17 00:00:00 2001 From: Ian Pedowitz Date: Tue, 27 Dec 2016 17:33:57 +0000 Subject: [PATCH] Revert "Add Brightness setting for VR Mode." This reverts commit c7e853f51110b9b6893d526f1f7340b2966f928a. Bug: 33895226 Bug: 30984614 Change-Id: Icca320e02651b7dd7b8db84ab414f41edee32760 --- .../hardware/display/DisplayManagerInternal.java | 8 -- core/java/android/os/PowerManager.java | 51 +++-------- core/java/android/provider/Settings.java | 10 -- core/java/android/view/Display.java | 14 +-- core/res/res/values/config.xml | 10 -- core/res/res/values/symbols.xml | 3 - .../systemui/settings/BrightnessController.java | 81 +---------------- proto/src/metrics_constants.proto | 6 -- .../server/display/DisplayPowerController.java | 26 +----- .../server/display/LocalDisplayAdapter.java | 19 ---- .../core/java/com/android/server/lights/Light.java | 1 - .../com/android/server/lights/LightsService.java | 101 +++++++++++++-------- .../android/server/power/PowerManagerService.java | 60 +----------- .../com_android_server_lights_LightsService.cpp | 3 +- 14 files changed, 85 insertions(+), 308 deletions(-) diff --git a/core/java/android/hardware/display/DisplayManagerInternal.java b/core/java/android/hardware/display/DisplayManagerInternal.java index aea125835748..13ba6cc37d22 100644 --- a/core/java/android/hardware/display/DisplayManagerInternal.java +++ b/core/java/android/hardware/display/DisplayManagerInternal.java @@ -167,8 +167,6 @@ public abstract class DisplayManagerInternal { public static final int POLICY_DIM = 2; // Policy: Make the screen bright as usual. public static final int POLICY_BRIGHT = 3; - // Policy: Keep the screen and display optimized for VR mode. - public static final int POLICY_VR = 4; // The basic overall policy to apply: off, doze, dim or bright. public int policy; @@ -235,10 +233,6 @@ public abstract class DisplayManagerInternal { return policy == POLICY_BRIGHT || policy == POLICY_DIM; } - public boolean isVr() { - return policy == POLICY_VR; - } - public void copyFrom(DisplayPowerRequest other) { policy = other.policy; useProximitySensor = other.useProximitySensor; @@ -307,8 +301,6 @@ public abstract class DisplayManagerInternal { return "DIM"; case POLICY_BRIGHT: return "BRIGHT"; - case POLICY_VR: - return "VR"; default: return Integer.toString(policy); } diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index dff0a287e25c..9d04929b2c8f 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -49,23 +49,23 @@ import android.util.Log; * These levels are mutually exclusive - you may only specify one of them. * * - * + * * * * - * + * * - * + * * - * + * * * * - * + * * - * + * * - * + * * *
Flag Value
Flag ValueCPU Screen Keyboard
{@link #PARTIAL_WAKE_LOCK}On* Off OffOn* Off Off
{@link #SCREEN_DIM_WAKE_LOCK}On Dim OffOn Dim Off
{@link #SCREEN_BRIGHT_WAKE_LOCK}On Bright OffOn Bright Off
{@link #FULL_WAKE_LOCK}On Bright BrightOn Bright Bright
*

@@ -85,13 +85,13 @@ import android.util.Log; * the illumination to remain on once it turns on (e.g. from user activity). This flag * will force the screen and/or keyboard to turn on immediately, when the WakeLock is * acquired. A typical use would be for notifications which are important for the user to - * see immediately. + * see immediately. * - * + * * {@link #ON_AFTER_RELEASE} * If this flag is set, the user activity timer will be reset when the WakeLock is - * released, causing the illumination to remain on a bit longer. This can be used to - * reduce flicker if you are cycling between wake lock conditions. + * released, causing the illumination to remain on a bit longer. This can be used to + * reduce flicker if you are cycling between wake lock conditions. * * *

@@ -479,35 +479,6 @@ public final class PowerManager { } /** - * Gets the minimum supported screen brightness setting for VR Mode. - * @hide - */ - public int getMinimumScreenBrightnessForVrSetting() { - return mContext.getResources().getInteger( - com.android.internal.R.integer.config_screenBrightnessForVrSettingMinimum); - } - - /** - * Gets the maximum supported screen brightness setting for VR Mode. - * The screen may be allowed to become dimmer than this value but - * this is the maximum value that can be set by the user. - * @hide - */ - public int getMaximumScreenBrightnessForVrSetting() { - return mContext.getResources().getInteger( - com.android.internal.R.integer.config_screenBrightnessForVrSettingMaximum); - } - - /** - * Gets the default screen brightness for VR setting. - * @hide - */ - public int getDefaultScreenBrightnessForVrSetting() { - return mContext.getResources().getInteger( - com.android.internal.R.integer.config_screenBrightnessForVrSettingDefault); - } - - /** * Returns true if the twilight service should be used to adjust screen brightness * policy. This setting is experimental and disabled by default. * @hide diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 8dee276c344b..43590c7018ab 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -2889,15 +2889,6 @@ public final class Settings { new InclusiveIntegerRangeValidator(0, 255); /** - * The screen backlight brightness between 0 and 255. - * @hide - */ - public static final String SCREEN_BRIGHTNESS_FOR_VR = "screen_brightness_for_vr"; - - private static final Validator SCREEN_BRIGHTNESS_FOR_VR_VALIDATOR = - new InclusiveIntegerRangeValidator(0, 255); - - /** * Control whether to enable automatic brightness mode. */ public static final String SCREEN_BRIGHTNESS_MODE = "screen_brightness_mode"; @@ -3891,7 +3882,6 @@ public final class Settings { VALIDATORS.put(DIM_SCREEN, DIM_SCREEN_VALIDATOR); VALIDATORS.put(SCREEN_OFF_TIMEOUT, SCREEN_OFF_TIMEOUT_VALIDATOR); VALIDATORS.put(SCREEN_BRIGHTNESS, SCREEN_BRIGHTNESS_VALIDATOR); - VALIDATORS.put(SCREEN_BRIGHTNESS_FOR_VR, SCREEN_BRIGHTNESS_FOR_VR_VALIDATOR); VALIDATORS.put(SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_VALIDATOR); VALIDATORS.put(MODE_RINGER_STREAMS_AFFECTED, MODE_RINGER_STREAMS_AFFECTED_VALIDATOR); VALIDATORS.put(MUTE_STREAMS_AFFECTED, MUTE_STREAMS_AFFECTED_VALIDATOR); diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java index b37ea8ebeaa0..3beb00fc8d9e 100644 --- a/core/java/android/view/Display.java +++ b/core/java/android/view/Display.java @@ -282,15 +282,6 @@ public final class Display { */ public static final int STATE_DOZE_SUSPEND = 4; - /** - * Display state: The display is on and optimized for VR mode. - * - * @see #getState - * @see android.os.PowerManager#isInteractive - * @hide - */ - public static final int STATE_VR = 5; - /* The color mode constants defined below must be kept in sync with the ones in * system/graphics.h */ @@ -875,8 +866,7 @@ public final class Display { * Gets the state of the display, such as whether it is on or off. * * @return The state of the display: one of {@link #STATE_OFF}, {@link #STATE_ON}, - * {@link #STATE_DOZE}, {@link #STATE_DOZE_SUSPEND}, or - * {@link #STATE_UNKNOWN}. + * {@link #STATE_DOZE}, {@link #STATE_DOZE_SUSPEND}, or {@link #STATE_UNKNOWN}. */ public int getState() { synchronized (this) { @@ -992,8 +982,6 @@ public final class Display { return "DOZE"; case STATE_DOZE_SUSPEND: return "DOZE_SUSPEND"; - case STATE_VR: - return "VR"; default: return Integer.toString(state); } diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index ad979eff6dab..5967c692fb94 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -1049,16 +1049,6 @@ Must be in the range specified by minimum and maximum. --> 102 - - 86 - - - 79 - - - 255 - diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index c71bd0204eeb..ac502e0f803b 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -1800,9 +1800,6 @@ - - - diff --git a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java index 3059a0537b75..e8039c35bb4f 100644 --- a/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java +++ b/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java @@ -30,9 +30,6 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; import android.provider.Settings; -import android.service.vr.IVrManager; -import android.service.vr.IVrStateCallbacks; -import android.util.Log; import android.widget.ImageView; import com.android.internal.logging.MetricsLogger; @@ -55,12 +52,9 @@ public class BrightnessController implements ToggleSlider.Listener { private static final int MSG_SET_CHECKED = 2; private static final int MSG_ATTACH_LISTENER = 3; private static final int MSG_DETACH_LISTENER = 4; - private static final int MSG_VR_MODE_CHANGED = 5; private final int mMinimumBacklight; private final int mMaximumBacklight; - private final int mMinimumBacklightForVr; - private final int mMaximumBacklightForVr; private final Context mContext; private final ImageView mIcon; @@ -68,7 +62,6 @@ public class BrightnessController implements ToggleSlider.Listener { private final boolean mAutomaticAvailable; private final IPowerManager mPower; private final CurrentUserTracker mUserTracker; - private final IVrManager mVrManager; private Handler mBackgroundHandler; private final BrightnessObserver mBrightnessObserver; @@ -76,8 +69,7 @@ public class BrightnessController implements ToggleSlider.Listener { private ArrayList mChangeCallbacks = new ArrayList(); - private volatile boolean mAutomatic; // Brightness adjusted automatically using ambient light. - private volatile boolean mIsVrModeEnabled; + private volatile boolean mAutomatic; private boolean mListening; private boolean mExternalChange; @@ -92,8 +84,6 @@ public class BrightnessController implements ToggleSlider.Listener { Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE); private final Uri BRIGHTNESS_URI = Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS); - private final Uri BRIGHTNESS_FOR_VR_URI = - Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FOR_VR); private final Uri BRIGHTNESS_ADJ_URI = Settings.System.getUriFor(Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ); @@ -115,8 +105,6 @@ public class BrightnessController implements ToggleSlider.Listener { mBackgroundHandler.post(mUpdateSliderRunnable); } else if (BRIGHTNESS_URI.equals(uri) && !mAutomatic) { mBackgroundHandler.post(mUpdateSliderRunnable); - } else if (BRIGHTNESS_FOR_VR_URI.equals(uri)) { - mBackgroundHandler.post(mUpdateSliderRunnable); } else if (BRIGHTNESS_ADJ_URI.equals(uri) && mAutomatic) { mBackgroundHandler.post(mUpdateSliderRunnable); } else { @@ -138,9 +126,6 @@ public class BrightnessController implements ToggleSlider.Listener { BRIGHTNESS_URI, false, this, UserHandle.USER_ALL); cr.registerContentObserver( - BRIGHTNESS_FOR_VR_URI, - false, this, UserHandle.USER_ALL); - cr.registerContentObserver( BRIGHTNESS_ADJ_URI, false, this, UserHandle.USER_ALL); } @@ -206,14 +191,7 @@ public class BrightnessController implements ToggleSlider.Listener { private final Runnable mUpdateSliderRunnable = new Runnable() { @Override public void run() { - if (mIsVrModeEnabled) { - int value = Settings.System.getIntForUser(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_FOR_VR, mMaximumBacklight, - UserHandle.USER_CURRENT); - mHandler.obtainMessage(MSG_UPDATE_SLIDER, - mMaximumBacklightForVr - mMinimumBacklightForVr, - value - mMinimumBacklightForVr).sendToTarget(); - } else if (mAutomatic) { + if (mAutomatic) { float value = Settings.System.getFloatForUser(mContext.getContentResolver(), Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ, 0, UserHandle.USER_CURRENT); @@ -230,14 +208,6 @@ public class BrightnessController implements ToggleSlider.Listener { } }; - private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() { - @Override - public void onVrStateChanged(boolean enabled) { - mHandler.obtainMessage(MSG_VR_MODE_CHANGED, enabled ? 1 : 0, 0) - .sendToTarget(); - } - }; - private final Handler mHandler = new Handler() { @Override public void handleMessage(Message msg) { @@ -260,9 +230,6 @@ public class BrightnessController implements ToggleSlider.Listener { case MSG_DETACH_LISTENER: mControl.setOnChangedListener(null); break; - case MSG_VR_MODE_CHANGED: - updateVrMode(msg.arg1 != 0); - break; default: super.handleMessage(msg); } @@ -289,13 +256,10 @@ public class BrightnessController implements ToggleSlider.Listener { PowerManager pm = (PowerManager)context.getSystemService(Context.POWER_SERVICE); mMinimumBacklight = pm.getMinimumScreenBrightnessSetting(); mMaximumBacklight = pm.getMaximumScreenBrightnessSetting(); - mMinimumBacklightForVr = pm.getMinimumScreenBrightnessForVrSetting(); - mMaximumBacklightForVr = pm.getMaximumScreenBrightnessForVrSetting(); mAutomaticAvailable = context.getResources().getBoolean( com.android.internal.R.bool.config_automatic_brightness_available); mPower = IPowerManager.Stub.asInterface(ServiceManager.getService("power")); - mVrManager = IVrManager.Stub.asInterface(ServiceManager.getService("vrmanager")); } public void setBackgroundLooper(Looper backgroundLooper) { @@ -320,15 +284,6 @@ public class BrightnessController implements ToggleSlider.Listener { return; } - if (mVrManager != null) { - try { - mVrManager.registerListener(mVrStateCallbacks); - mIsVrModeEnabled = mVrManager.getVrModeState(); - } catch (RemoteException e) { - Log.e(TAG, "Failed to register VR mode state listener: ", e); - } - } - mBackgroundHandler.post(mStartListeningRunnable); mListening = true; } @@ -339,14 +294,6 @@ public class BrightnessController implements ToggleSlider.Listener { return; } - if (mVrManager != null) { - try { - mVrManager.unregisterListener(mVrStateCallbacks); - } catch (RemoteException e) { - Log.e(TAG, "Failed to unregister VR mode state listener: ", e); - } - } - mBackgroundHandler.post(mStopListeningRunnable); mListening = false; } @@ -357,22 +304,7 @@ public class BrightnessController implements ToggleSlider.Listener { updateIcon(mAutomatic); if (mExternalChange) return; - if (mIsVrModeEnabled) { - final int val = value + mMinimumBacklightForVr; - if (stopTracking) { - MetricsLogger.action(mContext, MetricsEvent.ACTION_BRIGHTNESS_FOR_VR, val); - } - setBrightness(val); - if (!tracking) { - AsyncTask.execute(new Runnable() { - public void run() { - Settings.System.putIntForUser(mContext.getContentResolver(), - Settings.System.SCREEN_BRIGHTNESS_FOR_VR, val, - UserHandle.USER_CURRENT); - } - }); - } - } else if (!mAutomatic) { + if (!mAutomatic) { final int val = value + mMinimumBacklight; if (stopTracking) { MetricsLogger.action(mContext, MetricsEvent.ACTION_BRIGHTNESS, val); @@ -436,11 +368,4 @@ public class BrightnessController implements ToggleSlider.Listener { com.android.systemui.R.drawable.ic_qs_brightness_auto_off); } } - - private void updateVrMode(boolean isEnabled) { - if (mIsVrModeEnabled != isEnabled) { - mIsVrModeEnabled = isEnabled; - mBackgroundHandler.post(mUpdateSliderRunnable); - } - } } diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index df223200271a..eed7e70866d3 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -3105,12 +3105,6 @@ message MetricsEvent { // PACKAGE: The package name of the app the permission was revoked for ACTION_PERMISSION_REVOKE_READ_PHONE_NUMBER = 739; - // ACTION: QS Brightness Slider (with auto brightness disabled, and VR enabled) - // SUBTYPE: slider value - // CATEGORY: QUICK_SETTINGS - // OS: 6.0 - ACTION_BRIGHTNESS_FOR_VR = 498; - // ACTION: A captive portal was detected during network validation // CATEGORY: NOTIFICATION // OS: N-MR2 diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index 015345c23a1a..477ecdf60c48 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -577,9 +577,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call brightness = mPowerRequest.dozeScreenBrightness; } break; - case DisplayPowerRequest.POLICY_VR: - state = Display.STATE_VR; - break; case DisplayPowerRequest.POLICY_DIM: case DisplayPowerRequest.POLICY_BRIGHT: default: @@ -621,7 +618,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call // Animate the screen state change unless already animating. // The transition may be deferred, so after this point we will use the // actual state instead of the desired one. - final int oldState = mPowerState.getScreenState(); animateScreenStateChange(state, performScreenOffTransition); state = mPowerState.getScreenState(); @@ -721,10 +717,9 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call } // Animate the screen brightness when the screen is on or dozing. - // Skip the animation when the screen is off or suspended or transition to/from VR. + // Skip the animation when the screen is off or suspended. if (!mPendingScreenOff) { - boolean wasOrWillBeInVr = (state == Display.STATE_VR || oldState == Display.STATE_VR); - if ((state == Display.STATE_ON || state == Display.STATE_DOZE) && !wasOrWillBeInVr) { + if (state == Display.STATE_ON || state == Display.STATE_DOZE) { animateScreenBrightness(brightness, slowChange ? mBrightnessRampRateSlow : mBrightnessRampRateFast); } else { @@ -908,23 +903,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call mPowerState.setColorFadeLevel(1.0f); mPowerState.dismissColorFade(); } - } else if (target == Display.STATE_VR) { - // Wait for brightness animation to complete beforehand when entering VR - // from screen on to prevent a perceptible jump because brightness may operate - // differently when the display is configured for dozing. - if (mScreenBrightnessRampAnimator.isAnimating() - && mPowerState.getScreenState() == Display.STATE_ON) { - return; - } - - // Set screen state. - if (!setScreenState(Display.STATE_VR)) { - return; // screen on blocked - } - - // Dismiss the black surface without fanfare. - mPowerState.setColorFadeLevel(1.0f); - mPowerState.dismissColorFade(); } else if (target == Display.STATE_DOZE) { // Want screen dozing. // Wait for brightness animation to complete beforehand when entering doze diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java index 867322578a66..61c2eacaa8f9 100644 --- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java +++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java @@ -471,16 +471,6 @@ final class LocalDisplayAdapter extends DisplayAdapter { } } - // If the state change was from or to VR, then we need to tell the light - // so that it can apply appropriate VR brightness settings. This should - // happen prior to changing the brightness but also if there is no - // brightness change at all. - if ((state == Display.STATE_VR || currentState == Display.STATE_VR) && - currentState != state) { - setVrMode(state == Display.STATE_VR); - } - - // Apply brightness changes given that we are in a non-suspended state. if (brightnessChanged) { setDisplayBrightness(brightness); @@ -492,15 +482,6 @@ final class LocalDisplayAdapter extends DisplayAdapter { } } - private void setVrMode(boolean isVrEnabled) { - if (DEBUG) { - Slog.d(TAG, "setVrMode(" - + "id=" + displayId - + ", state=" + Display.stateToString(state) + ")"); - } - mBacklight.setVrMode(isVrEnabled); - } - private void setDisplayState(int state) { if (DEBUG) { Slog.d(TAG, "setDisplayState(" diff --git a/services/core/java/com/android/server/lights/Light.java b/services/core/java/com/android/server/lights/Light.java index b5ec603f5f70..0bab86b67e82 100644 --- a/services/core/java/com/android/server/lights/Light.java +++ b/services/core/java/com/android/server/lights/Light.java @@ -46,5 +46,4 @@ public abstract class Light { public abstract void pulse(); public abstract void pulse(int color, int onMS); public abstract void turnOff(); - public abstract void setVrMode(boolean enabled); } diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java index e07156ece1b9..bba0a50e7af4 100644 --- a/services/core/java/com/android/server/lights/LightsService.java +++ b/services/core/java/com/android/server/lights/LightsService.java @@ -1,4 +1,5 @@ -/* * Copyright (C) 2008 The Android Open Source Project +/* + * Copyright (C) 2008 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,13 +17,18 @@ package com.android.server.lights; import com.android.server.SystemService; +import com.android.server.vr.VrManagerService; import android.app.ActivityManager; import android.content.Context; import android.os.Handler; import android.os.Message; +import android.os.RemoteException; import android.os.Trace; +import android.os.UserHandle; import android.provider.Settings; +import android.service.vr.IVrManager; +import android.service.vr.IVrStateCallbacks; import android.util.Slog; public class LightsService extends SystemService { @@ -30,6 +36,7 @@ public class LightsService extends SystemService { static final boolean DEBUG = false; final LightImpl mLights[] = new LightImpl[LightsManager.LIGHT_ID_COUNT]; + private boolean mVrModeEnabled; private final class LightImpl extends Light { @@ -45,13 +52,6 @@ public class LightsService extends SystemService { @Override public void setBrightness(int brightness, int brightnessMode) { synchronized (this) { - // LOW_PERSISTENCE cannot be manually set - if (brightnessMode == BRIGHTNESS_MODE_LOW_PERSISTENCE) { - Slog.w(TAG, "setBrightness with LOW_PERSISTENCE unexpected #" + mId + - ": brightness=0x" + Integer.toHexString(brightness)); - return; - } - int color = brightness & 0x000000ff; color = 0xff000000 | (color << 16) | (color << 8) | color; setLightLocked(color, LIGHT_FLASH_NONE, 0, 0, brightnessMode); @@ -80,9 +80,11 @@ public class LightsService extends SystemService { @Override public void pulse(int color, int onMS) { synchronized (this) { + if (mBrightnessMode == BRIGHTNESS_MODE_LOW_PERSISTENCE) { + return; + } if (mColor == 0 && !mFlashing) { - setLightLocked(color, LIGHT_FLASH_HARDWARE, onMS, 1000, - BRIGHTNESS_MODE_USER); + setLightLocked(color, LIGHT_FLASH_HARDWARE, onMS, 1000, BRIGHTNESS_MODE_USER); mColor = 0; mH.sendMessageDelayed(Message.obtain(mH, 1, this), onMS); } @@ -96,23 +98,17 @@ public class LightsService extends SystemService { } } - @Override - public void setVrMode(boolean enabled) { - synchronized (this) { - if (mVrModeEnabled != enabled) { - mVrModeEnabled = enabled; - - mUseLowPersistenceForVR = - (getVrDisplayMode() == Settings.Secure.VR_DISPLAY_MODE_LOW_PERSISTENCE); - if (shouldBeInLowPersistenceMode()) { - mLastBrightnessMode = mBrightnessMode; - } - - // NOTE: We do not trigger a call to setLightLocked here. We do not know the - // current brightness or other values when leaving VR so we avoid any incorrect - // jumps. The code that calls this method will immediately issue a brightness - // update which is when the change will occur. - } + void enableLowPersistence() { + synchronized(this) { + setLightLocked(0, LIGHT_FLASH_NONE, 0, 0, BRIGHTNESS_MODE_LOW_PERSISTENCE); + mLocked = true; + } + } + + void disableLowPersistence() { + synchronized(this) { + mLocked = false; + setLightLocked(mLastColor, LIGHT_FLASH_NONE, 0, 0, mLastBrightnessMode); } } @@ -123,13 +119,7 @@ public class LightsService extends SystemService { } private void setLightLocked(int color, int mode, int onMS, int offMS, int brightnessMode) { - if (shouldBeInLowPersistenceMode()) { - brightnessMode = BRIGHTNESS_MODE_LOW_PERSISTENCE; - } else if (brightnessMode == BRIGHTNESS_MODE_LOW_PERSISTENCE) { - brightnessMode = mLastBrightnessMode; - } - - if ((color != mColor || mode != mMode || onMS != mOnMS || offMS != mOffMS || + if (!mLocked && (color != mColor || mode != mMode || onMS != mOnMS || offMS != mOffMS || mBrightnessMode != brightnessMode)) { if (DEBUG) Slog.v(TAG, "setLight #" + mId + ": color=#" + Integer.toHexString(color) + ": brightnessMode=" + brightnessMode); @@ -138,6 +128,7 @@ public class LightsService extends SystemService { mMode = mode; mOnMS = onMS; mOffMS = offMS; + mLastBrightnessMode = mBrightnessMode; mBrightnessMode = brightnessMode; Trace.traceBegin(Trace.TRACE_TAG_POWER, "setLight(" + mId + ", 0x" + Integer.toHexString(color) + ")"); @@ -149,10 +140,6 @@ public class LightsService extends SystemService { } } - private boolean shouldBeInLowPersistenceMode() { - return mVrModeEnabled && mUseLowPersistenceForVR; - } - private int mId; private int mColor; private int mMode; @@ -162,8 +149,7 @@ public class LightsService extends SystemService { private int mBrightnessMode; private int mLastBrightnessMode; private int mLastColor; - private boolean mVrModeEnabled; - private boolean mUseLowPersistenceForVR; + private boolean mLocked; } public LightsService(Context context) { @@ -181,6 +167,17 @@ public class LightsService extends SystemService { @Override public void onBootPhase(int phase) { + if (phase == PHASE_SYSTEM_SERVICES_READY) { + IVrManager vrManager = + (IVrManager) getBinderService(VrManagerService.VR_MANAGER_BINDER_SERVICE); + if (vrManager != null) { + try { + vrManager.registerListener(mVrStateCallbacks); + } catch (RemoteException e) { + Slog.e(TAG, "Failed to register VR mode state listener: " + e); + } + } + } } private int getVrDisplayMode() { @@ -191,6 +188,30 @@ public class LightsService extends SystemService { currentUser); } + private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() { + @Override + public void onVrStateChanged(boolean enabled) throws RemoteException { + LightImpl l = mLights[LightsManager.LIGHT_ID_BACKLIGHT]; + int vrDisplayMode = getVrDisplayMode(); + + // User leaves VR mode before altering display settings. + if (enabled && vrDisplayMode == Settings.Secure.VR_DISPLAY_MODE_LOW_PERSISTENCE) { + if (!mVrModeEnabled) { + if (DEBUG) + Slog.v(TAG, "VR mode enabled, setting brightness to low persistence"); + l.enableLowPersistence(); + mVrModeEnabled = true; + } + } else { + if (mVrModeEnabled) { + if (DEBUG) Slog.v(TAG, "VR mode disabled, resetting brightnes"); + l.disableLowPersistence(); + mVrModeEnabled = false; + } + } + } + }; + private final LightsManager mService = new LightsManager() { @Override public Light getLight(int id) { diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index 26788b3c926b..f2ccac5197aa 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -136,8 +136,6 @@ public final class PowerManagerService extends SystemService private static final int DIRTY_SCREEN_BRIGHTNESS_BOOST = 1 << 11; // Dirty bit: sQuiescent changed private static final int DIRTY_QUIESCENT = 1 << 12; - // Dirty bit: VR Mode enabled changed - private static final int DIRTY_VR_MODE_CHANGED = 1 << 13; // Summarizes the state of all active wakelocks. private static final int WAKE_LOCK_CPU = 1 << 0; @@ -415,15 +413,11 @@ public final class PowerManagerService extends SystemService private int mScreenBrightnessSettingMinimum; private int mScreenBrightnessSettingMaximum; private int mScreenBrightnessSettingDefault; - private int mScreenBrightnessForVrSettingDefault; // The screen brightness setting, from 0 to 255. // Use -1 if no value has been set. private int mScreenBrightnessSetting; - // The screen brightness setting, from 0 to 255, to be used while in VR Mode. - private int mScreenBrightnessForVrSetting; - // The screen auto-brightness adjustment setting, from -1 to 1. // Use 0 if there is no adjustment. private float mScreenAutoBrightnessAdjustmentSetting; @@ -517,9 +511,6 @@ public final class PowerManagerService extends SystemService // True if brightness should be affected by twilight. private boolean mBrightnessUseTwilight; - // True if we are currently in VR Mode. - private boolean mIsVrModeEnabled; - private native void nativeInit(); private static native void nativeAcquireSuspendBlocker(String name); @@ -603,7 +594,6 @@ public final class PowerManagerService extends SystemService mScreenBrightnessSettingMinimum = pm.getMinimumScreenBrightnessSetting(); mScreenBrightnessSettingMaximum = pm.getMaximumScreenBrightnessSetting(); mScreenBrightnessSettingDefault = pm.getDefaultScreenBrightnessSetting(); - mScreenBrightnessForVrSettingDefault = pm.getDefaultScreenBrightnessForVrSetting(); SensorManager sensorManager = new SystemSensorManager(mContext, mHandler.getLooper()); @@ -650,9 +640,6 @@ public final class PowerManagerService extends SystemService Settings.System.SCREEN_BRIGHTNESS), false, mSettingsObserver, UserHandle.USER_ALL); resolver.registerContentObserver(Settings.System.getUriFor( - Settings.System.SCREEN_BRIGHTNESS_FOR_VR), - false, mSettingsObserver, UserHandle.USER_ALL); - resolver.registerContentObserver(Settings.System.getUriFor( Settings.System.SCREEN_BRIGHTNESS_MODE), false, mSettingsObserver, UserHandle.USER_ALL); resolver.registerContentObserver(Settings.System.getUriFor( @@ -786,17 +773,11 @@ public final class PowerManagerService extends SystemService } } - final int oldScreenBrightnessSetting = getCurrentBrightnessSettingLocked(); - - mScreenBrightnessForVrSetting = Settings.System.getIntForUser(resolver, - Settings.System.SCREEN_BRIGHTNESS_FOR_VR, mScreenBrightnessForVrSettingDefault, - UserHandle.USER_CURRENT); - + final int oldScreenBrightnessSetting = mScreenBrightnessSetting; mScreenBrightnessSetting = Settings.System.getIntForUser(resolver, Settings.System.SCREEN_BRIGHTNESS, mScreenBrightnessSettingDefault, UserHandle.USER_CURRENT); - - if (oldScreenBrightnessSetting != getCurrentBrightnessSettingLocked()) { + if (oldScreenBrightnessSetting != mScreenBrightnessSetting) { mTemporaryScreenBrightnessSettingOverride = -1; } @@ -830,10 +811,6 @@ public final class PowerManagerService extends SystemService mDirty |= DIRTY_SETTINGS; } - private int getCurrentBrightnessSettingLocked() { - return mIsVrModeEnabled ? mScreenBrightnessForVrSetting : mScreenBrightnessSetting; - } - private void postAfterBootCompleted(Runnable r) { if (mBootCompleted) { BackgroundThread.getHandler().post(r); @@ -2092,7 +2069,6 @@ public final class PowerManagerService extends SystemService || !mDreamsSupportedConfig || !mDreamsEnabledSetting || !mDisplayPowerRequest.isBrightOrDim() - || !mDisplayPowerRequest.isVr() || (mUserActivitySummary & (USER_ACTIVITY_SCREEN_BRIGHT | USER_ACTIVITY_SCREEN_DIM | USER_ACTIVITY_SCREEN_DREAM)) == 0 || !mBootCompleted) { @@ -2137,8 +2113,7 @@ public final class PowerManagerService extends SystemService final boolean oldDisplayReady = mDisplayReady; if ((dirty & (DIRTY_WAKE_LOCKS | DIRTY_USER_ACTIVITY | DIRTY_WAKEFULNESS | DIRTY_ACTUAL_DISPLAY_POWER_STATE_UPDATED | DIRTY_BOOT_COMPLETED - | DIRTY_SETTINGS | DIRTY_SCREEN_BRIGHTNESS_BOOST | DIRTY_VR_MODE_CHANGED | - DIRTY_QUIESCENT)) != 0) { + | DIRTY_SETTINGS | DIRTY_SCREEN_BRIGHTNESS_BOOST | DIRTY_QUIESCENT)) != 0) { mDisplayPowerRequest.policy = getDesiredScreenPolicyLocked(); // Determine appropriate screen brightness and auto-brightness adjustments. @@ -2152,9 +2127,6 @@ public final class PowerManagerService extends SystemService // bootloader brightness and the default brightness to be identical. autoBrightness = false; brightnessSetByUser = false; - } else if (mIsVrModeEnabled) { - screenBrightness = mScreenBrightnessForVrSetting; - autoBrightness = false; } else if (isValidBrightness(mScreenBrightnessOverrideFromWindowManager)) { screenBrightness = mScreenBrightnessOverrideFromWindowManager; autoBrightness = false; @@ -2188,7 +2160,7 @@ public final class PowerManagerService extends SystemService mDisplayPowerRequest.useAutoBrightness = autoBrightness; mDisplayPowerRequest.useProximitySensor = shouldUseProximitySensorLocked(); mDisplayPowerRequest.lowPowerMode = mLowPowerModeEnabled; - mDisplayPowerRequest.boostScreenBrightness = shouldBoostScreenBrightness(); + mDisplayPowerRequest.boostScreenBrightness = mScreenBrightnessBoostInProgress; mDisplayPowerRequest.useTwilight = mBrightnessUseTwilight; if (mDisplayPowerRequest.policy == DisplayPowerRequest.POLICY_DOZE) { @@ -2219,7 +2191,6 @@ public final class PowerManagerService extends SystemService + ", mUserActivitySummary=0x" + Integer.toHexString(mUserActivitySummary) + ", mBootCompleted=" + mBootCompleted + ", mScreenBrightnessBoostInProgress=" + mScreenBrightnessBoostInProgress - + ", mIsVrModeEnabled= " + mIsVrModeEnabled + ", sQuiescent=" + sQuiescent); } } @@ -2249,10 +2220,6 @@ public final class PowerManagerService extends SystemService } } - private boolean shouldBoostScreenBrightness() { - return !mIsVrModeEnabled && mScreenBrightnessBoostInProgress; - } - private static boolean isValidBrightness(int value) { return value >= 0 && value <= 255; } @@ -2263,10 +2230,6 @@ public final class PowerManagerService extends SystemService } private int getDesiredScreenPolicyLocked() { - if (mIsVrModeEnabled) { - return DisplayPowerRequest.POLICY_VR; - } - if (mWakefulness == WAKEFULNESS_ASLEEP || sQuiescent) { return DisplayPowerRequest.POLICY_OFF; } @@ -2370,7 +2333,7 @@ public final class PowerManagerService extends SystemService }; private boolean shouldUseProximitySensorLocked() { - return !mIsVrModeEnabled && (mWakeLockSummary & WAKE_LOCK_PROXIMITY_SCREEN_OFF) != 0; + return (mWakeLockSummary & WAKE_LOCK_PROXIMITY_SCREEN_OFF) != 0; } /** @@ -3122,11 +3085,7 @@ public final class PowerManagerService extends SystemService pw.println(" mScreenBrightnessSettingMinimum=" + mScreenBrightnessSettingMinimum); pw.println(" mScreenBrightnessSettingMaximum=" + mScreenBrightnessSettingMaximum); pw.println(" mScreenBrightnessSettingDefault=" + mScreenBrightnessSettingDefault); - pw.println(" mScreenBrightnessForVrSettingDefault=" - + mScreenBrightnessForVrSettingDefault); - pw.println(" mScreenBrightnessForVrSetting=" + mScreenBrightnessForVrSetting); pw.println(" mDoubleTapWakeEnabled=" + mDoubleTapWakeEnabled); - pw.println(" mIsVrModeEnabled=" + mIsVrModeEnabled); final int sleepTimeout = getSleepTimeoutLocked(); final int screenOffTimeout = getScreenOffTimeoutLocked(sleepTimeout); @@ -3264,14 +3223,6 @@ public final class PowerManagerService extends SystemService @Override public void onVrStateChanged(boolean enabled) { powerHintInternal(PowerHint.VR_MODE, enabled ? 1 : 0); - - synchronized (mLock) { - if (mIsVrModeEnabled != enabled) { - mIsVrModeEnabled = enabled; - mDirty |= DIRTY_VR_MODE_CHANGED; - updatePowerStateLocked(); - } - } } }; @@ -4024,7 +3975,6 @@ public final class PowerManagerService extends SystemService case Display.STATE_DOZE: case Display.STATE_DOZE_SUSPEND: case Display.STATE_ON: - case Display.STATE_VR: break; default: screenState = Display.STATE_UNKNOWN; diff --git a/services/core/jni/com_android_server_lights_LightsService.cpp b/services/core/jni/com_android_server_lights_LightsService.cpp index c7c0e9a177de..a3ab8f67d2fa 100644 --- a/services/core/jni/com_android_server_lights_LightsService.cpp +++ b/services/core/jni/com_android_server_lights_LightsService.cpp @@ -103,15 +103,16 @@ static void setLight_native( state.flashMode = Flash::NONE; } else { // Only set non-brightness settings when not in low-persistence mode + state.color = colorARGB; state.flashMode = flash; state.flashOnMs = onMS; state.flashOffMs = offMS; } - state.color = colorARGB; state.brightnessMode = brightness; Status status; + { ALOGD_IF_SLOW(50, "Excessive delay setting light"); Return ret = gLight->setLight(type, state); -- 2.11.0