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

Commit ade7d943 authored by Christine Franks's avatar Christine Franks
Browse files

Move color modes to ColorDisplayManager

Bug: 123352608
Test: make RunSettingsRoboTests

Change-Id: I3c054fa0cca4bbd1c955ef03d1733320ffe9e0f0
parent 17e11906
Loading
Loading
Loading
Loading
+10 −12
Original line number Diff line number Diff line
@@ -18,14 +18,12 @@ import android.hardware.display.ColorDisplayManager;

import androidx.annotation.VisibleForTesting;

import com.android.internal.app.ColorDisplayController;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;

public class ColorModePreferenceController extends BasePreferenceController {
    private static final String TAG = "ColorModePreference";

    private ColorDisplayController mColorDisplayController;
    private ColorDisplayManager mColorDisplayManager;

    public ColorModePreferenceController(Context context, String key) {
        super(context, key);
@@ -35,30 +33,30 @@ public class ColorModePreferenceController extends BasePreferenceController {
    public int getAvailabilityStatus() {
        return mContext.getSystemService(ColorDisplayManager.class)
                .isDeviceColorManaged()
                && !getColorDisplayController().getAccessibilityTransformActivated() ?
                && !ColorDisplayManager.areAccessibilityTransformsEnabled(mContext) ?
                AVAILABLE_UNSEARCHABLE : DISABLED_FOR_USER;
    }

    @Override
    public CharSequence getSummary() {
        final int colorMode = getColorDisplayController().getColorMode();
        if (colorMode == ColorDisplayController.COLOR_MODE_AUTOMATIC) {
        final int colorMode = getColorDisplayManager().getColorMode();
        if (colorMode == ColorDisplayManager.COLOR_MODE_AUTOMATIC) {
            return mContext.getText(R.string.color_mode_option_automatic);
        }
        if (colorMode == ColorDisplayController.COLOR_MODE_SATURATED) {
        if (colorMode == ColorDisplayManager.COLOR_MODE_SATURATED) {
            return mContext.getText(R.string.color_mode_option_saturated);
        }
        if (colorMode == ColorDisplayController.COLOR_MODE_BOOSTED) {
        if (colorMode == ColorDisplayManager.COLOR_MODE_BOOSTED) {
            return mContext.getText(R.string.color_mode_option_boosted);
        }
        return mContext.getText(R.string.color_mode_option_natural);
    }

    @VisibleForTesting
    ColorDisplayController getColorDisplayController() {
        if (mColorDisplayController == null) {
            mColorDisplayController = new ColorDisplayController(mContext);
    ColorDisplayManager getColorDisplayManager() {
        if (mColorDisplayManager == null) {
            mColorDisplayManager = mContext.getSystemService(ColorDisplayManager.class);
        }
        return mColorDisplayController;
        return mColorDisplayManager;
    }
}
+47 −31
Original line number Diff line number Diff line
@@ -14,14 +14,20 @@
package com.android.settings.display;

import android.app.settings.SettingsEnums;
import android.content.ContentResolver;
import android.content.Context;
import android.database.ContentObserver;
import android.graphics.drawable.Drawable;
import android.hardware.display.ColorDisplayManager;
import android.net.Uri;
import android.os.Handler;
import android.os.Looper;
import android.provider.SearchIndexableResource;

import android.provider.Settings.Secure;
import androidx.annotation.VisibleForTesting;
import androidx.preference.PreferenceScreen;

import com.android.internal.app.ColorDisplayController;
import com.android.settings.R;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
@@ -36,8 +42,7 @@ import java.util.List;

@SuppressWarnings("WeakerAccess")
@SearchIndexable
public class ColorModePreferenceFragment extends RadioButtonPickerFragment
        implements ColorDisplayController.Callback {
public class ColorModePreferenceFragment extends RadioButtonPickerFragment {

    @VisibleForTesting
    static final String KEY_COLOR_MODE_NATURAL = "color_mode_natural";
@@ -48,21 +53,41 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment
    @VisibleForTesting
    static final String KEY_COLOR_MODE_AUTOMATIC = "color_mode_automatic";

    private ColorDisplayController mController;
    private ContentObserver mContentObserver;
    private ColorDisplayManager mColorDisplayManager;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mController = new ColorDisplayController(context);
        mController.setListener(this);

        mColorDisplayManager = context.getSystemService(ColorDisplayManager.class);

        final ContentResolver cr = context.getContentResolver();
        mContentObserver = new ContentObserver(new Handler(Looper.getMainLooper())) {
            @Override
            public void onChange(boolean selfChange, Uri uri) {
                super.onChange(selfChange, uri);
                if (ColorDisplayManager.areAccessibilityTransformsEnabled(getContext())) {
                    // Color modes are not configurable when Accessibility transforms are enabled.
                    // Close this fragment in that case.
                    getActivity().finish();
                }
            }
        };
        cr.registerContentObserver(
                Secure.getUriFor(Secure.ACCESSIBILITY_DISPLAY_INVERSION_ENABLED),
                false /* notifyForDescendants */, mContentObserver, mUserId);
        cr.registerContentObserver(
                Secure.getUriFor(Secure.ACCESSIBILITY_DISPLAY_DALTONIZER_ENABLED),
                false /* notifyForDescendants */, mContentObserver, mUserId);
    }

    @Override
    public void onDetach() {
        super.onDetach();
        if (mController != null) {
            mController.setListener(null);
            mController = null;
        if (mContentObserver != null) {
            getContext().getContentResolver().unregisterContentObserver(mContentObserver);
            mContentObserver = null;
        }
    }

@@ -90,22 +115,22 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment
        final int[] availableColorModes = c.getResources().getIntArray(
                com.android.internal.R.array.config_availableColorModes);

        List<ColorModeCandidateInfo> candidates = new ArrayList<ColorModeCandidateInfo>();
        List<ColorModeCandidateInfo> candidates = new ArrayList<>();
        if (availableColorModes != null) {
            for (int colorMode : availableColorModes) {
                if (colorMode == ColorDisplayController.COLOR_MODE_NATURAL) {
                if (colorMode == ColorDisplayManager.COLOR_MODE_NATURAL) {
                    candidates.add(new ColorModeCandidateInfo(
                                c.getText(R.string.color_mode_option_natural),
                                KEY_COLOR_MODE_NATURAL, true /* enabled */));
                } else if (colorMode == ColorDisplayController.COLOR_MODE_BOOSTED) {
                } else if (colorMode == ColorDisplayManager.COLOR_MODE_BOOSTED) {
                    candidates.add(new ColorModeCandidateInfo(
                                c.getText(R.string.color_mode_option_boosted),
                                KEY_COLOR_MODE_BOOSTED, true /* enabled */));
                } else if (colorMode == ColorDisplayController.COLOR_MODE_SATURATED) {
                } else if (colorMode == ColorDisplayManager.COLOR_MODE_SATURATED) {
                    candidates.add(new ColorModeCandidateInfo(
                                c.getText(R.string.color_mode_option_saturated),
                                KEY_COLOR_MODE_SATURATED, true /* enabled */));
                } else if (colorMode == ColorDisplayController.COLOR_MODE_AUTOMATIC) {
                } else if (colorMode == ColorDisplayManager.COLOR_MODE_AUTOMATIC) {
                    candidates.add(new ColorModeCandidateInfo(
                                c.getText(R.string.color_mode_option_automatic),
                                KEY_COLOR_MODE_AUTOMATIC, true /* enabled */));
@@ -117,12 +142,12 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment

    @Override
    protected String getDefaultKey() {
        final int colorMode = mController.getColorMode();
        if (colorMode == ColorDisplayController.COLOR_MODE_AUTOMATIC) {
        final int colorMode = mColorDisplayManager.getColorMode();
        if (colorMode == ColorDisplayManager.COLOR_MODE_AUTOMATIC) {
            return KEY_COLOR_MODE_AUTOMATIC;
        } else if (colorMode == ColorDisplayController.COLOR_MODE_SATURATED) {
        } else if (colorMode == ColorDisplayManager.COLOR_MODE_SATURATED) {
            return KEY_COLOR_MODE_SATURATED;
        } else if (colorMode == ColorDisplayController.COLOR_MODE_BOOSTED) {
        } else if (colorMode == ColorDisplayManager.COLOR_MODE_BOOSTED) {
            return KEY_COLOR_MODE_BOOSTED;
        }
        return KEY_COLOR_MODE_NATURAL;
@@ -132,16 +157,16 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment
    protected boolean setDefaultKey(String key) {
        switch (key) {
            case KEY_COLOR_MODE_NATURAL:
                mController.setColorMode(ColorDisplayController.COLOR_MODE_NATURAL);
                mColorDisplayManager.setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL);
                break;
            case KEY_COLOR_MODE_BOOSTED:
                mController.setColorMode(ColorDisplayController.COLOR_MODE_BOOSTED);
                mColorDisplayManager.setColorMode(ColorDisplayManager.COLOR_MODE_BOOSTED);
                break;
            case KEY_COLOR_MODE_SATURATED:
                mController.setColorMode(ColorDisplayController.COLOR_MODE_SATURATED);
                mColorDisplayManager.setColorMode(ColorDisplayManager.COLOR_MODE_SATURATED);
                break;
            case KEY_COLOR_MODE_AUTOMATIC:
                mController.setColorMode(ColorDisplayController.COLOR_MODE_AUTOMATIC);
                mColorDisplayManager.setColorMode(ColorDisplayManager.COLOR_MODE_AUTOMATIC);
                break;
        }
        return true;
@@ -179,15 +204,6 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment
        }
    }

    @Override
    public void onAccessibilityTransformChanged(boolean state) {
        // Color modes are no not configurable when Accessibility transforms are enabled. Close
        // this fragment in that case.
        if (state) {
            getActivity().onBackPressed();
        }
    }

    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
            new BaseSearchIndexProvider() {
                @Override
+10 −8
Original line number Diff line number Diff line
@@ -17,12 +17,13 @@ import android.content.Context;
import android.hardware.display.ColorDisplayManager;
import android.os.UserHandle;
import android.provider.Settings.Secure;
import androidx.annotation.VisibleForTesting;

import com.android.internal.app.ColorDisplayController;
import com.android.settings.core.TogglePreferenceController;

public class DisplayWhiteBalancePreferenceController extends TogglePreferenceController {
    private ColorDisplayController mColorDisplayController;

    private ColorDisplayManager mColorDisplayManager;

    public DisplayWhiteBalancePreferenceController(Context context, String key) {
        super(context, key);
@@ -33,8 +34,8 @@ public class DisplayWhiteBalancePreferenceController extends TogglePreferenceCon
        // Display white balance is only valid in linear light space. COLOR_MODE_SATURATED implies
        // unmanaged color mode, and hence unknown color processing conditions.
        return ColorDisplayManager.isDisplayWhiteBalanceAvailable(mContext) &&
                getColorDisplayController().getColorMode() !=
                    ColorDisplayController.COLOR_MODE_SATURATED ?
                getColorDisplayManager().getColorMode() !=
                        ColorDisplayManager.COLOR_MODE_SATURATED ?
                AVAILABLE : DISABLED_FOR_USER;
    }

@@ -51,10 +52,11 @@ public class DisplayWhiteBalancePreferenceController extends TogglePreferenceCon
        return true;
    }

    ColorDisplayController getColorDisplayController() {
        if (mColorDisplayController == null) {
            mColorDisplayController = new ColorDisplayController(mContext);
    @VisibleForTesting
    ColorDisplayManager getColorDisplayManager() {
        if (mColorDisplayManager == null) {
            mColorDisplayManager = mContext.getSystemService(ColorDisplayManager.class);
        }
        return mColorDisplayController;
        return mColorDisplayManager;
    }
}
+11 −11
Original line number Diff line number Diff line
@@ -23,10 +23,10 @@ import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;

import android.content.Context;
import android.hardware.display.ColorDisplayManager;

import androidx.preference.Preference;

import com.android.internal.app.ColorDisplayController;
import com.android.settings.R;

import org.junit.Before;
@@ -41,7 +41,7 @@ import org.robolectric.RuntimeEnvironment;
public class ColorModePreferenceControllerTest {

    @Mock
    private ColorDisplayController mColorDisplayController;
    private ColorDisplayManager mColorDisplayManager;

    private Context mContext;
    private Preference mPreference;
@@ -53,13 +53,13 @@ public class ColorModePreferenceControllerTest {
        mContext = RuntimeEnvironment.application;
        mController = spy(new ColorModePreferenceController(mContext, "test"));
        mPreference = new Preference(mContext);
        doReturn(mColorDisplayController).when(mController).getColorDisplayController();
        doReturn(mColorDisplayManager).when(mController).getColorDisplayManager();
    }

    @Test
    public void updateState_colorModeAutomatic_shouldSetSummaryToAutomatic() {
        when(mColorDisplayController.getColorMode())
                .thenReturn(ColorDisplayController.COLOR_MODE_AUTOMATIC);
        when(mColorDisplayManager.getColorMode())
                .thenReturn(ColorDisplayManager.COLOR_MODE_AUTOMATIC);

        mController.updateState(mPreference);

@@ -69,8 +69,8 @@ public class ColorModePreferenceControllerTest {

    @Test
    public void updateState_colorModeSaturated_shouldSetSummaryToSaturated() {
        when(mColorDisplayController.getColorMode())
                .thenReturn(ColorDisplayController.COLOR_MODE_SATURATED);
        when(mColorDisplayManager.getColorMode())
                .thenReturn(ColorDisplayManager.COLOR_MODE_SATURATED);

        mController.updateState(mPreference);

@@ -80,8 +80,8 @@ public class ColorModePreferenceControllerTest {

    @Test
    public void updateState_colorModeBoosted_shouldSetSummaryToBoosted() {
        when(mColorDisplayController.getColorMode())
                .thenReturn(ColorDisplayController.COLOR_MODE_BOOSTED);
        when(mColorDisplayManager.getColorMode())
                .thenReturn(ColorDisplayManager.COLOR_MODE_BOOSTED);

        mController.updateState(mPreference);

@@ -91,8 +91,8 @@ public class ColorModePreferenceControllerTest {

    @Test
    public void updateState_colorModeNatural_shouldSetSummaryToNatural() {
        when(mColorDisplayController.getColorMode())
                .thenReturn(ColorDisplayController.COLOR_MODE_NATURAL);
        when(mColorDisplayManager.getColorMode())
                .thenReturn(ColorDisplayManager.COLOR_MODE_NATURAL);

        mController.updateState(mPreference);

+24 −35
Original line number Diff line number Diff line
@@ -25,13 +25,12 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.hardware.display.ColorDisplayManager;
import android.os.Bundle;

import androidx.fragment.app.FragmentActivity;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.internal.app.ColorDisplayController;
import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.testutils.shadow.SettingsShadowResources;
@@ -59,17 +58,14 @@ public class ColorModePreferenceFragmentTest {
    private ColorModePreferenceFragment mFragment;

    @Mock
    private ColorDisplayController mController;

    @Mock
    private FragmentActivity mActivity;
    private ColorDisplayManager mManager;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);

        mFragment = spy(new ColorModePreferenceFragment());
        ReflectionHelpers.setField(mFragment, "mController", mController);
        ReflectionHelpers.setField(mFragment, "mColorDisplayManager", mManager);
    }

    @After
@@ -88,10 +84,10 @@ public class ColorModePreferenceFragmentTest {
        when(mFragment.getContext()).thenReturn(RuntimeEnvironment.application);
        SettingsShadowResources.overrideResource(
                com.android.internal.R.array.config_availableColorModes, new int[]{
                    ColorDisplayController.COLOR_MODE_NATURAL,
                    ColorDisplayController.COLOR_MODE_BOOSTED,
                    ColorDisplayController.COLOR_MODE_SATURATED,
                    ColorDisplayController.COLOR_MODE_AUTOMATIC
                        ColorDisplayManager.COLOR_MODE_NATURAL,
                        ColorDisplayManager.COLOR_MODE_BOOSTED,
                        ColorDisplayManager.COLOR_MODE_SATURATED,
                        ColorDisplayManager.COLOR_MODE_AUTOMATIC
                });
        List<? extends CandidateInfo> candidates = mFragment.getCandidates();

@@ -121,8 +117,8 @@ public class ColorModePreferenceFragmentTest {
        when(mFragment.getContext()).thenReturn(RuntimeEnvironment.application);
        SettingsShadowResources.overrideResource(
                com.android.internal.R.array.config_availableColorModes, new int[]{
                    ColorDisplayController.COLOR_MODE_NATURAL,
                    ColorDisplayController.COLOR_MODE_AUTOMATIC
                        ColorDisplayManager.COLOR_MODE_NATURAL,
                        ColorDisplayManager.COLOR_MODE_AUTOMATIC
                });
        List<? extends CandidateInfo> candidates = mFragment.getCandidates();

@@ -138,9 +134,9 @@ public class ColorModePreferenceFragmentTest {
        when(mFragment.getContext()).thenReturn(RuntimeEnvironment.application);
        SettingsShadowResources.overrideResource(
                com.android.internal.R.array.config_availableColorModes, new int[]{
                    ColorDisplayController.COLOR_MODE_NATURAL,
                    ColorDisplayController.COLOR_MODE_BOOSTED,
                    ColorDisplayController.COLOR_MODE_SATURATED,
                        ColorDisplayManager.COLOR_MODE_NATURAL,
                        ColorDisplayManager.COLOR_MODE_BOOSTED,
                        ColorDisplayManager.COLOR_MODE_SATURATED,
                });
        List<? extends CandidateInfo> candidates = mFragment.getCandidates();

@@ -155,8 +151,8 @@ public class ColorModePreferenceFragmentTest {

    @Test
    public void getKey_natural() {
        when(mController.getColorMode())
            .thenReturn(ColorDisplayController.COLOR_MODE_NATURAL);
        when(mManager.getColorMode())
            .thenReturn(ColorDisplayManager.COLOR_MODE_NATURAL);

        assertThat(mFragment.getDefaultKey())
                .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_NATURAL);
@@ -164,8 +160,8 @@ public class ColorModePreferenceFragmentTest {

    @Test
    public void getKey_boosted() {
        when(mController.getColorMode())
            .thenReturn(ColorDisplayController.COLOR_MODE_BOOSTED);
        when(mManager.getColorMode())
            .thenReturn(ColorDisplayManager.COLOR_MODE_BOOSTED);

        assertThat(mFragment.getDefaultKey())
                .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_BOOSTED);
@@ -173,8 +169,8 @@ public class ColorModePreferenceFragmentTest {

    @Test
    public void getKey_saturated() {
        when(mController.getColorMode())
            .thenReturn(ColorDisplayController.COLOR_MODE_SATURATED);
        when(mManager.getColorMode())
            .thenReturn(ColorDisplayManager.COLOR_MODE_SATURATED);

        assertThat(mFragment.getDefaultKey())
            .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_SATURATED);
@@ -182,8 +178,8 @@ public class ColorModePreferenceFragmentTest {

    @Test
    public void getKey_automatic() {
        when(mController.getColorMode())
            .thenReturn(ColorDisplayController.COLOR_MODE_AUTOMATIC);
        when(mManager.getColorMode())
            .thenReturn(ColorDisplayManager.COLOR_MODE_AUTOMATIC);

        assertThat(mFragment.getDefaultKey())
            .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_AUTOMATIC);
@@ -192,25 +188,25 @@ public class ColorModePreferenceFragmentTest {
    @Test
    public void setKey_natural() {
        mFragment.setDefaultKey(ColorModePreferenceFragment.KEY_COLOR_MODE_NATURAL);
        verify(mController).setColorMode(ColorDisplayController.COLOR_MODE_NATURAL);
        verify(mManager).setColorMode(ColorDisplayManager.COLOR_MODE_NATURAL);
    }

    @Test
    public void setKey_boosted() {
        mFragment.setDefaultKey(ColorModePreferenceFragment.KEY_COLOR_MODE_BOOSTED);
        verify(mController).setColorMode(ColorDisplayController.COLOR_MODE_BOOSTED);
        verify(mManager).setColorMode(ColorDisplayManager.COLOR_MODE_BOOSTED);
    }

    @Test
    public void setKey_saturated() {
        mFragment.setDefaultKey(ColorModePreferenceFragment.KEY_COLOR_MODE_SATURATED);
        verify(mController).setColorMode(ColorDisplayController.COLOR_MODE_SATURATED);
        verify(mManager).setColorMode(ColorDisplayManager.COLOR_MODE_SATURATED);
    }

    @Test
    public void setKey_automatic() {
        mFragment.setDefaultKey(ColorModePreferenceFragment.KEY_COLOR_MODE_AUTOMATIC);
        verify(mController).setColorMode(ColorDisplayController.COLOR_MODE_AUTOMATIC);
        verify(mManager).setColorMode(ColorDisplayManager.COLOR_MODE_AUTOMATIC);
    }

    @Test
@@ -237,11 +233,4 @@ public class ColorModePreferenceFragmentTest {

        assertThat(preferenceCaptor.getValue()).isEqualTo(mockPreview);
    }

    @Test
    public void onAccessibilityTransformChanged_toggles() {
        when(mFragment.getActivity()).thenReturn(mActivity);
        mFragment.onAccessibilityTransformChanged(true /* state */);
        verify(mActivity).onBackPressed();
    }
}
Loading