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

Commit f77d2086 authored by Schneider Victor-tulias's avatar Schneider Victor-tulias
Browse files

Add null checks for mRecentsView

Fixed a NPE and added some null checks for mRecentsView. These NPEs can happen if the launcher is destroyed unexpectedly.

Flag: not needed
Fixes: 279738827
Test: ran launcher and tested some gestures
Change-Id: I9c32e22a13d950346ce705ba3a6f11dd3f1da87f
parent 5f456635
Loading
Loading
Loading
Loading
+19 −10
Original line number Diff line number Diff line
@@ -177,7 +177,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
    protected @Nullable RecentsAnimationController mDeferredCleanupRecentsAnimationController;
    protected RecentsAnimationTargets mRecentsAnimationTargets;
    protected T mActivity;
    protected Q mRecentsView;
    protected @Nullable Q mRecentsView;
    protected Runnable mGestureEndCallback;
    protected MultiStateCallback mStateCallback;
    protected boolean mCanceled;
@@ -1895,7 +1895,9 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
    private void invalidateHandlerWithLauncher() {
        endLauncherTransitionController();

        if (mRecentsView != null) {
            mRecentsView.onGestureAnimationEnd();
        }
        resetLauncherListeners();
    }

@@ -1922,8 +1924,10 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
    private void resetLauncherListeners() {
        mActivity.getRootView().setOnApplyWindowInsetsListener(null);

        if (mRecentsView != null) {
            mRecentsView.removeOnScrollChangedListener(mOnRecentsScrollListener);
        }
    }

    private void resetStateForAnimationCancel() {
        boolean wasVisible = mWasLauncherAlreadyVisible || mGestureStarted;
@@ -1981,8 +1985,10 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
    private boolean updateThumbnail(int runningTaskId, boolean refreshView) {
        boolean finishTransitionPosted = false;
        final TaskView taskView;
        if (mGestureState.getEndTarget() == HOME || mGestureState.getEndTarget() == NEW_TASK
                || mGestureState.getEndTarget() == ALL_APPS) {
        if (mGestureState.getEndTarget() == HOME
                || mGestureState.getEndTarget() == NEW_TASK
                || mGestureState.getEndTarget() == ALL_APPS
                || mRecentsView == null) {
            // Capture the screenshot before finishing the transition to home or quickswitching to
            // ensure it's taken in the correct orientation, but no need to update the thumbnail.
            taskView = null;
@@ -2135,7 +2141,7 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
    protected void startNewTask(Consumer<Boolean> resultCallback) {
        // Launch the task user scrolled to (mRecentsView.getNextPage()).
        if (!mCanceled) {
            TaskView nextTask = mRecentsView.getNextPageTaskView();
            TaskView nextTask = mRecentsView == null ? null : mRecentsView.getNextPageTaskView();
            if (nextTask != null) {
                Task.TaskKey nextTaskKey = nextTask.getTask().key;
                int taskId = nextTaskKey.id;
@@ -2237,7 +2243,8 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
                    return;
                }
                RemoteAnimationTarget taskTarget = taskTargetOptional.get();
                TaskView taskView = mRecentsView.getTaskViewByTaskId(taskTarget.taskId);
                TaskView taskView = mRecentsView == null
                        ? null : mRecentsView.getTaskViewByTaskId(taskTarget.taskId);
                if (taskView == null || !taskView.getThumbnail().shouldShowSplashView()) {
                    finishRecentsAnimationOnTasksAppeared(null /* onFinishComplete */);
                    return;
@@ -2296,7 +2303,9 @@ public abstract class AbsSwipeUpHandler<T extends StatefulActivity<S>,
     * resume if we finish the controller.
     */
    protected int getLastAppearedTaskIndex() {
        return mGestureState.getLastAppearedTaskId() != -1
        return mRecentsView == null
                ? -1
                : mGestureState.getLastAppearedTaskId() != -1
                        ? mRecentsView.getTaskIndexForId(mGestureState.getLastAppearedTaskId())
                        : mRecentsView.getRunningTaskIndex();
    }