Merge "Minor bug fixes related to package/dpc removal" into udc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
646ad05577
@@ -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,20 +1017,44 @@ 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) {
|
||||||
return;
|
Binder.withCleanCallingIdentity(() -> {
|
||||||
}
|
|
||||||
if (packageRemoved) {
|
|
||||||
Set<EnforcingAdmin> admins = getEnforcingAdminsOnUser(userId);
|
Set<EnforcingAdmin> admins = getEnforcingAdminsOnUser(userId);
|
||||||
for (EnforcingAdmin admin : admins) {
|
if (removedDpcPackage != null) {
|
||||||
if (admin.getPackageName().equals(updatedPackage)) {
|
for (EnforcingAdmin admin : admins) {
|
||||||
// remove policies for the uninstalled package
|
if (removedDpcPackage.equals(admin.getPackageName())) {
|
||||||
removePoliciesForAdmin(admin);
|
removePoliciesForAdmin(admin);
|
||||||
|
return;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
for (EnforcingAdmin admin : admins) {
|
||||||
updateDeviceAdminServiceOnPackageChanged(updatedPackage, userId);
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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,7 +3535,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
|||||||
deleteTransferOwnershipBundleLocked(metadata.userId);
|
deleteTransferOwnershipBundleLocked(metadata.userId);
|
||||||
}
|
}
|
||||||
updateSystemUpdateFreezePeriodsRecord(/* saveIfChanged */ true);
|
updateSystemUpdateFreezePeriodsRecord(/* saveIfChanged */ true);
|
||||||
pushUserControlDisabledPackagesLocked(metadata.userId);
|
if (!isPolicyEngineForFinanceFlagEnabled()) {
|
||||||
|
pushUserControlDisabledPackagesLocked(metadata.userId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void maybeLogStart() {
|
private void maybeLogStart() {
|
||||||
@@ -10104,7 +10109,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub {
|
|||||||
clearUserPoliciesLocked(userId);
|
clearUserPoliciesLocked(userId);
|
||||||
clearOverrideApnUnchecked();
|
clearOverrideApnUnchecked();
|
||||||
clearApplicationRestrictions(userId);
|
clearApplicationRestrictions(userId);
|
||||||
mInjector.getPackageManagerInternal().clearBlockUninstallForUser(userId);
|
if (!isPolicyEngineForFinanceFlagEnabled()) {
|
||||||
|
mInjector.getPackageManagerInternal().clearBlockUninstallForUser(userId);
|
||||||
|
}
|
||||||
|
|
||||||
mOwners.clearDeviceOwner();
|
mOwners.clearDeviceOwner();
|
||||||
mOwners.writeDeviceOwner();
|
mOwners.writeDeviceOwner();
|
||||||
|
|||||||
Reference in New Issue
Block a user