diff options
22 files changed, 121 insertions, 102 deletions
diff --git a/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java b/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java index 07f4c37cab..f66a5e2256 100644 --- a/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java +++ b/src/com/android/settings/accessibility/ShortcutServicePickerFragment.java @@ -23,6 +23,7 @@ import android.app.Dialog; import android.app.DialogFragment; import android.app.Fragment; import android.content.ComponentName; +import android.content.Context; import android.content.DialogInterface; import android.os.Binder; import android.os.Bundle; @@ -54,7 +55,8 @@ public class ShortcutServicePickerFragment extends DefaultAppPickerFragment { @Override protected List<? extends DefaultAppInfo> getCandidates() { - final AccessibilityManager accessibilityManager = getContext() + final Context context = getContext(); + final AccessibilityManager accessibilityManager = context .getSystemService(AccessibilityManager.class); final List<AccessibilityServiceInfo> installedServices = accessibilityManager.getInstalledAccessibilityServiceList(); @@ -63,7 +65,7 @@ public class ShortcutServicePickerFragment extends DefaultAppPickerFragment { List<DefaultAppInfo> candidates = new ArrayList<>(numInstalledServices); for (int i = 0; i < numInstalledServices; i++) { AccessibilityServiceInfo installedServiceInfo = installedServices.get(i); - candidates.add(new DefaultAppInfo(mPm, + candidates.add(new DefaultAppInfo(context, mPm, UserHandle.myUserId(), installedServiceInfo.getComponentName(), (String) installedServiceInfo.loadSummary(mPm.getPackageManager()), diff --git a/src/com/android/settings/applications/assist/DefaultAssistPicker.java b/src/com/android/settings/applications/assist/DefaultAssistPicker.java index 51cb67740b..07bc809b0c 100644 --- a/src/com/android/settings/applications/assist/DefaultAssistPicker.java +++ b/src/com/android/settings/applications/assist/DefaultAssistPicker.java @@ -79,7 +79,7 @@ public class DefaultAssistPicker extends DefaultAppPickerFragment { continue; } packages.add(packageName); - candidates.add(new DefaultAppInfo(mPm, mUserId, info.component)); + candidates.add(new DefaultAppInfo(getContext(), mPm, mUserId, info.component)); } return candidates; } @@ -88,7 +88,7 @@ public class DefaultAssistPicker extends DefaultAppPickerFragment { protected String getDefaultKey() { final ComponentName cn = getCurrentAssist(); if (cn != null) { - return new DefaultAppInfo(mPm, mUserId, cn).getKey(); + return new DefaultAppInfo(getContext(), mPm, mUserId, cn).getKey(); } return null; } diff --git a/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java b/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java index 7520155099..cba08c89bf 100644 --- a/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java +++ b/src/com/android/settings/applications/assist/DefaultAssistPreferenceController.java @@ -87,7 +87,7 @@ public class DefaultAssistPreferenceController extends DefaultAppPreferenceContr if (cn == null) { return null; } - return new DefaultAppInfo(mPackageManager, mUserId, cn); + return new DefaultAppInfo(mContext, mPackageManager, mUserId, cn); } @VisibleForTesting diff --git a/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java b/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java index c1fc528663..5adda23848 100644 --- a/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java +++ b/src/com/android/settings/applications/assist/DefaultVoiceInputPicker.java @@ -57,17 +57,18 @@ public class DefaultVoiceInputPicker extends DefaultAppPickerFragment { @Override protected List<VoiceInputDefaultAppInfo> getCandidates() { final List<VoiceInputDefaultAppInfo> candidates = new ArrayList<>(); + final Context context = getContext(); boolean hasEnabled = true; for (VoiceInputHelper.InteractionInfo info : mHelper.mAvailableInteractionInfos) { final boolean enabled = TextUtils.equals(info.key, mAssistRestrict); hasEnabled |= enabled; - candidates.add(new VoiceInputDefaultAppInfo(mPm, mUserId, info, enabled)); + candidates.add(new VoiceInputDefaultAppInfo(context, mPm, mUserId, info, enabled)); } final boolean assistIsService = !hasEnabled; for (VoiceInputHelper.RecognizerInfo info : mHelper.mAvailableRecognizerInfos) { final boolean enabled = !assistIsService; - candidates.add(new VoiceInputDefaultAppInfo(mPm, mUserId, info, enabled)); + candidates.add(new VoiceInputDefaultAppInfo(context, mPm, mUserId, info, enabled)); } return candidates; } @@ -132,9 +133,9 @@ public class DefaultVoiceInputPicker extends DefaultAppPickerFragment { public VoiceInputHelper.BaseInfo mInfo; - public VoiceInputDefaultAppInfo(PackageManagerWrapper pm, int userId, + public VoiceInputDefaultAppInfo(Context context, PackageManagerWrapper pm, int userId, VoiceInputHelper.BaseInfo info, boolean enabled) { - super(pm, userId, info.componentName, null /* summary */, enabled); + super(context, pm, userId, info.componentName, null /* summary */, enabled); mInfo = info; } diff --git a/src/com/android/settings/applications/assist/DefaultVoiceInputPreferenceController.java b/src/com/android/settings/applications/assist/DefaultVoiceInputPreferenceController.java index 3443a44d77..c305ccf837 100644 --- a/src/com/android/settings/applications/assist/DefaultVoiceInputPreferenceController.java +++ b/src/com/android/settings/applications/assist/DefaultVoiceInputPreferenceController.java @@ -104,15 +104,15 @@ public class DefaultVoiceInputPreferenceController extends DefaultAppPreferenceC } for (VoiceInputHelper.InteractionInfo info : mHelper.mAvailableInteractionInfos) { if (TextUtils.equals(defaultKey, info.key)) { - return new DefaultVoiceInputPicker.VoiceInputDefaultAppInfo(mPackageManager, - mUserId, info, true /* enabled */); + return new DefaultVoiceInputPicker.VoiceInputDefaultAppInfo(mContext, + mPackageManager, mUserId, info, true /* enabled */); } } for (VoiceInputHelper.RecognizerInfo info : mHelper.mAvailableRecognizerInfos) { if (TextUtils.equals(defaultKey, info.key)) { - return new DefaultVoiceInputPicker.VoiceInputDefaultAppInfo(mPackageManager, - mUserId, info, true /* enabled */); + return new DefaultVoiceInputPicker.VoiceInputDefaultAppInfo(mContext, + mPackageManager, mUserId, info, true /* enabled */); } } return null; diff --git a/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java b/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java index ec44af4f87..71b5ec4d60 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java +++ b/src/com/android/settings/applications/defaultapps/DefaultAppInfo.java @@ -18,6 +18,7 @@ package com.android.settings.applications.defaultapps; import android.app.AppGlobals; import android.content.ComponentName; +import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.ComponentInfo; import android.content.pm.PackageItemInfo; @@ -25,6 +26,7 @@ import android.content.pm.PackageManager; import android.graphics.drawable.Drawable; import android.os.RemoteException; import android.os.UserHandle; +import android.util.IconDrawableFactory; import com.android.settings.widget.RadioButtonPickerFragment; import com.android.settingslib.wrapper.PackageManagerWrapper; @@ -39,18 +41,20 @@ public class DefaultAppInfo extends RadioButtonPickerFragment.CandidateInfo { public final PackageItemInfo packageItemInfo; public final String summary; protected final PackageManagerWrapper mPm; + private final Context mContext; - public DefaultAppInfo(PackageManagerWrapper pm, int uid, ComponentName cn) { - this(pm, uid, cn, null /* summary */); + public DefaultAppInfo(Context context, PackageManagerWrapper pm, int uid, ComponentName cn) { + this(context, pm, uid, cn, null /* summary */, true /* enabled */); } - public DefaultAppInfo(PackageManagerWrapper pm, int uid, ComponentName cn, String summary) { - this(pm, uid, cn, summary, true /* enabled */); + public DefaultAppInfo(Context context, PackageManagerWrapper pm, PackageItemInfo info) { + this(context, pm, info, null /* summary */, true /* enabled */); } - public DefaultAppInfo(PackageManagerWrapper pm, int uid, ComponentName cn, String summary, - boolean enabled) { + public DefaultAppInfo(Context context, PackageManagerWrapper pm, int uid, ComponentName cn, + String summary, boolean enabled) { super(enabled); + mContext = context; mPm = pm; packageItemInfo = null; userId = uid; @@ -58,9 +62,10 @@ public class DefaultAppInfo extends RadioButtonPickerFragment.CandidateInfo { this.summary = summary; } - public DefaultAppInfo(PackageManagerWrapper pm, PackageItemInfo info, String summary, - boolean enabled) { + public DefaultAppInfo(Context context, PackageManagerWrapper pm, PackageItemInfo info, + String summary, boolean enabled) { super(enabled); + mContext = context; mPm = pm; userId = UserHandle.myUserId(); packageItemInfo = info; @@ -68,10 +73,6 @@ public class DefaultAppInfo extends RadioButtonPickerFragment.CandidateInfo { this.summary = summary; } - public DefaultAppInfo(PackageManagerWrapper pm, PackageItemInfo info) { - this(pm, info, null /* summary */, true /* enabled */); - } - @Override public CharSequence loadLabel() { if (componentName != null) { @@ -97,22 +98,29 @@ public class DefaultAppInfo extends RadioButtonPickerFragment.CandidateInfo { @Override public Drawable loadIcon() { + final IconDrawableFactory factory = IconDrawableFactory.newInstance(mContext); if (componentName != null) { try { final ComponentInfo componentInfo = getComponentInfo(); + final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser( + componentName.getPackageName(), 0, userId); if (componentInfo != null) { - return componentInfo.loadIcon(mPm.getPackageManager()); + return factory.getBadgedIcon(componentInfo, appInfo, userId); } else { - final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser( - componentName.getPackageName(), 0, userId); - return appInfo.loadIcon(mPm.getPackageManager()); + return factory.getBadgedIcon(appInfo); } } catch (PackageManager.NameNotFoundException e) { return null; } } if (packageItemInfo != null) { - return packageItemInfo.loadIcon(mPm.getPackageManager()); + try { + final ApplicationInfo appInfo = mPm.getApplicationInfoAsUser( + packageItemInfo.packageName, 0, userId); + return factory.getBadgedIcon(packageItemInfo, appInfo, userId); + } catch (PackageManager.NameNotFoundException e) { + return null; + } } else { return null; } diff --git a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java index 34d13388ed..cc85f77e4e 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java +++ b/src/com/android/settings/applications/defaultapps/DefaultAutofillPicker.java @@ -187,10 +187,11 @@ public class DefaultAutofillPicker extends DefaultAppPickerFragment { final List<DefaultAppInfo> candidates = new ArrayList<>(); final List<ResolveInfo> resolveInfos = mPm.getPackageManager() .queryIntentServices(AUTOFILL_PROBE, PackageManager.GET_META_DATA); + final Context context = getContext(); for (ResolveInfo info : resolveInfos) { final String permission = info.serviceInfo.permission; if (Manifest.permission.BIND_AUTOFILL_SERVICE.equals(permission)) { - candidates.add(new DefaultAppInfo(mPm, mUserId, new ComponentName( + candidates.add(new DefaultAppInfo(context, mPm, mUserId, new ComponentName( info.serviceInfo.packageName, info.serviceInfo.name))); } } diff --git a/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java index 30aaf646cc..508cc63cfc 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultAutofillPreferenceController.java @@ -62,7 +62,7 @@ public class DefaultAutofillPreferenceController extends DefaultAppPreferenceCon final String flattenComponent = Settings.Secure.getString(mContext.getContentResolver(), DefaultAutofillPicker.SETTING); if (!TextUtils.isEmpty(flattenComponent)) { - DefaultAppInfo appInfo = new DefaultAppInfo(mPackageManager, + DefaultAppInfo appInfo = new DefaultAppInfo(mContext, mPackageManager, mUserId, ComponentName.unflattenFromString(flattenComponent)); return appInfo; } diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java index e9650523bd..fb9c3bfdf2 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java +++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java @@ -16,6 +16,7 @@ package com.android.settings.applications.defaultapps; +import android.content.Context; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; @@ -47,7 +48,7 @@ public class DefaultBrowserPicker extends DefaultAppPickerFragment { @Override protected List<DefaultAppInfo> getCandidates() { final List<DefaultAppInfo> candidates = new ArrayList<>(); - + final Context context = getContext(); // Resolve that intent and check that the handleAllWebDataURI boolean is set final List<ResolveInfo> list = mPm.queryIntentActivitiesAsUser( DefaultBrowserPreferenceController.BROWSE_PROBE, PackageManager.MATCH_ALL, mUserId); @@ -59,7 +60,7 @@ public class DefaultBrowserPicker extends DefaultAppPickerFragment { continue; } try { - candidates.add(new DefaultAppInfo(mPm, + candidates.add(new DefaultAppInfo(context, mPm, mPm.getApplicationInfoAsUser(info.activityInfo.packageName, 0, mUserId))); } catch (PackageManager.NameNotFoundException e) { // Skip unknown packages. diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java index a0bf0caf42..6d603c5002 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java @@ -67,7 +67,7 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont try { final String packageName = mPackageManager.getDefaultBrowserPackageNameAsUser(mUserId); Log.d(TAG, "Get default browser package: " + packageName); - return new DefaultAppInfo(mPackageManager, + return new DefaultAppInfo(mContext, mPackageManager, mPackageManager.getPackageManager().getApplicationInfo(packageName, 0)); } catch (PackageManager.NameNotFoundException e) { return null; diff --git a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java index 1d707dfef6..8f8c64e41e 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java +++ b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java @@ -17,6 +17,7 @@ package com.android.settings.applications.defaultapps; import android.content.ContentResolver; +import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -44,12 +45,13 @@ public class DefaultEmergencyPicker extends DefaultAppPickerFragment { final List<ResolveInfo> infos = mPm.getPackageManager().queryIntentActivities( DefaultEmergencyPreferenceController.QUERY_INTENT, 0); PackageInfo bestMatch = null; + final Context context = getContext(); for (ResolveInfo info : infos) { try { final PackageInfo packageInfo = mPm.getPackageManager().getPackageInfo(info.activityInfo.packageName, 0); final ApplicationInfo appInfo = packageInfo.applicationInfo; - candidates.add(new DefaultAppInfo(mPm, appInfo)); + candidates.add(new DefaultAppInfo(context, mPm, appInfo)); // Get earliest installed system app. if (isSystemApp(appInfo) && (bestMatch == null || bestMatch.firstInstallTime > packageInfo.firstInstallTime)) { diff --git a/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java b/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java index dca7ad1858..75f5292b5e 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java +++ b/src/com/android/settings/applications/defaultapps/DefaultHomePicker.java @@ -53,6 +53,7 @@ public class DefaultHomePicker extends DefaultAppPickerFragment { final boolean mustSupportManagedProfile = hasManagedProfile(); final List<DefaultAppInfo> candidates = new ArrayList<>(); final List<ResolveInfo> homeActivities = new ArrayList<>(); + final Context context = getContext(); mPm.getHomeActivities(homeActivities); for (ResolveInfo resolveInfo : homeActivities) { @@ -71,7 +72,7 @@ public class DefaultHomePicker extends DefaultAppPickerFragment { summary = null; } final DefaultAppInfo candidate = - new DefaultAppInfo(mPm, mUserId, activityName, summary, enabled); + new DefaultAppInfo(context, mPm, mUserId, activityName, summary, enabled); candidates.add(candidate); } return candidates; diff --git a/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java index 1b229e8d3e..bd8b5d1fa7 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultHomePreferenceController.java @@ -61,11 +61,12 @@ public class DefaultHomePreferenceController extends DefaultAppPreferenceControl final ArrayList<ResolveInfo> homeActivities = new ArrayList<>(); final ComponentName currentDefaultHome = mPackageManager.getHomeActivities(homeActivities); if (currentDefaultHome != null) { - return new DefaultAppInfo(mPackageManager, mUserId, currentDefaultHome); + return new DefaultAppInfo(mContext, mPackageManager, mUserId, currentDefaultHome); } final ActivityInfo onlyAppInfo = getOnlyAppInfo(); if (onlyAppInfo != null) { - return new DefaultAppInfo(mPackageManager, mUserId, onlyAppInfo.getComponentName()); + return new DefaultAppInfo(mContext, mPackageManager, mUserId, + onlyAppInfo.getComponentName()); } return null; } diff --git a/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java b/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java index fc643c86e8..9f6cc4d091 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java +++ b/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java @@ -48,9 +48,10 @@ public class DefaultPhonePicker extends DefaultAppPickerFragment { final List<DefaultAppInfo> candidates = new ArrayList<>(); final List<String> dialerPackages = DefaultDialerManager.getInstalledDialerApplications(getContext(), mUserId); + final Context context = getContext(); for (String packageName : dialerPackages) { try { - candidates.add(new DefaultAppInfo(mPm, + candidates.add(new DefaultAppInfo(context, mPm, mPm.getApplicationInfoAsUser(packageName, 0, mUserId))); } catch (PackageManager.NameNotFoundException e) { // Skip unknown packages. diff --git a/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java index 712badbc6e..92c9386ea5 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java @@ -57,7 +57,7 @@ public class DefaultPhonePreferenceController extends DefaultAppPreferenceContro @Override protected DefaultAppInfo getDefaultAppInfo() { try { - return new DefaultAppInfo(mPackageManager, + return new DefaultAppInfo(mContext, mPackageManager, mPackageManager.getPackageManager().getApplicationInfo( DefaultDialerManager.getDefaultDialerApplication(mContext, mUserId), 0)); diff --git a/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java b/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java index 966cd430ac..57159b3241 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java +++ b/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java @@ -41,13 +41,14 @@ public class DefaultSmsPicker extends DefaultAppPickerFragment { @Override protected List<DefaultAppInfo> getCandidates() { + final Context context = getContext(); final Collection<SmsApplication.SmsApplicationData> smsApplications = - SmsApplication.getApplicationCollection(getContext()); + SmsApplication.getApplicationCollection(context); final List<DefaultAppInfo> candidates = new ArrayList<>(smsApplications.size()); for (SmsApplication.SmsApplicationData smsApplicationData : smsApplications) { try { - candidates.add(new DefaultAppInfo(mPm, + candidates.add(new DefaultAppInfo(context, mPm, mPm.getApplicationInfoAsUser(smsApplicationData.mPackageName, 0, mUserId))); } catch (PackageManager.NameNotFoundException e) { // Skip unknown packages. diff --git a/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java b/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java index 63075b903b..c3b7ac4d72 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultSmsPreferenceController.java @@ -47,7 +47,7 @@ public class DefaultSmsPreferenceController extends DefaultAppPreferenceControll protected DefaultAppInfo getDefaultAppInfo() { final ComponentName app = SmsApplication.getDefaultSmsApplication(mContext, true); if (app != null) { - return new DefaultAppInfo(mPackageManager, mUserId, app); + return new DefaultAppInfo(mContext, mPackageManager, mUserId, app); } return null; } diff --git a/src/com/android/settings/development/WebViewAppPreferenceControllerV2.java b/src/com/android/settings/development/WebViewAppPreferenceControllerV2.java index 87ddb81670..d061281d92 100644 --- a/src/com/android/settings/development/WebViewAppPreferenceControllerV2.java +++ b/src/com/android/settings/development/WebViewAppPreferenceControllerV2.java @@ -85,7 +85,7 @@ public class WebViewAppPreferenceControllerV2 extends @VisibleForTesting DefaultAppInfo getDefaultAppInfo() { final PackageInfo currentPackage = mWebViewUpdateServiceWrapper.getCurrentWebViewPackage(); - return new DefaultAppInfo(mPackageManager, + return new DefaultAppInfo(mContext, mPackageManager, currentPackage == null ? null : currentPackage.applicationInfo); } diff --git a/src/com/android/settings/webview/WebViewAppPicker.java b/src/com/android/settings/webview/WebViewAppPicker.java index 362ca1f253..536cd8b0a8 100644 --- a/src/com/android/settings/webview/WebViewAppPicker.java +++ b/src/com/android/settings/webview/WebViewAppPicker.java @@ -60,12 +60,13 @@ public class WebViewAppPicker extends DefaultAppPickerFragment { @Override protected List<DefaultAppInfo> getCandidates() { final List<DefaultAppInfo> packageInfoList = new ArrayList<DefaultAppInfo>(); - List<ApplicationInfo> pkgs = - getWebViewUpdateServiceWrapper().getValidWebViewApplicationInfos(getContext()); + final Context context = getContext(); + final WebViewUpdateServiceWrapper webViewUpdateService = getWebViewUpdateServiceWrapper(); + final List<ApplicationInfo> pkgs = + webViewUpdateService.getValidWebViewApplicationInfos(context); for (ApplicationInfo ai : pkgs) { - packageInfoList.add(createDefaultAppInfo(mPm, ai, - getDisabledReason(getWebViewUpdateServiceWrapper(), - getContext(), ai.packageName))); + packageInfoList.add(createDefaultAppInfo(context, mPm, ai, + getDisabledReason(webViewUpdateService, context, ai.packageName))); } return packageInfoList; } @@ -112,9 +113,9 @@ public class WebViewAppPicker extends DefaultAppPickerFragment { } private static class WebViewAppInfo extends DefaultAppInfo { - public WebViewAppInfo(PackageManagerWrapper pm, PackageItemInfo packageItemInfo, - String summary, boolean enabled) { - super(pm, packageItemInfo, summary, enabled); + public WebViewAppInfo(Context context, PackageManagerWrapper pm, + PackageItemInfo packageItemInfo, String summary, boolean enabled) { + super(context, pm, packageItemInfo, summary, enabled); } @Override @@ -131,9 +132,9 @@ public class WebViewAppPicker extends DefaultAppPickerFragment { @VisibleForTesting - DefaultAppInfo createDefaultAppInfo(PackageManagerWrapper pm, PackageItemInfo packageItemInfo, - String disabledReason) { - return new WebViewAppInfo(pm, packageItemInfo, disabledReason, + DefaultAppInfo createDefaultAppInfo(Context context, PackageManagerWrapper pm, + PackageItemInfo packageItemInfo, String disabledReason) { + return new WebViewAppInfo(context, pm, packageItemInfo, disabledReason, TextUtils.isEmpty(disabledReason) /* enabled */); } diff --git a/src/com/android/settings/webview/WebViewAppPreferenceController.java b/src/com/android/settings/webview/WebViewAppPreferenceController.java index 96db801c06..9410af786c 100644 --- a/src/com/android/settings/webview/WebViewAppPreferenceController.java +++ b/src/com/android/settings/webview/WebViewAppPreferenceController.java @@ -46,7 +46,7 @@ public class WebViewAppPreferenceController extends DefaultAppPreferenceControll @Override public DefaultAppInfo getDefaultAppInfo() { PackageInfo currentPackage = mWebViewUpdateServiceWrapper.getCurrentWebViewPackage(); - return new DefaultAppInfo(mPackageManager, + return new DefaultAppInfo(mContext, mPackageManager, currentPackage == null ? null : currentPackage.applicationInfo); } diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java index 0ae96159e9..d4cd6dab7f 100644 --- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java +++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultAppInfoTest.java @@ -21,11 +21,13 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.ComponentName; +import android.content.Context; import android.content.pm.PackageItemInfo; import android.content.pm.PackageManager; +import android.graphics.drawable.Drawable; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settingslib.wrapper.PackageManagerWrapper; import org.junit.Before; @@ -33,6 +35,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; @RunWith(SettingsRobolectricTestRunner.class) @@ -48,31 +51,33 @@ public class DefaultAppInfoTest { @Mock private PackageManagerWrapper mPackageManagerWrapper; + private Context mContext; private DefaultAppInfo mInfo; @Before public void setUp() { MockitoAnnotations.initMocks(this); + mContext = RuntimeEnvironment.application; when(mPackageManagerWrapper.getPackageManager()).thenReturn(mPackageManager); } @Test public void initInfoWithActivityInfo_shouldLoadInfo() { mPackageItemInfo.packageName = "test"; - mInfo = new DefaultAppInfo(mPackageManagerWrapper, mPackageItemInfo); + mInfo = new DefaultAppInfo(mContext, mPackageManagerWrapper, mPackageItemInfo); mInfo.loadLabel(); - mInfo.loadIcon(); + Drawable icon = mInfo.loadIcon(); assertThat(mInfo.getKey()).isEqualTo(mPackageItemInfo.packageName); + assertThat(icon).isNotNull(); verify(mPackageItemInfo).loadLabel(mPackageManager); - verify(mPackageItemInfo).loadIcon(mPackageManager); } @Test public void initInfoWithComponent_shouldLoadInfo() { when(mComponentName.getPackageName()).thenReturn("com.android.settings"); - mInfo = new DefaultAppInfo(mPackageManagerWrapper, 0 /* uid */, mComponentName); + mInfo = new DefaultAppInfo(mContext, mPackageManagerWrapper, 0 /* uid */, mComponentName); mInfo.getKey(); verify(mComponentName).flattenToString(); diff --git a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java index 73d001acb2..470b69ca65 100644 --- a/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java +++ b/tests/robotests/src/com/android/settings/webview/WebViewAppPickerTest.java @@ -16,6 +16,20 @@ package com.android.settings.webview; +import static android.provider.Settings.ACTION_WEBVIEW_SETTINGS; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.eq; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.app.Activity; import android.content.Context; import android.content.Intent; @@ -26,17 +40,16 @@ import android.content.pm.PackageManager; import android.content.pm.UserInfo; import android.os.UserManager; -import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; import com.android.settings.applications.defaultapps.DefaultAppInfo; import com.android.settings.core.instrumentation.MetricsFeatureProvider; import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.widget.RadioButtonPreference; import com.android.settings.wrapper.UserPackageWrapper; import com.android.settingslib.wrapper.PackageManagerWrapper; import org.junit.Before; -import org.junit.BeforeClass; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Answers; @@ -48,36 +61,16 @@ import org.robolectric.util.ReflectionHelpers; import java.util.Arrays; -import static android.provider.Settings.ACTION_WEBVIEW_SETTINGS; -import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.eq; -import static org.mockito.Mockito.doNothing; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.times; -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 WebViewAppPickerTest { private Context mContext = RuntimeEnvironment.application; - private static UserInfo sFirstUser; - private static UserInfo sSecondUser; + private UserInfo mFirstUser; + private UserInfo mSecondUser; private final static String DEFAULT_PACKAGE_NAME = "DEFAULT_PACKAGE_NAME"; - @BeforeClass - public static void beforeClass() { - sFirstUser = new UserInfo(0, "FIRST_USER", 0); - sSecondUser = new UserInfo(0, "SECOND_USER", 0); - } - @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Activity mActivity; @Mock @@ -99,7 +92,8 @@ public class WebViewAppPickerTest { MockitoAnnotations.initMocks(this); FakeFeatureFactory.setupForTest(mActivity); when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); - + mFirstUser = new UserInfo(0, "FIRST_USER", 0); + mSecondUser = new UserInfo(0, "SECOND_USER", 0); mPicker = new WebViewAppPicker(); mPicker = spy(mPicker); doNothing().when(mPicker).updateCandidates(); @@ -174,7 +168,7 @@ public class WebViewAppPickerTest { @Test public void testDisabledPackageShownAsDisabled() { String disabledReason = "disabled"; - DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mPackageManager, + DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mActivity, mPackageManager, createApplicationInfo(DEFAULT_PACKAGE_NAME), disabledReason); RadioButtonPreference mockPreference = mock(RadioButtonPreference.class); @@ -189,7 +183,7 @@ public class WebViewAppPickerTest { @Test public void testEnabledPackageShownAsEnabled() { String disabledReason = ""; - DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mPackageManager, + DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mActivity, mPackageManager, createApplicationInfo(DEFAULT_PACKAGE_NAME), disabledReason); RadioButtonPreference mockPreference = mock(RadioButtonPreference.class); @@ -204,7 +198,7 @@ public class WebViewAppPickerTest { @Test public void testDisabledPackageShowsDisabledReasonSummary() { String disabledReason = "disabled"; - DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mPackageManager, + DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mActivity, mPackageManager, createApplicationInfo(DEFAULT_PACKAGE_NAME), disabledReason); RadioButtonPreference mockPreference = mock(RadioButtonPreference.class); @@ -220,7 +214,7 @@ public class WebViewAppPickerTest { @Test public void testEnabledPackageShowsEmptySummary() { String disabledReason = null; - DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mPackageManager, + DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mActivity, mPackageManager, createApplicationInfo(DEFAULT_PACKAGE_NAME), disabledReason); RadioButtonPreference mockPreference = mock(RadioButtonPreference.class); @@ -268,14 +262,14 @@ public class WebViewAppPickerTest { UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class); when(packageForFirstUser.isEnabledPackage()).thenReturn(false); when(packageForFirstUser.isInstalledPackage()).thenReturn(true); - when(packageForFirstUser.getUserInfo()).thenReturn(sFirstUser); + when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser); WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class); when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME))) .thenReturn(Arrays.asList(packageForFirstUser)); final String EXPECTED_DISABLED_REASON = String.format( - "(disabled for user %s)", sFirstUser.name); + "(disabled for user %s)", mFirstUser.name); assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME)).isEqualTo(EXPECTED_DISABLED_REASON); } @@ -285,14 +279,14 @@ public class WebViewAppPickerTest { UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class); when(packageForFirstUser.isEnabledPackage()).thenReturn(true); when(packageForFirstUser.isInstalledPackage()).thenReturn(false); - when(packageForFirstUser.getUserInfo()).thenReturn(sFirstUser); + when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser); WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class); when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME))) .thenReturn(Arrays.asList(packageForFirstUser)); final String EXPECTED_DISABLED_REASON = String.format( - "(uninstalled for user %s)", sFirstUser.name); + "(uninstalled for user %s)", mFirstUser.name); assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME)).isEqualTo(EXPECTED_DISABLED_REASON); } @@ -302,19 +296,19 @@ public class WebViewAppPickerTest { UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class); when(packageForFirstUser.isEnabledPackage()).thenReturn(false); when(packageForFirstUser.isInstalledPackage()).thenReturn(true); - when(packageForFirstUser.getUserInfo()).thenReturn(sFirstUser); + when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser); UserPackageWrapper packageForSecondUser = mock(UserPackageWrapper.class); when(packageForSecondUser.isEnabledPackage()).thenReturn(true); when(packageForSecondUser.isInstalledPackage()).thenReturn(false); - when(packageForSecondUser.getUserInfo()).thenReturn(sSecondUser); + when(packageForSecondUser.getUserInfo()).thenReturn(mSecondUser); WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class); when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME))) .thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser)); final String EXPECTED_DISABLED_REASON = String.format( - "(disabled for user %s)", sFirstUser.name); + "(disabled for user %s)", mFirstUser.name); assertThat(mPicker.getDisabledReason( wvusWrapper, mContext, DEFAULT_PACKAGE_NAME)).isEqualTo(EXPECTED_DISABLED_REASON); } @@ -328,19 +322,19 @@ public class WebViewAppPickerTest { UserPackageWrapper packageForFirstUser = mock(UserPackageWrapper.class); when(packageForFirstUser.isEnabledPackage()).thenReturn(false); when(packageForFirstUser.isInstalledPackage()).thenReturn(false); - when(packageForFirstUser.getUserInfo()).thenReturn(sFirstUser); + when(packageForFirstUser.getUserInfo()).thenReturn(mFirstUser); UserPackageWrapper packageForSecondUser = mock(UserPackageWrapper.class); when(packageForSecondUser.isEnabledPackage()).thenReturn(true); when(packageForSecondUser.isInstalledPackage()).thenReturn(true); - when(packageForSecondUser.getUserInfo()).thenReturn(sSecondUser); + when(packageForSecondUser.getUserInfo()).thenReturn(mSecondUser); WebViewUpdateServiceWrapper wvusWrapper = mock(WebViewUpdateServiceWrapper.class); when(wvusWrapper.getPackageInfosAllUsers(any(), eq(DEFAULT_PACKAGE_NAME))) .thenReturn(Arrays.asList(packageForFirstUser, packageForSecondUser)); final String EXPECTED_DISABLED_REASON = String.format( - "(uninstalled for user %s)", sFirstUser.name); + "(uninstalled for user %s)", mFirstUser.name); assertThat(mPicker.getDisabledReason(wvusWrapper, mContext, DEFAULT_PACKAGE_NAME)).isEqualTo(EXPECTED_DISABLED_REASON); } @@ -354,7 +348,7 @@ public class WebViewAppPickerTest { PackageItemInfo mockPackageItemInfo = mock(PackageItemInfo.class); mockPackageItemInfo.packageName = DEFAULT_PACKAGE_NAME; when(mockPackageItemInfo.loadLabel(any())).thenReturn("myPackage"); - DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mPackageManager, + DefaultAppInfo webviewAppInfo = mPicker.createDefaultAppInfo(mActivity, mPackageManager, mockPackageItemInfo, "" /* disabledReason */); PackageInfo packageInfo = new PackageInfo(); |