Get app info with correct user id.
- when querying app info from package manager, we should use the methods that takes the user id so that it will work properly with managed profile. Change-Id: Ifc84d3a29aaf7b2c1acfa096596a53f1715cc908 Fixes: 117222623 Test: make RunSettingsRoboTests
This commit is contained in:
@@ -30,7 +30,8 @@ public class DefaultBrowserShortcutPreferenceController
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected boolean hasAppCapability() {
|
protected boolean hasAppCapability() {
|
||||||
return DefaultBrowserPreferenceController.hasBrowserPreference(mPackageName, mContext);
|
return DefaultBrowserPreferenceController
|
||||||
|
.hasBrowserPreference(mPackageName, mContext, UserHandle.myUserId());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@@ -62,7 +62,7 @@ public class DefaultBrowserPicker extends DefaultAppPickerFragment {
|
|||||||
|
|
||||||
for (ResolveInfo info : list) {
|
for (ResolveInfo info : list) {
|
||||||
try {
|
try {
|
||||||
candidates.add(new DefaultAppInfo(context, mPm,
|
candidates.add(new DefaultAppInfo(context, mPm, mUserId,
|
||||||
mPm.getApplicationInfoAsUser(info.activityInfo.packageName, 0, mUserId)));
|
mPm.getApplicationInfoAsUser(info.activityInfo.packageName, 0, mUserId)));
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
// Skip unknown packages.
|
// Skip unknown packages.
|
||||||
|
@@ -29,6 +29,7 @@ import android.util.ArraySet;
|
|||||||
import android.util.IconDrawableFactory;
|
import android.util.IconDrawableFactory;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
|
||||||
import com.android.settingslib.applications.DefaultAppInfo;
|
import com.android.settingslib.applications.DefaultAppInfo;
|
||||||
@@ -75,8 +76,8 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont
|
|||||||
try {
|
try {
|
||||||
final String packageName = mPackageManager.getDefaultBrowserPackageNameAsUser(mUserId);
|
final String packageName = mPackageManager.getDefaultBrowserPackageNameAsUser(mUserId);
|
||||||
Log.d(TAG, "Get default browser package: " + packageName);
|
Log.d(TAG, "Get default browser package: " + packageName);
|
||||||
return new DefaultAppInfo(mContext, mPackageManager,
|
return new DefaultAppInfo(mContext, mPackageManager, mUserId,
|
||||||
mPackageManager.getApplicationInfo(packageName, 0));
|
mPackageManager.getApplicationInfoAsUser(packageName, 0, mUserId));
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -143,7 +144,8 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Drawable getOnlyAppIcon() {
|
@VisibleForTesting
|
||||||
|
Drawable getOnlyAppIcon() {
|
||||||
final List<ResolveInfo> list = getCandidates(mPackageManager, mUserId);
|
final List<ResolveInfo> list = getCandidates(mPackageManager, mUserId);
|
||||||
if (list != null && list.size() == 1) {
|
if (list != null && list.size() == 1) {
|
||||||
final ResolveInfo info = list.get(0);
|
final ResolveInfo info = list.get(0);
|
||||||
@@ -154,7 +156,7 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont
|
|||||||
}
|
}
|
||||||
final ApplicationInfo appInfo;
|
final ApplicationInfo appInfo;
|
||||||
try {
|
try {
|
||||||
appInfo = mPackageManager.getApplicationInfo(packageName, 0);
|
appInfo = mPackageManager.getApplicationInfoAsUser(packageName, 0, mUserId);
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
Log.w(TAG, "Error getting app info for " + packageName);
|
Log.w(TAG, "Error getting app info for " + packageName);
|
||||||
return null;
|
return null;
|
||||||
@@ -169,11 +171,11 @@ public class DefaultBrowserPreferenceController extends DefaultAppPreferenceCont
|
|||||||
/**
|
/**
|
||||||
* Whether or not the pkg contains browser capability
|
* 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);
|
final Intent intent = new Intent(BROWSE_PROBE);
|
||||||
intent.setPackage(pkg);
|
intent.setPackage(pkg);
|
||||||
final List<ResolveInfo> resolveInfos =
|
final List<ResolveInfo> resolveInfos = context.getPackageManager()
|
||||||
context.getPackageManager().queryIntentActivities(intent, 0);
|
.queryIntentActivitiesAsUser(intent, 0 /* flags */, userId);
|
||||||
return resolveInfos != null && resolveInfos.size() != 0;
|
return resolveInfos != null && resolveInfos.size() != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -58,7 +58,7 @@ public class DefaultEmergencyPicker extends DefaultAppPickerFragment {
|
|||||||
final PackageInfo packageInfo =
|
final PackageInfo packageInfo =
|
||||||
mPm.getPackageInfo(info.activityInfo.packageName, 0);
|
mPm.getPackageInfo(info.activityInfo.packageName, 0);
|
||||||
final ApplicationInfo appInfo = packageInfo.applicationInfo;
|
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.
|
// Get earliest installed system app.
|
||||||
if (isSystemApp(appInfo) && (bestMatch == null ||
|
if (isSystemApp(appInfo) && (bestMatch == null ||
|
||||||
bestMatch.firstInstallTime > packageInfo.firstInstallTime)) {
|
bestMatch.firstInstallTime > packageInfo.firstInstallTime)) {
|
||||||
|
@@ -58,7 +58,7 @@ public class DefaultPhonePicker extends DefaultAppPickerFragment {
|
|||||||
final Context context = getContext();
|
final Context context = getContext();
|
||||||
for (String packageName : dialerPackages) {
|
for (String packageName : dialerPackages) {
|
||||||
try {
|
try {
|
||||||
candidates.add(new DefaultAppInfo(context, mPm,
|
candidates.add(new DefaultAppInfo(context, mPm, mUserId,
|
||||||
mPm.getApplicationInfoAsUser(packageName, 0, mUserId)));
|
mPm.getApplicationInfoAsUser(packageName, 0, mUserId)));
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
// Skip unknown packages.
|
// Skip unknown packages.
|
||||||
|
@@ -59,7 +59,8 @@ public class DefaultPhonePreferenceController extends DefaultAppPreferenceContro
|
|||||||
@Override
|
@Override
|
||||||
protected DefaultAppInfo getDefaultAppInfo() {
|
protected DefaultAppInfo getDefaultAppInfo() {
|
||||||
try {
|
try {
|
||||||
return new DefaultAppInfo(mContext, mPackageManager, mPackageManager.getApplicationInfo(
|
return new DefaultAppInfo(mContext, mPackageManager, mUserId,
|
||||||
|
mPackageManager.getApplicationInfo(
|
||||||
DefaultDialerManager.getDefaultDialerApplication(mContext, mUserId), 0));
|
DefaultDialerManager.getDefaultDialerApplication(mContext, mUserId), 0));
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
return null;
|
return null;
|
||||||
|
@@ -55,7 +55,7 @@ public class DefaultSmsPicker extends DefaultAppPickerFragment {
|
|||||||
|
|
||||||
for (SmsApplication.SmsApplicationData smsApplicationData : smsApplications) {
|
for (SmsApplication.SmsApplicationData smsApplicationData : smsApplications) {
|
||||||
try {
|
try {
|
||||||
candidates.add(new DefaultAppInfo(context, mPm,
|
candidates.add(new DefaultAppInfo(context, mPm, mUserId,
|
||||||
mPm.getApplicationInfoAsUser(smsApplicationData.mPackageName, 0, mUserId)));
|
mPm.getApplicationInfoAsUser(smsApplicationData.mPackageName, 0, mUserId)));
|
||||||
} catch (PackageManager.NameNotFoundException e) {
|
} catch (PackageManager.NameNotFoundException e) {
|
||||||
// Skip unknown packages.
|
// Skip unknown packages.
|
||||||
|
@@ -19,6 +19,7 @@ package com.android.settings.development;
|
|||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
|
import android.os.UserHandle;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
@@ -66,7 +67,7 @@ public class WebViewAppPreferenceController extends DeveloperOptionsPreferenceCo
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
DefaultAppInfo getDefaultAppInfo() {
|
DefaultAppInfo getDefaultAppInfo() {
|
||||||
final PackageInfo currentPackage = mWebViewUpdateServiceWrapper.getCurrentWebViewPackage();
|
final PackageInfo currentPackage = mWebViewUpdateServiceWrapper.getCurrentWebViewPackage();
|
||||||
return new DefaultAppInfo(mContext, mPackageManager,
|
return new DefaultAppInfo(mContext, mPackageManager, UserHandle.myUserId(),
|
||||||
currentPackage == null ? null : currentPackage.applicationInfo);
|
currentPackage == null ? null : currentPackage.applicationInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -118,9 +118,9 @@ public class WebViewAppPicker extends DefaultAppPickerFragment {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static class WebViewAppInfo extends DefaultAppInfo {
|
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) {
|
PackageItemInfo packageItemInfo, String summary, boolean enabled) {
|
||||||
super(context, pm, packageItemInfo, summary, enabled);
|
super(context, pm, userId, packageItemInfo, summary, enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -138,7 +138,7 @@ public class WebViewAppPicker extends DefaultAppPickerFragment {
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
DefaultAppInfo createDefaultAppInfo(Context context, PackageManager pm,
|
DefaultAppInfo createDefaultAppInfo(Context context, PackageManager pm,
|
||||||
PackageItemInfo packageItemInfo, String disabledReason) {
|
PackageItemInfo packageItemInfo, String disabledReason) {
|
||||||
return new WebViewAppInfo(context, pm, packageItemInfo, disabledReason,
|
return new WebViewAppInfo(context, pm, mUserId, packageItemInfo, disabledReason,
|
||||||
TextUtils.isEmpty(disabledReason) /* enabled */);
|
TextUtils.isEmpty(disabledReason) /* enabled */);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -43,12 +43,11 @@ import com.android.settingslib.applications.ApplicationsState.AppEntry;
|
|||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.Mock;import android.net.INetworkStatsSession;
|
import org.mockito.Mock;
|
||||||
import android.util.FeatureFlagUtils;
|
import android.util.FeatureFlagUtils;
|
||||||
|
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
import org.robolectric.RuntimeEnvironment;
|
import org.robolectric.RuntimeEnvironment;
|
||||||
import org.robolectric.util.ReflectionHelpers;
|
|
||||||
|
|
||||||
import androidx.loader.app.LoaderManager;
|
import androidx.loader.app.LoaderManager;
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
|
@@ -18,8 +18,8 @@ package com.android.settings.applications.appinfo;
|
|||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
|
|
||||||
import static org.mockito.ArgumentMatchers.anyInt;
|
import static org.mockito.Matchers.anyInt;
|
||||||
import static org.mockito.ArgumentMatchers.argThat;
|
import static org.mockito.Matchers.argThat;
|
||||||
import static org.mockito.Mockito.spy;
|
import static org.mockito.Mockito.spy;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
@@ -66,8 +66,8 @@ public class DefaultBrowserShortcutPreferenceControllerTest {
|
|||||||
public void hasAppCapability_hasBrowserCapability_shouldReturnTrue() {
|
public void hasAppCapability_hasBrowserCapability_shouldReturnTrue() {
|
||||||
List<ResolveInfo> resolveInfos = new ArrayList<>();
|
List<ResolveInfo> resolveInfos = new ArrayList<>();
|
||||||
resolveInfos.add(new ResolveInfo());
|
resolveInfos.add(new ResolveInfo());
|
||||||
when(mPackageManager.queryIntentActivities(argThat(intent-> intent != null
|
when(mPackageManager.queryIntentActivitiesAsUser(argThat(intent-> intent != null
|
||||||
&& intent.getCategories().contains(Intent.CATEGORY_BROWSABLE)), anyInt()))
|
&& intent.getCategories().contains(Intent.CATEGORY_BROWSABLE)), anyInt(), anyInt()))
|
||||||
.thenReturn(resolveInfos);
|
.thenReturn(resolveInfos);
|
||||||
|
|
||||||
assertThat(mController.hasAppCapability()).isTrue();
|
assertThat(mController.hasAppCapability()).isTrue();
|
||||||
|
@@ -34,6 +34,7 @@ import android.content.pm.ApplicationInfo;
|
|||||||
import android.content.pm.PackageManager;
|
import android.content.pm.PackageManager;
|
||||||
import android.content.pm.PackageManager.NameNotFoundException;
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.os.UserManager;
|
import android.os.UserManager;
|
||||||
|
|
||||||
import androidx.preference.Preference;
|
import androidx.preference.Preference;
|
||||||
@@ -130,6 +131,16 @@ public class DefaultBrowserPreferenceControllerTest {
|
|||||||
verify(mPackageManager).getDefaultBrowserPackageNameAsUser(anyInt());
|
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
|
@Test
|
||||||
public void isBrowserDefault_onlyApp_shouldReturnTrue() {
|
public void isBrowserDefault_onlyApp_shouldReturnTrue() {
|
||||||
when(mPackageManager.getDefaultBrowserPackageNameAsUser(anyInt())).thenReturn(null);
|
when(mPackageManager.getDefaultBrowserPackageNameAsUser(anyInt())).thenReturn(null);
|
||||||
@@ -173,6 +184,33 @@ public class DefaultBrowserPreferenceControllerTest {
|
|||||||
any(Intent.class), eq(0) /* flags */, eq(0) /* userId */);
|
any(Intent.class), eq(0) /* flags */, eq(0) /* userId */);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void getOnlyAppIcon_shouldGetApplicationInfoAsUser() throws NameNotFoundException {
|
||||||
|
final List<ResolveInfo> 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) {
|
private ResolveInfo createResolveInfo(String packageName) {
|
||||||
final ResolveInfo info = new ResolveInfo();
|
final ResolveInfo info = new ResolveInfo();
|
||||||
info.handleAllWebDataURI = true;
|
info.handleAllWebDataURI = true;
|
||||||
|
Reference in New Issue
Block a user