Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 47d73e3a authored by Antoan Angelov's avatar Antoan Angelov Committed by android-build-merger
Browse files

Merge "Move the support_transfer_ownership_metadata inside the device admin...

Merge "Move the support_transfer_ownership_metadata inside the device admin descriptor XML." into pi-dev
am: 675db3f2

Change-Id: I933134e5741cf264f38641629705a234175b90c7
parents 63f24e9b 675db3f2
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -6331,6 +6331,7 @@ package android.app.admin {
    method public java.lang.CharSequence loadDescription(android.content.pm.PackageManager) throws android.content.res.Resources.NotFoundException;
    method public android.graphics.drawable.Drawable loadIcon(android.content.pm.PackageManager);
    method public java.lang.CharSequence loadLabel(android.content.pm.PackageManager);
    method public boolean supportsTransferOwnership();
    method public boolean usesPolicy(int);
    method public void writeToParcel(android.os.Parcel, int);
    field public static final android.os.Parcelable.Creator<android.app.admin.DeviceAdminInfo> CREATOR;
@@ -6395,7 +6396,6 @@ package android.app.admin {
    field public static final java.lang.String EXTRA_DISABLE_WARNING = "android.app.extra.DISABLE_WARNING";
    field public static final java.lang.String EXTRA_LOCK_TASK_PACKAGE = "android.app.extra.LOCK_TASK_PACKAGE";
    field public static final java.lang.String EXTRA_TRANSFER_OWNERSHIP_ADMIN_EXTRAS_BUNDLE = "android.app.extra.TRANSFER_OWNERSHIP_ADMIN_EXTRAS_BUNDLE";
    field public static final java.lang.String SUPPORT_TRANSFER_OWNERSHIP_META_DATA = "android.app.support_transfer_ownership";
  }
  public class DeviceAdminService extends android.app.Service {
+28 −7
Original line number Diff line number Diff line
@@ -16,31 +16,31 @@

package android.app.admin;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;

import android.annotation.NonNull;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.content.res.Resources.NotFoundException;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.content.res.Resources.NotFoundException;
import android.graphics.drawable.Drawable;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.PersistableBundle;
import android.util.AttributeSet;
import android.util.Log;
import android.util.Printer;
import android.util.SparseArray;
import android.util.Xml;

import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;

import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
@@ -266,6 +266,12 @@ public final class DeviceAdminInfo implements Parcelable {
     */
    int mUsesPolicies;

    /**
     * Whether this administrator can be a target in an ownership transfer.
     *
     * @see DevicePolicyManager#transferOwnership(ComponentName, ComponentName, PersistableBundle)
     */
    boolean mSupportsTransferOwnership;

    /**
     * Constructor.
@@ -347,6 +353,12 @@ public final class DeviceAdminInfo implements Parcelable {
                                    + getComponent() + ": " + policyName);
                        }
                    }
                } else if (tagName.equals("support-transfer-ownership")) {
                    if (parser.next() != XmlPullParser.END_TAG) {
                        throw new XmlPullParserException(
                                "support-transfer-ownership tag must be empty.");
                    }
                    mSupportsTransferOwnership = true;
                }
            }
        } catch (NameNotFoundException e) {
@@ -360,6 +372,7 @@ public final class DeviceAdminInfo implements Parcelable {
    DeviceAdminInfo(Parcel source) {
        mActivityInfo = ActivityInfo.CREATOR.createFromParcel(source);
        mUsesPolicies = source.readInt();
        mSupportsTransferOwnership = source.readBoolean();
    }

    /**
@@ -458,6 +471,13 @@ public final class DeviceAdminInfo implements Parcelable {
        return sRevKnownPolicies.get(policyIdent).tag;
    }

    /**
     * Return true if this administrator can be a target in an ownership transfer.
     */
    public boolean supportsTransferOwnership() {
        return mSupportsTransferOwnership;
    }

    /** @hide */
    public ArrayList<PolicyInfo> getUsedPolicies() {
        ArrayList<PolicyInfo> res = new ArrayList<PolicyInfo>();
@@ -502,6 +522,7 @@ public final class DeviceAdminInfo implements Parcelable {
    public void writeToParcel(Parcel dest, int flags) {
        mActivityInfo.writeToParcel(dest, flags);
        dest.writeInt(mUsesPolicies);
        dest.writeBoolean(mSupportsTransferOwnership);
    }

    /**
+0 −25
Original line number Diff line number Diff line
@@ -505,31 +505,6 @@ public class DeviceAdminReceiver extends BroadcastReceiver {
    public static final String EXTRA_TRANSFER_OWNERSHIP_ADMIN_EXTRAS_BUNDLE =
            "android.app.extra.TRANSFER_OWNERSHIP_ADMIN_EXTRAS_BUNDLE";

    /**
     * Name under which a device administration component indicates whether it supports transfer of
     * ownership. This meta-data is of type <code>boolean</code>. A value of <code>true</code>
     * allows this administrator to be used as a target administrator for a transfer. If the value
     * is <code>false</code>, ownership cannot be transferred to this administrator. The default
     * value is <code>false</code>.
     * <p>This metadata is used to avoid ownership transfer migration to an administrator with a
     * version which does not yet support it.
     * <p>Usage:
     * <pre>
     * &lt;receiver name="..." android:permission="android.permission.BIND_DEVICE_ADMIN"&gt;
     *     &lt;meta-data
     *         android:name="android.app.device_admin"
     *         android:resource="@xml/..." /&gt;
     *     &lt;meta-data
     *         android:name="android.app.support_transfer_ownership"
     *         android:value="true" /&gt;
     * &lt;/receiver&gt;
     * </pre>
     *
     * @see DevicePolicyManager#transferOwnership(ComponentName, ComponentName, PersistableBundle)
     */
    public static final String SUPPORT_TRANSFER_OWNERSHIP_META_DATA =
            "android.app.support_transfer_ownership";

    private DevicePolicyManager mManager;
    private ComponentName mWho;

+4 −3
Original line number Diff line number Diff line
@@ -9302,9 +9302,10 @@ public class DevicePolicyManager {
     * after calling this method.
     *
     * <p>The incoming target administrator must have the
     * {@link DeviceAdminReceiver#SUPPORT_TRANSFER_OWNERSHIP_META_DATA} <code>meta-data</code> tag
     * included in its corresponding <code>receiver</code> component with a value of {@code true}.
     * Otherwise an {@link IllegalArgumentException} will be thrown.
     * <code>&lt;support-transfer-ownership /&gt;</code> tag inside the
     * <code>&lt;device-admin&gt;&lt;/device-admin&gt;</code> tags in the xml file referenced by
     * {@link DeviceAdminReceiver#DEVICE_ADMIN_META_DATA}. Otherwise an
     * {@link IllegalArgumentException} will be thrown.
     *
     * @param admin which {@link DeviceAdminReceiver} this request is associated with
     * @param target which {@link DeviceAdminReceiver} we want the new administrator to be
+1 −2
Original line number Diff line number Diff line
@@ -12658,8 +12658,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
        final DeviceAdminInfo incomingDeviceInfo = findAdmin(target, callingUserId,
                /* throwForMissingPermission= */ true);
        checkActiveAdminPrecondition(target, incomingDeviceInfo, policy);
        if (!incomingDeviceInfo.getActivityInfo().metaData
                .getBoolean(DeviceAdminReceiver.SUPPORT_TRANSFER_OWNERSHIP_META_DATA, false)) {
        if (!incomingDeviceInfo.supportsTransferOwnership()) {
            throw new IllegalArgumentException("Provided target does not support "
                    + "ownership transfer.");
        }