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

Commit a9355d4d authored by Winson Chung's avatar Winson Chung
Browse files

Remove user TIS unlocked runnable when a TIS instance is destroyed

- If the TIS instance is destroyed, then we should remove any queued
  user-unlocked runnables to ensure that they do not attempt to run
  again

Flag: EXEMPT bugfix
Bug: 373671447
Test: atest NexusLauncherTests
Change-Id: I8ca3cdfa6f849bce5d347f14038e1ebd6bc6ff06
parent 247bc046
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -606,6 +606,9 @@ public class TouchInteractionService extends Service {
            this::createFallbackSwipeHandler;
    private final AbsSwipeUpHandler.Factory mRecentsWindowSwipeHandlerFactory =
            this::createRecentsWindowSwipeHandler;
    // This needs to be a member to be queued and potentially removed later if the service is
    // destroyed before the user is unlocked
    private final Runnable mUserUnlockedRunnable = this::onUserUnlocked;

    private final ScreenOnTracker.ScreenOnListener mScreenOnListener = this::onScreenOnChanged;

@@ -677,8 +680,7 @@ public class TouchInteractionService extends Service {
        mInputConsumer = InputConsumerController.getRecentsAnimationInputConsumer();

        // Call runOnUserUnlocked() before any other callbacks to ensure everything is initialized.
        LockedUserState.get(this).runOnUserUnlocked(this::onUserUnlocked);
        LockedUserState.get(this).runOnUserUnlocked(mTaskbarManager::onUserUnlocked);
        LockedUserState.get(this).runOnUserUnlocked(mUserUnlockedRunnable);
        mDeviceState.addNavigationModeChangedCallback(this::onNavigationModeChanged);
        sConnected = true;

@@ -745,6 +747,8 @@ public class TouchInteractionService extends Service {

        mOverviewComponentObserver.setOverviewChangeListener(this::onOverviewTargetChange);
        onOverviewTargetChange(mOverviewComponentObserver.isHomeAndOverviewSame());

        mTaskbarManager.onUserUnlocked();
    }

    public OverviewCommandHelper getOverviewCommandHelper() {
@@ -835,6 +839,7 @@ public class TouchInteractionService extends Service {
        mDesktopVisibilityController.onDestroy();
        sConnected = false;

        LockedUserState.get(this).removeOnUserUnlockedRunnable(mUserUnlockedRunnable);
        ScreenOnTracker.INSTANCE.get(this).removeListener(mScreenOnListener);
        super.onDestroy();
    }
+7 −0
Original line number Diff line number Diff line
@@ -88,6 +88,13 @@ class LockedUserState(private val mContext: Context) : SafeCloseable {
        mUserUnlockedActions.add(action)
    }

    /**
     * Removes a previously queued `Runnable` to be run when the user is unlocked.
     */
    fun removeOnUserUnlockedRunnable(action: Runnable) {
        mUserUnlockedActions.remove(action)
    }

    companion object {
        @VisibleForTesting
        @JvmField