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

Commit 24ec60a9 authored by Christine Franks's avatar Christine Franks Committed by Android (Google) Code Review
Browse files

Merge "Move color modes to ColorDisplayManager"

parents 4918eede ade7d943
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