Fix issue with apps restored to lower versions.

am: fac592f64c

Change-Id: I01601d1638a1ad23dcf2c57df75b81819ee3dce7
This commit is contained in:
Makoto Onuki
2016-12-01 20:57:03 +00:00
committed by android-build-merger
3 changed files with 38 additions and 15 deletions

View File

@@ -106,27 +106,31 @@ abstract class ShortcutPackageItem {
}
return; // Not installed, no need to restore yet.
}
boolean blockRestore = false;
if (!mPackageInfo.hasSignatures()) {
s.wtf("Attempted to restore package " + mPackageName + ", user=" + mPackageUserId
+ " but signatures not found in the restore data.");
blockRestore = true;
}
if (!blockRestore) {
final PackageInfo pi = s.getPackageInfoWithSignatures(mPackageName, mPackageUserId);
if (!mPackageInfo.canRestoreTo(s, pi)) {
// Package is now installed, but can't restore. Let the subclass do the cleanup.
blockRestore = true;
}
}
if (blockRestore) {
onRestoreBlocked();
return;
} else {
if (ShortcutService.DEBUG) {
Slog.d(TAG, String.format("Restored package: %s/%d on user %d", mPackageName,
mPackageUserId, getOwnerUserId()));
}
onRestored();
}
final PackageInfo pi = s.getPackageInfoWithSignatures(mPackageName, mPackageUserId);
if (!mPackageInfo.canRestoreTo(s, pi)) {
// Package is now installed, but can't restore. Let the subclass do the cleanup.
onRestoreBlocked();
return;
}
if (ShortcutService.DEBUG) {
Slog.d(TAG, String.format("Restored package: %s/%d on user %d", mPackageName,
mPackageUserId, getOwnerUserId()));
}
onRestored();
// Now the package is not shadow.
// Either way, it's no longer a shadow.
mPackageInfo.setShadow(false);
s.scheduleSaveUser(mPackageUserId);

View File

@@ -3739,6 +3739,16 @@ public class ShortcutService extends IShortcutService.Stub {
}
}
@VisibleForTesting
ShortcutLauncher getLauncherShortcutForTest(String packageName, int userId) {
synchronized (mLock) {
final ShortcutUser user = mUsers.get(userId);
if (user == null) return null;
return user.getAllLaunchersForTest().get(PackageWithUser.of(userId, packageName));
}
}
/**
* Control whether {@link #verifyStates} should be performed. We always perform it during unit
* tests.

View File

@@ -4938,6 +4938,9 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
assertEquals(0, mManager.getDynamicShortcuts().size());
assertEquals(0, mManager.getPinnedShortcuts().size());
});
assertFalse(mService.getPackageShortcutForTest(CALLING_PACKAGE_1, USER_0)
.getPackageInfo().isShadow());
installPackage(USER_0, CALLING_PACKAGE_2);
runWithCaller(CALLING_PACKAGE_2, USER_0, () -> {
@@ -4946,6 +4949,8 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
mManager.getPinnedShortcuts()),
"s1", "s2", "s3");
});
assertFalse(mService.getPackageShortcutForTest(CALLING_PACKAGE_2, USER_0)
.getPackageInfo().isShadow());
installPackage(USER_0, LAUNCHER_1);
runWithCaller(LAUNCHER_1, USER_0, () -> {
@@ -5069,6 +5074,8 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
mLauncherApps.getShortcuts(buildAllQuery(CALLING_PACKAGE_3), HANDLE_USER_0))
/* empty */);
});
assertFalse(mService.getLauncherShortcutForTest(LAUNCHER_1, USER_0)
.getPackageInfo().isShadow());
runWithCaller(CALLING_PACKAGE_1, USER_0, () -> {
assertEquals(0, mManager.getDynamicShortcuts().size());
@@ -5091,6 +5098,8 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
mLauncherApps.getShortcuts(buildAllQuery(CALLING_PACKAGE_3), HANDLE_USER_0))
/* empty */);
});
assertFalse(mService.getLauncherShortcutForTest(LAUNCHER_2, USER_0)
.getPackageInfo().isShadow());
installPackage(USER_0, CALLING_PACKAGE_3);
runWithCaller(CALLING_PACKAGE_3, USER_0, () -> {