Loading src/com/android/settings/applications/AdvancedAppSettings.java +54 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } }; } src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java +12 −4 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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; } } src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java +16 −7 Original line number Diff line number Diff line Loading @@ -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); } } Loading @@ -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); Loading tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java +85 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -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())); } } Loading
src/com/android/settings/applications/AdvancedAppSettings.java +54 −0 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } }; }
src/com/android/settings/applications/defaultapps/DefaultAppPreferenceController.java +12 −4 Original line number Diff line number Diff line Loading @@ -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 { Loading Loading @@ -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; } }
src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java +16 −7 Original line number Diff line number Diff line Loading @@ -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); } } Loading @@ -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); Loading
tests/robotests/src/com/android/settings/applications/AdvancedAppSettingsTest.java +85 −5 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading @@ -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())); } }