diff --git a/res/layout/color_mode_preview.xml b/res/layout/color_mode_preview.xml new file mode 100644 index 00000000000..bcd385dcc24 --- /dev/null +++ b/res/layout/color_mode_preview.xml @@ -0,0 +1,30 @@ + + + + + + + + diff --git a/res/values/dimens.xml b/res/values/dimens.xml index 6ede7c644af..bf10008464b 100755 --- a/res/values/dimens.xml +++ b/res/values/dimens.xml @@ -60,6 +60,9 @@ 200dp + 320dp + 40dp + 4dp 0dip diff --git a/src/com/android/settings/display/ColorModePreferenceFragment.java b/src/com/android/settings/display/ColorModePreferenceFragment.java index ea8dd6a8ab2..f1bb6e1e996 100644 --- a/src/com/android/settings/display/ColorModePreferenceFragment.java +++ b/src/com/android/settings/display/ColorModePreferenceFragment.java @@ -16,10 +16,12 @@ package com.android.settings.display; import android.content.Context; import android.graphics.drawable.Drawable; import android.support.annotation.VisibleForTesting; +import android.support.v7.preference.PreferenceScreen; import com.android.internal.app.ColorDisplayController; 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.settingslib.widget.CandidateInfo; @@ -50,6 +52,19 @@ public class ColorModePreferenceFragment extends RadioButtonPickerFragment { return R.xml.color_mode_settings; } + @VisibleForTesting + void configureAndInstallPreview(LayoutPreference preview, PreferenceScreen screen) { + preview.setSelectable(false); + screen.addPreference(preview); + } + + @Override + protected void addStaticPreferences(PreferenceScreen screen) { + final LayoutPreference preview = new LayoutPreference(screen.getContext(), + R.layout.color_mode_preview); + configureAndInstallPreview(preview, screen); + } + @Override protected List getCandidates() { Context c = getContext(); diff --git a/src/com/android/settings/widget/RadioButtonPickerFragment.java b/src/com/android/settings/widget/RadioButtonPickerFragment.java index 069d4611892..1465c60d6f3 100644 --- a/src/com/android/settings/widget/RadioButtonPickerFragment.java +++ b/src/com/android/settings/widget/RadioButtonPickerFragment.java @@ -101,6 +101,13 @@ public abstract class RadioButtonPickerFragment extends InstrumentedPreferenceFr return false; } + /** + * Populate any static preferences, independent of the radio buttons. + * These might be used to provide extra information about the choices. + **/ + protected void addStaticPreferences(PreferenceScreen screen) { + } + protected CandidateInfo getCandidate(String key) { return mCandidates.get(key); } @@ -134,6 +141,7 @@ public abstract class RadioButtonPickerFragment extends InstrumentedPreferenceFr final String systemDefaultKey = getSystemDefaultKey(); final PreferenceScreen screen = getPreferenceScreen(); screen.removeAll(); + addStaticPreferences(screen); final int customLayoutResId = getRadioButtonPreferenceCustomLayoutResId(); if (shouldShowItemNone()) { diff --git a/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java b/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java index 68937b2f1c0..1ed691b2658 100644 --- a/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java +++ b/tests/robotests/src/com/android/settings/display/ColorModePreferenceFragmentTest.java @@ -20,13 +20,17 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.os.Bundle; +import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceScreen; import com.android.internal.app.ColorDisplayController; import com.android.internal.logging.nano.MetricsProto; +import com.android.settings.applications.LayoutPreference; import com.android.settings.R; import com.android.settings.TestConfig; import com.android.settings.testutils.SettingsRobolectricTestRunner; @@ -37,6 +41,7 @@ import com.android.settingslib.widget.CandidateInfo; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; @@ -145,4 +150,17 @@ public class ColorModePreferenceFragmentTest { verify(mFragment).addPreferencesFromResource(R.xml.color_mode_settings); } + @Test + public void addStaticPreferences_shouldAddPreviewImage() { + PreferenceScreen mockPreferenceScreen = Mockito.mock(PreferenceScreen.class); + LayoutPreference mockPreview = Mockito.mock(LayoutPreference.class); + + ArgumentCaptor preferenceCaptor = ArgumentCaptor.forClass(Preference.class); + + mFragment.configureAndInstallPreview(mockPreview, mockPreferenceScreen); + Mockito.verify(mockPreview, times(1)).setSelectable(false); + Mockito.verify(mockPreferenceScreen, times(1)).addPreference(preferenceCaptor.capture()); + + assertThat(preferenceCaptor.getValue()).isEqualTo(mockPreview); + } }