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
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 f599adb..85fb1e0 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 @@
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 @@
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 @@
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 @@
boolean oldActivated = mDisplayWhiteBalanceTintController.isActivated();
mDisplayWhiteBalanceTintController.setActivated(isDisplayWhiteBalanceSettingEnabled()
&& !mNightDisplayTintController.isActivated()
+ && !isAccessibilityEnabled()
&& DisplayTransformManager.needsLinearColorMatrix());
boolean activated = mDisplayWhiteBalanceTintController.isActivated();
@@ -761,10 +773,7 @@
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;