diff --git a/services/core/java/com/android/server/pm/ShortcutPackage.java b/services/core/java/com/android/server/pm/ShortcutPackage.java index 2dad8ceb4add5..b02a21da3d696 100644 --- a/services/core/java/com/android/server/pm/ShortcutPackage.java +++ b/services/core/java/com/android/server/pm/ShortcutPackage.java @@ -2419,6 +2419,20 @@ class ShortcutPackage extends ShortcutPackageItem { } } + void closeAppSearchSession() { + synchronized (mLock) { + if (mAppSearchSession != null) { + final long callingIdentity = Binder.clearCallingIdentity(); + try { + mAppSearchSession.close(); + } finally { + Binder.restoreCallingIdentity(callingIdentity); + } + } + mAppSearchSession = null; + } + } + @NonNull private AndroidFuture setupSchema( @NonNull final AppSearchSession session) { diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java index d86438bb4a361..4cfa353b36f85 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java @@ -1050,7 +1050,10 @@ public class ShortcutService extends IShortcutService.Stub { file.failWrite(os); } - getUserShortcutsLocked(userId).logSharingShortcutStats(mMetricsLogger); + final ShortcutUser user = getUserShortcutsLocked(userId); + // Close AppSearchSession to flush pending changes. + user.forAllPackages(ShortcutPackage::closeAppSearchSession); + user.logSharingShortcutStats(mMetricsLogger); } @GuardedBy("mLock")