diff options
| -rw-r--r-- | core/java/com/android/internal/app/ColorDisplayController.java | 40 | ||||
| -rw-r--r-- | services/core/java/com/android/server/display/ColorDisplayService.java | 19 | ||||
| -rw-r--r-- | services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java (renamed from services/tests/servicestests/src/com/android/server/ColorDisplayServiceTest.java) | 6 |
3 files changed, 38 insertions, 27 deletions
diff --git a/core/java/com/android/internal/app/ColorDisplayController.java b/core/java/com/android/internal/app/ColorDisplayController.java index 6cc964bf16ed..ba6cf269b737 100644 --- a/core/java/com/android/internal/app/ColorDisplayController.java +++ b/core/java/com/android/internal/app/ColorDisplayController.java @@ -335,7 +335,7 @@ public final class ColorDisplayController { if (colorTemperature == -1) { if (DEBUG) { Slog.d(TAG, "Using default value for setting: " - + Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE); + + Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE); } colorTemperature = getDefaultColorTemperature(); } @@ -358,7 +358,7 @@ public final class ColorDisplayController { */ public boolean setColorTemperature(int colorTemperature) { return Secure.putIntForUser(mContext.getContentResolver(), - Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE, colorTemperature, mUserId); + Secure.NIGHT_DISPLAY_COLOR_TEMPERATURE, colorTemperature, mUserId); } /** @@ -367,10 +367,10 @@ public final class ColorDisplayController { * See com.android.server.display.DisplayTransformManager. */ private @ColorMode int getCurrentColorModeFromSystemProperties() { - int displayColorSetting = SystemProperties.getInt("persist.sys.sf.native_mode", 0); + final int displayColorSetting = SystemProperties.getInt("persist.sys.sf.native_mode", 0); if (displayColorSetting == 0) { return "1.0".equals(SystemProperties.get("persist.sys.sf.color_saturation")) - ? COLOR_MODE_NATURAL : COLOR_MODE_BOOSTED; + ? COLOR_MODE_NATURAL : COLOR_MODE_BOOSTED; } else if (displayColorSetting == 1) { return COLOR_MODE_SATURATED; } else if (displayColorSetting == 2) { @@ -381,16 +381,13 @@ public final class ColorDisplayController { } private boolean isColorModeAvailable(@ColorMode int colorMode) { - // SATURATED is always allowed - if (colorMode == COLOR_MODE_SATURATED) { - return true; - } - final int[] availableColorModes = mContext.getResources().getIntArray( R.array.config_availableColorModes); - for (int mode : availableColorModes) { - if (mode == colorMode) { - return true; + if (availableColorModes != null) { + for (int mode : availableColorModes) { + if (mode == colorMode) { + return true; + } } } return false; @@ -401,14 +398,18 @@ public final class ColorDisplayController { */ public int getColorMode() { if (getAccessibilityTransformActivated()) { - return COLOR_MODE_SATURATED; + if (isColorModeAvailable(COLOR_MODE_SATURATED)) { + return COLOR_MODE_SATURATED; + } else if (isColorModeAvailable(COLOR_MODE_AUTOMATIC)) { + return COLOR_MODE_AUTOMATIC; + } } int colorMode = System.getIntForUser(mContext.getContentResolver(), - System.DISPLAY_COLOR_MODE, -1, mUserId); + System.DISPLAY_COLOR_MODE, -1, mUserId); if (colorMode == -1) { - // There still might be a legacy system property controlling color mode that we need to - // respect. + // There might be a system property controlling color mode that we need to respect; if + // not, this will set a suitable default. colorMode = getCurrentColorModeFromSystemProperties(); } @@ -418,10 +419,13 @@ public final class ColorDisplayController { if (colorMode == COLOR_MODE_BOOSTED && isColorModeAvailable(COLOR_MODE_NATURAL)) { colorMode = COLOR_MODE_NATURAL; } else if (colorMode == COLOR_MODE_SATURATED - && isColorModeAvailable(COLOR_MODE_AUTOMATIC)) { + && isColorModeAvailable(COLOR_MODE_AUTOMATIC)) { colorMode = COLOR_MODE_AUTOMATIC; - } else { + } else if (colorMode == COLOR_MODE_AUTOMATIC + && isColorModeAvailable(COLOR_MODE_SATURATED)) { colorMode = COLOR_MODE_SATURATED; + } else { + colorMode = -1; } } diff --git a/services/core/java/com/android/server/display/ColorDisplayService.java b/services/core/java/com/android/server/display/ColorDisplayService.java index 213ec364f78f..0b6786cf8c07 100644 --- a/services/core/java/com/android/server/display/ColorDisplayService.java +++ b/services/core/java/com/android/server/display/ColorDisplayService.java @@ -189,6 +189,13 @@ public final class ColorDisplayService extends SystemService mController = new ColorDisplayController(getContext(), mCurrentUser); mController.setListener(this); + // 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(mController.getColorMode()); + + // Reset the activated state. + mIsActivated = null; + setCoefficientMatrix(getContext(), DisplayTransformManager.needsLinearColorMatrix()); // Prepare color transformation matrix. @@ -201,9 +208,6 @@ public final class ColorDisplayService extends SystemService if (mIsActivated == null) { onActivated(mController.isActivated()); } - - // Transition the screen to the current temperature. - applyTint(false); } private void tearDown() { @@ -223,8 +227,6 @@ public final class ColorDisplayService extends SystemService mColorMatrixAnimator.end(); mColorMatrixAnimator = null; } - - mIsActivated = null; } @Override @@ -288,6 +290,10 @@ public final class ColorDisplayService extends SystemService @Override public void onDisplayColorModeChanged(int mode) { + if (mode == -1) { + return; + } + // Cancel the night display tint animator if it's running. if (mColorMatrixAnimator != null) { mColorMatrixAnimator.cancel(); @@ -297,7 +303,8 @@ public final class ColorDisplayService extends SystemService setMatrix(mController.getColorTemperature(), mMatrixNight); final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); - dtm.setColorMode(mode, mIsActivated ? mMatrixNight : MATRIX_IDENTITY); + dtm.setColorMode(mode, (mIsActivated != null && mIsActivated) ? mMatrixNight + : MATRIX_IDENTITY); } @Override diff --git a/services/tests/servicestests/src/com/android/server/ColorDisplayServiceTest.java b/services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java index c004074d241b..6bd8011f1aa9 100644 --- a/services/tests/servicestests/src/com/android/server/ColorDisplayServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/display/ColorDisplayServiceTest.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.android.server; +package com.android.server.display; import android.annotation.NonNull; import android.app.ActivityManager; @@ -32,8 +32,8 @@ import android.test.mock.MockContentResolver; import com.android.internal.app.ColorDisplayController; import com.android.internal.util.test.FakeSettingsProvider; -import com.android.server.display.DisplayTransformManager; -import com.android.server.display.ColorDisplayService; +import com.android.server.LocalServices; +import com.android.server.SystemService; import com.android.server.twilight.TwilightListener; import com.android.server.twilight.TwilightManager; import com.android.server.twilight.TwilightState; |