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

Commit e951acaf authored by Lucy Miyuki Narita's avatar Lucy Miyuki Narita
Browse files

Add new Lock Task feature to enable Quick Settings.

This should only be settable by the system supervision app.

Bug: 401577081
Bug: 373403206
Test:  atest FrameworksServicesTests:DevicePolicyManagerTest and local
build.
Flag: android.app.supervision.flags.enable_lock_task_feature_quick_settings

Change-Id: I956fc5d989846e12260ac60b82ca369f0d7d7583
parent 661eb505
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1443,6 +1443,7 @@ package android.app.admin {
    field public static final int FLAG_SUPPORTED_MODES_DEVICE_OWNER = 4; // 0x4
    field public static final int FLAG_SUPPORTED_MODES_ORGANIZATION_OWNED = 1; // 0x1
    field public static final int FLAG_SUPPORTED_MODES_PERSONALLY_OWNED = 2; // 0x2
    field @FlaggedApi("android.app.supervision.flags.enable_lock_task_feature_quick_settings") public static final int LOCK_TASK_FEATURE_QUICK_SETTINGS = 128; // 0x80
    field public static final int PROVISIONING_TRIGGER_CLOUD_ENROLLMENT = 1; // 0x1
    field public static final int PROVISIONING_TRIGGER_MANAGED_ACCOUNT = 4; // 0x4
    field public static final int PROVISIONING_TRIGGER_NFC = 5; // 0x5
+12 −1
Original line number Diff line number Diff line
@@ -3064,6 +3064,16 @@ public class DevicePolicyManager {
     */
    public static final int LOCK_TASK_FEATURE_BLOCK_ACTIVITY_START_IN_TASK = 1 << 6;
    /**
     * Enable quick settings actions during LockTask mode. This feature flag can only be used in
     * combination with {@link #LOCK_TASK_FEATURE_NOTIFICATIONS}.
     *
     * @hide
     */
    @FlaggedApi(android.app.supervision.flags.Flags.FLAG_ENABLE_LOCK_TASK_FEATURE_QUICK_SETTINGS)
    @SystemApi
    public static final int LOCK_TASK_FEATURE_QUICK_SETTINGS = 1 << 7;
    /**
     * Flags supplied to {@link #setLockTaskFeatures(ComponentName, int)}.
     *
@@ -3078,7 +3088,8 @@ public class DevicePolicyManager {
            LOCK_TASK_FEATURE_OVERVIEW,
            LOCK_TASK_FEATURE_GLOBAL_ACTIONS,
            LOCK_TASK_FEATURE_KEYGUARD,
            LOCK_TASK_FEATURE_BLOCK_ACTIVITY_START_IN_TASK
            LOCK_TASK_FEATURE_BLOCK_ACTIVITY_START_IN_TASK,
            LOCK_TASK_FEATURE_QUICK_SETTINGS
    })
    public @interface LockTaskFeature {}
+8 −0
Original line number Diff line number Diff line
@@ -80,3 +80,11 @@ flag {
  description: "Flag that enables the web content filters screen with Supervision settings entry point"
  bug: "395134536"
}

flag {
  name: "enable_lock_task_feature_quick_settings"
  is_exported: true
  namespace: "supervision"
  description: "Enables usage of lock task feature to enable Quick Settings on LockTask mode"
  bug: "401576820"
}
+6 −0
Original line number Diff line number Diff line
@@ -123,6 +123,12 @@ public class LockTaskController {
        STATUS_BAR_FLAG_MAP_LOCKED.append(DevicePolicyManager.LOCK_TASK_FEATURE_GLOBAL_ACTIONS,
                new Pair<>(StatusBarManager.DISABLE_NONE,
                        StatusBarManager.DISABLE2_GLOBAL_ACTIONS));

        if (android.app.supervision.flags.Flags.enableLockTaskFeatureQuickSettings()) {
            STATUS_BAR_FLAG_MAP_LOCKED.append(DevicePolicyManager.LOCK_TASK_FEATURE_QUICK_SETTINGS,
                    new Pair<>(StatusBarManager.DISABLE_NONE,
                            StatusBarManager.DISABLE2_QUICK_SETTINGS));
        }
    }

    /** Tag used for disabling of keyguard */
+18 −0
Original line number Diff line number Diff line
@@ -166,6 +166,7 @@ import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_HOME;
import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_KEYGUARD;
import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_NOTIFICATIONS;
import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW;
import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_QUICK_SETTINGS;
import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_SYSTEM_INFO;
import static android.app.admin.DevicePolicyManager.NEARBY_STREAMING_NOT_CONTROLLED_BY_POLICY;
import static android.app.admin.DevicePolicyManager.NON_ORG_OWNED_PROFILE_KEYGUARD_FEATURES_AFFECT_OWNER;
@@ -14911,6 +14912,23 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            "Cannot use LOCK_TASK_FEATURE_NOTIFICATIONS without LOCK_TASK_FEATURE_HOME");
        CallerIdentity caller = getCallerIdentity(who, callerPackageName);
        if (android.app.supervision.flags.Flags.enableLockTaskFeatureQuickSettings()) {
            boolean hasQuickSettings = (flags & LOCK_TASK_FEATURE_QUICK_SETTINGS) != 0;
            Preconditions.checkArgument(hasNotification || !hasQuickSettings,
                    "Cannot use LOCK_TASK_FEATURE_QUICK_SETTINGS without "
                            + "LOCK_TASK_FEATURE_NOTIFICATIONS");
            synchronized (getLockObject()) {
                // TODO(b/378102594): Remove access for test admins.
                final boolean isTestAdmin = hasActiveSupervisionTestAdminLocked(caller.getUserId());
                Preconditions.checkCallAuthorization(!hasQuickSettings
                                || isCallerSystemSupervisionRoleHolder(caller)
                                || isTestAdmin,
                        "Caller (%s) needs to hold SYSTEM_SUPERVISION role to enable "
                                + "Quick Settings on LockTask mode", caller);
            }
        }
        synchronized (getLockObject()) {
            checkCanExecuteOrThrowUnsafe(DevicePolicyManager.OPERATION_SET_LOCK_TASK_FEATURES);
        }
Loading