diff --git a/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceController.java b/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceController.java index 64af3c25b70..4c7dd819ced 100644 --- a/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceController.java @@ -30,7 +30,8 @@ public class DefaultBrowserShortcutPreferenceController @Override protected boolean hasAppCapability() { - return DefaultBrowserPreferenceController.hasBrowserPreference(mPackageName, mContext); + return DefaultBrowserPreferenceController + .hasBrowserPreference(mPackageName, mContext, UserHandle.myUserId()); } @Override diff --git a/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java b/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java index 626048dfa0c..cfaac3a4441 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java +++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPicker.java @@ -62,7 +62,7 @@ public class DefaultBrowserPicker extends DefaultAppPickerFragment { for (ResolveInfo info : list) { try { - candidates.add(new DefaultAppInfo(context, mPm, + candidates.add(new DefaultAppInfo(context, mPm, mUserId, 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 9e76ff55a10..24b4dcd501e 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceController.java @@ -29,6 +29,7 @@ import android.util.ArraySet; import android.util.IconDrawableFactory; import android.util.Log; +import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import com.android.settingslib.applications.DefaultAppInfo; @@ -75,8 +76,8 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont try { final String packageName = mPackageManager.getDefaultBrowserPackageNameAsUser(mUserId); Log.d(TAG, "Get default browser package: " + packageName); - return new DefaultAppInfo(mContext, mPackageManager, - mPackageManager.getApplicationInfo(packageName, 0)); + return new DefaultAppInfo(mContext, mPackageManager, mUserId, + mPackageManager.getApplicationInfoAsUser(packageName, 0, mUserId)); } catch (PackageManager.NameNotFoundException e) { return null; } @@ -143,7 +144,8 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont return null; } - private Drawable getOnlyAppIcon() { + @VisibleForTesting + Drawable getOnlyAppIcon() { final List list = getCandidates(mPackageManager, mUserId); if (list != null && list.size() == 1) { final ResolveInfo info = list.get(0); @@ -154,7 +156,7 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont } final ApplicationInfo appInfo; try { - appInfo = mPackageManager.getApplicationInfo(packageName, 0); + appInfo = mPackageManager.getApplicationInfoAsUser(packageName, 0, mUserId); } catch (PackageManager.NameNotFoundException e) { Log.w(TAG, "Error getting app info for " + packageName); return null; @@ -169,11 +171,11 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont /** * Whether or not the pkg contains browser capability */ - public static boolean hasBrowserPreference(String pkg, Context context) { + public static boolean hasBrowserPreference(String pkg, Context context, int userId) { final Intent intent = new Intent(BROWSE_PROBE); intent.setPackage(pkg); - final List resolveInfos = - context.getPackageManager().queryIntentActivities(intent, 0); + final List resolveInfos = context.getPackageManager() + .queryIntentActivitiesAsUser(intent, 0 /* flags */, userId); return resolveInfos != null && resolveInfos.size() != 0; } diff --git a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java index f6f8a56dece..76e93ccd6bc 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java +++ b/src/com/android/settings/applications/defaultapps/DefaultEmergencyPicker.java @@ -58,7 +58,7 @@ public class DefaultEmergencyPicker extends DefaultAppPickerFragment { final PackageInfo packageInfo = mPm.getPackageInfo(info.activityInfo.packageName, 0); final ApplicationInfo appInfo = packageInfo.applicationInfo; - candidates.add(new DefaultAppInfo(context, mPm, appInfo)); + candidates.add(new DefaultAppInfo(context, mPm, mUserId, appInfo)); // Get earliest installed system app. if (isSystemApp(appInfo) && (bestMatch == null || bestMatch.firstInstallTime > packageInfo.firstInstallTime)) { diff --git a/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java b/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java index 0bda2ec5610..72f1cc5d509 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java +++ b/src/com/android/settings/applications/defaultapps/DefaultPhonePicker.java @@ -58,7 +58,7 @@ public class DefaultPhonePicker extends DefaultAppPickerFragment { final Context context = getContext(); for (String packageName : dialerPackages) { try { - candidates.add(new DefaultAppInfo(context, mPm, + candidates.add(new DefaultAppInfo(context, mPm, mUserId, 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 95264b15f79..7b7755d9083 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java +++ b/src/com/android/settings/applications/defaultapps/DefaultPhonePreferenceController.java @@ -59,7 +59,8 @@ public class DefaultPhonePreferenceController extends DefaultAppPreferenceContro @Override protected DefaultAppInfo getDefaultAppInfo() { try { - return new DefaultAppInfo(mContext, mPackageManager, mPackageManager.getApplicationInfo( + return new DefaultAppInfo(mContext, mPackageManager, mUserId, + mPackageManager.getApplicationInfo( DefaultDialerManager.getDefaultDialerApplication(mContext, mUserId), 0)); } catch (PackageManager.NameNotFoundException e) { return null; diff --git a/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java b/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java index f8b1596df1b..6d1e21df8d6 100644 --- a/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java +++ b/src/com/android/settings/applications/defaultapps/DefaultSmsPicker.java @@ -55,7 +55,7 @@ public class DefaultSmsPicker extends DefaultAppPickerFragment { for (SmsApplication.SmsApplicationData smsApplicationData : smsApplications) { try { - candidates.add(new DefaultAppInfo(context, mPm, + candidates.add(new DefaultAppInfo(context, mPm, mUserId, mPm.getApplicationInfoAsUser(smsApplicationData.mPackageName, 0, mUserId))); } catch (PackageManager.NameNotFoundException e) { // Skip unknown packages. diff --git a/src/com/android/settings/development/WebViewAppPreferenceController.java b/src/com/android/settings/development/WebViewAppPreferenceController.java index 74d6c105a4b..37653ccfd90 100644 --- a/src/com/android/settings/development/WebViewAppPreferenceController.java +++ b/src/com/android/settings/development/WebViewAppPreferenceController.java @@ -19,6 +19,7 @@ package com.android.settings.development; import android.content.Context; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; +import android.os.UserHandle; import android.text.TextUtils; import android.util.Log; @@ -66,7 +67,7 @@ public class WebViewAppPreferenceController extends DeveloperOptionsPreferenceCo @VisibleForTesting DefaultAppInfo getDefaultAppInfo() { final PackageInfo currentPackage = mWebViewUpdateServiceWrapper.getCurrentWebViewPackage(); - return new DefaultAppInfo(mContext, mPackageManager, + return new DefaultAppInfo(mContext, mPackageManager, UserHandle.myUserId(), currentPackage == null ? null : currentPackage.applicationInfo); } diff --git a/src/com/android/settings/webview/WebViewAppPicker.java b/src/com/android/settings/webview/WebViewAppPicker.java index b96217e9cf3..72d79183734 100644 --- a/src/com/android/settings/webview/WebViewAppPicker.java +++ b/src/com/android/settings/webview/WebViewAppPicker.java @@ -118,9 +118,9 @@ public class WebViewAppPicker extends DefaultAppPickerFragment { } private static class WebViewAppInfo extends DefaultAppInfo { - public WebViewAppInfo(Context context, PackageManager pm, + public WebViewAppInfo(Context context, PackageManager pm, int userId, PackageItemInfo packageItemInfo, String summary, boolean enabled) { - super(context, pm, packageItemInfo, summary, enabled); + super(context, pm, userId, packageItemInfo, summary, enabled); } @Override @@ -138,7 +138,7 @@ public class WebViewAppPicker extends DefaultAppPickerFragment { @VisibleForTesting DefaultAppInfo createDefaultAppInfo(Context context, PackageManager pm, PackageItemInfo packageItemInfo, String disabledReason) { - return new WebViewAppInfo(context, pm, packageItemInfo, disabledReason, + return new WebViewAppInfo(context, pm, mUserId, packageItemInfo, disabledReason, TextUtils.isEmpty(disabledReason) /* enabled */); } diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerV2Test.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerV2Test.java index 5e9179f0fb6..708222ebaf9 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerV2Test.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppDataUsagePreferenceControllerV2Test.java @@ -43,12 +43,11 @@ import com.android.settingslib.applications.ApplicationsState.AppEntry; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock;import android.net.INetworkStatsSession; +import org.mockito.Mock; import android.util.FeatureFlagUtils; import org.mockito.MockitoAnnotations; import org.robolectric.RuntimeEnvironment; -import org.robolectric.util.ReflectionHelpers; import androidx.loader.app.LoaderManager; import androidx.preference.Preference; diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java index f6abb5bc197..f4571ce390e 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/DefaultBrowserShortcutPreferenceControllerTest.java @@ -18,8 +18,8 @@ package com.android.settings.applications.appinfo; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.ArgumentMatchers.argThat; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.argThat; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; @@ -66,8 +66,8 @@ public class DefaultBrowserShortcutPreferenceControllerTest { public void hasAppCapability_hasBrowserCapability_shouldReturnTrue() { List resolveInfos = new ArrayList<>(); resolveInfos.add(new ResolveInfo()); - when(mPackageManager.queryIntentActivities(argThat(intent-> intent != null - && intent.getCategories().contains(Intent.CATEGORY_BROWSABLE)), anyInt())) + when(mPackageManager.queryIntentActivitiesAsUser(argThat(intent-> intent != null + && intent.getCategories().contains(Intent.CATEGORY_BROWSABLE)), anyInt(), anyInt())) .thenReturn(resolveInfos); assertThat(mController.hasAppCapability()).isTrue(); diff --git a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java index 4a482d08d25..cd3a4260864 100644 --- a/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/defaultapps/DefaultBrowserPreferenceControllerTest.java @@ -34,6 +34,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; +import android.content.res.Resources; import android.os.UserManager; import androidx.preference.Preference; @@ -130,6 +131,16 @@ public class DefaultBrowserPreferenceControllerTest { verify(mPackageManager).getDefaultBrowserPackageNameAsUser(anyInt()); } + @Test + public void getDefaultApp_shouldGetApplicationInfoAsUser() throws NameNotFoundException { + final String PACKAGE_NAME = "com.test.package"; + when(mPackageManager.getDefaultBrowserPackageNameAsUser(anyInt())).thenReturn(PACKAGE_NAME); + + mController.getDefaultAppInfo(); + + verify(mPackageManager).getApplicationInfoAsUser(eq(PACKAGE_NAME), anyInt(), anyInt()); + } + @Test public void isBrowserDefault_onlyApp_shouldReturnTrue() { when(mPackageManager.getDefaultBrowserPackageNameAsUser(anyInt())).thenReturn(null); @@ -173,6 +184,33 @@ public class DefaultBrowserPreferenceControllerTest { any(Intent.class), eq(0) /* flags */, eq(0) /* userId */); } + @Test + public void getOnlyAppIcon_shouldGetApplicationInfoAsUser() throws NameNotFoundException { + final List resolveInfos = new ArrayList<>(); + final String PACKAGE_NAME = "com.test.package"; + resolveInfos.add(createResolveInfo(PACKAGE_NAME)); + when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt())) + .thenReturn(resolveInfos); + when(mContext.getPackageManager()).thenReturn(mPackageManager); + when(mContext.getSystemService(UserManager.class)).thenReturn(mUserManager); + when(mContext.getResources()).thenReturn(mock(Resources.class)); + + mController.getOnlyAppIcon(); + + verify(mPackageManager).getApplicationInfoAsUser( + eq(PACKAGE_NAME), eq(0) /* flags */, eq(0) /* userId */); + } + + @Test + public void hasBrowserPreference_shouldQueryIntentActivitiesAsUser() { + when(mContext.getPackageManager()).thenReturn(mPackageManager); + + mController.hasBrowserPreference("com.test.package", mContext, 0 /* userId */); + + verify(mPackageManager).queryIntentActivitiesAsUser( + any(Intent.class), eq(0) /* flags */, eq(0) /* userId */); + } + private ResolveInfo createResolveInfo(String packageName) { final ResolveInfo info = new ResolveInfo(); info.handleAllWebDataURI = true;