From 3c58cfe2d98219ec2628835d08ee964c0208ecd7 Mon Sep 17 00:00:00 2001 From: Mahaver Chopra Date: Tue, 1 Nov 2016 21:25:59 +0000 Subject: [PATCH] Add provisioning successful intent Add a new activity intent action which will be launched after provisioning has successfully completed. Currently when provisioning is done we junt send an ordered broadcast for PO and a normal brodcast for DO case. This results in HOME screen being launched for 2 sec. To remove this jank we have introduced a new intent action which can be directly received by the DPC in their post provisioning activity. Test: b/33138551, this bug tracks the cts coverage for the new action. Bug: 30956199 Change-Id: I889b0cec74799bb7be93de48d46d5da68f17be92 --- api/current.txt | 1 + api/system-current.txt | 1 + api/test-current.txt | 1 + .../app/admin/DevicePolicyManager.java | 29 +++++++++++++++++++ 4 files changed, 32 insertions(+) diff --git a/api/current.txt b/api/current.txt index 36a843882f67f..994d9b4a4b4c8 100644 --- a/api/current.txt +++ b/api/current.txt @@ -6116,6 +6116,7 @@ package android.app.admin { field public static final java.lang.String ACTION_ADD_DEVICE_ADMIN = "android.app.action.ADD_DEVICE_ADMIN"; field public static final java.lang.String ACTION_DEVICE_OWNER_CHANGED = "android.app.action.DEVICE_OWNER_CHANGED"; field public static final java.lang.String ACTION_MANAGED_PROFILE_PROVISIONED = "android.app.action.MANAGED_PROFILE_PROVISIONED"; + field public static final java.lang.String ACTION_PROVISIONING_SUCCESSFUL = "android.app.action.PROVISIONING_SUCCESSFUL"; field public static final java.lang.String ACTION_PROVISION_MANAGED_DEVICE = "android.app.action.PROVISION_MANAGED_DEVICE"; field public static final java.lang.String ACTION_PROVISION_MANAGED_PROFILE = "android.app.action.PROVISION_MANAGED_PROFILE"; field public static final java.lang.String ACTION_SET_NEW_PARENT_PROFILE_PASSWORD = "android.app.action.SET_NEW_PARENT_PROFILE_PASSWORD"; diff --git a/api/system-current.txt b/api/system-current.txt index e4d53f0778f41..f72314cc4e10b 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -6289,6 +6289,7 @@ package android.app.admin { field public static final java.lang.String ACTION_ADD_DEVICE_ADMIN = "android.app.action.ADD_DEVICE_ADMIN"; field public static final java.lang.String ACTION_DEVICE_OWNER_CHANGED = "android.app.action.DEVICE_OWNER_CHANGED"; field public static final java.lang.String ACTION_MANAGED_PROFILE_PROVISIONED = "android.app.action.MANAGED_PROFILE_PROVISIONED"; + field public static final java.lang.String ACTION_PROVISIONING_SUCCESSFUL = "android.app.action.PROVISIONING_SUCCESSFUL"; field public static final java.lang.String ACTION_PROVISION_FINALIZATION = "android.app.action.PROVISION_FINALIZATION"; field public static final java.lang.String ACTION_PROVISION_MANAGED_DEVICE = "android.app.action.PROVISION_MANAGED_DEVICE"; field public static final java.lang.String ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE = "android.app.action.PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE"; diff --git a/api/test-current.txt b/api/test-current.txt index 1d583bb608059..d93dc5715b89f 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -6125,6 +6125,7 @@ package android.app.admin { field public static final java.lang.String ACTION_ADD_DEVICE_ADMIN = "android.app.action.ADD_DEVICE_ADMIN"; field public static final java.lang.String ACTION_DEVICE_OWNER_CHANGED = "android.app.action.DEVICE_OWNER_CHANGED"; field public static final java.lang.String ACTION_MANAGED_PROFILE_PROVISIONED = "android.app.action.MANAGED_PROFILE_PROVISIONED"; + field public static final java.lang.String ACTION_PROVISIONING_SUCCESSFUL = "android.app.action.PROVISIONING_SUCCESSFUL"; field public static final java.lang.String ACTION_PROVISION_MANAGED_DEVICE = "android.app.action.PROVISION_MANAGED_DEVICE"; field public static final java.lang.String ACTION_PROVISION_MANAGED_PROFILE = "android.app.action.PROVISION_MANAGED_PROFILE"; field public static final java.lang.String ACTION_SET_NEW_PARENT_PROFILE_PASSWORD = "android.app.action.SET_NEW_PARENT_PROFILE_PASSWORD"; diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 538e52b970131..d53cfdecc9bb7 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -158,6 +158,11 @@ public class DevicePolicyManager { * managed profile and the {@link #ACTION_MANAGED_PROFILE_PROVISIONED} broadcast is sent in * the primary profile. * + *

From version {@link android.os.Build.VERSION_CODES#O}, when managed provisioning has + * completed, along with the above broadcast, activity intent + * {@link #ACTION_PROVISIONING_SUCCESSFUL} will also be sent to the application specified in + * the provisioning intent. + * *

If provisioning fails, the managedProfile is removed so the device returns to its * previous state. * @@ -232,6 +237,10 @@ public class DevicePolicyManager { * {@link DeviceAdminReceiver#ACTION_PROFILE_PROVISIONING_COMPLETE} is broadcast to the * device owner. * + *

From version {@link android.os.Build.VERSION_CODES#O}, when device owner provisioning has + * completed, along with the above broadcast, activity intent + * {@link #ACTION_PROVISIONING_SUCCESSFUL} will also be sent to the device owner. + * *

If provisioning fails, the device is factory reset. * *

A result code of {@link android.app.Activity#RESULT_OK} implies that the synchronous part @@ -321,6 +330,10 @@ public class DevicePolicyManager { * {@link DeviceAdminReceiver#ACTION_PROFILE_PROVISIONING_COMPLETE} is broadcast to the * device owner. * + *

From version {@link android.os.Build.VERSION_CODES#O}, when device owner provisioning has + * completed, along with the above broadcast, activity intent + * {@link #ACTION_PROVISIONING_SUCCESSFUL} will also be sent to the device owner. + * *

If provisioning fails, the device is factory reset. * *

A result code of {@link android.app.Activity#RESULT_OK} implies that the synchronous part @@ -732,6 +745,22 @@ public class DevicePolicyManager { public static final String ACTION_MANAGED_PROFILE_PROVISIONED = "android.app.action.MANAGED_PROFILE_PROVISIONED"; + /** + * Activity action: This activity action is sent to indicate that provisioning of a managed + * profile or managed device has completed successfully. It'll be sent at the same time as + * {@link DeviceAdminReceiver#ACTION_PROFILE_PROVISIONING_COMPLETE} broadcast but this will be + * delivered faster as it's an activity intent. + * + *

The intent is only sent to the application on the profile that requested provisioning. In + * the device owner case the profile is the primary user. + * + * @see #ACTION_PROVISION_MANAGED_PROFILE + * @see #ACTION_PROVISION_MANAGED_DEVICE + */ + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_PROVISIONING_SUCCESSFUL = + "android.app.action.PROVISIONING_SUCCESSFUL"; + /** * A boolean extra indicating whether device encryption can be skipped as part of device owner * or managed profile provisioning.