Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d99392d authored by Pinyao Ting's avatar Pinyao Ting
Browse files

Abandon in-flight app-search session when user stops

This is an attempt to fix an issue observed in automation test where
when user is stopeed immediately after it started, ShortcutManager is
still processing the unlock event which eventually leads to error in
creating folder for a stopped user in icing.

Bug: 183618378
Test: To be verified in TreeHugger
Change-Id: I7ae541edc0b9724b8dc7885b70f4f754c2e6da2c
parent f41fa968
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -2408,6 +2408,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);
+1 −1
Original line number Diff line number Diff line
@@ -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;
+6 −0
Original line number Diff line number Diff line
@@ -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 -> {