Loading services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java +36 −10 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static android.content.pm.UserProperties.INHERIT_DEVICE_POLICY_FROM_PAREN import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppGlobals; import android.app.BroadcastOptions; import android.app.admin.DevicePolicyIdentifiers; import android.app.admin.DevicePolicyManager; Loading @@ -45,6 +46,7 @@ import android.content.pm.UserProperties; import android.os.Binder; import android.os.Bundle; import android.os.Environment; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; import android.telephony.TelephonyManager; Loading Loading @@ -1015,21 +1017,45 @@ final class DevicePolicyEngine { /** * Handles internal state related to packages getting updated. */ void handlePackageChanged(@Nullable String updatedPackage, int userId, boolean packageRemoved) { if (updatedPackage == null) { void handlePackageChanged( @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; } if (packageRemoved) { Set<EnforcingAdmin> admins = getEnforcingAdminsOnUser(userId); } } 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 removePoliciesForAdmin(admin); return; } } } else { } if (updatedPackage != null) { 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; } } /** Loading services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +10 −3 Original line number Diff line number Diff line Loading @@ -1384,6 +1384,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { private void handlePackagesChanged(@Nullable String packageName, int userHandle) { boolean removedAdmin = false; String removedAdminPackage = null; if (VERBOSE_LOG) { Slogf.d(LOG_TAG, "Handling package changes package " + packageName + " for user " + userHandle); Loading @@ -1406,6 +1407,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { "Admin package %s not found for user %d, removing active admin", packageName, userHandle)); removedAdmin = true; removedAdminPackage = adminPackage; policy.mAdminList.remove(i); policy.mAdminMap.remove(aa.info.getComponent()); pushActiveAdminPackagesLocked(userHandle); Loading Loading @@ -1439,7 +1441,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { startOwnerService(userHandle, "package-broadcast"); } if (isPolicyEngineForFinanceFlagEnabled() || isPermissionCheckFlagEnabled()) { mDevicePolicyEngine.handlePackageChanged(packageName, userHandle, removedAdmin); mDevicePolicyEngine.handlePackageChanged( packageName, userHandle, removedAdminPackage); } // Persist updates if the removed package was an admin or delegate. if (removedAdmin || removedDelegate) { Loading Loading @@ -3532,8 +3535,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { deleteTransferOwnershipBundleLocked(metadata.userId); } updateSystemUpdateFreezePeriodsRecord(/* saveIfChanged */ true); if (!isPolicyEngineForFinanceFlagEnabled()) { pushUserControlDisabledPackagesLocked(metadata.userId); } } private void maybeLogStart() { if (!SecurityLog.isLoggingEnabled()) { Loading Loading @@ -10104,7 +10109,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { clearUserPoliciesLocked(userId); clearOverrideApnUnchecked(); clearApplicationRestrictions(userId); if (!isPolicyEngineForFinanceFlagEnabled()) { mInjector.getPackageManagerInternal().clearBlockUninstallForUser(userId); } mOwners.clearDeviceOwner(); mOwners.writeDeviceOwner(); Loading
services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyEngine.java +36 −10 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static android.content.pm.UserProperties.INHERIT_DEVICE_POLICY_FROM_PAREN import android.Manifest; import android.annotation.NonNull; import android.annotation.Nullable; import android.app.AppGlobals; import android.app.BroadcastOptions; import android.app.admin.DevicePolicyIdentifiers; import android.app.admin.DevicePolicyManager; Loading @@ -45,6 +46,7 @@ import android.content.pm.UserProperties; import android.os.Binder; import android.os.Bundle; import android.os.Environment; import android.os.RemoteException; import android.os.UserHandle; import android.os.UserManager; import android.telephony.TelephonyManager; Loading Loading @@ -1015,21 +1017,45 @@ final class DevicePolicyEngine { /** * Handles internal state related to packages getting updated. */ void handlePackageChanged(@Nullable String updatedPackage, int userId, boolean packageRemoved) { if (updatedPackage == null) { void handlePackageChanged( @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; } if (packageRemoved) { Set<EnforcingAdmin> admins = getEnforcingAdminsOnUser(userId); } } 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 removePoliciesForAdmin(admin); return; } } } else { } if (updatedPackage != null) { 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; } } /** Loading
services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +10 −3 Original line number Diff line number Diff line Loading @@ -1384,6 +1384,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { private void handlePackagesChanged(@Nullable String packageName, int userHandle) { boolean removedAdmin = false; String removedAdminPackage = null; if (VERBOSE_LOG) { Slogf.d(LOG_TAG, "Handling package changes package " + packageName + " for user " + userHandle); Loading @@ -1406,6 +1407,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { "Admin package %s not found for user %d, removing active admin", packageName, userHandle)); removedAdmin = true; removedAdminPackage = adminPackage; policy.mAdminList.remove(i); policy.mAdminMap.remove(aa.info.getComponent()); pushActiveAdminPackagesLocked(userHandle); Loading Loading @@ -1439,7 +1441,8 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { startOwnerService(userHandle, "package-broadcast"); } if (isPolicyEngineForFinanceFlagEnabled() || isPermissionCheckFlagEnabled()) { mDevicePolicyEngine.handlePackageChanged(packageName, userHandle, removedAdmin); mDevicePolicyEngine.handlePackageChanged( packageName, userHandle, removedAdminPackage); } // Persist updates if the removed package was an admin or delegate. if (removedAdmin || removedDelegate) { Loading Loading @@ -3532,8 +3535,10 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { deleteTransferOwnershipBundleLocked(metadata.userId); } updateSystemUpdateFreezePeriodsRecord(/* saveIfChanged */ true); if (!isPolicyEngineForFinanceFlagEnabled()) { pushUserControlDisabledPackagesLocked(metadata.userId); } } private void maybeLogStart() { if (!SecurityLog.isLoggingEnabled()) { Loading Loading @@ -10104,7 +10109,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { clearUserPoliciesLocked(userId); clearOverrideApnUnchecked(); clearApplicationRestrictions(userId); if (!isPolicyEngineForFinanceFlagEnabled()) { mInjector.getPackageManagerInternal().clearBlockUninstallForUser(userId); } mOwners.clearDeviceOwner(); mOwners.writeDeviceOwner();