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

Commit 0e7ca6c6 authored by Jagrut Desai's avatar Jagrut Desai Committed by Android (Google) Code Review
Browse files

Merge "Fix Hotseat stashing on user going to dream" into main

parents 892ad691 36bbc4f1
Loading
Loading
Loading
Loading
+8 −15
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.launcher3.taskbar;

import static com.android.app.animation.Interpolators.EMPHASIZED;
import static com.android.app.animation.Interpolators.FINAL_FRAME;
import static com.android.launcher3.Flags.enableScalingRevealHomeAnimation;
import static com.android.launcher3.Hotseat.ALPHA_CHANNEL_TASKBAR_ALIGNMENT;
import static com.android.launcher3.Hotseat.ALPHA_CHANNEL_TASKBAR_STASH;
@@ -31,11 +32,8 @@ import static com.android.launcher3.taskbar.bubbles.BubbleBarView.FADE_IN_ANIM_A
import static com.android.launcher3.taskbar.bubbles.BubbleBarView.FADE_OUT_ANIM_POSITION_DURATION_MS;
import static com.android.launcher3.util.FlagDebugUtils.appendFlag;
import static com.android.launcher3.util.FlagDebugUtils.formatFlagChange;
import static com.android.quickstep.util.SystemUiFlagUtils.isTaskbarHidden;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_AWAKE;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_COMMUNAL_HUB_SHOWING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_DEVICE_DREAMING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_WAKEFULNESS_MASK;
import static com.android.systemui.shared.system.QuickStepContract.WAKEFULNESS_AWAKE;

import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
@@ -380,16 +378,7 @@ public class TaskbarLauncherStateController {

        updateStateForFlag(FLAG_DEVICE_LOCKED, SystemUiFlagUtils.isLocked(systemUiStateFlags));

        // Taskbar is hidden whenever the device is dreaming. The dreaming state includes the
        // interactive dreams, AoD, screen off. Since the SYSUI_STATE_DEVICE_DREAMING only kicks in
        // when the device is asleep, the second condition extends ensures that the transition from
        // and to the WAKEFULNESS_ASLEEP state also hide the taskbar, and improves the taskbar
        // hide/reveal animation timings. The Taskbar can show when dreaming if the glanceable hub
        // is showing on top.
        boolean isTaskbarHidden = (hasAnyFlag(systemUiStateFlags, SYSUI_STATE_DEVICE_DREAMING)
                && !hasAnyFlag(systemUiStateFlags, SYSUI_STATE_COMMUNAL_HUB_SHOWING))
                || (systemUiStateFlags & SYSUI_STATE_WAKEFULNESS_MASK) != WAKEFULNESS_AWAKE;
        updateStateForFlag(FLAG_TASKBAR_HIDDEN, isTaskbarHidden);
        updateStateForFlag(FLAG_TASKBAR_HIDDEN, isTaskbarHidden(systemUiStateFlags));

        if (applyState) {
            applyState();
@@ -684,8 +673,12 @@ public class TaskbarLauncherStateController {
                        + mIconAlignment.value
                        + " -> " + toAlignment + ": " + duration);
            }
            if (hasAnyFlag(FLAG_TASKBAR_HIDDEN)) {
                iconAlignAnim.setInterpolator(FINAL_FRAME);
            } else {
                animatorSet.play(iconAlignAnim);
            }
        }

        Interpolator interpolator = enableScalingRevealHomeAnimation()
                ? ScalingWorkspaceRevealAnim.SCALE_INTERPOLATOR : EMPHASIZED;
+16 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import static com.android.launcher3.util.Executors.UI_HELPER_EXECUTOR;
import static com.android.launcher3.util.FlagDebugUtils.appendFlag;
import static com.android.launcher3.util.FlagDebugUtils.formatFlagChange;
import static com.android.quickstep.util.SystemActionConstants.SYSTEM_ACTION_ID_TASKBAR;
import static com.android.quickstep.util.SystemUiFlagUtils.isTaskbarHidden;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BUBBLES_EXPANDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_DIALOG_SHOWING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SHOWING;
@@ -104,6 +105,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
    // An internal no-op flag to determine whether we should delay the taskbar background animation
    private static final int FLAG_DELAY_TASKBAR_BG_TAG = 1 << 12;
    public static final int FLAG_STASHED_FOR_BUBBLES = 1 << 13; // show handle for stashed hotseat
    public static final int FLAG_TASKBAR_HIDDEN = 1 << 14; // taskbar hidden during dream, etc...

    // If any of these flags are enabled, isInApp should return true.
    private static final int FLAGS_IN_APP = FLAG_IN_APP | FLAG_IN_SETUP;
@@ -215,6 +217,13 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
     */
    private static final int TRANSITION_UNSTASH_SUW_MANUAL = 3;

    /**
     * total duration of entering dream state animation, which we use as start delay to
     * applyState() when SYSUI_STATE_DEVICE_DREAMING flag is present. Keep this in sync with
     * DreamAnimationController.TOTAL_ANIM_DURATION.
     */
    private static final int SKIP_TOTAL_DREAM_ANIM_DURATION = 450;

    @Retention(RetentionPolicy.SOURCE)
    @IntDef(value = {
            TRANSITION_DEFAULT,
@@ -1123,8 +1132,14 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
            startDelay = getTaskbarStashStartDelayForIme();
        }

        if (isTaskbarHidden(systemUiStateFlags) && !hasAnyFlag(FLAG_TASKBAR_HIDDEN)) {
            updateStateForFlag(FLAG_TASKBAR_HIDDEN, isTaskbarHidden(systemUiStateFlags));
            applyState(0, SKIP_TOTAL_DREAM_ANIM_DURATION);
        } else {
            updateStateForFlag(FLAG_TASKBAR_HIDDEN, isTaskbarHidden(systemUiStateFlags));
            applyState(skipAnim ? 0 : animDuration, skipAnim ? 0 : startDelay);
        }
    }

    /**
     * We stash when IME or IME switcher is showing.
+16 −0
Original line number Diff line number Diff line
@@ -47,6 +47,22 @@ object SystemUiFlagUtils {
            !hasAnyFlag(flags, QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_GOING_AWAY)
    }

    /**
     * Taskbar is hidden whenever the device is dreaming. The dreaming state includes the
     * interactive dreams, AoD, screen off. Since the SYSUI_STATE_DEVICE_DREAMING only kicks in when
     * the device is asleep, the second condition extends ensures that the transition from and to
     * the WAKEFULNESS_ASLEEP state also hide the taskbar, and improves the taskbar hide/reveal
     * animation timings. The Taskbar can show when dreaming if the glanceable hub is showing on
     * top.
     */
    @JvmStatic
    fun isTaskbarHidden(@SystemUiStateFlags flags: Long): Boolean {
        return ((hasAnyFlag(flags, QuickStepContract.SYSUI_STATE_DEVICE_DREAMING) &&
            !hasAnyFlag(flags, QuickStepContract.SYSUI_STATE_COMMUNAL_HUB_SHOWING)) ||
            (flags and QuickStepContract.SYSUI_STATE_WAKEFULNESS_MASK) !=
                QuickStepContract.WAKEFULNESS_AWAKE)
    }

    private fun hasAnyFlag(@SystemUiStateFlags flags: Long, flagMask: Long): Boolean {
        return (flags and flagMask) != 0L
    }