OSDN Git Service

Disable display white balance when accessibility features are enabled
authorDaniel Solomon <solomondaniel@google.com>
Fri, 12 Apr 2019 02:29:31 +0000 (19:29 -0700)
committerDaniel Solomon <solomondaniel@google.com>
Tue, 7 May 2019 00:04:25 +0000 (17:04 -0700)
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

services/core/java/com/android/server/display/color/ColorDisplayService.java
services/tests/servicestests/src/com/android/server/display/color/ColorDisplayServiceTest.java

index f599adb..85fb1e0 100644 (file)
@@ -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;
index de841a0..8bb8aae 100644 (file)
@@ -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.
      *