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.
|
return; // Not installed, no need to restore yet.
|
||||||
}
|
}
|
||||||
|
boolean blockRestore = false;
|
||||||
if (!mPackageInfo.hasSignatures()) {
|
if (!mPackageInfo.hasSignatures()) {
|
||||||
s.wtf("Attempted to restore package " + mPackageName + ", user=" + mPackageUserId
|
s.wtf("Attempted to restore package " + mPackageName + ", user=" + mPackageUserId
|
||||||
+ " but signatures not found in the restore data.");
|
+ " 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();
|
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);
|
// Either way, it's no longer a shadow.
|
||||||
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.
|
|
||||||
mPackageInfo.setShadow(false);
|
mPackageInfo.setShadow(false);
|
||||||
|
|
||||||
s.scheduleSaveUser(mPackageUserId);
|
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
|
* Control whether {@link #verifyStates} should be performed. We always perform it during unit
|
||||||
* tests.
|
* tests.
|
||||||
|
|||||||
@@ -4938,6 +4938,9 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
|
|||||||
assertEquals(0, mManager.getDynamicShortcuts().size());
|
assertEquals(0, mManager.getDynamicShortcuts().size());
|
||||||
assertEquals(0, mManager.getPinnedShortcuts().size());
|
assertEquals(0, mManager.getPinnedShortcuts().size());
|
||||||
});
|
});
|
||||||
|
assertFalse(mService.getPackageShortcutForTest(CALLING_PACKAGE_1, USER_0)
|
||||||
|
.getPackageInfo().isShadow());
|
||||||
|
|
||||||
|
|
||||||
installPackage(USER_0, CALLING_PACKAGE_2);
|
installPackage(USER_0, CALLING_PACKAGE_2);
|
||||||
runWithCaller(CALLING_PACKAGE_2, USER_0, () -> {
|
runWithCaller(CALLING_PACKAGE_2, USER_0, () -> {
|
||||||
@@ -4946,6 +4949,8 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
|
|||||||
mManager.getPinnedShortcuts()),
|
mManager.getPinnedShortcuts()),
|
||||||
"s1", "s2", "s3");
|
"s1", "s2", "s3");
|
||||||
});
|
});
|
||||||
|
assertFalse(mService.getPackageShortcutForTest(CALLING_PACKAGE_2, USER_0)
|
||||||
|
.getPackageInfo().isShadow());
|
||||||
|
|
||||||
installPackage(USER_0, LAUNCHER_1);
|
installPackage(USER_0, LAUNCHER_1);
|
||||||
runWithCaller(LAUNCHER_1, USER_0, () -> {
|
runWithCaller(LAUNCHER_1, USER_0, () -> {
|
||||||
@@ -5069,6 +5074,8 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
|
|||||||
mLauncherApps.getShortcuts(buildAllQuery(CALLING_PACKAGE_3), HANDLE_USER_0))
|
mLauncherApps.getShortcuts(buildAllQuery(CALLING_PACKAGE_3), HANDLE_USER_0))
|
||||||
/* empty */);
|
/* empty */);
|
||||||
});
|
});
|
||||||
|
assertFalse(mService.getLauncherShortcutForTest(LAUNCHER_1, USER_0)
|
||||||
|
.getPackageInfo().isShadow());
|
||||||
|
|
||||||
runWithCaller(CALLING_PACKAGE_1, USER_0, () -> {
|
runWithCaller(CALLING_PACKAGE_1, USER_0, () -> {
|
||||||
assertEquals(0, mManager.getDynamicShortcuts().size());
|
assertEquals(0, mManager.getDynamicShortcuts().size());
|
||||||
@@ -5091,6 +5098,8 @@ public class ShortcutManagerTest1 extends BaseShortcutManagerTest {
|
|||||||
mLauncherApps.getShortcuts(buildAllQuery(CALLING_PACKAGE_3), HANDLE_USER_0))
|
mLauncherApps.getShortcuts(buildAllQuery(CALLING_PACKAGE_3), HANDLE_USER_0))
|
||||||
/* empty */);
|
/* empty */);
|
||||||
});
|
});
|
||||||
|
assertFalse(mService.getLauncherShortcutForTest(LAUNCHER_2, USER_0)
|
||||||
|
.getPackageInfo().isShadow());
|
||||||
|
|
||||||
installPackage(USER_0, CALLING_PACKAGE_3);
|
installPackage(USER_0, CALLING_PACKAGE_3);
|
||||||
runWithCaller(CALLING_PACKAGE_3, USER_0, () -> {
|
runWithCaller(CALLING_PACKAGE_3, USER_0, () -> {
|
||||||
|
|||||||
Reference in New Issue
Block a user