Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e2878ff1 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Use label instead of raw value for theme preference summary"

parents 78c89c4d c7d632d3
Loading
Loading
Loading
Loading
+14 −5
Original line number Diff line number Diff line
@@ -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);
    }

+44 −7
Original line number Diff line number Diff line
@@ -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).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).setValue("Theme1");
        verify(mPreference)
                .setSummary(RuntimeEnvironment.application.getString(R.string.default_theme));
        verify(mPreference).setValue(null);
    }
}