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

Commit 7c5d345c authored by Rafael Prado's avatar Rafael Prado
Browse files

Add migration code for SetKeyguardDisabledFeatures()

Test: Disable Keyguard features in TestDPC, enable flag, restart, check migration logs, check if the values are still on on TestDPC
Bug: 369350044
Bug: 336297680
Flag: android.app.admin.flags.set_keyguard_disabled_features_coexistence

Change-Id: Id5df67919dacb011c97b8527dd6f30fd5a73628c
parent 16843338
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -24161,6 +24161,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        String supervisionBackupId = "36.2.supervision-support";
        boolean supervisionMigrated = maybeMigrateResetPasswordTokenLocked(supervisionBackupId);
        supervisionMigrated |= maybeMigrateSuspendedPackagesLocked(supervisionBackupId);
        supervisionMigrated |= maybeMigrateSetKeyguardDisabledFeatures(supervisionBackupId);
        if (supervisionMigrated) {
            Slogf.i(LOG_TAG, "Backup made: " + supervisionBackupId);
        }
@@ -24174,6 +24175,38 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        // Additional migration steps should repeat the pattern above with a new backupId.
    }
    @GuardedBy("getLockObject()")
    private boolean maybeMigrateSetKeyguardDisabledFeatures(String backupId) {
        Slog.i(LOG_TAG, "Migrating set keyguard disabled features to policy engine");
        if (!Flags.setKeyguardDisabledFeaturesCoexistence()) {
            return false;
        }
        if (mOwners.isSetKeyguardDisabledFeaturesMigrated()) {
            return false;
        }
        // Create backup if none exists
        mDevicePolicyEngine.createBackup(backupId);
        try {
            iterateThroughDpcAdminsLocked((admin, enforcingAdmin) -> {
                if (admin.disabledKeyguardFeatures == 0) {
                    return;
                }
                int userId = enforcingAdmin.getUserId();
                mDevicePolicyEngine.setLocalPolicy(
                        PolicyDefinition.KEYGUARD_DISABLED_FEATURES,
                        enforcingAdmin,
                        new IntegerPolicyValue(admin.disabledKeyguardFeatures),
                        userId);
            });
        } catch (Exception e) {
            Slog.wtf(LOG_TAG, "Failed to migrate set keyguard disabled to policy engine", e);
        }
        Slog.i(LOG_TAG, "Marking set keyguard disabled features migration complete");
        mOwners.markSetKeyguardDisabledFeaturesMigrated();
        return true;
    }
    private void migratePermissionGrantStatePolicies() {
        Slogf.i(LOG_TAG, "Migrating PERMISSION_GRANT policy to device policy engine.");
        for (UserInfo userInfo : mUserManager.getUsers()) {
+13 −0
Original line number Diff line number Diff line
@@ -695,6 +695,19 @@ class Owners {
        }
    }

    void markSetKeyguardDisabledFeaturesMigrated() {
        synchronized (mData) {
            mData.mSetKeyguardDisabledFeaturesMigrated = true;
            mData.writeDeviceOwner();
        }
    }

    boolean isSetKeyguardDisabledFeaturesMigrated() {
        synchronized (mData) {
            return mData.mSetKeyguardDisabledFeaturesMigrated;
        }
    }

    @GuardedBy("mData")
    void pushToAppOpsLocked() {
        if (!mSystemReady) {
+11 −0
Original line number Diff line number Diff line
@@ -95,6 +95,8 @@ class OwnersData {
            "resetPasswordWithTokenMigrated";
    private static final String ATTR_MEMORY_TAGGING_MIGRATED =
            "memoryTaggingMigrated";
    private static final String ATTR_SET_KEYGUARD_DISABLED_FEATURES_MIGRATED =
            "setKeyguardDisabledFeaturesMigrated";

    private static final String ATTR_MIGRATED_POST_UPGRADE = "migratedPostUpgrade";

@@ -129,6 +131,7 @@ class OwnersData {
    boolean mSuspendedPackagesMigrated = false;
    boolean mResetPasswordWithTokenMigrated = false;
    boolean mMemoryTaggingMigrated = false;
    boolean mSetKeyguardDisabledFeaturesMigrated = false;

    boolean mPoliciesMigratedPostUpdate = false;

@@ -434,6 +437,10 @@ class OwnersData {
                out.attributeBoolean(null, ATTR_MEMORY_TAGGING_MIGRATED,
                        mMemoryTaggingMigrated);
            }
            if (Flags.setKeyguardDisabledFeaturesCoexistence()) {
                out.attributeBoolean(null, ATTR_SET_KEYGUARD_DISABLED_FEATURES_MIGRATED,
                        mSetKeyguardDisabledFeaturesMigrated);
            }
            out.endTag(null, TAG_POLICY_ENGINE_MIGRATION);

        }
@@ -510,6 +517,10 @@ class OwnersData {
                    mMemoryTaggingMigrated = Flags.setMtePolicyCoexistence()
                            && parser.getAttributeBoolean(null,
                            ATTR_MEMORY_TAGGING_MIGRATED, false);
                    mSetKeyguardDisabledFeaturesMigrated =
                            Flags.setKeyguardDisabledFeaturesCoexistence()
                                    && parser.getAttributeBoolean(null,
                                    ATTR_SET_KEYGUARD_DISABLED_FEATURES_MIGRATED, false);
                    break;
                default:
                    Slog.e(TAG, "Unexpected tag: " + tag);