From d4cfb414c3ccc956bb540bf9e912cb99fbc29462 Mon Sep 17 00:00:00 2001 From: Chia-I Wu Date: Thu, 15 Mar 2018 08:35:20 -0700 Subject: [PATCH] Show color modes from config_availableColorModes Check config_availableColorModes to decide which color mode options to show. Bug: 73824924 Bug: 73825738 Test: 2016, 2017, and 2018 devices Change-Id: I42915595348061ff4b3f2fdf14753e96dfcb2052 --- .../ColorModePreferenceController.java | 3 + .../display/ColorModePreferenceFragment.java | 47 +++++++++--- .../ColorModePreferenceControllerTest.java | 10 +++ .../ColorModePreferenceFragmentTest.java | 76 ++++++++++++++++++- .../shadow/SettingsShadowResources.java | 8 ++ 5 files changed, 132 insertions(+), 12 deletions(-) diff --git a/src/com/android/settings/display/ColorModePreferenceController.java b/src/com/android/settings/display/ColorModePreferenceController.java index 31f53930a7e..ebb4370098a 100644 --- a/src/com/android/settings/display/ColorModePreferenceController.java +++ b/src/com/android/settings/display/ColorModePreferenceController.java @@ -49,6 +49,9 @@ public class ColorModePreferenceController extends BasePreferenceController { @Override public CharSequence getSummary() { final int colorMode = getColorDisplayController().getColorMode(); + if (colorMode == ColorDisplayController.COLOR_MODE_AUTOMATIC) { + return mContext.getText(R.string.color_mode_option_automatic); + } if (colorMode == ColorDisplayController.COLOR_MODE_SATURATED) { return mContext.getText(R.string.color_mode_option_saturated); } diff --git a/src/com/android/settings/display/ColorModePreferenceFragment.java b/src/com/android/settings/display/ColorModePreferenceFragment.java index 9f947e9e97a..5e7a856b750 100644 --- a/src/com/android/settings/display/ColorModePreferenceFragment.java +++ b/src/com/android/settings/display/ColorModePreferenceFragment.java @@ -26,7 +26,7 @@ import com.android.settings.R; import com.android.settings.widget.RadioButtonPickerFragment; import com.android.settingslib.widget.CandidateInfo; -import java.util.Arrays; +import java.util.ArrayList; import java.util.List; @SuppressWarnings("WeakerAccess") @@ -39,6 +39,8 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment static final String KEY_COLOR_MODE_BOOSTED = "color_mode_boosted"; @VisibleForTesting static final String KEY_COLOR_MODE_SATURATED = "color_mode_saturated"; + @VisibleForTesting + static final String KEY_COLOR_MODE_AUTOMATIC = "color_mode_automatic"; private ColorDisplayController mController; @@ -78,21 +80,41 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment @Override protected List getCandidates() { - Context c = getContext(); - return Arrays.asList( - new ColorModeCandidateInfo(c.getText(R.string.color_mode_option_natural), - KEY_COLOR_MODE_NATURAL, true /* enabled */), - new ColorModeCandidateInfo(c.getText(R.string.color_mode_option_boosted), - KEY_COLOR_MODE_BOOSTED, true /* enabled */), - new ColorModeCandidateInfo(c.getText(R.string.color_mode_option_saturated), - KEY_COLOR_MODE_SATURATED, true /* enabled */) - ); + final Context c = getContext(); + final int[] availableColorModes = c.getResources().getIntArray( + com.android.internal.R.array.config_availableColorModes); + + List candidates = new ArrayList(); + if (availableColorModes != null) { + for (int colorMode : availableColorModes) { + if (colorMode == ColorDisplayController.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) { + 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) { + 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) { + candidates.add(new ColorModeCandidateInfo( + c.getText(R.string.color_mode_option_automatic), + KEY_COLOR_MODE_AUTOMATIC, true /* enabled */)); + } + } + } + return candidates; } @Override protected String getDefaultKey() { final int colorMode = mController.getColorMode(); - if (colorMode == ColorDisplayController.COLOR_MODE_SATURATED) { + if (colorMode == ColorDisplayController.COLOR_MODE_AUTOMATIC) { + return KEY_COLOR_MODE_AUTOMATIC; + } else if (colorMode == ColorDisplayController.COLOR_MODE_SATURATED) { return KEY_COLOR_MODE_SATURATED; } else if (colorMode == ColorDisplayController.COLOR_MODE_BOOSTED) { return KEY_COLOR_MODE_BOOSTED; @@ -112,6 +134,9 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment case KEY_COLOR_MODE_SATURATED: mController.setColorMode(ColorDisplayController.COLOR_MODE_SATURATED); break; + case KEY_COLOR_MODE_AUTOMATIC: + mController.setColorMode(ColorDisplayController.COLOR_MODE_AUTOMATIC); + break; } return true; } diff --git a/tests/robotests/src/com/android/settings/display/ColorModePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/ColorModePreferenceControllerTest.java index 7600627b69b..a7016e97f0d 100644 --- a/tests/robotests/src/com/android/settings/display/ColorModePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/ColorModePreferenceControllerTest.java @@ -54,6 +54,16 @@ public class ColorModePreferenceControllerTest { doReturn(mColorDisplayController).when(mController).getColorDisplayController(); } + @Test + public void updateState_colorModeAutomatic_shouldSetSummaryToAutomatic() { + when(mColorDisplayController.getColorMode()) + .thenReturn(ColorDisplayController.COLOR_MODE_AUTOMATIC); + + mController.updateState(mPreference); + + verify(mPreference).setSummary(mContext.getString(R.string.color_mode_option_automatic)); + } + @Test public void updateState_colorModeSaturated_shouldSetSummaryToSaturated() { when(mColorDisplayController.getColorMode()) diff --git a/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java index 4264daa2835..80012148be6 100644 --- a/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java @@ -34,6 +34,7 @@ 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.testutils.shadow.SettingsShadowResources; import com.android.settingslib.widget.CandidateInfo; import org.junit.Before; @@ -43,11 +44,13 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; import java.util.List; @RunWith(SettingsRobolectricTestRunner.class) +@Config(shadows = SettingsShadowResources.class) public class ColorModePreferenceFragmentTest { private ColorModePreferenceFragment mFragment; @@ -73,8 +76,64 @@ public class ColorModePreferenceFragmentTest { } @Test - public void getCandidates() { + public void getCandidates_all() { 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 + }); + List candidates = mFragment.getCandidates(); + + assertThat(candidates.size()).isEqualTo(4); + assertThat(candidates.get(0).getKey()) + .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_NATURAL); + assertThat(candidates.get(1).getKey()) + .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_BOOSTED); + assertThat(candidates.get(2).getKey()) + .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_SATURATED); + assertThat(candidates.get(3).getKey()) + .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_AUTOMATIC); + } + + @Test + public void getCandidates_none() { + when(mFragment.getContext()).thenReturn(RuntimeEnvironment.application); + SettingsShadowResources.overrideResource( + com.android.internal.R.array.config_availableColorModes, null); + List candidates = mFragment.getCandidates(); + + assertThat(candidates.size()).isEqualTo(0); + } + + @Test + public void getCandidates_withAutomatic() { + 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 + }); + List candidates = mFragment.getCandidates(); + + assertThat(candidates.size()).isEqualTo(2); + assertThat(candidates.get(0).getKey()) + .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_NATURAL); + assertThat(candidates.get(1).getKey()) + .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_AUTOMATIC); + } + + @Test + public void getCandidates_withoutAutomatic() { + 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, + }); List candidates = mFragment.getCandidates(); assertThat(candidates.size()).isEqualTo(3); @@ -113,6 +172,15 @@ public class ColorModePreferenceFragmentTest { .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_SATURATED); } + @Test + public void getKey_automatic() { + when(mController.getColorMode()) + .thenReturn(ColorDisplayController.COLOR_MODE_AUTOMATIC); + + assertThat(mFragment.getDefaultKey()) + .isEqualTo(ColorModePreferenceFragment.KEY_COLOR_MODE_AUTOMATIC); + } + @Test public void setKey_natural() { mFragment.setDefaultKey(ColorModePreferenceFragment.KEY_COLOR_MODE_NATURAL); @@ -131,6 +199,12 @@ public class ColorModePreferenceFragmentTest { verify(mController).setColorMode(ColorDisplayController.COLOR_MODE_SATURATED); } + @Test + public void setKey_automatic() { + mFragment.setDefaultKey(ColorModePreferenceFragment.KEY_COLOR_MODE_AUTOMATIC); + verify(mController).setColorMode(ColorDisplayController.COLOR_MODE_AUTOMATIC); + } + @Test public void onCreatePreferences_useNewTitle_shouldAddColorModePreferences() { doNothing().when(mFragment).addPreferencesFromResource(anyInt()); diff --git a/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java index 768e6eac663..f5e6c2581c1 100644 --- a/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java +++ b/tests/robotests/src/com/android/settings/testutils/shadow/SettingsShadowResources.java @@ -135,6 +135,14 @@ public class SettingsShadowResources extends ShadowResources { || id == com.android.settings.R.array.batterymeter_plus_points) { return new int[2]; } + + final Object override; + synchronized (sResourceOverrides) { + override = sResourceOverrides.get(id); + } + if (override instanceof int[]) { + return (int[]) override; + } return directlyOn(realResources, Resources.class).getIntArray(id); }