diff --git a/services/core/java/com/android/server/pm/ShortcutPackage.java b/services/core/java/com/android/server/pm/ShortcutPackage.java index 884c59d9d3a4b..fd8ec7f4bdeb3 100644 --- a/services/core/java/com/android/server/pm/ShortcutPackage.java +++ b/services/core/java/com/android/server/pm/ShortcutPackage.java @@ -2407,6 +2407,8 @@ class ShortcutPackage extends ShortcutPackageItem { mAppSearchSession = session; return cb.apply(mAppSearchSession); } catch (Exception e) { + Slog.e(TAG, "Failed to initiate app search for shortcut package " + + getPackageName() + " user " + mShortcutUser.getUserId(), e); return AndroidFuture.completedFuture(null); } finally { Binder.restoreCallingIdentity(callingIdentity); diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java index 0b21487088baa..e1d1c264e6669 100644 --- a/services/core/java/com/android/server/pm/ShortcutService.java +++ b/services/core/java/com/android/server/pm/ShortcutService.java @@ -342,7 +342,7 @@ public class ShortcutService extends IShortcutService.Stub { private final IPackageManager mIPackageManager; private final PackageManagerInternal mPackageManagerInternal; - private final UserManagerInternal mUserManagerInternal; + final UserManagerInternal mUserManagerInternal; private final UsageStatsManagerInternal mUsageStatsManagerInternal; private final ActivityManagerInternal mActivityManagerInternal; private final IUriGrantsManager mUriGrantsManager; diff --git a/services/core/java/com/android/server/pm/ShortcutUser.java b/services/core/java/com/android/server/pm/ShortcutUser.java index 51cb995aac915..ce49d8894fdbf 100644 --- a/services/core/java/com/android/server/pm/ShortcutUser.java +++ b/services/core/java/com/android/server/pm/ShortcutUser.java @@ -722,6 +722,12 @@ class ShortcutUser { future.completeExceptionally(new RuntimeException("app search manager is null")); return future; } + if (!mService.mUserManagerInternal.isUserUnlockingOrUnlocked(getUserId())) { + // In rare cases the user might be stopped immediate after it started, in these cases + // any on-going session will need to be abandoned. + future.completeExceptionally(new RuntimeException("User " + getUserId() + " is ")); + return future; + } final long callingIdentity = Binder.clearCallingIdentity(); try { mAppSearchManager.createSearchSession(searchContext, mExecutor, result -> {