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

Commit 4ad53f12 authored by Brian Isganitis's avatar Brian Isganitis
Browse files

Defer unstashing taskbar on all apps close if gesture in progress.

This behavior is more consistent with how we update taskbar stashing when IME is dismissed.

Test: Verified stashing behavior with gestures, 3-button, and bottom sheet dismiss.
Fix: 223837786
Change-Id: Ib85ebe629f33f0bddc36bbc8d99136711105b279
parent b5d7744c
Loading
Loading
Loading
Loading
+30 −2
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.view.ViewConfiguration;

import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Utilities;
import com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView;
import com.android.launcher3.testing.TestProtocol;
import com.android.launcher3.util.MultiValueAlpha.AlphaProperty;
import com.android.quickstep.AnimatedFloat;
@@ -518,13 +519,40 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
     */
    public void setSystemGestureInProgress(boolean inProgress) {
        mIsSystemGestureInProgress = inProgress;
        // Only update FLAG_STASHED_IN_APP_IME when system gesture is not in progress.
        if (!mIsSystemGestureInProgress) {
        if (mIsSystemGestureInProgress) {
            return;
        }

        // Only update the following flags when system gesture is not in progress.
        maybeResetStashedInAppAllApps(hasAnyFlag(FLAG_STASHED_IN_APP_IME) == mIsImeShowing);
        if (hasAnyFlag(FLAG_STASHED_IN_APP_IME) != mIsImeShowing) {
            updateStateForFlag(FLAG_STASHED_IN_APP_IME, mIsImeShowing);
            applyState(TASKBAR_STASH_DURATION_FOR_IME, getTaskbarStashStartDelayForIme());
        }
    }

    /**
     * Reset stashed in all apps only if no system gesture is in progress.
     * <p>
     * Otherwise, the reset should be deferred until after the gesture is finished.
     *
     * @see #setSystemGestureInProgress
     */
    public void maybeResetStashedInAppAllApps() {
        maybeResetStashedInAppAllApps(true);
    }

    private void maybeResetStashedInAppAllApps(boolean applyState) {
        if (mIsSystemGestureInProgress) {
            return;
        }

        updateStateForFlag(FLAG_STASHED_IN_APP_ALL_APPS, false);
        if (applyState) {
            applyState(TaskbarAllAppsSlideInView.DEFAULT_CLOSE_DURATION);
        }
    }

    /**
     * When hiding the IME, delay the unstash animation to align with the end of the transition.
     */
+1 −1
Original line number Diff line number Diff line
@@ -34,7 +34,7 @@ import java.util.Optional;
public class TaskbarAllAppsSlideInView extends AbstractSlideInView<TaskbarAllAppsContext>
        implements Insettable, DeviceProfile.OnDeviceProfileChangeListener {
    static final int DEFAULT_OPEN_DURATION = 500;
    static final int DEFAULT_CLOSE_DURATION = 200;
    public static final int DEFAULT_CLOSE_DURATION = 200;

    private TaskbarAllAppsContainerView mAppsView;
    private OnCloseListener mOnCloseBeginListener;
+3 −4
Original line number Diff line number Diff line
@@ -16,7 +16,6 @@
package com.android.launcher3.taskbar.allapps;

import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_STASHED_IN_APP_ALL_APPS;
import static com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView.DEFAULT_CLOSE_DURATION;
import static com.android.launcher3.taskbar.allapps.TaskbarAllAppsSlideInView.DEFAULT_OPEN_DURATION;
import static com.android.launcher3.util.OnboardingPrefs.ALL_APPS_VISITED_COUNT;

@@ -86,9 +85,9 @@ final class TaskbarAllAppsViewController {
        mSlideInView.setOnCloseBeginListener(() -> {
            AbstractFloatingView.closeOpenContainer(
                    mContext, AbstractFloatingView.TYPE_ACTION_POPUP);
            mTaskbarStashController.updateStateForFlag(
                    FLAG_STASHED_IN_APP_ALL_APPS, false);
            mTaskbarStashController.applyState(DEFAULT_CLOSE_DURATION);
            // Post in case view is closing due to gesture navigation. If a gesture is in progress,
            // wait to unstash until after the gesture is finished.
            mSlideInView.post(mTaskbarStashController::maybeResetStashedInAppAllApps);
        });
    }
}