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

am: c767f493d8

Change-Id: I76912e1dbdf02c2a220d04f48df3f2b0b91a9a9f
This commit is contained in:
Daniel Solomon
2018-04-10 11:27:58 -07:00
committed by android-build-merger
3 changed files with 15 additions and 66 deletions

View File

@@ -41,7 +41,9 @@ public class ColorModePreferenceController extends BasePreferenceController {
@Override @Override
public int getAvailabilityStatus() { public int getAvailabilityStatus() {
return mConfigWrapper.isScreenWideColorGamut() ? AVAILABLE : DISABLED_FOR_USER; return mConfigWrapper.isScreenWideColorGamut()
&& !getColorDisplayController().getAccessibilityTransformActivated() ?
AVAILABLE : DISABLED_FOR_USER;
} }
@Override @Override

View File

@@ -16,7 +16,6 @@ package com.android.settings.display;
import android.content.Context; import android.content.Context;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.support.annotation.VisibleForTesting; import android.support.annotation.VisibleForTesting;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen; import android.support.v7.preference.PreferenceScreen;
import com.android.internal.app.ColorDisplayController; 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.applications.LayoutPreference;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.widget.RadioButtonPickerFragment; import com.android.settings.widget.RadioButtonPickerFragment;
import com.android.settings.widget.RadioButtonPreference;
import com.android.settingslib.widget.CandidateInfo; import com.android.settingslib.widget.CandidateInfo;
import java.util.Arrays; import java.util.Arrays;
@@ -81,14 +79,13 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment
@Override @Override
protected List<? extends CandidateInfo> getCandidates() { protected List<? extends CandidateInfo> getCandidates() {
Context c = getContext(); Context c = getContext();
final boolean enabled = !mController.getAccessibilityTransformActivated();
return Arrays.asList( return Arrays.asList(
new ColorModeCandidateInfo(c.getText(R.string.color_mode_option_natural), 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), 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), 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 @Override
public void onAccessibilityTransformChanged(boolean state) { public void onAccessibilityTransformChanged(boolean state) {
// Disable controls when a11y transforms are enabled, and vice versa // Color modes are no not configurable when Accessibility transforms are enabled. Close
final PreferenceScreen screen = getPreferenceScreen(); // this fragment in that case.
if (screen != null) { if (state) {
final int count = screen.getPreferenceCount(); getActivity().onBackPressed();
for (int i = 0; i < count; i++) {
final Preference pref = screen.getPreference(i);
if (pref instanceof RadioButtonPreference) {
pref.setEnabled(!state);
}
}
} }
} }
} }

View File

@@ -16,7 +16,6 @@
package com.android.settings.display; package com.android.settings.display;
import static com.google.common.truth.Truth.assertThat; 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.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.mock; 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.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.Activity;
import android.os.Bundle; import android.os.Bundle;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen; 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.R;
import com.android.settings.applications.LayoutPreference; import com.android.settings.applications.LayoutPreference;
import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.widget.RadioButtonPreference;
import com.android.settingslib.widget.CandidateInfo; import com.android.settingslib.widget.CandidateInfo;
import org.junit.Before; import org.junit.Before;
@@ -46,7 +45,6 @@ import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.util.ReflectionHelpers; import org.robolectric.util.ReflectionHelpers;
import java.util.ArrayList;
import java.util.List; import java.util.List;
@RunWith(SettingsRobolectricTestRunner.class) @RunWith(SettingsRobolectricTestRunner.class)
@@ -58,13 +56,13 @@ public class ColorModePreferenceFragmentTest {
private ColorDisplayController mController; private ColorDisplayController mController;
@Mock @Mock
private PreferenceScreen mScreen; private Activity mActivity;
@Before @Before
public void setup() { public void setup() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mFragment = spy(new ColorModePreferenceFragmentTestable(mScreen)); mFragment = spy(new ColorModePreferenceFragment());
ReflectionHelpers.setField(mFragment, "mController", mController); ReflectionHelpers.setField(mFragment, "mController", mController);
} }
@@ -159,50 +157,8 @@ public class ColorModePreferenceFragmentTest {
@Test @Test
public void onAccessibilityTransformChanged_toggles() { public void onAccessibilityTransformChanged_toggles() {
final int radioPrefsCount = 3; when(mFragment.getActivity()).thenReturn(mActivity);
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]);
});
mFragment.onAccessibilityTransformChanged(true /* state */); mFragment.onAccessibilityTransformChanged(true /* state */);
for (int i = 0; i < radioPrefsCount; i++) { verify(mActivity).onBackPressed();
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;
}
} }
} }