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) {