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

Commit 7d6cf6f0 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Minor bug fixes related to package/dpc removal" into udc-dev am: 646ad055

parents bb29b528 646ad055
Loading
Loading
Loading
Loading
+36 −10
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@ import static android.content.pm.UserProperties.INHERIT_DEVICE_POLICY_FROM_PAREN
import android.Manifest;
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.app.AppGlobals;
import android.app.BroadcastOptions;
import android.app.BroadcastOptions;
import android.app.admin.DevicePolicyIdentifiers;
import android.app.admin.DevicePolicyIdentifiers;
import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyManager;
@@ -45,6 +46,7 @@ import android.content.pm.UserProperties;
import android.os.Binder;
import android.os.Binder;
import android.os.Bundle;
import android.os.Bundle;
import android.os.Environment;
import android.os.Environment;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.UserManager;
import android.os.UserManager;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;
@@ -1015,21 +1017,45 @@ final class DevicePolicyEngine {
    /**
    /**
     * Handles internal state related to packages getting updated.
     * Handles internal state related to packages getting updated.
     */
     */
    void handlePackageChanged(@Nullable String updatedPackage, int userId, boolean packageRemoved) {
    void handlePackageChanged(
        if (updatedPackage == null) {
            @Nullable String updatedPackage, int userId, @Nullable String removedDpcPackage) {
        Binder.withCleanCallingIdentity(() -> {
            Set<EnforcingAdmin> admins = getEnforcingAdminsOnUser(userId);
            if (removedDpcPackage != null) {
                for (EnforcingAdmin admin : admins) {
                    if (removedDpcPackage.equals(admin.getPackageName())) {
                        removePoliciesForAdmin(admin);
                        return;
                        return;
                    }
                    }
        if (packageRemoved) {
                }
            Set<EnforcingAdmin> admins = getEnforcingAdminsOnUser(userId);
            }
            for (EnforcingAdmin admin : admins) {
            for (EnforcingAdmin admin : admins) {
                if (admin.getPackageName().equals(updatedPackage)) {
                if (updatedPackage == null || updatedPackage.equals(admin.getPackageName())) {
                    if (!isPackageInstalled(admin.getPackageName(), userId)) {
                        Slogf.i(TAG, String.format(
                                "Admin package %s not found for user %d, removing admin policies",
                                admin.getPackageName(), userId));
                        // remove policies for the uninstalled package
                        // remove policies for the uninstalled package
                        removePoliciesForAdmin(admin);
                        removePoliciesForAdmin(admin);
                        return;
                    }
                    }
                }
                }
        } else {
            }
            if (updatedPackage != null) {
                updateDeviceAdminServiceOnPackageChanged(updatedPackage, userId);
                updateDeviceAdminServiceOnPackageChanged(updatedPackage, userId);
            }
            }
        });
    }

    private boolean isPackageInstalled(String packageName, int userId) {
        try {
            return AppGlobals.getPackageManager().getPackageInfo(
                    packageName, 0, userId) != null;
        } catch (RemoteException re) {
            // Shouldn't happen.
            Slogf.wtf(TAG, "Error handling package changes", re);
            return true;
        }
    }
    }


    /**
    /**
+10 −3
Original line number Original line Diff line number Diff line
@@ -1384,6 +1384,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
    private void handlePackagesChanged(@Nullable String packageName, int userHandle) {
    private void handlePackagesChanged(@Nullable String packageName, int userHandle) {
        boolean removedAdmin = false;
        boolean removedAdmin = false;
        String removedAdminPackage = null;
        if (VERBOSE_LOG) {
        if (VERBOSE_LOG) {
            Slogf.d(LOG_TAG, "Handling package changes package " + packageName
            Slogf.d(LOG_TAG, "Handling package changes package " + packageName
                    + " for user " + userHandle);
                    + " for user " + userHandle);
@@ -1406,6 +1407,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                                    "Admin package %s not found for user %d, removing active admin",
                                    "Admin package %s not found for user %d, removing active admin",
                                    packageName, userHandle));
                                    packageName, userHandle));
                            removedAdmin = true;
                            removedAdmin = true;
                            removedAdminPackage = adminPackage;
                            policy.mAdminList.remove(i);
                            policy.mAdminList.remove(i);
                            policy.mAdminMap.remove(aa.info.getComponent());
                            policy.mAdminMap.remove(aa.info.getComponent());
                            pushActiveAdminPackagesLocked(userHandle);
                            pushActiveAdminPackagesLocked(userHandle);
@@ -1439,7 +1441,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
                startOwnerService(userHandle, "package-broadcast");
                startOwnerService(userHandle, "package-broadcast");
            }
            }
            if (isPolicyEngineForFinanceFlagEnabled() || isPermissionCheckFlagEnabled()) {
            if (isPolicyEngineForFinanceFlagEnabled() || isPermissionCheckFlagEnabled()) {
                mDevicePolicyEngine.handlePackageChanged(packageName, userHandle, removedAdmin);
                mDevicePolicyEngine.handlePackageChanged(
                        packageName, userHandle, removedAdminPackage);
            }
            }
            // Persist updates if the removed package was an admin or delegate.
            // Persist updates if the removed package was an admin or delegate.
            if (removedAdmin || removedDelegate) {
            if (removedAdmin || removedDelegate) {
@@ -3532,8 +3535,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
            deleteTransferOwnershipBundleLocked(metadata.userId);
            deleteTransferOwnershipBundleLocked(metadata.userId);
        }
        }
        updateSystemUpdateFreezePeriodsRecord(/* saveIfChanged */ true);
        updateSystemUpdateFreezePeriodsRecord(/* saveIfChanged */ true);
        if (!isPolicyEngineForFinanceFlagEnabled()) {
            pushUserControlDisabledPackagesLocked(metadata.userId);
            pushUserControlDisabledPackagesLocked(metadata.userId);
        }
        }
    }
    private void maybeLogStart() {
    private void maybeLogStart() {
        if (!SecurityLog.isLoggingEnabled()) {
        if (!SecurityLog.isLoggingEnabled()) {
@@ -10104,7 +10109,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
        clearUserPoliciesLocked(userId);
        clearUserPoliciesLocked(userId);
        clearOverrideApnUnchecked();
        clearOverrideApnUnchecked();
        clearApplicationRestrictions(userId);
        clearApplicationRestrictions(userId);
        if (!isPolicyEngineForFinanceFlagEnabled()) {
            mInjector.getPackageManagerInternal().clearBlockUninstallForUser(userId);
            mInjector.getPackageManagerInternal().clearBlockUninstallForUser(userId);
        }
        mOwners.clearDeviceOwner();
        mOwners.clearDeviceOwner();
        mOwners.writeDeviceOwner();
        mOwners.writeDeviceOwner();