summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/admin/DeviceAdminInfo.java63
-rw-r--r--core/java/android/app/admin/DevicePolicyManager.java25
-rw-r--r--services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java26
-rw-r--r--services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java6
4 files changed, 52 insertions, 68 deletions
diff --git a/core/java/android/app/admin/DeviceAdminInfo.java b/core/java/android/app/admin/DeviceAdminInfo.java
index 4e9adf09c351..1de1d2fbb822 100644
--- a/core/java/android/app/admin/DeviceAdminInfo.java
+++ b/core/java/android/app/admin/DeviceAdminInfo.java
@@ -240,7 +240,7 @@ public final class DeviceAdminInfo implements Parcelable {
/**
* The BroadcastReceiver that implements this device admin component.
*/
- final ResolveInfo mReceiver;
+ final ActivityInfo mActivityInfo;
/**
* Whether this should be visible to the user.
@@ -252,29 +252,42 @@ public final class DeviceAdminInfo implements Parcelable {
*/
int mUsesPolicies;
+
+ /**
+ * Constructor.
+ *
+ * @param context The Context in which we are parsing the device admin.
+ * @param resolveInfo The ResolveInfo returned from the package manager about
+ * this device admin's component.
+ */
+ public DeviceAdminInfo(Context context, ResolveInfo resolveInfo)
+ throws XmlPullParserException, IOException {
+ this(context, resolveInfo.activityInfo);
+ }
/**
* Constructor.
*
* @param context The Context in which we are parsing the device admin.
- * @param receiver The ResolveInfo returned from the package manager about
+ * @param activityInfo The ActivityInfo returned from the package manager about
* this device admin's component.
+ *
+ * @hide
*/
- public DeviceAdminInfo(Context context, ResolveInfo receiver)
+ public DeviceAdminInfo(Context context, ActivityInfo activityInfo)
throws XmlPullParserException, IOException {
- mReceiver = receiver;
- ActivityInfo ai = receiver.activityInfo;
+ mActivityInfo = activityInfo;
PackageManager pm = context.getPackageManager();
XmlResourceParser parser = null;
try {
- parser = ai.loadXmlMetaData(pm, DeviceAdminReceiver.DEVICE_ADMIN_META_DATA);
+ parser = mActivityInfo.loadXmlMetaData(pm, DeviceAdminReceiver.DEVICE_ADMIN_META_DATA);
if (parser == null) {
throw new XmlPullParserException("No "
+ DeviceAdminReceiver.DEVICE_ADMIN_META_DATA + " meta-data");
}
- Resources res = pm.getResourcesForApplication(ai.applicationInfo);
+ Resources res = pm.getResourcesForApplication(mActivityInfo.applicationInfo);
AttributeSet attrs = Xml.asAttributeSet(parser);
@@ -324,14 +337,14 @@ public final class DeviceAdminInfo implements Parcelable {
}
} catch (NameNotFoundException e) {
throw new XmlPullParserException(
- "Unable to create context for: " + ai.packageName);
+ "Unable to create context for: " + mActivityInfo.packageName);
} finally {
if (parser != null) parser.close();
}
}
DeviceAdminInfo(Parcel source) {
- mReceiver = ResolveInfo.CREATOR.createFromParcel(source);
+ mActivityInfo = ActivityInfo.CREATOR.createFromParcel(source);
mUsesPolicies = source.readInt();
}
@@ -339,7 +352,7 @@ public final class DeviceAdminInfo implements Parcelable {
* Return the .apk package that implements this device admin.
*/
public String getPackageName() {
- return mReceiver.activityInfo.packageName;
+ return mActivityInfo.packageName;
}
/**
@@ -347,7 +360,7 @@ public final class DeviceAdminInfo implements Parcelable {
* this device admin.
*/
public String getReceiverName() {
- return mReceiver.activityInfo.name;
+ return mActivityInfo.name;
}
/**
@@ -355,7 +368,7 @@ public final class DeviceAdminInfo implements Parcelable {
* device admin. Do not modify the returned object.
*/
public ActivityInfo getActivityInfo() {
- return mReceiver.activityInfo;
+ return mActivityInfo;
}
/**
@@ -363,8 +376,8 @@ public final class DeviceAdminInfo implements Parcelable {
*/
@NonNull
public ComponentName getComponent() {
- return new ComponentName(mReceiver.activityInfo.packageName,
- mReceiver.activityInfo.name);
+ return new ComponentName(mActivityInfo.packageName,
+ mActivityInfo.name);
}
/**
@@ -374,7 +387,7 @@ public final class DeviceAdminInfo implements Parcelable {
* resources.
*/
public CharSequence loadLabel(PackageManager pm) {
- return mReceiver.loadLabel(pm);
+ return mActivityInfo.loadLabel(pm);
}
/**
@@ -384,15 +397,9 @@ public final class DeviceAdminInfo implements Parcelable {
* resources.
*/
public CharSequence loadDescription(PackageManager pm) throws NotFoundException {
- if (mReceiver.activityInfo.descriptionRes != 0) {
- String packageName = mReceiver.resolvePackageName;
- ApplicationInfo applicationInfo = null;
- if (packageName == null) {
- packageName = mReceiver.activityInfo.packageName;
- applicationInfo = mReceiver.activityInfo.applicationInfo;
- }
- return pm.getText(packageName,
- mReceiver.activityInfo.descriptionRes, applicationInfo);
+ if (mActivityInfo.descriptionRes != 0) {
+ return pm.getText(mActivityInfo.packageName,
+ mActivityInfo.descriptionRes, mActivityInfo.applicationInfo);
}
throw new NotFoundException();
}
@@ -404,7 +411,7 @@ public final class DeviceAdminInfo implements Parcelable {
* resources.
*/
public Drawable loadIcon(PackageManager pm) {
- return mReceiver.loadIcon(pm);
+ return mActivityInfo.loadIcon(pm);
}
/**
@@ -464,12 +471,12 @@ public final class DeviceAdminInfo implements Parcelable {
public void dump(Printer pw, String prefix) {
pw.println(prefix + "Receiver:");
- mReceiver.dump(pw, prefix + " ");
+ mActivityInfo.dump(pw, prefix + " ");
}
@Override
public String toString() {
- return "DeviceAdminInfo{" + mReceiver.activityInfo.name + "}";
+ return "DeviceAdminInfo{" + mActivityInfo.name + "}";
}
/**
@@ -479,7 +486,7 @@ public final class DeviceAdminInfo implements Parcelable {
* @param flags The flags used for parceling.
*/
public void writeToParcel(Parcel dest, int flags) {
- mReceiver.writeToParcel(dest, flags);
+ mActivityInfo.writeToParcel(dest, flags);
dest.writeInt(mUsesPolicies);
}
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 27f098c597d5..74fe13ac1961 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -3172,31 +3172,6 @@ public class DevicePolicyManager {
}
/**
- * Returns the DeviceAdminInfo as defined by the administrator's package info & meta-data
- * @hide
- */
- public DeviceAdminInfo getAdminInfo(@NonNull ComponentName cn) {
- ActivityInfo ai;
- try {
- ai = mContext.getPackageManager().getReceiverInfo(cn,
- PackageManager.GET_META_DATA);
- } catch (PackageManager.NameNotFoundException e) {
- Log.w(TAG, "Unable to retrieve device policy " + cn, e);
- return null;
- }
-
- ResolveInfo ri = new ResolveInfo();
- ri.activityInfo = ai;
-
- try {
- return new DeviceAdminInfo(mContext, ri);
- } catch (XmlPullParserException | IOException e) {
- Log.w(TAG, "Unable to parse device policy " + cn, e);
- return null;
- }
- }
-
- /**
* @hide
*/
public void getRemoveWarning(@Nullable ComponentName admin, RemoteCallback result) {
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 6db147df66f9..60c3a35017d4 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -2053,31 +2053,31 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
return null;
}
enforceFullCrossUsersPermission(userHandle);
- Intent resolveIntent = new Intent();
- resolveIntent.setComponent(adminName);
- List<ResolveInfo> infos = mContext.getPackageManager().queryBroadcastReceiversAsUser(
- resolveIntent,
- PackageManager.GET_META_DATA | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS |
- PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE,
- userHandle);
- if (infos == null || infos.size() <= 0) {
+ ActivityInfo ai = null;
+ try {
+ ai = mIPackageManager.getReceiverInfo(adminName,
+ PackageManager.GET_META_DATA |
+ PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS |
+ PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE, userHandle);
+ } catch (RemoteException e) {
+ // shouldn't happen.
+ }
+ if (ai == null) {
throw new IllegalArgumentException("Unknown admin: " + adminName);
}
- final ResolveInfo ri = infos.get(0);
-
- if (!permission.BIND_DEVICE_ADMIN.equals(ri.activityInfo.permission)) {
+ if (!permission.BIND_DEVICE_ADMIN.equals(ai.permission)) {
final String message = "DeviceAdminReceiver " + adminName + " must be protected with "
+ permission.BIND_DEVICE_ADMIN;
Slog.w(LOG_TAG, message);
if (throwForMissiongPermission &&
- ri.activityInfo.applicationInfo.targetSdkVersion > Build.VERSION_CODES.M) {
+ ai.applicationInfo.targetSdkVersion > Build.VERSION_CODES.M) {
throw new IllegalArgumentException(message);
}
}
try {
- return new DeviceAdminInfo(mContext, ri);
+ return new DeviceAdminInfo(mContext, ai);
} catch (XmlPullParserException | IOException e) {
Slog.w(LOG_TAG, "Bad device admin requested for user=" + userHandle + ": " + adminName,
e);
diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java
index ca436442d75a..c80ca6c996a2 100644
--- a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java
+++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java
@@ -154,8 +154,10 @@ public abstract class DpmTestBase extends AndroidTestCase {
aci.packageName = admin.getPackageName();
aci.name = admin.getClassName();
- doReturn(realResolveInfo).when(mMockContext.packageManager).queryBroadcastReceiversAsUser(
- MockUtils.checkIntentComponent(admin),
+ // Note we don't set up queryBroadcastReceivers. We don't use it in DPMS.
+
+ doReturn(aci).when(mMockContext.ipackageManager).getReceiverInfo(
+ eq(admin),
anyInt(),
eq(UserHandle.getUserId(packageUid)));