Fix issue with apps restored to lower versions.
am: fac592f64c
Change-Id: I01601d1638a1ad23dcf2c57df75b81819ee3dce7
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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, () -> {
|
||||
|
||||
Reference in New Issue
Block a user