Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ff24ba9e authored by Daniel Solomon's avatar Daniel Solomon
Browse files

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
parent cc1159a1
Loading
Loading
Loading
Loading
+21 −12
Original line number Diff line number Diff line
@@ -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,9 +494,8 @@ 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(),
        final int daltonizerMode = isAccessiblityDaltonizerEnabled()
                ? Secure.getIntForUser(getContext().getContentResolver(),
                    Secure.ACCESSIBILITY_DISPLAY_DALTONIZER,
                    AccessibilityManager.DALTONIZER_CORRECT_DEUTERANOMALY, mCurrentUser)
                : AccessibilityManager.DALTONIZER_DISABLED;
@@ -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;
+28 −0
Original line number Diff line number Diff line
@@ -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.
     *