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

Commit e96b57a5 authored by Daniel Solomon's avatar Daniel Solomon Committed by Android (Google) Code Review
Browse files

Merge "Hide color mode preference depending on Accessibility settings" into pi-dev

parents fa447e69 fbe8a131
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -41,7 +41,9 @@ public class ColorModePreferenceController extends BasePreferenceController {

    @Override
    public int getAvailabilityStatus() {
        return mConfigWrapper.isScreenWideColorGamut() ? AVAILABLE : DISABLED_FOR_USER;
        return mConfigWrapper.isScreenWideColorGamut()
                && !getColorDisplayController().getAccessibilityTransformActivated() ?
                AVAILABLE : DISABLED_FOR_USER;
    }

    @Override
+7 −16
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@ package com.android.settings.display;
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;

import com.android.internal.app.ColorDisplayController;
@@ -25,7 +24,6 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.R;
import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settings.widget.RadioButtonPreference;
import com.android.settingslib.widget.CandidateInfo;

import java.util.Arrays;
@@ -81,14 +79,13 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment
    @Override
    protected List<? extends CandidateInfo> getCandidates() {
        Context c = getContext();
        final boolean enabled = !mController.getAccessibilityTransformActivated();
        return Arrays.asList(
            new ColorModeCandidateInfo(c.getText(R.string.color_mode_option_natural),
                    KEY_COLOR_MODE_NATURAL, enabled),
                    KEY_COLOR_MODE_NATURAL, true /* enabled */),
            new ColorModeCandidateInfo(c.getText(R.string.color_mode_option_boosted),
                    KEY_COLOR_MODE_BOOSTED, enabled),
                    KEY_COLOR_MODE_BOOSTED, true /* enabled */),
            new ColorModeCandidateInfo(c.getText(R.string.color_mode_option_saturated),
                    KEY_COLOR_MODE_SATURATED, enabled)
                    KEY_COLOR_MODE_SATURATED, true /* enabled */)
        );
    }

@@ -153,16 +150,10 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment

    @Override
    public void onAccessibilityTransformChanged(boolean state) {
        // Disable controls when a11y transforms are enabled, and vice versa
        final PreferenceScreen screen = getPreferenceScreen();
        if (screen != null) {
            final int count = screen.getPreferenceCount();
            for (int i = 0; i < count; i++) {
                final Preference pref = screen.getPreference(i);
                if (pref instanceof RadioButtonPreference) {
                    pref.setEnabled(!state);
                }
            }
        // Color modes are no not configurable when Accessibility transforms are enabled. Close
        // this fragment in that case.
        if (state) {
            getActivity().onBackPressed();
        }
    }
}
+5 −49
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@
package com.android.settings.display;

import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Answers.RETURNS_DEEP_STUBS;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock;
@@ -25,6 +24,7 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.app.Activity;
import android.os.Bundle;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
@@ -34,7 +34,6 @@ import com.android.internal.logging.nano.MetricsProto;
import com.android.settings.R;
import com.android.settings.applications.LayoutPreference;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.widget.RadioButtonPreference;
import com.android.settingslib.widget.CandidateInfo;

import org.junit.Before;
@@ -46,7 +45,6 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.util.ReflectionHelpers;

import java.util.ArrayList;
import java.util.List;

@RunWith(SettingsRobolectricTestRunner.class)
@@ -58,13 +56,13 @@ public class ColorModePreferenceFragmentTest {
    private ColorDisplayController mController;

    @Mock
    private PreferenceScreen mScreen;
    private Activity mActivity;

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

        mFragment = spy(new ColorModePreferenceFragmentTestable(mScreen));
        mFragment = spy(new ColorModePreferenceFragment());
        ReflectionHelpers.setField(mFragment, "mController", mController);
    }

@@ -159,50 +157,8 @@ public class ColorModePreferenceFragmentTest {

    @Test
    public void onAccessibilityTransformChanged_toggles() {
        final int radioPrefsCount = 3;
        List<RadioButtonPreference> radioPrefs = new ArrayList<>();
        for (int i = 0; i < radioPrefsCount; i++) {
            radioPrefs.add(mock(RadioButtonPreference.class));
        }

        when(mScreen.getPreferenceCount()).thenReturn(radioPrefs.size());
        when(mScreen.getPreference(anyInt())).thenAnswer(invocation -> {
            final Object[] args = invocation.getArguments();
            return radioPrefs.get((int) args[0]);
        });

        when(mFragment.getActivity()).thenReturn(mActivity);
        mFragment.onAccessibilityTransformChanged(true /* state */);
        for (int i = 0; i < radioPrefsCount; i++) {
            verify(radioPrefs.get(i)).setEnabled(false);
        }

        mFragment.onAccessibilityTransformChanged(false /* state */);
        for (int i = 0; i < radioPrefsCount; i++) {
            verify(radioPrefs.get(i)).setEnabled(true);
        }
    }

    private static class ColorModePreferenceFragmentTestable
            extends ColorModePreferenceFragment {

        private final PreferenceScreen mPreferenceScreen;

        private ColorModePreferenceFragmentTestable(PreferenceScreen screen) {
            mPreferenceScreen = screen;
        }

        /**
         * A method to return a mock PreferenceScreen.
         * A real ColorModePreferenceFragment calls super.getPreferenceScreen() to get its
         * PreferenceScreen handle, which internally dereferenced a PreferenceManager. But in this
         * test scenario, the PreferenceManager object is uninitialized, so we need to supply the
         * PreferenceScreen directly.
         *
         * @return a mock PreferenceScreen
         */
        @Override
        public PreferenceScreen getPreferenceScreen() {
            return mPreferenceScreen;
        }
        verify(mActivity).onBackPressed();
    }
}