OSDN Git Service

Fixes to lock task API from API review
authorJason Monk <jmonk@google.com>
Wed, 13 Aug 2014 20:29:08 +0000 (16:29 -0400)
committerJason Monk <jmonk@google.com>
Thu, 14 Aug 2014 15:37:58 +0000 (11:37 -0400)
Adding ComponentNames and some splitting/renaming of broadcasts.

Bug: 17005622
Change-Id: I9ece3553310fb20b0c3c3e4032b408e86384363a

api/current.txt
core/java/android/app/admin/DeviceAdminReceiver.java
core/java/android/app/admin/DevicePolicyManager.java
core/java/android/app/admin/IDevicePolicyManager.aidl
services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java

index eb991ad..4434483 100644 (file)
@@ -5367,7 +5367,8 @@ package android.app.admin {
     method public java.lang.CharSequence onDisableRequested(android.content.Context, android.content.Intent);
     method public void onDisabled(android.content.Context, android.content.Intent);
     method public void onEnabled(android.content.Context, android.content.Intent);
-    method public void onLockTaskModeChanged(android.content.Context, android.content.Intent, boolean, java.lang.String);
+    method public void onLockTaskModeEntering(android.content.Context, android.content.Intent, java.lang.String);
+    method public void onLockTaskModeExiting(android.content.Context, android.content.Intent);
     method public void onPasswordChanged(android.content.Context, android.content.Intent);
     method public void onPasswordExpiring(android.content.Context, android.content.Intent);
     method public void onPasswordFailed(android.content.Context, android.content.Intent);
@@ -5377,7 +5378,8 @@ package android.app.admin {
     field public static final java.lang.String ACTION_DEVICE_ADMIN_DISABLED = "android.app.action.DEVICE_ADMIN_DISABLED";
     field public static final java.lang.String ACTION_DEVICE_ADMIN_DISABLE_REQUESTED = "android.app.action.DEVICE_ADMIN_DISABLE_REQUESTED";
     field public static final java.lang.String ACTION_DEVICE_ADMIN_ENABLED = "android.app.action.DEVICE_ADMIN_ENABLED";
-    field public static final java.lang.String ACTION_LOCK_TASK_CHANGED = "android.app.action.ACTION_LOCK_TASK_CHANGED";
+    field public static final java.lang.String ACTION_LOCK_TASK_ENTERING = "android.app.action.ACTION_LOCK_TASK_ENTERING";
+    field public static final java.lang.String ACTION_LOCK_TASK_EXITING = "android.app.action.ACTION_LOCK_TASK_EXITING";
     field public static final java.lang.String ACTION_PASSWORD_CHANGED = "android.app.action.ACTION_PASSWORD_CHANGED";
     field public static final java.lang.String ACTION_PASSWORD_EXPIRING = "android.app.action.ACTION_PASSWORD_EXPIRING";
     field public static final java.lang.String ACTION_PASSWORD_FAILED = "android.app.action.ACTION_PASSWORD_FAILED";
@@ -5385,7 +5387,6 @@ package android.app.admin {
     field public static final java.lang.String ACTION_PROFILE_PROVISIONING_COMPLETE = "android.app.action.ACTION_PROFILE_PROVISIONING_COMPLETE";
     field public static final java.lang.String DEVICE_ADMIN_META_DATA = "android.app.device_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_ENTERING = "android.app.extra.LOCK_TASK_ENTERING";
     field public static final java.lang.String EXTRA_LOCK_TASK_PACKAGE = "android.app.extra.LOCK_TASK_PACKAGE";
   }
 
@@ -5454,7 +5455,7 @@ package android.app.admin {
     method public void setCrossProfileCallerIdDisabled(android.content.ComponentName, boolean);
     method public void setGlobalSetting(android.content.ComponentName, java.lang.String, java.lang.String);
     method public void setKeyguardDisabledFeatures(android.content.ComponentName, int);
-    method public void setLockTaskPackages(java.lang.String[]) throws java.lang.SecurityException;
+    method public void setLockTaskPackages(android.content.ComponentName, java.lang.String[]) throws java.lang.SecurityException;
     method public void setMasterVolumeMuted(android.content.ComponentName, boolean);
     method public void setMaximumFailedPasswordsForWipe(android.content.ComponentName, int);
     method public void setMaximumTimeToLock(android.content.ComponentName, long);
index 1f168c3..15def09 100644 (file)
@@ -167,28 +167,30 @@ public class DeviceAdminReceiver extends BroadcastReceiver {
 
     /**
      * Action sent to a device administrator to notify that the device is entering
-     * or exiting lock task mode from an authorized package.  The extra
-     * {@link #EXTRA_LOCK_TASK_ENTERING} will describe whether entering or exiting
-     * the mode.  If entering, the extra {@link #EXTRA_LOCK_TASK_PACKAGE} will describe
-     * the authorized package using lock task mode.
+     * lock task mode from an authorized package.  The extra {@link #EXTRA_LOCK_TASK_PACKAGE}
+     * will describe the authorized package using lock task mode.
      *
-     * @see DevicePolicyManager#isLockTaskPermitted
+     * @see DevicePolicyManager#isLockTaskPermitted(String)
      *
      * <p>The calling device admin must be the device owner or profile
      * owner to receive this broadcast.
      */
     @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
-    public static final String ACTION_LOCK_TASK_CHANGED
-            = "android.app.action.ACTION_LOCK_TASK_CHANGED";
+    public static final String ACTION_LOCK_TASK_ENTERING
+            = "android.app.action.ACTION_LOCK_TASK_ENTERING";
 
     /**
-     * A boolean describing whether the device is currently entering or exiting
-     * lock task mode.
+     * Action sent to a device administrator to notify that the device is exiting
+     * lock task mode from an authorized package.
      *
-     * @see #ACTION_LOCK_TASK_CHANGED
+     * @see DevicePolicyManager#isLockTaskPermitted(String)
+     *
+     * <p>The calling device admin must be the device owner or profile
+     * owner to receive this broadcast.
      */
-    public static final String EXTRA_LOCK_TASK_ENTERING =
-            "android.app.extra.LOCK_TASK_ENTERING";
+    @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION)
+    public static final String ACTION_LOCK_TASK_EXITING
+            = "android.app.action.ACTION_LOCK_TASK_EXITING";
 
     /**
      * A boolean describing whether the device is currently entering or exiting
@@ -380,16 +382,24 @@ public class DeviceAdminReceiver extends BroadcastReceiver {
     }
 
     /**
-     * Called when a device is entering or exiting lock task mode by a package
-     * authorized by {@link DevicePolicyManager#isLockTaskPermitted(String)}
+     * Called when a device is entering lock task mode by a package authorized
+     * by {@link DevicePolicyManager#isLockTaskPermitted(String)}
      *
      * @param context The running context as per {@link #onReceive}.
      * @param intent The received intent as per {@link #onReceive}.
-     * @param isEnteringLockTask Whether the device is entering or exiting lock task mode.
      * @param pkg If entering, the authorized package using lock task mode, otherwise null.
      */
-    public void onLockTaskModeChanged(Context context, Intent intent, boolean isEnteringLockTask,
-            String pkg) {
+    public void onLockTaskModeEntering(Context context, Intent intent, String pkg) {
+    }
+
+    /**
+     * Called when a device is exiting lock task mode by a package authorized
+     * by {@link DevicePolicyManager#isLockTaskPermitted(String)}
+     *
+     * @param context The running context as per {@link #onReceive}.
+     * @param intent The received intent as per {@link #onReceive}.
+     */
+    public void onLockTaskModeExiting(Context context, Intent intent) {
     }
 
     /**
@@ -421,10 +431,11 @@ public class DeviceAdminReceiver extends BroadcastReceiver {
             onPasswordExpiring(context, intent);
         } else if (ACTION_PROFILE_PROVISIONING_COMPLETE.equals(action)) {
             onProfileProvisioningComplete(context, intent);
-        } else if (ACTION_LOCK_TASK_CHANGED.equals(action)) {
-            boolean isEntering = intent.getBooleanExtra(EXTRA_LOCK_TASK_ENTERING, false);
+        } else if (ACTION_LOCK_TASK_ENTERING.equals(action)) {
             String pkg = intent.getStringExtra(EXTRA_LOCK_TASK_PACKAGE);
-            onLockTaskModeChanged(context, intent, isEntering, pkg);
+            onLockTaskModeEntering(context, intent, pkg);
+        } else if (ACTION_LOCK_TASK_EXITING.equals(action)) {
+            onLockTaskModeExiting(context, intent);
         }
     }
 }
index ca6b1e8..4bf0354 100644 (file)
@@ -2906,15 +2906,17 @@ public class DevicePolicyManager {
      *
      * This function can only be called by the device owner.
      * @param packages The list of packages allowed to enter lock task mode
+     * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
      *
      * @see Activity#startLockTask()
      * @see DeviceAdminReceiver#onLockTaskModeChanged(Context, Intent, boolean, String)
      * @see UserManager#DISALLOW_CREATE_WINDOWS
      */
-    public void setLockTaskPackages(String[] packages) throws SecurityException {
+    public void setLockTaskPackages(ComponentName admin, String[] packages)
+            throws SecurityException {
         if (mService != null) {
             try {
-                mService.setLockTaskPackages(packages);
+                mService.setLockTaskPackages(admin, packages);
             } catch (RemoteException e) {
                 Log.w(TAG, "Failed talking with device policy service", e);
             }
@@ -2923,12 +2925,14 @@ public class DevicePolicyManager {
 
     /**
      * This function returns the list of packages allowed to start the lock task mode.
+     *
+     * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
      * @hide
      */
-    public String[] getLockTaskPackages() {
+    public String[] getLockTaskPackages(ComponentName admin) {
         if (mService != null) {
             try {
-                return mService.getLockTaskPackages();
+                return mService.getLockTaskPackages(admin);
             } catch (RemoteException e) {
                 Log.w(TAG, "Failed talking with device policy service", e);
             }
index 8954c0d..324b963 100644 (file)
@@ -153,8 +153,8 @@ interface IDevicePolicyManager {
     String[] getAccountTypesWithManagementDisabled();
     String[] getAccountTypesWithManagementDisabledAsUser(int userId);
 
-    void setLockTaskPackages(in String[] packages);
-    String[] getLockTaskPackages();
+    void setLockTaskPackages(in ComponentName who, in String[] packages);
+    String[] getLockTaskPackages(in ComponentName who);
     boolean isLockTaskPermitted(in String pkg);
 
     void setGlobalSetting(in ComponentName who, in String setting, in String value);
index fc96991..f6424a7 100644 (file)
@@ -4378,44 +4378,39 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
      * This function can only be called by the device owner.
      * @param components The list of components allowed to enter lock task mode.
      */
-    public void setLockTaskPackages(String[] packages) throws SecurityException {
-        // Get the package names of the caller.
-        int uid = Binder.getCallingUid();
-        String[] packageNames = mContext.getPackageManager().getPackagesForUid(uid);
-
+    public void setLockTaskPackages(ComponentName who, String[] packages) throws SecurityException {
         synchronized (this) {
-            // Check whether any of the package name is the device owner.
-            for (int i=0; i<packageNames.length; i++) {
-                String packageName = packageNames[i];
-                int userHandle = UserHandle.getUserId(uid);
-                if (isDeviceOwner(packageName)) {
-
-                    // If a package name is the device owner,
-                    // we update the component list.
-                    DevicePolicyData policy = getUserData(userHandle);
-                    policy.mLockTaskPackages.clear();
-                    if (packages != null) {
-                        for (int j = 0; j < packages.length; j++) {
-                            String pkg = packages[j];
-                            policy.mLockTaskPackages.add(pkg);
-                        }
-                    }
+            if (who == null) {
+                throw new NullPointerException("ComponentName is null");
+            }
+            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
 
-                    // Store the settings persistently.
-                    saveSettingsLocked(userHandle);
-                    return;
+            int userHandle = Binder.getCallingUserHandle().getIdentifier();
+            DevicePolicyData policy = getUserData(userHandle);
+            policy.mLockTaskPackages.clear();
+            if (packages != null) {
+                for (int j = 0; j < packages.length; j++) {
+                    String pkg = packages[j];
+                    policy.mLockTaskPackages.add(pkg);
                 }
             }
+
+            // Store the settings persistently.
+            saveSettingsLocked(userHandle);
         }
-        throw new SecurityException();
     }
 
     /**
      * This function returns the list of components allowed to start the task lock mode.
      */
-    public String[] getLockTaskPackages() {
+    public String[] getLockTaskPackages(ComponentName who) {
         synchronized (this) {
-            int userHandle = UserHandle.USER_OWNER;
+            if (who == null) {
+                throw new NullPointerException("ComponentName is null");
+            }
+            getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER);
+
+            int userHandle = Binder.getCallingUserHandle().getIdentifier();
             DevicePolicyData policy = getUserData(userHandle);
             return policy.mLockTaskPackages.toArray(new String[0]);
         }
@@ -4453,15 +4448,18 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
         synchronized (this) {
             final DevicePolicyData policy = getUserData(userHandle);
             Bundle adminExtras = new Bundle();
-            adminExtras.putBoolean(DeviceAdminReceiver.EXTRA_LOCK_TASK_ENTERING, isEnabled);
             adminExtras.putString(DeviceAdminReceiver.EXTRA_LOCK_TASK_PACKAGE, pkg);
             for (ActiveAdmin admin : policy.mAdminList) {
                 boolean ownsDevice = isDeviceOwner(admin.info.getPackageName());
                 boolean ownsProfile = (getProfileOwner(userHandle) != null
                         && getProfileOwner(userHandle).equals(admin.info.getPackageName()));
                 if (ownsDevice || ownsProfile) {
-                    sendAdminCommandLocked(admin, DeviceAdminReceiver.ACTION_LOCK_TASK_CHANGED,
-                            adminExtras, null);
+                    if (isEnabled) {
+                        sendAdminCommandLocked(admin, DeviceAdminReceiver.ACTION_LOCK_TASK_ENTERING,
+                                adminExtras, null);
+                    } else {
+                        sendAdminCommandLocked(admin, DeviceAdminReceiver.ACTION_LOCK_TASK_EXITING);
+                    }
                 }
             }
         }