Use label instead of raw value for theme preference summary
Change-Id: I4dd1c156c8e68dd5567093c56d5e6846357fc2d6 Fix: 38470685 Test: make RunSettingsRoboTests
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user