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

Commit c767f493 authored by Daniel Solomon's avatar Daniel Solomon Committed by android-build-merger
Browse files

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

am: e96b57a5

Change-Id: I0b746d7e2a8e2d06a82d3beeb2c5beb5fc79ff3b
parents 44f65080 e96b57a5
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();
    }
}