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

Commit cd36af73 authored by Eduard Dumitrescul's avatar Eduard Dumitrescul Committed by Markus S
Browse files

Do not allow to set device owner while accounts present

Bug: 417988098
Test: manual
Flag: EXEMPT BUGFIX
Cherrypick-From: https://googleplex-android-review.googlesource.com/q/commit:ebc43259914fe7892c36faaef09c1c1eedb2663f
Merged-In: I51c7253b124ab524b817b17dc0aabbdb5ab12ac7
Change-Id: I51c7253b124ab524b817b17dc0aabbdb5ab12ac7
parent 73ca6039
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -226,6 +226,7 @@ import com.android.internal.util.JournaledFile;
import com.android.internal.util.Preconditions;
import com.android.internal.util.XmlUtils;
import com.android.internal.widget.LockPatternUtils;
import com.android.server.accounts.AccountManagerService;
import com.android.server.LocalServices;
import com.android.server.LockGuard;
import com.android.internal.util.StatLogger;
@@ -7259,6 +7260,17 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
        }
        final boolean hasIncompatibleAccountsOrNonAdb =
                hasIncompatibleAccountsOrNonAdbNoLock(userId, admin);
        if (!hasIncompatibleAccountsOrNonAdb) {
            synchronized (getLockObject()) {
                if (!isAdminTestOnlyLocked(admin, userId) && hasAccountsOnAnyUser()) {
                    Slog.w(LOG_TAG,
                            "Non test-only owner can't be installed with existing accounts.");
                    return false;
                }
            }
        }
        synchronized (getLockObject()) {
            enforceCanSetDeviceOwnerLocked(admin, userId, hasIncompatibleAccountsOrNonAdb);
            final ActiveAdmin activeAdmin = getActiveAdminUncheckedLocked(admin, userId);
@@ -13279,6 +13291,11 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager {
        return context.getResources().getString(R.string.config_managed_provisioning_package);
    }
    private boolean hasAccountsOnAnyUser() {
        AccountManagerService accountManagerService = AccountManagerService.getSingleton();
        return accountManagerService.getAllAccounts().length != 0;
    }
    /**
     * Truncates char sequence to maximum length, nulls are ignored.
     */