Use label instead of raw value for theme preference summary

Change-Id: I4dd1c156c8e68dd5567093c56d5e6846357fc2d6
Fix: 38470685
Test: make RunSettingsRoboTests
This commit is contained in:
Fan Zhang
2017-05-22 13:30:11 -07:00
parent 7983dba5f6
commit c7d632d313
2 changed files with 58 additions and 12 deletions

View File

@@ -90,11 +90,20 @@ public class ThemePreferenceController extends PreferenceController implements
pref.setEntries(labels); pref.setEntries(labels);
pref.setEntryValues(pkgs); pref.setEntryValues(pkgs);
String theme = getCurrentTheme(); String theme = getCurrentTheme();
if (TextUtils.isEmpty(theme)) { CharSequence themeLabel = null;
theme = mContext.getString(R.string.default_theme);
pref.setSummary(theme); 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); pref.setValue(theme);
} }
@@ -127,7 +136,7 @@ public class ThemePreferenceController extends PreferenceController implements
UserHandle.myUserId()); UserHandle.myUserId());
for (int i = 0, size = infos.size(); i < size; i++) { for (int i = 0, size = infos.size(); i < size; i++) {
if (infos.get(i).isEnabled() && if (infos.get(i).isEnabled() &&
isChangeableOverlay(infos.get(i).packageName)) { isChangeableOverlay(infos.get(i).packageName)) {
return infos.get(i).packageName; return infos.get(i).packageName;
} }
} }

View File

@@ -21,20 +21,25 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageManager.NameNotFoundException;
import android.support.v7.preference.ListPreference; import android.support.v7.preference.ListPreference;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.SettingsRobolectricTestRunner; import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig; import com.android.settings.TestConfig;
import com.android.settings.display.ThemePreferenceController.OverlayManager; import com.android.settings.display.ThemePreferenceController.OverlayManager;
import com.android.settings.testutils.FakeFeatureFactory;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Answers;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import static org.mockito.Matchers.any; import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyInt;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy; 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) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class ThemePreferenceControllerTest { public class ThemePreferenceControllerTest {
@Mock @Mock(answer = Answers.RETURNS_DEEP_STUBS)
private ListPreference mPreference;
@Mock
private Context mContext; private Context mContext;
@Mock @Mock
private PackageManager mPackageManager; private PackageManager mPackageManager;
@Mock @Mock
private ApplicationInfo mApplicationInfo; private ApplicationInfo mApplicationInfo;
@Mock
private ListPreference mPreference;
private ThemePreferenceController mController; private ThemePreferenceController mController;
@Before @Before
public void setUp() throws NameNotFoundException { public void setUp() throws NameNotFoundException {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
FakeFeatureFactory.setupForTest(mContext);
when(mPackageManager.getApplicationInfo(any(), anyInt())).thenReturn(mApplicationInfo); when(mPackageManager.getApplicationInfo(any(), anyInt())).thenReturn(mApplicationInfo);
when(mContext.getPackageManager()).thenReturn(mPackageManager); 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))); mController = spy(new ThemePreferenceController(mContext, mock(OverlayManager.class)));
} }
@Test @Test
public void updateState_themeSet_shouldSetPreferenceValue() { public void updateState_themeSet_shouldSetPreferenceValue() throws NameNotFoundException {
final String[] themes = {"Theme1", "Theme2"}; final String pkg1 = "pkg1.theme1";
doReturn("Theme1").when(mController).getCurrentTheme(); 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(); doReturn(themes).when(mController).getAvailableThemes();
when(mPackageManager.getApplicationInfo(anyString(), anyInt()).loadLabel(mPackageManager))
.thenReturn(themeLabel1)
.thenReturn(themeLabel2);
mController.updateState(mPreference); 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);
} }
} }