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

Commit 5d8eeb05 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix ColorDisplayServiceTest as device-agnostic"

parents 95982dbe 97bc849c
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -162,7 +162,8 @@ public final class ColorDisplayService extends SystemService {
    private final ReduceBrightColorsTintController mReduceBrightColorsTintController =
            new ReduceBrightColorsTintController();

    private final Handler mHandler;
    @VisibleForTesting
    final Handler mHandler;

    private final AppSaturationController mAppSaturationController = new AppSaturationController();

@@ -404,13 +405,13 @@ public final class ColorDisplayService extends SystemService {
        // existing activated state. This ensures consistency of tint across the color mode change.
        onDisplayColorModeChanged(getColorModeInternal());

        final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class);
        if (mNightDisplayTintController.isAvailable(getContext())) {
            // Reset the activated state.
            mNightDisplayTintController.setActivated(null);

            // Prepare the night display color transformation matrix.
            mNightDisplayTintController
                    .setUp(getContext(), DisplayTransformManager.needsLinearColorMatrix());
            mNightDisplayTintController.setUp(getContext(), dtm.needsLinearColorMatrix());
            mNightDisplayTintController
                    .setMatrix(mNightDisplayTintController.getColorTemperatureSetting());

@@ -432,8 +433,7 @@ public final class ColorDisplayService extends SystemService {
        }

        if (mReduceBrightColorsTintController.isAvailable(getContext())) {
            mReduceBrightColorsTintController
                    .setUp(getContext(), DisplayTransformManager.needsLinearColorMatrix());
            mReduceBrightColorsTintController.setUp(getContext(), dtm.needsLinearColorMatrix());
            onReduceBrightColorsStrengthLevelChanged();
            final boolean reset = resetReduceBrightColors();
            if (!reset) {
@@ -540,8 +540,8 @@ public final class ColorDisplayService extends SystemService {
        mDisplayWhiteBalanceTintController.cancelAnimator();

        if (mNightDisplayTintController.isAvailable(getContext())) {
            mNightDisplayTintController
                    .setUp(getContext(), DisplayTransformManager.needsLinearColorMatrix(mode));
            final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class);
            mNightDisplayTintController.setUp(getContext(), dtm.needsLinearColorMatrix(mode));
            mNightDisplayTintController
                    .setMatrix(mNightDisplayTintController.getColorTemperatureSetting());
        }
@@ -731,10 +731,11 @@ public final class ColorDisplayService extends SystemService {
    @VisibleForTesting
    void updateDisplayWhiteBalanceStatus() {
        boolean oldActivated = mDisplayWhiteBalanceTintController.isActivated();
        final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class);
        mDisplayWhiteBalanceTintController.setActivated(isDisplayWhiteBalanceSettingEnabled()
                && !mNightDisplayTintController.isActivated()
                && !isAccessibilityEnabled()
                && DisplayTransformManager.needsLinearColorMatrix());
                && dtm.needsLinearColorMatrix());
        boolean activated = mDisplayWhiteBalanceTintController.isActivated();

        if (mDisplayWhiteBalanceListener != null && oldActivated != activated) {
+2 −2
Original line number Diff line number Diff line
@@ -239,7 +239,7 @@ public class DisplayTransformManager {
    /**
     * Return true when the color matrix works in linear space.
     */
    public static boolean needsLinearColorMatrix() {
    public boolean needsLinearColorMatrix() {
        return SystemProperties.getInt(PERSISTENT_PROPERTY_DISPLAY_COLOR,
                DISPLAY_COLOR_UNMANAGED) != DISPLAY_COLOR_UNMANAGED;
    }
@@ -247,7 +247,7 @@ public class DisplayTransformManager {
    /**
     * Return true when the specified colorMode requires the color matrix to work in linear space.
     */
    public static boolean needsLinearColorMatrix(int colorMode) {
    public boolean needsLinearColorMatrix(int colorMode) {
        return colorMode != ColorDisplayManager.COLOR_MODE_SATURATED;
    }

+31 −37
Original line number Diff line number Diff line
@@ -21,7 +21,6 @@ import static com.google.common.truth.Truth.assertWithMessage;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@@ -53,9 +52,7 @@ import com.android.server.twilight.TwilightManager;
import com.android.server.twilight.TwilightState;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
@@ -76,25 +73,29 @@ public class ColorDisplayServiceTest {
    private int mUserId;

    private MockTwilightManager mTwilightManager;
    private DisplayTransformManager mDisplayTransformManager;

    private ColorDisplayService mCds;
    private ColorDisplayService.BinderService mBinderService;

    private Resources mResourcesSpy;

    @BeforeClass
    public static void setDtm() {
        final DisplayTransformManager dtm = Mockito.mock(DisplayTransformManager.class);
        LocalServices.addService(DisplayTransformManager.class, dtm);
    }
    private static final int[] MINIMAL_COLOR_MODES = new int[] {
        ColorDisplayManager.COLOR_MODE_NATURAL,
        ColorDisplayManager.COLOR_MODE_BOOSTED,
    };

    @Before
    public void setUp() {
        mContext = Mockito.spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
        doReturn(mContext).when(mContext).getApplicationContext();

        mResourcesSpy = Mockito.spy(mContext.getResources());
        when(mContext.getResources()).thenReturn(mResourcesSpy);
        final Resources res = Mockito.spy(mContext.getResources());
        doReturn(MINIMAL_COLOR_MODES).when(res).getIntArray(R.array.config_availableColorModes);
        doReturn(true).when(res).getBoolean(R.bool.config_nightDisplayAvailable);
        doReturn(true).when(res).getBoolean(R.bool.config_displayWhiteBalanceAvailable);
        when(mContext.getResources()).thenReturn(res);
        mResourcesSpy = res;

        mUserId = ActivityManager.getCurrentUser();

@@ -108,6 +109,10 @@ public class ColorDisplayServiceTest {
        mTwilightManager = new MockTwilightManager();
        LocalServices.addService(TwilightManager.class, mTwilightManager);

        mDisplayTransformManager = Mockito.mock(DisplayTransformManager.class);
        doReturn(true).when(mDisplayTransformManager).needsLinearColorMatrix();
        LocalServices.addService(DisplayTransformManager.class, mDisplayTransformManager);

        mCds = new ColorDisplayService(mContext);
        mBinderService = mCds.new BinderService();
        LocalServices.addService(ColorDisplayService.ColorDisplayServiceInternal.class,
@@ -116,12 +121,18 @@ public class ColorDisplayServiceTest {

    @After
    public void tearDown() {
        LocalServices.removeServiceForTest(TwilightManager.class);

        /*
         * Wait for internal {@link Handler} to finish processing pending messages, so that test
         * code can safelyremove {@link DisplayTransformManager} mock from {@link LocalServices}.
         */
        mCds.mHandler.runWithScissors(() -> { /* nop */ }, /* timeout */ 1000);
        mCds = null;

        LocalServices.removeServiceForTest(TwilightManager.class);
        mTwilightManager = null;

        LocalServices.removeServiceForTest(DisplayTransformManager.class);

        mUserId = UserHandle.USER_NULL;
        mContext = null;

@@ -130,11 +141,6 @@ public class ColorDisplayServiceTest {
        LocalServices.removeServiceForTest(ColorDisplayService.ColorDisplayServiceInternal.class);
    }

    @AfterClass
    public static void removeDtm() {
        LocalServices.removeServiceForTest(DisplayTransformManager.class);
    }

    @Test
    public void customSchedule_whenStartedAfterNight_ifOffAfterNight_turnsOff() {
        setAutoModeCustom(-120 /* startTimeOffset */, -60 /* endTimeOffset */);
@@ -1064,24 +1070,18 @@ public class ColorDisplayServiceTest {

    @Test
    public void compositionColorSpaces_noResources() {
        final DisplayTransformManager dtm = LocalServices.getService(DisplayTransformManager.class);
        reset(dtm);

        when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorModes))
            .thenReturn(new int[] {});
        when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorSpaces))
            .thenReturn(new int[] {});
        setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL);
        startService();
        verify(dtm).setColorMode(eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(),
                eq(Display.COLOR_MODE_INVALID));
        verify(mDisplayTransformManager).setColorMode(
                eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_INVALID));
    }

    @Test
    public void compositionColorSpaces_invalidResources() {
        final DisplayTransformManager dtm = LocalServices.getService(DisplayTransformManager.class);
        reset(dtm);

        when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorModes))
            .thenReturn(new int[] {
               ColorDisplayManager.COLOR_MODE_NATURAL,
@@ -1094,15 +1094,12 @@ public class ColorDisplayServiceTest {
            });
        setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL);
        startService();
        verify(dtm).setColorMode(eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(),
                eq(Display.COLOR_MODE_INVALID));
        verify(mDisplayTransformManager).setColorMode(
                eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_INVALID));
    }

    @Test
    public void compositionColorSpaces_validResources_validColorMode() {
        final DisplayTransformManager dtm = LocalServices.getService(DisplayTransformManager.class);
        reset(dtm);

        when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorModes))
            .thenReturn(new int[] {
               ColorDisplayManager.COLOR_MODE_NATURAL
@@ -1113,15 +1110,12 @@ public class ColorDisplayServiceTest {
            });
        setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL);
        startService();
        verify(dtm).setColorMode(eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(),
                eq(Display.COLOR_MODE_SRGB));
        verify(mDisplayTransformManager).setColorMode(
                eq(ColorDisplayManager.COLOR_MODE_NATURAL), any(), eq(Display.COLOR_MODE_SRGB));
    }

    @Test
    public void compositionColorSpaces_validResources_invalidColorMode() {
        final DisplayTransformManager dtm = LocalServices.getService(DisplayTransformManager.class);
        reset(dtm);

        when(mResourcesSpy.getIntArray(R.array.config_displayCompositionColorModes))
            .thenReturn(new int[] {
               ColorDisplayManager.COLOR_MODE_NATURAL
@@ -1132,8 +1126,8 @@ public class ColorDisplayServiceTest {
            });
        setColorMode(ColorDisplayManager.COLOR_MODE_BOOSTED);
        startService();
        verify(dtm).setColorMode(eq(ColorDisplayManager.COLOR_MODE_BOOSTED), any(),
                eq(Display.COLOR_MODE_INVALID));
        verify(mDisplayTransformManager).setColorMode(
                eq(ColorDisplayManager.COLOR_MODE_BOOSTED), any(), eq(Display.COLOR_MODE_INVALID));
    }

    /**