Merge "Fix two multi-user bugs in package upgrade." into nyc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
fc5f6e6c80
@@ -13794,6 +13794,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
final PackageParser.Package oldPackage;
|
final PackageParser.Package oldPackage;
|
||||||
final String pkgName = pkg.packageName;
|
final String pkgName = pkg.packageName;
|
||||||
final int[] allUsers;
|
final int[] allUsers;
|
||||||
|
final int[] installedUsers;
|
||||||
|
|
||||||
// First find the old package info and check signatures
|
// First find the old package info and check signatures
|
||||||
synchronized(mPackages) {
|
synchronized(mPackages) {
|
||||||
@@ -13836,6 +13837,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
|
|
||||||
// In case of rollback, remember per-user/profile install state
|
// In case of rollback, remember per-user/profile install state
|
||||||
allUsers = sUserManager.getUserIds();
|
allUsers = sUserManager.getUserIds();
|
||||||
|
installedUsers = ps.queryInstalledUsers(allUsers, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Update what is removed
|
// Update what is removed
|
||||||
@@ -13843,6 +13845,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
|||||||
res.removedInfo.uid = oldPackage.applicationInfo.uid;
|
res.removedInfo.uid = oldPackage.applicationInfo.uid;
|
||||||
res.removedInfo.removedPackage = oldPackage.packageName;
|
res.removedInfo.removedPackage = oldPackage.packageName;
|
||||||
res.removedInfo.isUpdate = true;
|
res.removedInfo.isUpdate = true;
|
||||||
|
res.removedInfo.origUsers = installedUsers;
|
||||||
final int childCount = (oldPackage.childPackages != null)
|
final int childCount = (oldPackage.childPackages != null)
|
||||||
? oldPackage.childPackages.size() : 0;
|
? oldPackage.childPackages.size() : 0;
|
||||||
for (int i = 0; i < childCount; i++) {
|
for (int i = 0; i < childCount; i++) {
|
||||||
@@ -19397,12 +19400,13 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
|
|||||||
public int movePackage(final String packageName, final String volumeUuid) {
|
public int movePackage(final String packageName, final String volumeUuid) {
|
||||||
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MOVE_PACKAGE, null);
|
mContext.enforceCallingOrSelfPermission(android.Manifest.permission.MOVE_PACKAGE, null);
|
||||||
|
|
||||||
|
final UserHandle user = new UserHandle(UserHandle.getCallingUserId());
|
||||||
final int moveId = mNextMoveId.getAndIncrement();
|
final int moveId = mNextMoveId.getAndIncrement();
|
||||||
mHandler.post(new Runnable() {
|
mHandler.post(new Runnable() {
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
try {
|
try {
|
||||||
movePackageInternal(packageName, volumeUuid, moveId);
|
movePackageInternal(packageName, volumeUuid, moveId, user);
|
||||||
} catch (PackageManagerException e) {
|
} catch (PackageManagerException e) {
|
||||||
Slog.w(TAG, "Failed to move " + packageName, e);
|
Slog.w(TAG, "Failed to move " + packageName, e);
|
||||||
mMoveCallbacks.notifyStatusChanged(moveId,
|
mMoveCallbacks.notifyStatusChanged(moveId,
|
||||||
@@ -19414,8 +19418,7 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName());
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void movePackageInternal(final String packageName, final String volumeUuid,
|
private void movePackageInternal(final String packageName, final String volumeUuid,
|
||||||
final int moveId) throws PackageManagerException {
|
final int moveId, UserHandle user) throws PackageManagerException {
|
||||||
final UserHandle user = new UserHandle(UserHandle.getCallingUserId());
|
|
||||||
final StorageManager storage = mContext.getSystemService(StorageManager.class);
|
final StorageManager storage = mContext.getSystemService(StorageManager.class);
|
||||||
final PackageManager pm = mContext.getPackageManager();
|
final PackageManager pm = mContext.getPackageManager();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user