Merge "Hide color mode preference depending on Accessibility settings" into pi-dev am: e96b57a5fb
am: c767f493d8
Change-Id: I76912e1dbdf02c2a220d04f48df3f2b0b91a9a9f
This commit is contained in:
@@ -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
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user