diff --git a/core/java/com/android/internal/display/BrightnessSynchronizer.java b/core/java/com/android/internal/display/BrightnessSynchronizer.java index 19183b8eb9e7a..c9a9e51dceed8 100644 --- a/core/java/com/android/internal/display/BrightnessSynchronizer.java +++ b/core/java/com/android/internal/display/BrightnessSynchronizer.java @@ -154,10 +154,20 @@ public class BrightnessSynchronizer { } } + /** + * Gets the stored screen brightness float value from the display brightness setting. + * @return brightness + */ private float getScreenBrightnessFloat() { 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) { return Settings.System.getIntForUser(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, PowerManager.BRIGHTNESS_INVALID, diff --git a/services/core/java/com/android/server/display/BrightnessSetting.java b/services/core/java/com/android/server/display/BrightnessSetting.java index 8ce7b66e6c7e6..ca7b789da47d1 100644 --- a/services/core/java/com/android/server/display/BrightnessSetting.java +++ b/services/core/java/com/android/server/display/BrightnessSetting.java @@ -17,19 +17,14 @@ package com.android.server.display; import android.annotation.NonNull; -import android.content.Context; -import android.database.ContentObserver; -import android.net.Uri; import android.os.Handler; import android.os.Looper; import android.os.Message; -import android.os.PowerManager; -import android.os.UserHandle; -import android.provider.Settings; 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 @@ -39,14 +34,11 @@ public class BrightnessSetting { private static final String TAG = "BrightnessSetting"; 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 Context mContext; + private final PersistentDataStore mPersistentDataStore; + private final DisplayManagerService.SyncRoot mSyncRoot; + private final LogicalDisplay mLogicalDisplay; - private final Object mLock = new Object(); private final Handler mHandler = new Handler(Looper.getMainLooper()) { @Override @@ -58,37 +50,20 @@ public class BrightnessSetting { } }; - private final ContentObserver mBrightnessSettingsObserver = new ContentObserver(mHandler) { - @Override - 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 mListeners = - new CopyOnWriteArrayList(); + private final CopyOnWriteArraySet mListeners = + new CopyOnWriteArraySet<>(); + @GuardedBy("mSyncRoot") private float mBrightness; BrightnessSetting(@NonNull PersistentDataStore persistentDataStore, @NonNull LogicalDisplay logicalDisplay, - @NonNull Context context) { + DisplayManagerService.SyncRoot syncRoot) { mPersistentDataStore = persistentDataStore; mLogicalDisplay = logicalDisplay; - mContext = context; - mIsDefaultDisplay = mLogicalDisplay.getDisplayIdLocked() == Display.DEFAULT_DISPLAY; mBrightness = mPersistentDataStore.getBrightness( mLogicalDisplay.getPrimaryDisplayDeviceLocked()); - if (mIsDefaultDisplay) { - mContext.getContentResolver().registerContentObserver(BRIGHTNESS_FLOAT_URI, - false, mBrightnessSettingsObserver); - } + mSyncRoot = syncRoot; } /** @@ -97,16 +72,19 @@ public class BrightnessSetting { * @return brightness for the current display */ public float getBrightness() { - return mBrightness; + synchronized (mSyncRoot) { + return mBrightness; + } } /** * Registers listener for brightness setting change events. */ public void registerListener(BrightnessSettingListener l) { - if (!mListeners.contains(l)) { - mListeners.add(l); + if (mListeners.contains(l)) { + Slog.wtf(TAG, "Duplicate Listener added"); } + mListeners.add(l); } /** @@ -119,27 +97,16 @@ public class BrightnessSetting { } void setBrightness(float brightness) { - setBrightness(brightness, false); - } - - private void setBrightness(float brightness, boolean isFromSystemSetting) { - if (brightness == mBrightness) { - return; - } if (Float.isNaN(brightness)) { Slog.w(TAG, "Attempting to set invalid brightness"); return; } - synchronized (mLock) { + synchronized (mSyncRoot) { + if (brightness == mBrightness) { + return; + } 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(), brightness); 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) { for (BrightnessSettingListener l : mListeners) { l.onBrightnessChanged(brightness); diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index 79ea108a75d54..9d8ca9a2c26ab 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -399,9 +399,6 @@ public final class DisplayManagerService extends SystemService { // Receives notifications about changes to Settings. private SettingsObserver mSettingsObserver; - // Received notifications of the device-state action (such as "fold", "unfold") - private DeviceStateManager mDeviceStateManager; - private final boolean mAllowNonNativeRefreshRateOverride; private final BrightnessSynchronizer mBrightnessSynchronizer; @@ -1236,13 +1233,6 @@ public final class DisplayManagerService extends SystemService { adapter.registerLocked(); } - @VisibleForTesting - void handleLogicalDisplayAdded(LogicalDisplay display) { - synchronized (mSyncRoot) { - handleLogicalDisplayAddedLocked(display); - } - } - private void handleLogicalDisplayAddedLocked(LogicalDisplay display) { final DisplayDevice device = display.getPrimaryDisplayDeviceLocked(); final int displayId = display.getDisplayIdLocked(); @@ -2107,7 +2097,7 @@ public final class DisplayManagerService extends SystemService { } final BrightnessSetting brightnessSetting = new BrightnessSetting(mPersistentDataStore, - display, mContext); + display, mSyncRoot); final DisplayPowerController displayPowerController = new DisplayPowerController( mContext, mDisplayPowerCallbacks, mPowerHandler, mSensorManager, mDisplayBlanker, display, mBrightnessTracker, brightnessSetting, diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java index 8396f664146df..9140efe1bbe59 100644 --- a/services/core/java/com/android/server/display/DisplayPowerController.java +++ b/services/core/java/com/android/server/display/DisplayPowerController.java @@ -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_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 Context mContext;