Merge "Keep enabled state across system uninstall" into sc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e3ece36d51
@@ -21480,6 +21480,8 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
// for the uninstall-updates case and restricted profiles, remember the per-
|
// for the uninstall-updates case and restricted profiles, remember the per-
|
||||||
// user handle installed state
|
// user handle installed state
|
||||||
int[] allUsers;
|
int[] allUsers;
|
||||||
|
final int freezeUser;
|
||||||
|
final SparseArray<Pair<Integer, String>> enabledStateAndCallerPerUser;
|
||||||
/** enabled state of the uninstalled application */
|
/** enabled state of the uninstalled application */
|
||||||
synchronized (mLock) {
|
synchronized (mLock) {
|
||||||
uninstalledPs = mSettings.getPackageLPr(packageName);
|
uninstalledPs = mSettings.getPackageLPr(packageName);
|
||||||
@@ -21524,16 +21526,23 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
}
|
}
|
||||||
|
|
||||||
info.origUsers = uninstalledPs.queryInstalledUsers(allUsers, true);
|
info.origUsers = uninstalledPs.queryInstalledUsers(allUsers, true);
|
||||||
}
|
|
||||||
|
|
||||||
final int freezeUser;
|
if (isUpdatedSystemApp(uninstalledPs)
|
||||||
if (isUpdatedSystemApp(uninstalledPs)
|
&& ((deleteFlags & PackageManager.DELETE_SYSTEM_APP) == 0)) {
|
||||||
&& ((deleteFlags & PackageManager.DELETE_SYSTEM_APP) == 0)) {
|
// We're downgrading a system app, which will apply to all users, so
|
||||||
// We're downgrading a system app, which will apply to all users, so
|
// freeze them all during the downgrade
|
||||||
// freeze them all during the downgrade
|
freezeUser = UserHandle.USER_ALL;
|
||||||
freezeUser = UserHandle.USER_ALL;
|
enabledStateAndCallerPerUser = new SparseArray<>();
|
||||||
} else {
|
for (int i = 0; i < allUsers.length; i++) {
|
||||||
freezeUser = removeUser;
|
PackageUserState userState = uninstalledPs.readUserState(allUsers[i]);
|
||||||
|
Pair<Integer, String> enabledStateAndCaller =
|
||||||
|
new Pair<>(userState.enabled, userState.lastDisableAppCaller);
|
||||||
|
enabledStateAndCallerPerUser.put(allUsers[i], enabledStateAndCaller);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
freezeUser = removeUser;
|
||||||
|
enabledStateAndCallerPerUser = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
synchronized (mInstallLock) {
|
synchronized (mInstallLock) {
|
||||||
@@ -21602,6 +21611,19 @@ public class PackageManagerService extends IPackageManager.Stub
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (enabledStateAndCallerPerUser != null) {
|
||||||
|
synchronized (mLock) {
|
||||||
|
for (int i = 0; i < allUsers.length; i++) {
|
||||||
|
Pair<Integer, String> enabledStateAndCaller =
|
||||||
|
enabledStateAndCallerPerUser.get(allUsers[i]);
|
||||||
|
getPackageSetting(packageName)
|
||||||
|
.setEnabled(enabledStateAndCaller.first,
|
||||||
|
allUsers[i],
|
||||||
|
enabledStateAndCaller.second);
|
||||||
|
}
|
||||||
|
mSettings.writeAllUsersPackageRestrictionsLPr();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return res ? PackageManager.DELETE_SUCCEEDED : PackageManager.DELETE_FAILED_INTERNAL_ERROR;
|
return res ? PackageManager.DELETE_SUCCEEDED : PackageManager.DELETE_FAILED_INTERNAL_ERROR;
|
||||||
|
|||||||
Reference in New Issue
Block a user