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

Commit 84633c1a authored by Brian Isganitis's avatar Brian Isganitis
Browse files

Stash taskbar while EDU is open.

The stashing behavior is consistent with the All Apps overlay.

Test: Manual
Bug: 217261955
Change-Id: Idae0c3d829e806be6c18f00455f7ddd0d60f0efb
parent 92400681
Loading
Loading
Loading
Loading
+31 −12
Original line number Diff line number Diff line
@@ -15,8 +15,12 @@
 */
package com.android.launcher3.taskbar;

import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_STASHED_IN_APP_EDU;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;

import com.android.launcher3.R;
import com.android.launcher3.taskbar.overlay.TaskbarOverlayContext;
import com.android.launcher3.taskbar.overlay.TaskbarOverlayController;

import java.io.PrintWriter;

@@ -39,19 +43,26 @@ public class TaskbarEduController implements TaskbarControllers.LoggableTaskbarC
    }

    void showEdu() {
        mActivity.setTaskbarWindowFullscreen(true);
        mActivity.getDragLayer().post(() -> {
            TaskbarOverlayContext overlayContext =
                    mControllers.taskbarOverlayController.requestWindow();
        TaskbarOverlayController overlayController = mControllers.taskbarOverlayController;
        TaskbarOverlayContext overlayContext = overlayController.requestWindow();
        mTaskbarEduView = (TaskbarEduView) overlayContext.getLayoutInflater().inflate(
                R.layout.taskbar_edu, overlayContext.getDragLayer(), false);
        mTaskbarEduView.init(new TaskbarEduCallbacks());
        mControllers.navbarButtonsViewController.setSlideInViewVisible(true);
            mTaskbarEduView.setOnCloseBeginListener(
                    () -> mControllers.navbarButtonsViewController.setSlideInViewVisible(false));

        TaskbarStashController stashController = mControllers.taskbarStashController;
        stashController.updateStateForFlag(FLAG_STASHED_IN_APP_EDU, true);
        stashController.applyState(overlayController.getOpenDuration());

        mTaskbarEduView.setOnCloseBeginListener(() -> {
            mControllers.navbarButtonsViewController.setSlideInViewVisible(false);
            // 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.
            MAIN_EXECUTOR.post(() -> stashController.resetFlagIfNoGestureInProgress(
                    FLAG_STASHED_IN_APP_EDU));
        });
        mTaskbarEduView.addOnCloseListener(() -> mTaskbarEduView = null);
        mTaskbarEduView.show();
        });
    }

    @Override
@@ -84,5 +95,13 @@ public class TaskbarEduController implements TaskbarControllers.LoggableTaskbarC
        int getIconLayoutBoundsWidth() {
            return mControllers.taskbarViewController.getIconLayoutWidth();
        }

        int getOpenDuration() {
            return mControllers.taskbarOverlayController.getOpenDuration();
        }

        int getCloseDuration() {
            return mControllers.taskbarOverlayController.getCloseDuration();
        }
    }
}
+2 −5
Original line number Diff line number Diff line
@@ -35,9 +35,6 @@ import com.android.launcher3.views.AbstractSlideInView;
public class TaskbarEduView extends AbstractSlideInView<TaskbarOverlayContext>
        implements Insettable {

    private static final int DEFAULT_OPEN_DURATION = 500;
    private static final int DEFAULT_CLOSE_DURATION = 200;

    private final Rect mInsets = new Rect();

    // Initialized in init.
@@ -65,7 +62,7 @@ public class TaskbarEduView extends AbstractSlideInView<TaskbarOverlayContext>

    @Override
    protected void handleClose(boolean animate) {
        handleClose(animate, DEFAULT_CLOSE_DURATION);
        handleClose(animate, mTaskbarEduCallbacks.getCloseDuration());
    }

    @Override
@@ -161,7 +158,7 @@ public class TaskbarEduView extends AbstractSlideInView<TaskbarOverlayContext>
        mOpenCloseAnimator.setValues(
                PropertyValuesHolder.ofFloat(TRANSLATION_SHIFT, TRANSLATION_SHIFT_OPENED));
        mOpenCloseAnimator.setInterpolator(AGGRESSIVE_EASE);
        mOpenCloseAnimator.setDuration(DEFAULT_OPEN_DURATION).start();
        mOpenCloseAnimator.setDuration(mTaskbarEduCallbacks.getOpenDuration()).start();
    }

    void snapToPage(int page) {
+13 −19
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@ package com.android.launcher3.taskbar;

import static android.view.HapticFeedbackConstants.LONG_PRESS;

import static com.android.launcher3.LauncherState.ALL_APPS;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_LONGPRESS_HIDE;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_LONGPRESS_SHOW;
import static com.android.launcher3.taskbar.Utilities.appendFlag;
@@ -75,6 +74,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
    public static final int FLAG_IN_SETUP = 1 << 8; // In the Setup Wizard
    public static final int FLAG_STASHED_SMALL_SCREEN = 1 << 9; // phone screen gesture nav, stashed
    public static final int FLAG_STASHED_IN_APP_AUTO = 1 << 10; // Autohide (transient taskbar).
    public static final int FLAG_STASHED_IN_APP_EDU = 1 << 11; // EDU is visible.

    // If any of these flags are enabled, isInApp should return true.
    private static final int FLAGS_IN_APP = FLAG_IN_APP | FLAG_IN_SETUP;
@@ -83,7 +83,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
    private static final int FLAGS_STASHED_IN_APP = FLAG_STASHED_IN_APP_MANUAL
            | FLAG_STASHED_IN_APP_PINNED | FLAG_STASHED_IN_APP_EMPTY | FLAG_STASHED_IN_APP_SETUP
            | FLAG_STASHED_IN_APP_IME | FLAG_STASHED_IN_TASKBAR_ALL_APPS
            | FLAG_STASHED_SMALL_SCREEN | FLAG_STASHED_IN_APP_AUTO;
            | FLAG_STASHED_SMALL_SCREEN | FLAG_STASHED_IN_APP_AUTO | FLAG_STASHED_IN_APP_EDU;

    private static final int FLAGS_STASHED_IN_APP_IGNORING_IME =
            FLAGS_STASHED_IN_APP & ~FLAG_STASHED_IN_APP_IME;
@@ -93,7 +93,8 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
    // Currently any flag that causes us to stash in an app is included, except for IME or All Apps
    // since those cover the underlying app anyway and thus the app shouldn't change insets.
    private static final int FLAGS_REPORT_STASHED_INSETS_TO_APP = FLAGS_STASHED_IN_APP
            & ~FLAG_STASHED_IN_APP_IME & ~FLAG_STASHED_IN_TASKBAR_ALL_APPS;
            & ~FLAG_STASHED_IN_APP_IME & ~FLAG_STASHED_IN_TASKBAR_ALL_APPS
            & ~FLAG_STASHED_IN_APP_EDU;

    /**
     * How long to stash/unstash when manually invoked via long press.
@@ -701,34 +702,27 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba

        // Only update the following flags when system gesture is not in progress.
        boolean shouldStashForIme = shouldStashForIme();
        maybeResetStashedInAppAllApps(
                hasAnyFlag(FLAG_STASHED_IN_APP_IME) == shouldStashForIme);
        updateStateForFlag(FLAG_STASHED_IN_TASKBAR_ALL_APPS, false);
        updateStateForFlag(FLAG_STASHED_IN_APP_EDU, false);
        if (hasAnyFlag(FLAG_STASHED_IN_APP_IME) != shouldStashForIme) {
            updateStateForFlag(FLAG_STASHED_IN_APP_IME, shouldStashForIme);
            applyState(TASKBAR_STASH_DURATION_FOR_IME, getTaskbarStashStartDelayForIme());
        } else {
            applyState(mControllers.taskbarOverlayController.getCloseDuration());
        }
    }

    /**
     * Reset stashed in all apps only if no system gesture is in progress.
     * Resets the flag 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_TASKBAR_ALL_APPS, false);
        if (applyState) {
            applyState(ALL_APPS.getTransitionDuration(
                    mControllers.taskbarActivityContext, false /* isToState */));
    public void resetFlagIfNoGestureInProgress(int flag) {
        if (!mIsSystemGestureInProgress) {
            updateStateForFlag(flag, false);
            applyState(mControllers.taskbarOverlayController.getCloseDuration());
        }
    }

+10 −5
Original line number Diff line number Diff line
@@ -15,7 +15,6 @@
 */
package com.android.launcher3.taskbar.allapps;

import static com.android.launcher3.LauncherState.ALL_APPS;
import static com.android.launcher3.anim.Interpolators.EMPHASIZED;

import android.animation.PropertyValuesHolder;
@@ -28,6 +27,7 @@ import android.view.animation.Interpolator;
import com.android.launcher3.DeviceProfile;
import com.android.launcher3.Insettable;
import com.android.launcher3.R;
import com.android.launcher3.taskbar.allapps.TaskbarAllAppsViewController.TaskbarAllAppsCallbacks;
import com.android.launcher3.taskbar.overlay.TaskbarOverlayContext;
import com.android.launcher3.views.AbstractSlideInView;

@@ -37,6 +37,9 @@ public class TaskbarAllAppsSlideInView extends AbstractSlideInView<TaskbarOverla
    private TaskbarAllAppsContainerView mAppsView;
    private float mShiftRange;

    // Initialized in init.
    private TaskbarAllAppsCallbacks mAllAppsCallbacks;

    public TaskbarAllAppsSlideInView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }
@@ -46,6 +49,10 @@ public class TaskbarAllAppsSlideInView extends AbstractSlideInView<TaskbarOverla
        super(context, attrs, defStyleAttr);
    }

    void init(TaskbarAllAppsCallbacks callbacks) {
        mAllAppsCallbacks = callbacks;
    }

    /** Opens the all apps view. */
    void show(boolean animate) {
        if (mIsOpen || mOpenCloseAnimator.isRunning()) {
@@ -58,8 +65,7 @@ public class TaskbarAllAppsSlideInView extends AbstractSlideInView<TaskbarOverla
            mOpenCloseAnimator.setValues(
                    PropertyValuesHolder.ofFloat(TRANSLATION_SHIFT, TRANSLATION_SHIFT_OPENED));
            mOpenCloseAnimator.setInterpolator(EMPHASIZED);
            mOpenCloseAnimator.setDuration(
                    ALL_APPS.getTransitionDuration(mActivityContext, true /* isToState */)).start();
            mOpenCloseAnimator.setDuration(mAllAppsCallbacks.getOpenDuration()).start();
        } else {
            mTranslationShift = TRANSLATION_SHIFT_OPENED;
        }
@@ -72,8 +78,7 @@ public class TaskbarAllAppsSlideInView extends AbstractSlideInView<TaskbarOverla

    @Override
    protected void handleClose(boolean animate) {
        handleClose(animate,
                ALL_APPS.getTransitionDuration(mActivityContext, false /* isToState */));
        handleClose(animate, mAllAppsCallbacks.getCloseDuration());
    }

    @Override
+17 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@ package com.android.launcher3.taskbar.allapps;

import static com.android.launcher3.LauncherState.ALL_APPS;
import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_STASHED_IN_TASKBAR_ALL_APPS;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.OnboardingPrefs.ALL_APPS_VISITED_COUNT;

import com.android.launcher3.AbstractFloatingView;
@@ -26,6 +27,7 @@ import com.android.launcher3.taskbar.NavbarButtonsViewController;
import com.android.launcher3.taskbar.TaskbarControllers;
import com.android.launcher3.taskbar.TaskbarStashController;
import com.android.launcher3.taskbar.overlay.TaskbarOverlayContext;
import com.android.launcher3.taskbar.overlay.TaskbarOverlayController;

/**
 * Handles the {@link TaskbarAllAppsContainerView} behavior and synchronizes its transitions with
@@ -38,6 +40,7 @@ final class TaskbarAllAppsViewController {
    private final TaskbarAllAppsContainerView mAppsView;
    private final TaskbarStashController mTaskbarStashController;
    private final NavbarButtonsViewController mNavbarButtonsViewController;
    private final TaskbarOverlayController mOverlayController;

    TaskbarAllAppsViewController(
            TaskbarOverlayContext context,
@@ -49,7 +52,9 @@ final class TaskbarAllAppsViewController {
        mAppsView = mSlideInView.getAppsView();
        mTaskbarStashController = taskbarControllers.taskbarStashController;
        mNavbarButtonsViewController = taskbarControllers.navbarButtonsViewController;
        mOverlayController = taskbarControllers.taskbarOverlayController;

        mSlideInView.init(new TaskbarAllAppsCallbacks());
        setUpIconLongClick();
        setUpAppDivider();
        setUpTaskbarStashing();
@@ -93,7 +98,18 @@ final class TaskbarAllAppsViewController {
                    mContext, AbstractFloatingView.TYPE_ACTION_POPUP);
            // 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);
            MAIN_EXECUTOR.post(() -> mTaskbarStashController.resetFlagIfNoGestureInProgress(
                    FLAG_STASHED_IN_TASKBAR_ALL_APPS));
        });
    }

    class TaskbarAllAppsCallbacks {
        int getOpenDuration() {
            return mOverlayController.getOpenDuration();
        }

        int getCloseDuration() {
            return mOverlayController.getCloseDuration();
        }
    }
}
Loading