Add DLC to lock task allow list only during provision

Test: make RunDeviceLockControllerRoboTests
Test: maually verified setup flow and lock/unlock works
Fix: 286609566

Change-Id: Ibca0872e88d4763a994385a2aa1482c8fe8c80a1
diff --git a/DeviceLockController/res/values/config.xml b/DeviceLockController/res/values/config.xml
index f2e4edc..526397c 100644
--- a/DeviceLockController/res/values/config.xml
+++ b/DeviceLockController/res/values/config.xml
@@ -18,9 +18,7 @@
     <!-- Allowed device identifiers bitmap -->
     <integer name="device_id_type_bitmap">3</integer>
     <!-- Packages allow-listed in locked mode -->
-    <array name="lock_task_allowlist">
-        <item>com.android.devicelockcontroller</item>
-    </array>
+    <array name="lock_task_allowlist"/>
 
     <!-- Port number of the check in server -->
     <integer name="check_in_server_port_number">8843</integer>
diff --git a/DeviceLockController/src/com/android/devicelockcontroller/policy/LockTaskModePolicyHandler.java b/DeviceLockController/src/com/android/devicelockcontroller/policy/LockTaskModePolicyHandler.java
index 99d3fdb..5f2e650 100644
--- a/DeviceLockController/src/com/android/devicelockcontroller/policy/LockTaskModePolicyHandler.java
+++ b/DeviceLockController/src/com/android/devicelockcontroller/policy/LockTaskModePolicyHandler.java
@@ -66,10 +66,10 @@
     @VisibleForTesting
     static final int DEFAULT_LOCK_TASK_FEATURES =
             (DevicePolicyManager.LOCK_TASK_FEATURE_SYSTEM_INFO
-             | DevicePolicyManager.LOCK_TASK_FEATURE_KEYGUARD
-             | DevicePolicyManager.LOCK_TASK_FEATURE_HOME
-             | DevicePolicyManager.LOCK_TASK_FEATURE_GLOBAL_ACTIONS
-             | DevicePolicyManager.LOCK_TASK_FEATURE_BLOCK_ACTIVITY_START_IN_TASK);
+                    | DevicePolicyManager.LOCK_TASK_FEATURE_KEYGUARD
+                    | DevicePolicyManager.LOCK_TASK_FEATURE_HOME
+                    | DevicePolicyManager.LOCK_TASK_FEATURE_GLOBAL_ACTIONS
+                    | DevicePolicyManager.LOCK_TASK_FEATURE_BLOCK_ACTIVITY_START_IN_TASK);
     private static final String TAG = "LockTaskModePolicyHandler";
     private final Context mContext;
     private final DevicePolicyManager mDpm;
@@ -101,9 +101,13 @@
                 return disableLockTaskMode();
             case SETUP_IN_PROGRESS:
             case SETUP_SUCCEEDED:
+                return Futures.transformAsync(composeAllowlist(/* includeController= */ true),
+                        empty -> enableLockTaskMode(),
+                        MoreExecutors.directExecutor());
             case KIOSK_SETUP:
             case LOCKED:
-                return Futures.transformAsync(composeAllowlist(), empty -> enableLockTaskMode(),
+                return Futures.transformAsync(composeAllowlist(/* includeController= */ false),
+                        empty -> enableLockTaskMode(),
                         MoreExecutors.directExecutor());
             default:
                 return Futures.immediateFailedFuture(
@@ -205,7 +209,7 @@
      *   4. Kiosk app
      *   5. Append the packages allow-listed through setup parameters.
      */
-    private ListenableFuture<Void> composeAllowlist() {
+    private ListenableFuture<Void> composeAllowlist(boolean includeController) {
         final String[] allowlistArray =
                 mContext.getResources().getStringArray(R.array.lock_task_allowlist);
         final ArrayList<String> allowlistPackages = new ArrayList<>(Arrays.asList(allowlistArray));
@@ -213,20 +217,26 @@
         allowlistSystemAppForAction(Settings.ACTION_SETTINGS, allowlistPackages);
         allowlistInputMethod(allowlistPackages);
         allowlistCellBroadcastReceiver(allowlistPackages);
-        final ListenableFuture<String> kioskPackageTask =
-                SetupParametersClient.getInstance().getKioskPackage();
-        final ListenableFuture<List<String>> kioskAllowlistTask =
-                SetupParametersClient.getInstance().getKioskAllowlist();
-        return Futures.transformAsync(
-                Futures.whenAllSucceed(kioskPackageTask, kioskAllowlistTask).call(
-                        () -> {
-                            allowlistPackages.add(Futures.getDone(kioskPackageTask));
-                            allowlistPackages.addAll(Futures.getDone(kioskAllowlistTask));
-                            return allowlistPackages;
-                        }, mContext.getMainExecutor()),
-                packagesList ->
-                        GlobalParametersClient.getInstance().setLockTaskAllowlist(packagesList),
-                mContext.getMainExecutor());
+        if (includeController) {
+            allowlistPackages.add(mContext.getPackageName());
+            return GlobalParametersClient.getInstance().setLockTaskAllowlist(allowlistPackages);
+
+        } else {
+            final ListenableFuture<String> kioskPackageTask =
+                    SetupParametersClient.getInstance().getKioskPackage();
+            final ListenableFuture<List<String>> kioskAllowlistTask =
+                    SetupParametersClient.getInstance().getKioskAllowlist();
+            return Futures.transformAsync(
+                    Futures.whenAllSucceed(kioskPackageTask, kioskAllowlistTask).call(
+                            () -> {
+                                allowlistPackages.add(Futures.getDone(kioskPackageTask));
+                                allowlistPackages.addAll(Futures.getDone(kioskAllowlistTask));
+                                return allowlistPackages;
+                            }, mContext.getMainExecutor()),
+                    packagesList ->
+                            GlobalParametersClient.getInstance().setLockTaskAllowlist(packagesList),
+                    mContext.getMainExecutor());
+        }
     }
 
     private void allowlistSystemAppForAction(String action, List<String> allowlistPackages) {