Loading services/core/java/com/android/server/pm/ShortcutPackageItem.java +18 −14 Original line number Diff line number Diff line Loading @@ -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."); onRestoreBlocked(); return; 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. onRestoreBlocked(); return; blockRestore = true; } } if (blockRestore) { onRestoreBlocked(); } else { 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); Loading services/core/java/com/android/server/pm/ShortcutService.java +10 −0 Original line number Diff line number Diff line Loading @@ -3733,6 +3733,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. Loading services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java +9 −0 Original line number Diff line number Diff line Loading @@ -4921,6 +4921,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, () -> { Loading @@ -4929,6 +4932,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, () -> { Loading Loading @@ -5052,6 +5057,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()); Loading @@ -5074,6 +5081,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, () -> { Loading Loading
services/core/java/com/android/server/pm/ShortcutPackageItem.java +18 −14 Original line number Diff line number Diff line Loading @@ -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."); onRestoreBlocked(); return; 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. onRestoreBlocked(); return; blockRestore = true; } } if (blockRestore) { onRestoreBlocked(); } else { 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); Loading
services/core/java/com/android/server/pm/ShortcutService.java +10 −0 Original line number Diff line number Diff line Loading @@ -3733,6 +3733,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. Loading
services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java +9 −0 Original line number Diff line number Diff line Loading @@ -4921,6 +4921,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, () -> { Loading @@ -4929,6 +4932,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, () -> { Loading Loading @@ -5052,6 +5057,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()); Loading @@ -5074,6 +5081,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, () -> { Loading