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

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

Merge "Add subtext to Default apps." into oc-dev

parents bde7097f d007ff93
Loading
Loading
Loading
Loading
+54 −0
Original line number Diff line number Diff line
@@ -15,9 +15,11 @@
 */
package com.android.settings.applications;

import android.app.Activity;
import android.content.Context;
import android.provider.SearchIndexableResource;

import android.text.TextUtils;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController;
@@ -29,6 +31,7 @@ import com.android.settings.applications.defaultapps.DefaultWorkBrowserPreferenc
import com.android.settings.applications.defaultapps.DefaultWorkPhonePreferenceController;
import com.android.settings.core.PreferenceController;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.dashboard.SummaryLoader;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;

@@ -78,4 +81,55 @@ public class AdvancedAppSettings extends DashboardFragment {
                    return Arrays.asList(sir);
                }
            };

    static class SummaryProvider implements SummaryLoader.SummaryProvider {

        private final Context mContext;
        private final SummaryLoader mSummaryLoader;
        private final DefaultSmsPreferenceController mDefaultSmsPreferenceController;
        private final DefaultBrowserPreferenceController mDefaultBrowserPreferenceController;
        private final DefaultPhonePreferenceController mDefaultPhonePreferenceController;

        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
            mContext = context;
            mSummaryLoader = summaryLoader;
            mDefaultSmsPreferenceController = new DefaultSmsPreferenceController(mContext);
            mDefaultBrowserPreferenceController = new DefaultBrowserPreferenceController(mContext);
            mDefaultPhonePreferenceController = new DefaultPhonePreferenceController(mContext);
        }

        @Override
        public void setListening(boolean listening) {
            if (!listening) {
                return;
            }
            CharSequence summary = concatSummaryText(
                mDefaultSmsPreferenceController.getDefaultAppLabel(),
                mDefaultBrowserPreferenceController.getDefaultAppLabel());
            summary = concatSummaryText(summary,
                mDefaultPhonePreferenceController.getDefaultAppLabel());
            if (!TextUtils.isEmpty(summary)) {
                mSummaryLoader.setSummary(this, summary);
            }
        }

        private CharSequence concatSummaryText(CharSequence summary1, CharSequence summary2) {
            if (TextUtils.isEmpty(summary1)) {
                return summary2;
            }
            if (TextUtils.isEmpty(summary2)) {
                return summary1;
            }
            return mContext.getString(R.string.join_many_items_middle, summary1, summary2);
        }
    }

    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY =
        new SummaryLoader.SummaryProviderFactory() {
            @Override
            public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
                    SummaryLoader summaryLoader) {
                return new AdvancedAppSettings.SummaryProvider(activity, summaryLoader);
            }
        };
}
+12 −4
Original line number Diff line number Diff line
@@ -49,10 +49,7 @@ public abstract class DefaultAppPreferenceController extends PreferenceControlle
    @Override
    public void updateState(Preference preference) {
        final DefaultAppInfo app = getDefaultAppInfo();
        CharSequence defaultAppLabel = null;
        if (app != null) {
            defaultAppLabel = app.loadLabel();
        }
        CharSequence defaultAppLabel = getDefaultAppLabel();
        if (!TextUtils.isEmpty(defaultAppLabel)) {
            preference.setSummary(defaultAppLabel);
        } else {
@@ -84,4 +81,15 @@ public abstract class DefaultAppPreferenceController extends PreferenceControlle
        //By default return null. It's up to subclasses to provide logic.
        return null;
    }

    public CharSequence getDefaultAppLabel() {
        if (!isAvailable()) {
            return null;
        }
        final DefaultAppInfo app = getDefaultAppInfo();
        if (app != null) {
            return app.loadLabel();
        }
        return null;
    }
}
+16 −7
Original line number Diff line number Diff line
@@ -51,13 +51,9 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont
    @Override
    public void updateState(Preference preference) {
        super.updateState(preference);
        final DefaultAppInfo defaultApp = getDefaultAppInfo();
        final CharSequence defaultAppLabel = defaultApp != null ? defaultApp.loadLabel() : null;
        if (TextUtils.isEmpty(defaultAppLabel)) {
            final String onlyAppLabel = getOnlyAppLabel();
            if (!TextUtils.isEmpty(onlyAppLabel)) {
                preference.setSummary(onlyAppLabel);
            }
        final CharSequence defaultAppLabel = getDefaultAppLabel();
        if (!TextUtils.isEmpty(defaultAppLabel)) {
            preference.setSummary(defaultAppLabel);
        }
    }

@@ -72,6 +68,19 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont
        }
    }

    @Override
    public CharSequence getDefaultAppLabel() {
        if (!isAvailable()) {
            return null;
        }
        final DefaultAppInfo defaultApp = getDefaultAppInfo();
        final CharSequence defaultAppLabel = defaultApp != null ? defaultApp.loadLabel() : null;
        if (!TextUtils.isEmpty(defaultAppLabel)) {
            return defaultAppLabel;
        }
        return getOnlyAppLabel();
    }

    private List<ResolveInfo> getCandidates() {
        return mPackageManager.queryIntentActivitiesAsUser(BROWSE_PROBE, PackageManager.MATCH_ALL,
                mUserId);
+85 −5
Original line number Diff line number Diff line
@@ -22,22 +22,30 @@ import com.android.settings.R;
import com.android.settings.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;

import com.android.settings.applications.defaultapps.DefaultBrowserPreferenceController;
import com.android.settings.applications.defaultapps.DefaultPhonePreferenceController;
import com.android.settings.applications.defaultapps.DefaultSmsPreferenceController;
import com.android.settings.dashboard.SummaryLoader;
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 org.robolectric.shadows.ShadowApplication;
import org.robolectric.util.ReflectionHelpers;

import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.anyString;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class AdvancedAppSettingsTest {

    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
    private Context mContext;

    private AdvancedAppSettings mFragment;
@@ -46,8 +54,9 @@ public class AdvancedAppSettingsTest {
    public void setUp() {
        MockitoAnnotations.initMocks(this);

        mContext = RuntimeEnvironment.application;
        mFragment = new AdvancedAppSettings();
        mFragment.onAttach(ShadowApplication.getInstance().getApplicationContext());
        mFragment.onAttach(mContext);
    }

    @Test
@@ -56,4 +65,75 @@ public class AdvancedAppSettingsTest {
                R.xml.app_default_settings);
    }

    @Test
    public void setListening_shouldUpdateSummary() {
        final SummaryLoader summaryLoader = mock(SummaryLoader.class);
        final AdvancedAppSettings.SummaryProvider summaryProvider =
            new AdvancedAppSettings.SummaryProvider(mContext, summaryLoader);
        final DefaultSmsPreferenceController defaultSms =
            mock(DefaultSmsPreferenceController.class);
        final DefaultBrowserPreferenceController defaultBrowser =
            mock(DefaultBrowserPreferenceController.class);
        final DefaultPhonePreferenceController defaultPhone =
            mock(DefaultPhonePreferenceController.class);
        ReflectionHelpers.setField(summaryProvider, "mDefaultSmsPreferenceController", defaultSms);
        ReflectionHelpers.setField(
            summaryProvider, "mDefaultBrowserPreferenceController", defaultBrowser);
        ReflectionHelpers.setField(
            summaryProvider, "mDefaultPhonePreferenceController", defaultPhone);

        // all available
        when(defaultSms.getDefaultAppLabel()).thenReturn("Sms1");
        when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
        when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
        summaryProvider.setListening(true);
        verify(summaryLoader).setSummary(summaryProvider, "Sms1, Browser1, Phone1");

        // 2 available
        when(defaultSms.getDefaultAppLabel()).thenReturn(null);
        when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
        when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
        summaryProvider.setListening(true);
        verify(summaryLoader).setSummary(summaryProvider, "Browser1, Phone1");

        when(defaultSms.getDefaultAppLabel()).thenReturn("Sms1");
        when(defaultBrowser.getDefaultAppLabel()).thenReturn(null);
        when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
        summaryProvider.setListening(true);
        verify(summaryLoader).setSummary(summaryProvider, "Sms1, Phone1");

        when(defaultSms.getDefaultAppLabel()).thenReturn("Sms1");
        when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
        when(defaultPhone.getDefaultAppLabel()).thenReturn(null);
        summaryProvider.setListening(true);
        verify(summaryLoader).setSummary(summaryProvider, "Sms1, Browser1");

        // 1 available
        when(defaultSms.getDefaultAppLabel()).thenReturn(null);
        when(defaultBrowser.getDefaultAppLabel()).thenReturn("Browser1");
        when(defaultPhone.getDefaultAppLabel()).thenReturn(null);
        summaryProvider.setListening(true);
        verify(summaryLoader).setSummary(summaryProvider, "Browser1");

        when(defaultSms.getDefaultAppLabel()).thenReturn("Sms1");
        when(defaultBrowser.getDefaultAppLabel()).thenReturn(null);
        when(defaultPhone.getDefaultAppLabel()).thenReturn(null);
        summaryProvider.setListening(true);
        verify(summaryLoader).setSummary(summaryProvider, "Sms1");

        when(defaultSms.getDefaultAppLabel()).thenReturn(null);
        when(defaultBrowser.getDefaultAppLabel()).thenReturn(null);
        when(defaultPhone.getDefaultAppLabel()).thenReturn("Phone1");
        summaryProvider.setListening(true);
        verify(summaryLoader).setSummary(summaryProvider, "Phone1");

        // None available
        when(defaultSms.getDefaultAppLabel()).thenReturn(null);
        when(defaultBrowser.getDefaultAppLabel()).thenReturn(null);
        when(defaultPhone.getDefaultAppLabel()).thenReturn(null);
        summaryProvider.setListening(true);
        verify(summaryLoader, never()).setSummary(summaryProvider, eq(anyString()));

    }

}