From c7d632d313572b6c6dedc6a3d9ec3b6cbcfcc9b4 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Mon, 22 May 2017 13:30:11 -0700 Subject: [PATCH] Use label instead of raw value for theme preference summary Change-Id: I4dd1c156c8e68dd5567093c56d5e6846357fc2d6 Fix: 38470685 Test: make RunSettingsRoboTests --- .../display/ThemePreferenceController.java | 19 +++++-- .../ThemePreferenceControllerTest.java | 51 ++++++++++++++++--- 2 files changed, 58 insertions(+), 12 deletions(-) diff --git a/src/com/android/settings/display/ThemePreferenceController.java b/src/com/android/settings/display/ThemePreferenceController.java index 99a19f8c08d..c38ed28453e 100644 --- a/src/com/android/settings/display/ThemePreferenceController.java +++ b/src/com/android/settings/display/ThemePreferenceController.java @@ -90,11 +90,20 @@ public class ThemePreferenceController extends PreferenceController implements pref.setEntries(labels); pref.setEntryValues(pkgs); String theme = getCurrentTheme(); - if (TextUtils.isEmpty(theme)) { - theme = mContext.getString(R.string.default_theme); - pref.setSummary(theme); + CharSequence themeLabel = null; + + for (int i = 0; i < pkgs.length; i++) { + if (TextUtils.equals(pkgs[i], theme)) { + themeLabel = labels[i]; + break; + } } - pref.setSummary(theme); + + if (TextUtils.isEmpty(themeLabel)) { + themeLabel = mContext.getString(R.string.default_theme); + } + + pref.setSummary(themeLabel); pref.setValue(theme); } @@ -127,7 +136,7 @@ public class ThemePreferenceController extends PreferenceController implements UserHandle.myUserId()); for (int i = 0, size = infos.size(); i < size; i++) { if (infos.get(i).isEnabled() && - isChangeableOverlay(infos.get(i).packageName)) { + isChangeableOverlay(infos.get(i).packageName)) { return infos.get(i).packageName; } } diff --git a/tests/robotests/src/com/android/settings/display/ThemePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/ThemePreferenceControllerTest.java index 2c0f4a7c2fe..4e9cedee0d0 100644 --- a/tests/robotests/src/com/android/settings/display/ThemePreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/display/ThemePreferenceControllerTest.java @@ -21,20 +21,25 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.support.v7.preference.ListPreference; + import com.android.settings.R; import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.display.ThemePreferenceController.OverlayManager; +import com.android.settings.testutils.FakeFeatureFactory; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; @@ -45,33 +50,65 @@ import static org.mockito.Mockito.when; @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) public class ThemePreferenceControllerTest { - @Mock - private ListPreference mPreference; - @Mock + @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Context mContext; @Mock private PackageManager mPackageManager; @Mock private ApplicationInfo mApplicationInfo; + @Mock + private ListPreference mPreference; private ThemePreferenceController mController; @Before public void setUp() throws NameNotFoundException { MockitoAnnotations.initMocks(this); + FakeFeatureFactory.setupForTest(mContext); when(mPackageManager.getApplicationInfo(any(), anyInt())).thenReturn(mApplicationInfo); when(mContext.getPackageManager()).thenReturn(mPackageManager); + when(mContext.getString(R.string.default_theme)) + .thenReturn(RuntimeEnvironment.application.getString(R.string.default_theme)); + mController = spy(new ThemePreferenceController(mContext, mock(OverlayManager.class))); } @Test - public void updateState_themeSet_shouldSetPreferenceValue() { - final String[] themes = {"Theme1", "Theme2"}; - doReturn("Theme1").when(mController).getCurrentTheme(); + public void updateState_themeSet_shouldSetPreferenceValue() throws NameNotFoundException { + final String pkg1 = "pkg1.theme1"; + final String pkg2 = "pkg2.theme2"; + final String themeLabel1 = "Theme1"; + final String themeLabel2 = "Theme2"; + final String[] themes = {pkg1, pkg2}; + doReturn("pkg1.theme1").when(mController).getCurrentTheme(); doReturn(themes).when(mController).getAvailableThemes(); + when(mPackageManager.getApplicationInfo(anyString(), anyInt()).loadLabel(mPackageManager)) + .thenReturn(themeLabel1) + .thenReturn(themeLabel2); mController.updateState(mPreference); - verify(mPreference).setValue("Theme1"); + verify(mPreference).setSummary(themeLabel1); + verify(mPreference).setValue(pkg1); + } + + @Test + public void updateState_themeNull_shouldSetDefaultSummary() throws NameNotFoundException { + final String pkg1 = "pkg1.theme1"; + final String pkg2 = "pkg2.theme2"; + final String themeLabel1 = "Theme1"; + final String themeLabel2 = "Theme2"; + final String[] themes = {pkg1, pkg2}; + doReturn(null).when(mController).getCurrentTheme(); + doReturn(themes).when(mController).getAvailableThemes(); + when(mPackageManager.getApplicationInfo(anyString(), anyInt()).loadLabel(mPackageManager)) + .thenReturn(themeLabel1) + .thenReturn(themeLabel2); + + mController.updateState(mPreference); + + verify(mPreference) + .setSummary(RuntimeEnvironment.application.getString(R.string.default_theme)); + verify(mPreference).setValue(null); } }