From ff24ba9eff7703f841e11b2a065a9ed424db9c9d Mon Sep 17 00:00:00 2001 From: Daniel Solomon Date: Thu, 11 Apr 2019 19:29:31 -0700 Subject: [PATCH] Disable display white balance when accessibility features are enabled To avoid conflicting with display accessibility features, disable display white balance when these features are active. Bug: 130263943 Test: atest FrameworksServicesTests:ColorDisplayServiceTest Change-Id: Id7f97c74dc37d44ec13a1d26ac8500b130fef2f8 --- .../display/color/ColorDisplayService.java | 33 ++++++++++++------- .../color/ColorDisplayServiceTest.java | 28 ++++++++++++++++ 2 files changed, 49 insertions(+), 12 deletions(-) diff --git a/services/core/java/com/android/server/display/color/ColorDisplayService.java b/services/core/java/com/android/server/display/color/ColorDisplayService.java index f599adb5118ae..85fb1e0f4bdf8 100644 --- a/services/core/java/com/android/server/display/color/ColorDisplayService.java +++ b/services/core/java/com/android/server/display/color/ColorDisplayService.java @@ -473,6 +473,20 @@ public final class ColorDisplayService extends SystemService { onDisplayColorModeChanged(getColorModeInternal()); } + private boolean isAccessiblityDaltonizerEnabled() { + return Secure.getIntForUser(getContext().getContentResolver(), + Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0, mCurrentUser) != 0; + } + + private boolean isAccessiblityInversionEnabled() { + return Secure.getIntForUser(getContext().getContentResolver(), + Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, 0, mCurrentUser) != 0; + } + + private boolean isAccessibilityEnabled() { + return isAccessiblityDaltonizerEnabled() || isAccessiblityInversionEnabled(); + } + /** * Apply the accessibility daltonizer transform based on the settings value. */ @@ -480,11 +494,10 @@ public final class ColorDisplayService extends SystemService { if (mCurrentUser == UserHandle.USER_NULL) { return; } - final boolean enabled = Secure.getIntForUser(getContext().getContentResolver(), - Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, 0, mCurrentUser) != 0; - final int daltonizerMode = enabled ? Secure.getIntForUser(getContext().getContentResolver(), - Secure.ACCESSIBILITY_DISPLAY_DALTONIZER, - AccessibilityManager.DALTONIZER_CORRECT_DEUTERANOMALY, mCurrentUser) + final int daltonizerMode = isAccessiblityDaltonizerEnabled() + ? Secure.getIntForUser(getContext().getContentResolver(), + Secure.ACCESSIBILITY_DISPLAY_DALTONIZER, + AccessibilityManager.DALTONIZER_CORRECT_DEUTERANOMALY, mCurrentUser) : AccessibilityManager.DALTONIZER_DISABLED; final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); @@ -506,11 +519,9 @@ public final class ColorDisplayService extends SystemService { if (mCurrentUser == UserHandle.USER_NULL) { return; } - final boolean enabled = Secure.getIntForUser(getContext().getContentResolver(), - Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, 0, mCurrentUser) != 0; final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class); dtm.setColorMatrix(DisplayTransformManager.LEVEL_COLOR_MATRIX_INVERT_COLOR, - enabled ? MATRIX_INVERT_COLOR : null); + isAccessiblityInversionEnabled() ? MATRIX_INVERT_COLOR : null); } /** @@ -598,6 +609,7 @@ public final class ColorDisplayService extends SystemService { boolean oldActivated = mDisplayWhiteBalanceTintController.isActivated(); mDisplayWhiteBalanceTintController.setActivated(isDisplayWhiteBalanceSettingEnabled() && !mNightDisplayTintController.isActivated() + && !isAccessibilityEnabled() && DisplayTransformManager.needsLinearColorMatrix()); boolean activated = mDisplayWhiteBalanceTintController.isActivated(); @@ -761,10 +773,7 @@ public final class ColorDisplayService extends SystemService { private @ColorMode int getColorModeInternal() { final ContentResolver cr = getContext().getContentResolver(); - if (Secure.getIntForUser(cr, Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED, - 0, mCurrentUser) == 1 - || Secure.getIntForUser(cr, Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED, - 0, mCurrentUser) == 1) { + if (isAccessibilityEnabled()) { // There are restrictions on the available color modes combined with a11y transforms. if (isColorModeAvailable(COLOR_MODE_SATURATED)) { return COLOR_MODE_SATURATED; diff --git a/services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java b/services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java index de841a0ac4ec8..8bb8aae768493 100644 --- a/services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java @@ -1029,6 +1029,34 @@ public class ColorDisplayServiceTest { assertDwbActive(true); } + @Test + public void displayWhiteBalance_disabledWhileAccessibilityColorCorrectionEnabled() { + setDisplayWhiteBalanceEnabled(true); + startService(); + setAccessibilityColorCorrection(true); + + mCds.updateDisplayWhiteBalanceStatus(); + assertDwbActive(false); + + setAccessibilityColorCorrection(false); + mCds.updateDisplayWhiteBalanceStatus(); + assertDwbActive(true); + } + + @Test + public void displayWhiteBalance_disabledWhileAccessibilityColorInversionEnabled() { + setDisplayWhiteBalanceEnabled(true); + startService(); + setAccessibilityColorInversion(true); + + mCds.updateDisplayWhiteBalanceStatus(); + assertDwbActive(false); + + setAccessibilityColorInversion(false); + mCds.updateDisplayWhiteBalanceStatus(); + assertDwbActive(true); + } + /** * Configures Night display to use a custom schedule. *