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.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);
}

View File

@@ -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);
}
}