diff options
11 files changed, 229 insertions, 88 deletions
diff --git a/core/java/android/hardware/display/NightDisplayListener.java b/core/java/android/hardware/display/NightDisplayListener.java new file mode 100644 index 000000000000..468f8332dc2b --- /dev/null +++ b/core/java/android/hardware/display/NightDisplayListener.java @@ -0,0 +1,153 @@ +/* + * Copyright (C) 2019 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.hardware.display; + +import android.annotation.NonNull; +import android.annotation.UserIdInt; +import android.app.ActivityManager; +import android.content.ContentResolver; +import android.content.Context; +import android.database.ContentObserver; +import android.net.Uri; +import android.os.Handler; +import android.os.Looper; +import android.provider.Settings.Secure; + +import java.time.LocalTime; + +/** + * @hide + */ +public class NightDisplayListener { + + private final Context mContext; + private final int mUserId; + private final ColorDisplayManager mManager; + + private ContentObserver mContentObserver; + private Callback mCallback; + + public NightDisplayListener(@NonNull Context context) { + this(context, ActivityManager.getCurrentUser()); + } + + public NightDisplayListener(@NonNull Context context, @UserIdInt int userId) { + mContext = context.getApplicationContext(); + mUserId = userId; + mManager = mContext.getSystemService(ColorDisplayManager.class); + } + + /** + * Register a callback to be invoked whenever the Night display settings are changed. + */ + public void setCallback(Callback callback) { + final Callback oldCallback = mCallback; + if (oldCallback != callback) { + mCallback = callback; + + if (mContentObserver == null) { + mContentObserver = new ContentObserver(new Handler(Looper.getMainLooper())) { + @Override + public void onChange(boolean selfChange, Uri uri) { + super.onChange(selfChange, uri); + onSettingChanged(uri); + } + }; + } + + if (callback == null) { + // Stop listening for changes now that there IS NOT a callback. + mContext.getContentResolver().unregisterContentObserver(mContentObserver); + } else if (oldCallback == null) { + // Start listening for changes now that there IS a callback. + final ContentResolver cr = mContext.getContentResolver(); + cr.registerContentObserver(Secure.getUriFor(Secure.NIGHT_DISPLAY_ACTIVATED), + false /* notifyForDescendants */, mContentObserver, mUserId); + cr.registerContentObserver(Secure.getUriFor(Secure.NIGHT_DISPLAY_AUTO_MODE), + false /* notifyForDescendants */, mContentObserver, mUserId); + cr.registerContentObserver(Secure.getUriFor(Secure.NIGHT_DISPLAY_CUSTOM_START_TIME), + false /* notifyForDescendants */, mContentObserver, mUserId); + cr.registerContentObserver(Secure.getUriFor(Secure.NIGHT_DISPLAY_CUSTOM_END_TIME), + false /* notifyForDescendants */, mContentObserver, mUserId); + cr.registerContentObserver(Secure.getUriFor(Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE), + false /* notifyForDescendants */, mContentObserver, mUserId); + } + } + } + + private void onSettingChanged(Uri uri) { + final String setting = uri == null ? null : uri.getLastPathSegment(); + if (setting == null || mCallback == null) { + return; + } + + switch (setting) { + case Secure.NIGHT_DISPLAY_ACTIVATED: + mCallback.onActivated(mManager.isNightDisplayActivated()); + break; + case Secure.NIGHT_DISPLAY_AUTO_MODE: + mCallback.onAutoModeChanged(mManager.getNightDisplayAutoMode()); + break; + case Secure.NIGHT_DISPLAY_CUSTOM_START_TIME: + mCallback.onCustomStartTimeChanged(mManager.getNightDisplayCustomStartTime()); + break; + case Secure.NIGHT_DISPLAY_CUSTOM_END_TIME: + mCallback.onCustomEndTimeChanged(mManager.getNightDisplayCustomEndTime()); + break; + case Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE: + mCallback.onColorTemperatureChanged(mManager.getNightDisplayColorTemperature()); + break; + } + } + + /** + * Callback invoked whenever the Night display settings are changed. + */ + public interface Callback { + /** + * Callback invoked when the activated state changes. + * + * @param activated {@code true} if Night display is activated + */ + default void onActivated(boolean activated) {} + /** + * Callback invoked when the auto mode changes. + * + * @param autoMode the auto mode to use + */ + default void onAutoModeChanged(int autoMode) {} + /** + * Callback invoked when the time to automatically activate Night display changes. + * + * @param startTime the local time to automatically activate Night display + */ + default void onCustomStartTimeChanged(LocalTime startTime) {} + /** + * Callback invoked when the time to automatically deactivate Night display changes. + * + * @param endTime the local time to automatically deactivate Night display + */ + default void onCustomEndTimeChanged(LocalTime endTime) {} + + /** + * Callback invoked when the color temperature changes. + * + * @param colorTemperature the color temperature to tint the screen + */ + default void onColorTemperatureChanged(int colorTemperature) {} + } +} diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 76b589ca4009..ec53811a6983 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -963,7 +963,7 @@ <bool name="config_nightDisplayAvailable">@bool/config_setColorTransformAccelerated</bool> <!-- Default mode to control how Night display is automatically activated. - One of the following values (see ColorDisplayController.java): + One of the following values (see ColorDisplayManager.java): 0 - AUTO_MODE_DISABLED 1 - AUTO_MODE_CUSTOM_TIME 2 - AUTO_MODE_TWILIGHT @@ -1052,7 +1052,7 @@ </string-array> - <!-- Indicate available ColorDisplayController.COLOR_MODE_xxx. --> + <!-- Indicate available ColorDisplayManager.COLOR_MODE_xxx. --> <integer-array name="config_availableColorModes"> <!-- Example: <item>0</item> diff --git a/packages/SystemUI/src/com/android/systemui/Dependency.java b/packages/SystemUI/src/com/android/systemui/Dependency.java index fece94e69a3d..c3f61eee4930 100644 --- a/packages/SystemUI/src/com/android/systemui/Dependency.java +++ b/packages/SystemUI/src/com/android/systemui/Dependency.java @@ -18,6 +18,7 @@ import android.annotation.Nullable; import android.content.Context; import android.content.res.Configuration; import android.hardware.SensorPrivacyManager; +import android.hardware.display.NightDisplayListener; import android.os.Handler; import android.os.Looper; import android.util.ArrayMap; @@ -25,7 +26,6 @@ import android.util.DisplayMetrics; import android.view.IWindowManager; import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.app.ColorDisplayController; import com.android.internal.logging.MetricsLogger; import com.android.internal.statusbar.IStatusBarService; import com.android.internal.util.Preconditions; @@ -206,7 +206,7 @@ public class Dependency extends SystemUI { @Inject Lazy<UserInfoController> mUserInfoController; @Inject Lazy<KeyguardMonitor> mKeyguardMonitor; @Inject Lazy<BatteryController> mBatteryController; - @Inject Lazy<ColorDisplayController> mColorDisplayController; + @Inject Lazy<NightDisplayListener> mNightDisplayListener; @Inject Lazy<ManagedProfileController> mManagedProfileController; @Inject Lazy<NextAlarmController> mNextAlarmController; @Inject Lazy<DataSaverController> mDataSaverController; @@ -330,7 +330,7 @@ public class Dependency extends SystemUI { mProviders.put(BatteryController.class, mBatteryController::get); - mProviders.put(ColorDisplayController.class, mColorDisplayController::get); + mProviders.put(NightDisplayListener.class, mNightDisplayListener::get); mProviders.put(ManagedProfileController.class, mManagedProfileController::get); diff --git a/packages/SystemUI/src/com/android/systemui/DependencyProvider.java b/packages/SystemUI/src/com/android/systemui/DependencyProvider.java index 88e32cbeaa29..a517d7ce8e0e 100644 --- a/packages/SystemUI/src/com/android/systemui/DependencyProvider.java +++ b/packages/SystemUI/src/com/android/systemui/DependencyProvider.java @@ -24,6 +24,7 @@ import static com.android.systemui.Dependency.TIME_TICK_HANDLER_NAME; import android.annotation.Nullable; import android.content.Context; import android.hardware.SensorPrivacyManager; +import android.hardware.display.NightDisplayListener; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; @@ -34,7 +35,6 @@ import android.util.DisplayMetrics; import android.view.IWindowManager; import android.view.WindowManagerGlobal; -import com.android.internal.app.ColorDisplayController; import com.android.internal.logging.MetricsLogger; import com.android.internal.statusbar.IStatusBarService; import com.android.settingslib.bluetooth.LocalBluetoothManager; @@ -152,8 +152,8 @@ public class DependencyProvider { @Singleton @Provides - public ColorDisplayController provideColorDisplayController(Context context) { - return new ColorDisplayController(context); + public NightDisplayListener provideNightDisplayListener(Context context) { + return new NightDisplayListener(context); } @Singleton diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java index de78d3376500..effa935c5c20 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/NightDisplayTile.java @@ -22,6 +22,7 @@ import android.annotation.Nullable; import android.app.ActivityManager; import android.content.Intent; import android.hardware.display.ColorDisplayManager; +import android.hardware.display.NightDisplayListener; import android.metrics.LogMaker; import android.provider.Settings; import android.service.quicksettings.Tile; @@ -31,7 +32,6 @@ import android.widget.Switch; import androidx.annotation.StringRes; -import com.android.internal.app.ColorDisplayController; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.systemui.R; import com.android.systemui.plugins.qs.QSTile.BooleanState; @@ -46,8 +46,9 @@ import java.util.TimeZone; import javax.inject.Inject; -public class NightDisplayTile extends QSTileImpl<BooleanState> - implements ColorDisplayController.Callback { +/** Quick settings tile: Night display **/ +public class NightDisplayTile extends QSTileImpl<BooleanState> implements + NightDisplayListener.Callback { /** * Pattern for {@link java.time.format.DateTimeFormatter} used to approximate the time to the @@ -57,13 +58,15 @@ public class NightDisplayTile extends QSTileImpl<BooleanState> private static final String PATTERN_HOUR_MINUTE = "h:mm a"; private static final String PATTERN_HOUR_NINUTE_24 = "HH:mm"; - private ColorDisplayController mController; + private final ColorDisplayManager mManager; + private NightDisplayListener mListener; private boolean mIsListening; @Inject public NightDisplayTile(QSHost host) { super(host); - mController = new ColorDisplayController(mContext, ActivityManager.getCurrentUser()); + mManager = mContext.getSystemService(ColorDisplayManager.class); + mListener = new NightDisplayListener(mContext, ActivityManager.getCurrentUser()); } @Override @@ -81,27 +84,27 @@ public class NightDisplayTile extends QSTileImpl<BooleanState> // Enroll in forced auto mode if eligible. if ("1".equals(Settings.Global.getString(mContext.getContentResolver(), Settings.Global.NIGHT_DISPLAY_FORCED_AUTO_MODE_AVAILABLE)) - && mController.getAutoModeRaw() == -1) { - mController.setAutoMode(ColorDisplayManager.AUTO_MODE_CUSTOM_TIME); + && mManager.getNightDisplayAutoModeRaw() == -1) { + mManager.setNightDisplayAutoMode(ColorDisplayManager.AUTO_MODE_CUSTOM_TIME); Log.i("NightDisplayTile", "Enrolled in forced night display auto mode"); } // Change current activation state. final boolean activated = !mState.value; - mController.setActivated(activated); + mManager.setNightDisplayActivated(activated); } @Override protected void handleUserSwitch(int newUserId) { // Stop listening to the old controller. if (mIsListening) { - mController.setListener(null); + mListener.setCallback(null); } // Make a new controller for the new user. - mController = new ColorDisplayController(mContext, newUserId); + mListener = new NightDisplayListener(mContext, newUserId); if (mIsListening) { - mController.setListener(this); + mListener.setCallback(this); } super.handleUserSwitch(newUserId); @@ -109,7 +112,7 @@ public class NightDisplayTile extends QSTileImpl<BooleanState> @Override protected void handleUpdateState(BooleanState state, Object arg) { - state.value = mController.isActivated(); + state.value = mManager.isNightDisplayActivated(); state.label = mContext.getString(R.string.quick_settings_night_display_label); state.icon = ResourceIcon.get(com.android.internal.R.drawable.ic_qs_night_display_on); state.expandedAccessibilityClassName = Switch.class.getName(); @@ -121,12 +124,12 @@ public class NightDisplayTile extends QSTileImpl<BooleanState> } /** - * Returns a {@link String} for the secondary label that reflects when the light will be turned - * on or off based on the current auto mode and night light activated status. + * Returns a String for the secondary label that reflects when the light will be turned on or + * off based on the current auto mode and night light activated status. */ @Nullable private String getSecondaryLabel(boolean isNightLightActivated) { - switch(mController.getAutoMode()) { + switch (mManager.getNightDisplayAutoMode()) { case ColorDisplayManager.AUTO_MODE_TWILIGHT: // Auto mode related to sunrise & sunset. If the light is on, it's guaranteed to be // turned off at sunrise. If it's off, it's guaranteed to be turned on at sunset. @@ -143,10 +146,10 @@ public class NightDisplayTile extends QSTileImpl<BooleanState> final DateTimeFormatter toggleTimeFormat; if (isNightLightActivated) { - toggleTime = mController.getCustomEndTime(); + toggleTime = mManager.getNightDisplayCustomEndTime(); toggleTimeStringRes = R.string.quick_settings_secondary_label_until; } else { - toggleTime = mController.getCustomStartTime(); + toggleTime = mManager.getNightDisplayCustomStartTime(); toggleTimeStringRes = R.string.quick_settings_night_secondary_label_on_at; } @@ -175,7 +178,8 @@ public class NightDisplayTile extends QSTileImpl<BooleanState> @Override public LogMaker populate(LogMaker logMaker) { - return super.populate(logMaker).addTaggedData(FIELD_QS_MODE, mController.getAutoModeRaw()); + return super.populate(logMaker) + .addTaggedData(FIELD_QS_MODE, mManager.getNightDisplayAutoModeRaw()); } @Override @@ -187,10 +191,10 @@ public class NightDisplayTile extends QSTileImpl<BooleanState> protected void handleSetListening(boolean listening) { mIsListening = listening; if (listening) { - mController.setListener(this); + mListener.setCallback(this); refreshState(); } else { - mController.setListener(null); + mListener.setCallback(null); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java index b96c55b37c48..c9be2c8f6703 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java @@ -16,11 +16,11 @@ package com.android.systemui.statusbar.phone; import android.content.Context; import android.hardware.display.ColorDisplayManager; +import android.hardware.display.NightDisplayListener; import android.os.Handler; import android.provider.Settings.Secure; import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.app.ColorDisplayController; import com.android.systemui.Dependency; import com.android.systemui.qs.AutoAddTracker; import com.android.systemui.qs.QSTileHost; @@ -50,7 +50,7 @@ public class AutoTileManager { private final HotspotController mHotspotController; private final DataSaverController mDataSaverController; private final ManagedProfileController mManagedProfileController; - private final ColorDisplayController mColorDisplayController; + private final NightDisplayListener mNightDisplayListener; @Inject public AutoTileManager(Context context, AutoAddTracker autoAddTracker, QSTileHost host, @@ -58,7 +58,7 @@ public class AutoTileManager { HotspotController hotspotController, DataSaverController dataSaverController, ManagedProfileController managedProfileController, - ColorDisplayController colorDisplayController) { + NightDisplayListener nightDisplayListener) { mAutoTracker = autoAddTracker; mContext = context; mHost = host; @@ -66,7 +66,7 @@ public class AutoTileManager { mHotspotController = hotspotController; mDataSaverController = dataSaverController; mManagedProfileController = managedProfileController; - mColorDisplayController = colorDisplayController; + mNightDisplayListener = nightDisplayListener; if (!mAutoTracker.isAdded(HOTSPOT)) { hotspotController.addCallback(mHotspotCallback); } @@ -93,7 +93,7 @@ public class AutoTileManager { } if (!mAutoTracker.isAdded(NIGHT) && ColorDisplayManager.isNightDisplayAvailable(mContext)) { - colorDisplayController.setListener(mColorDisplayCallback); + nightDisplayListener.setCallback(mNightDisplayCallback); } } @@ -106,7 +106,7 @@ public class AutoTileManager { mDataSaverController.removeCallback(mDataSaverListener); mManagedProfileController.removeCallback(mProfileCallback); if (ColorDisplayManager.isNightDisplayAvailable(mContext)) { - mColorDisplayController.setListener(null); + mNightDisplayListener.setCallback(null); } } @@ -157,8 +157,8 @@ public class AutoTileManager { }; @VisibleForTesting - final ColorDisplayController.Callback mColorDisplayCallback = - new ColorDisplayController.Callback() { + final NightDisplayListener.Callback mNightDisplayCallback = + new NightDisplayListener.Callback() { @Override public void onActivated(boolean activated) { if (activated) { @@ -178,7 +178,7 @@ public class AutoTileManager { if (mAutoTracker.isAdded(NIGHT)) return; mHost.addTile(NIGHT); mAutoTracker.setTileAdded(NIGHT); - mHandler.post(() -> mColorDisplayController.setListener(null)); + mHandler.post(() -> mNightDisplayListener.setCallback(null)); } }; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java index 1ded835e9651..f3740c4d51d0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/AutoTileManagerTest.java @@ -21,13 +21,13 @@ import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; import android.hardware.display.ColorDisplayManager; +import android.hardware.display.NightDisplayListener; import android.os.Handler; import android.support.test.filters.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.testing.TestableLooper.RunWithLooper; -import com.android.internal.app.ColorDisplayController; import com.android.systemui.SysuiTestCase; import com.android.systemui.qs.AutoAddTracker; import com.android.systemui.qs.QSTileHost; @@ -58,7 +58,7 @@ public class AutoTileManagerTest extends SysuiTestCase { mock(HotspotController.class), mock(DataSaverController.class), mock(ManagedProfileController.class), - mock(ColorDisplayController.class)); + mock(NightDisplayListener.class)); } @Test @@ -66,7 +66,7 @@ public class AutoTileManagerTest extends SysuiTestCase { if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) { return; } - mAutoTileManager.mColorDisplayCallback.onActivated(true); + mAutoTileManager.mNightDisplayCallback.onActivated(true); verify(mQsTileHost).addTile("night"); } @@ -75,7 +75,7 @@ public class AutoTileManagerTest extends SysuiTestCase { if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) { return; } - mAutoTileManager.mColorDisplayCallback.onActivated(false); + mAutoTileManager.mNightDisplayCallback.onActivated(false); verify(mQsTileHost, never()).addTile("night"); } @@ -84,7 +84,7 @@ public class AutoTileManagerTest extends SysuiTestCase { if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) { return; } - mAutoTileManager.mColorDisplayCallback.onAutoModeChanged( + mAutoTileManager.mNightDisplayCallback.onAutoModeChanged( ColorDisplayManager.AUTO_MODE_TWILIGHT); verify(mQsTileHost).addTile("night"); } @@ -94,7 +94,7 @@ public class AutoTileManagerTest extends SysuiTestCase { if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) { return; } - mAutoTileManager.mColorDisplayCallback.onAutoModeChanged( + mAutoTileManager.mNightDisplayCallback.onAutoModeChanged( ColorDisplayManager.AUTO_MODE_CUSTOM_TIME); verify(mQsTileHost).addTile("night"); } @@ -104,7 +104,7 @@ public class AutoTileManagerTest extends SysuiTestCase { if (!ColorDisplayManager.isNightDisplayAvailable(mContext)) { return; } - mAutoTileManager.mColorDisplayCallback.onAutoModeChanged( + mAutoTileManager.mNightDisplayCallback.onAutoModeChanged( ColorDisplayManager.AUTO_MODE_DISABLED); verify(mQsTileHost, never()).addTile("night"); } diff --git a/services/core/java/com/android/server/display/BrightnessTracker.java b/services/core/java/com/android/server/display/BrightnessTracker.java index 727cf0e9f084..126beeffbb96 100644 --- a/services/core/java/com/android/server/display/BrightnessTracker.java +++ b/services/core/java/com/android/server/display/BrightnessTracker.java @@ -34,6 +34,7 @@ import android.hardware.SensorEventListener; import android.hardware.SensorManager; import android.hardware.display.AmbientBrightnessDayStats; import android.hardware.display.BrightnessChangeEvent; +import android.hardware.display.ColorDisplayManager; import android.hardware.display.DisplayManager; import android.hardware.display.DisplayManagerInternal; import android.hardware.display.DisplayedContentSample; @@ -57,7 +58,6 @@ import android.view.Display; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.app.ColorDisplayController; import com.android.internal.os.BackgroundThread; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.RingBuffer; @@ -382,9 +382,8 @@ public class BrightnessTracker { return; } - builder.setNightMode(mInjector.isNightModeActive(mContext, UserHandle.USER_CURRENT)); - builder.setColorTemperature(mInjector.getColorTemperature(mContext, - UserHandle.USER_CURRENT)); + builder.setNightMode(mInjector.isNightDisplayActivated(mContext)); + builder.setColorTemperature(mInjector.getNightDisplayColorTemperature(mContext)); if (mColorSamplingEnabled) { DisplayedContentSample sample = mInjector.sampleColor(mNoFramesToSample); @@ -1096,12 +1095,13 @@ public class BrightnessTracker { return context.getSystemService(PowerManager.class).isInteractive(); } - public int getColorTemperature(Context context, int userId) { - return new ColorDisplayController(context, userId).getColorTemperature(); + public int getNightDisplayColorTemperature(Context context) { + return context.getSystemService(ColorDisplayManager.class) + .getNightDisplayColorTemperature(); } - public boolean isNightModeActive(Context context, int userId) { - return new ColorDisplayController(context, userId).isActivated(); + public boolean isNightDisplayActivated(Context context) { + return context.getSystemService(ColorDisplayManager.class).isNightDisplayActivated(); } public DisplayedContentSample sampleColor(int noFramesToSample) { diff --git a/services/core/java/com/android/server/display/ColorDisplayService.java b/services/core/java/com/android/server/display/ColorDisplayService.java index 6a760873c6ec..9cb6eeec2126 100644 --- a/services/core/java/com/android/server/display/ColorDisplayService.java +++ b/services/core/java/com/android/server/display/ColorDisplayService.java @@ -72,7 +72,6 @@ import android.view.animation.AnimationUtils; import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.app.ColorDisplayController; import com.android.internal.util.DumpUtils; import com.android.server.DisplayThread; import com.android.server.SystemService; @@ -448,7 +447,6 @@ public final class ColorDisplayService extends SystemService { private ContentObserver mUserSetupObserver; private boolean mBootCompleted; - private ColorDisplayController mNightDisplayController; private ContentObserver mContentObserver; private DisplayWhiteBalanceListener mDisplayWhiteBalanceListener; @@ -547,8 +545,6 @@ public final class ColorDisplayService extends SystemService { private void setUp() { Slog.d(TAG, "setUp: currentUser=" + mCurrentUser); - mNightDisplayController = new ColorDisplayController(getContext(), mCurrentUser); - // Listen for external changes to any of the settings. if (mContentObserver == null) { mContentObserver = new ContentObserver(new Handler(DisplayThread.get().getLooper())) { @@ -586,7 +582,7 @@ public final class ColorDisplayService extends SystemService { getNightDisplayCustomEndTimeInternal().getLocalTime()); break; case System.DISPLAY_COLOR_MODE: - onDisplayColorModeChanged(mNightDisplayController.getColorMode()); + onDisplayColorModeChanged(getColorModeInternal()); break; case Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED: onAccessibilityInversionChanged(); @@ -634,7 +630,7 @@ public final class ColorDisplayService extends SystemService { // Set the color mode, if valid, and immediately apply the updated tint matrix based on the // existing activated state. This ensures consistency of tint across the color mode change. - onDisplayColorModeChanged(mNightDisplayController.getColorMode()); + onDisplayColorModeChanged(getColorModeInternal()); if (mNightDisplayTintController.isAvailable(getContext())) { // Reset the activated state. @@ -667,10 +663,6 @@ public final class ColorDisplayService extends SystemService { getContext().getContentResolver().unregisterContentObserver(mContentObserver); - if (mNightDisplayController != null) { - mNightDisplayController = null; - } - if (mNightDisplayTintController.isAvailable(getContext())) { if (mNightDisplayAutoMode != null) { mNightDisplayAutoMode.onStop(); @@ -740,7 +732,7 @@ public final class ColorDisplayService extends SystemService { } private void onAccessibilityActivated() { - onDisplayColorModeChanged(mNightDisplayController.getColorMode()); + onDisplayColorModeChanged(getColorModeInternal()); } /** @@ -1003,8 +995,7 @@ public final class ColorDisplayService extends SystemService { mCurrentUser); } - private @ColorMode - int getColorModeInternal() { + private @ColorMode int getColorModeInternal() { final ContentResolver cr = getContext().getContentResolver(); if (Secure.getIntForUser(cr, Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, 0, mCurrentUser) == 1 diff --git a/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java b/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java index e3b1245f20a5..7081d2e3b370 100644 --- a/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java +++ b/services/tests/servicestests/src/com/android/server/display/BrightnessTrackerTest.java @@ -962,13 +962,13 @@ public class BrightnessTrackerTest { } @Override - public int getColorTemperature(Context context, int userId) { + public int getNightDisplayColorTemperature(Context context) { return mSecureIntSettings.getOrDefault(Settings.Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE, mDefaultNightModeColorTemperature); } @Override - public boolean isNightModeActive(Context context, int userId) { + public boolean isNightDisplayActivated(Context context) { return mSecureIntSettings.getOrDefault(Settings.Secure.NIGHT_DISPLAY_ACTIVATED, 0) == 1; } diff --git a/services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java b/services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java index 0b01657868a8..5900fc57296c 100644 --- a/services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java @@ -26,6 +26,7 @@ import android.app.AlarmManager; import android.content.Context; import android.content.ContextWrapper; import android.hardware.display.ColorDisplayManager; +import android.hardware.display.Time; import android.os.Handler; import android.os.UserHandle; import android.provider.Settings; @@ -37,7 +38,6 @@ import androidx.test.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; import com.android.internal.R; -import com.android.internal.app.ColorDisplayController; import com.android.internal.util.test.FakeSettingsProvider; import com.android.server.LocalServices; import com.android.server.SystemService; @@ -71,7 +71,6 @@ public class ColorDisplayServiceTest { private MockTwilightManager mTwilightManager; private ColorDisplayService mColorDisplayService; - private ColorDisplayController mColorDisplayController; private ColorDisplayService.BinderService mBinderService; @BeforeClass @@ -97,7 +96,6 @@ public class ColorDisplayServiceTest { mTwilightManager = new MockTwilightManager(); LocalServices.addService(TwilightManager.class, mTwilightManager); - mColorDisplayController = new ColorDisplayController(mContext, mUserId); mColorDisplayService = new ColorDisplayService(mContext); mBinderService = mColorDisplayService.new BinderService(); } @@ -988,9 +986,11 @@ public class ColorDisplayServiceTest { * @param endTimeOffset the offset relative to now to deactivate Night display (in minutes) */ private void setAutoModeCustom(int startTimeOffset, int endTimeOffset) { - mColorDisplayController.setAutoMode(ColorDisplayManager.AUTO_MODE_CUSTOM_TIME); - mColorDisplayController.setCustomStartTime(getLocalTimeRelativeToNow(startTimeOffset)); - mColorDisplayController.setCustomEndTime(getLocalTimeRelativeToNow(endTimeOffset)); + mBinderService.setNightDisplayAutoMode(ColorDisplayManager.AUTO_MODE_CUSTOM_TIME); + mBinderService.setNightDisplayCustomStartTime( + new Time(getLocalTimeRelativeToNow(startTimeOffset))); + mBinderService + .setNightDisplayCustomEndTime(new Time(getLocalTimeRelativeToNow(endTimeOffset))); } /** @@ -1000,7 +1000,7 @@ public class ColorDisplayServiceTest { * @param sunriseOffset the offset relative to now for sunrise (in minutes) */ private void setAutoModeTwilight(int sunsetOffset, int sunriseOffset) { - mColorDisplayController.setAutoMode(ColorDisplayManager.AUTO_MODE_TWILIGHT); + mBinderService.setNightDisplayAutoMode(ColorDisplayManager.AUTO_MODE_TWILIGHT); mTwilightManager.setTwilightState( getTwilightStateRelativeToNow(sunsetOffset, sunriseOffset)); } @@ -1041,22 +1041,18 @@ public class ColorDisplayServiceTest { } /** - * Configures color mode via ColorDisplayController. - * - * @param colorMode the color mode to set + * Configures color mode. */ private void setColorMode(int colorMode) { - mColorDisplayController.setColorMode(colorMode); + mBinderService.setColorMode(colorMode); } /** * Returns whether the color mode is valid on the device the tests are running on. - * - * @param mode the mode to check */ private boolean isColorModeValid(int mode) { final int[] availableColorModes = mContext.getResources().getIntArray( - R.array.config_availableColorModes); + R.array.config_availableColorModes); if (availableColorModes != null) { for (int availableMode : availableColorModes) { if (mode == availableMode) { @@ -1073,12 +1069,9 @@ public class ColorDisplayServiceTest { private void startService() { Secure.putIntForUser(mContext.getContentResolver(), Secure.USER_SETUP_COMPLETE, 1, mUserId); - InstrumentationRegistry.getInstrumentation().runOnMainSync(new Runnable() { - @Override - public void run() { - mColorDisplayService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED); - mColorDisplayService.onStartUser(mUserId); - } + InstrumentationRegistry.getInstrumentation().runOnMainSync(() -> { + mColorDisplayService.onBootPhase(SystemService.PHASE_BOOT_COMPLETED); + mColorDisplayService.onStartUser(mUserId); }); } @@ -1100,7 +1093,7 @@ public class ColorDisplayServiceTest { */ private void assertActiveColorMode(int mode) { assertWithMessage("Unexpected color mode setting") - .that(mColorDisplayController.getColorMode()) + .that(mBinderService.getColorMode()) .isEqualTo(mode); } |