Merge "Clean up framework brightness system" into sc-dev

This commit is contained in:
Fiona Campbell
2021-07-05 17:22:46 +00:00
committed by Android (Google) Code Review
4 changed files with 32 additions and 74 deletions

View File

@@ -154,10 +154,20 @@ public class BrightnessSynchronizer {
} }
} }
/**
* Gets the stored screen brightness float value from the display brightness setting.
* @return brightness
*/
private float getScreenBrightnessFloat() { private float getScreenBrightnessFloat() {
return mDisplayManager.getBrightness(Display.DEFAULT_DISPLAY); return mDisplayManager.getBrightness(Display.DEFAULT_DISPLAY);
} }
/**
* Gets the stored screen brightness int from the system settings.
* @param context for accessing settings
*
* @return brightness
*/
private static int getScreenBrightnessInt(Context context) { private static int getScreenBrightnessInt(Context context) {
return Settings.System.getIntForUser(context.getContentResolver(), return Settings.System.getIntForUser(context.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS, PowerManager.BRIGHTNESS_INVALID, Settings.System.SCREEN_BRIGHTNESS, PowerManager.BRIGHTNESS_INVALID,

View File

@@ -17,19 +17,14 @@
package com.android.server.display; package com.android.server.display;
import android.annotation.NonNull; import android.annotation.NonNull;
import android.content.Context;
import android.database.ContentObserver;
import android.net.Uri;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.os.Message; import android.os.Message;
import android.os.PowerManager;
import android.os.UserHandle;
import android.provider.Settings;
import android.util.Slog; import android.util.Slog;
import android.view.Display;
import java.util.concurrent.CopyOnWriteArrayList; import com.android.internal.annotations.GuardedBy;
import java.util.concurrent.CopyOnWriteArraySet;
/** /**
* Saves brightness to a persistent data store, enabling each logical display to have its own * Saves brightness to a persistent data store, enabling each logical display to have its own
@@ -39,14 +34,11 @@ public class BrightnessSetting {
private static final String TAG = "BrightnessSetting"; private static final String TAG = "BrightnessSetting";
private static final int MSG_BRIGHTNESS_CHANGED = 1; private static final int MSG_BRIGHTNESS_CHANGED = 1;
private static final Uri BRIGHTNESS_FLOAT_URI =
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FLOAT);
private final PersistentDataStore mPersistentDataStore;
private final boolean mIsDefaultDisplay; private final PersistentDataStore mPersistentDataStore;
private final Context mContext; private final DisplayManagerService.SyncRoot mSyncRoot;
private final LogicalDisplay mLogicalDisplay; private final LogicalDisplay mLogicalDisplay;
private final Object mLock = new Object();
private final Handler mHandler = new Handler(Looper.getMainLooper()) { private final Handler mHandler = new Handler(Looper.getMainLooper()) {
@Override @Override
@@ -58,37 +50,20 @@ public class BrightnessSetting {
} }
}; };
private final ContentObserver mBrightnessSettingsObserver = new ContentObserver(mHandler) { private final CopyOnWriteArraySet<BrightnessSettingListener> mListeners =
@Override new CopyOnWriteArraySet<>();
public void onChange(boolean selfChange, Uri uri) {
if (selfChange) {
return;
}
if (BRIGHTNESS_FLOAT_URI.equals(uri)) {
float brightness = getScreenBrightnessSettingFloat();
setBrightness(brightness, true);
}
}
};
private final CopyOnWriteArrayList<BrightnessSettingListener> mListeners =
new CopyOnWriteArrayList<BrightnessSettingListener>();
@GuardedBy("mSyncRoot")
private float mBrightness; private float mBrightness;
BrightnessSetting(@NonNull PersistentDataStore persistentDataStore, BrightnessSetting(@NonNull PersistentDataStore persistentDataStore,
@NonNull LogicalDisplay logicalDisplay, @NonNull LogicalDisplay logicalDisplay,
@NonNull Context context) { DisplayManagerService.SyncRoot syncRoot) {
mPersistentDataStore = persistentDataStore; mPersistentDataStore = persistentDataStore;
mLogicalDisplay = logicalDisplay; mLogicalDisplay = logicalDisplay;
mContext = context;
mIsDefaultDisplay = mLogicalDisplay.getDisplayIdLocked() == Display.DEFAULT_DISPLAY;
mBrightness = mPersistentDataStore.getBrightness( mBrightness = mPersistentDataStore.getBrightness(
mLogicalDisplay.getPrimaryDisplayDeviceLocked()); mLogicalDisplay.getPrimaryDisplayDeviceLocked());
if (mIsDefaultDisplay) { mSyncRoot = syncRoot;
mContext.getContentResolver().registerContentObserver(BRIGHTNESS_FLOAT_URI,
false, mBrightnessSettingsObserver);
}
} }
/** /**
@@ -97,16 +72,19 @@ public class BrightnessSetting {
* @return brightness for the current display * @return brightness for the current display
*/ */
public float getBrightness() { public float getBrightness() {
return mBrightness; synchronized (mSyncRoot) {
return mBrightness;
}
} }
/** /**
* Registers listener for brightness setting change events. * Registers listener for brightness setting change events.
*/ */
public void registerListener(BrightnessSettingListener l) { public void registerListener(BrightnessSettingListener l) {
if (!mListeners.contains(l)) { if (mListeners.contains(l)) {
mListeners.add(l); Slog.wtf(TAG, "Duplicate Listener added");
} }
mListeners.add(l);
} }
/** /**
@@ -119,27 +97,16 @@ public class BrightnessSetting {
} }
void setBrightness(float brightness) { void setBrightness(float brightness) {
setBrightness(brightness, false);
}
private void setBrightness(float brightness, boolean isFromSystemSetting) {
if (brightness == mBrightness) {
return;
}
if (Float.isNaN(brightness)) { if (Float.isNaN(brightness)) {
Slog.w(TAG, "Attempting to set invalid brightness"); Slog.w(TAG, "Attempting to set invalid brightness");
return; return;
} }
synchronized (mLock) { synchronized (mSyncRoot) {
if (brightness == mBrightness) {
return;
}
mBrightness = brightness; mBrightness = brightness;
// If it didn't come from us
if (mIsDefaultDisplay && !isFromSystemSetting) {
Settings.System.putFloatForUser(mContext.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_FLOAT, brightness,
UserHandle.USER_CURRENT);
}
mPersistentDataStore.setBrightness(mLogicalDisplay.getPrimaryDisplayDeviceLocked(), mPersistentDataStore.setBrightness(mLogicalDisplay.getPrimaryDisplayDeviceLocked(),
brightness); brightness);
int toSend = Float.floatToIntBits(mBrightness); int toSend = Float.floatToIntBits(mBrightness);
@@ -148,12 +115,6 @@ public class BrightnessSetting {
} }
} }
private float getScreenBrightnessSettingFloat() {
return Settings.System.getFloatForUser(mContext.getContentResolver(),
Settings.System.SCREEN_BRIGHTNESS_FLOAT, PowerManager.BRIGHTNESS_INVALID_FLOAT,
UserHandle.USER_CURRENT);
}
private void notifyListeners(float brightness) { private void notifyListeners(float brightness) {
for (BrightnessSettingListener l : mListeners) { for (BrightnessSettingListener l : mListeners) {
l.onBrightnessChanged(brightness); l.onBrightnessChanged(brightness);

View File

@@ -399,9 +399,6 @@ public final class DisplayManagerService extends SystemService {
// Receives notifications about changes to Settings. // Receives notifications about changes to Settings.
private SettingsObserver mSettingsObserver; private SettingsObserver mSettingsObserver;
// Received notifications of the device-state action (such as "fold", "unfold")
private DeviceStateManager mDeviceStateManager;
private final boolean mAllowNonNativeRefreshRateOverride; private final boolean mAllowNonNativeRefreshRateOverride;
private final BrightnessSynchronizer mBrightnessSynchronizer; private final BrightnessSynchronizer mBrightnessSynchronizer;
@@ -1236,13 +1233,6 @@ public final class DisplayManagerService extends SystemService {
adapter.registerLocked(); adapter.registerLocked();
} }
@VisibleForTesting
void handleLogicalDisplayAdded(LogicalDisplay display) {
synchronized (mSyncRoot) {
handleLogicalDisplayAddedLocked(display);
}
}
private void handleLogicalDisplayAddedLocked(LogicalDisplay display) { private void handleLogicalDisplayAddedLocked(LogicalDisplay display) {
final DisplayDevice device = display.getPrimaryDisplayDeviceLocked(); final DisplayDevice device = display.getPrimaryDisplayDeviceLocked();
final int displayId = display.getDisplayIdLocked(); final int displayId = display.getDisplayIdLocked();
@@ -2107,7 +2097,7 @@ public final class DisplayManagerService extends SystemService {
} }
final BrightnessSetting brightnessSetting = new BrightnessSetting(mPersistentDataStore, final BrightnessSetting brightnessSetting = new BrightnessSetting(mPersistentDataStore,
display, mContext); display, mSyncRoot);
final DisplayPowerController displayPowerController = new DisplayPowerController( final DisplayPowerController displayPowerController = new DisplayPowerController(
mContext, mDisplayPowerCallbacks, mPowerHandler, mSensorManager, mContext, mDisplayPowerCallbacks, mPowerHandler, mSensorManager,
mDisplayBlanker, display, mBrightnessTracker, brightnessSetting, mDisplayBlanker, display, mBrightnessTracker, brightnessSetting,

View File

@@ -149,9 +149,6 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
private static final int REPORTED_TO_POLICY_SCREEN_ON = 2; private static final int REPORTED_TO_POLICY_SCREEN_ON = 2;
private static final int REPORTED_TO_POLICY_SCREEN_TURNING_OFF = 3; private static final int REPORTED_TO_POLICY_SCREEN_TURNING_OFF = 3;
private static final Uri BRIGHTNESS_FLOAT_URI =
Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS_FLOAT);
private final Object mLock = new Object(); private final Object mLock = new Object();
private final Context mContext; private final Context mContext;