Do not play unstash animation when unlocking the device am: 94f46e14f4 am: 14db451c21 am: 2736f2ed5b

Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/22119728

Change-Id: Iedcc0324e385f10a5505f98b8a1401dbc2d2a2ed
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Mike Schneider
2023-03-22 18:05:56 +00:00
committed by Automerger Merge Worker
6 changed files with 56 additions and 32 deletions
@@ -100,7 +100,7 @@ public class LauncherTaskbarUIController extends TaskbarUIController {
onLauncherResumedOrPaused(mLauncher.hasBeenResumed(), true /* fromInit */); onLauncherResumedOrPaused(mLauncher.hasBeenResumed(), true /* fromInit */);
onStashedInAppChanged(mLauncher.getDeviceProfile()); onStashedInAppChanged(mLauncher.getDeviceProfile());
mTaskbarLauncherStateController.onChangeScreenState( mTaskbarLauncherStateController.updateStateForSysuiFlags(
mControllers.getSharedState().sysuiStateFlags, true /* fromInit */); mControllers.getSharedState().sysuiStateFlags, true /* fromInit */);
mLauncher.addOnDeviceProfileChangeListener(mOnDeviceProfileChangeListener); mLauncher.addOnDeviceProfileChangeListener(mOnDeviceProfileChangeListener);
} }
@@ -319,8 +319,8 @@ public class LauncherTaskbarUIController extends TaskbarUIController {
} }
@Override @Override
public void onChangeScreenState(int screenState) { public void updateStateForSysuiFlags(int sysuiFlags, boolean skipAnim) {
mTaskbarLauncherStateController.onChangeScreenState(screenState, false /* fromInit */); mTaskbarLauncherStateController.updateStateForSysuiFlags(sysuiFlags, skipAnim);
} }
@Override @Override
@@ -32,7 +32,6 @@ import static com.android.launcher3.taskbar.TaskbarManager.FLAG_HIDE_NAVBAR_WIND
import static com.android.launcher3.testing.shared.ResourceUtils.getBoolByName; import static com.android.launcher3.testing.shared.ResourceUtils.getBoolByName;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_STATE_MASK;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING;
import android.animation.AnimatorSet; import android.animation.AnimatorSet;
@@ -592,8 +591,7 @@ public class TaskbarActivityContext extends BaseTaskbarContext {
mControllers.voiceInteractionWindowController.setIsVoiceInteractionWindowVisible( mControllers.voiceInteractionWindowController.setIsVoiceInteractionWindowVisible(
(systemUiStateFlags & SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING) != 0, fromInit); (systemUiStateFlags & SYSUI_STATE_VOICE_INTERACTION_WINDOW_SHOWING) != 0, fromInit);
mControllers.uiController.onChangeScreenState( mControllers.uiController.updateStateForSysuiFlags(systemUiStateFlags, fromInit);
systemUiStateFlags & SYSUI_STATE_SCREEN_STATE_MASK);
} }
/** /**
@@ -30,6 +30,12 @@ public class TaskbarKeyguardController implements TaskbarControllers.LoggableTas
| SYSUI_STATE_BACK_DISABLED | SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED | SYSUI_STATE_BACK_DISABLED | SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED
| SYSUI_STATE_SCREEN_STATE_MASK; | SYSUI_STATE_SCREEN_STATE_MASK;
// If any of these SysUi flags (via QuickstepContract) is set, the device to be considered
// locked.
public static final int MASK_ANY_SYSUI_LOCKED = SYSUI_STATE_BOUNCER_SHOWING
| SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING
| SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED;
private final TaskbarActivityContext mContext; private final TaskbarActivityContext mContext;
private int mKeyguardSysuiFlags; private int mKeyguardSysuiFlags;
private boolean mBouncerShowing; private boolean mBouncerShowing;
@@ -15,6 +15,7 @@
*/ */
package com.android.launcher3.taskbar; package com.android.launcher3.taskbar;
import static com.android.launcher3.taskbar.TaskbarKeyguardController.MASK_ANY_SYSUI_LOCKED;
import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_IN_APP; import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_IN_APP;
import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_IN_STASHED_LAUNCHER_STATE; import static com.android.launcher3.taskbar.TaskbarStashController.FLAG_IN_STASHED_LAUNCHER_STATE;
import static com.android.launcher3.taskbar.TaskbarViewController.ALPHA_INDEX_HOME; import static com.android.launcher3.taskbar.TaskbarViewController.ALPHA_INDEX_HOME;
@@ -92,6 +93,9 @@ public class TaskbarLauncherStateController {
*/ */
private static final int FLAG_LAUNCHER_ACTIVE_AT_SCREEN_OFF = 1 << 4; private static final int FLAG_LAUNCHER_ACTIVE_AT_SCREEN_OFF = 1 << 4;
/** Whether the device is currently locked. */
private static final int FLAG_DEVICE_LOCKED = 1 << 5;
private static final int FLAGS_LAUNCHER_ACTIVE = FLAG_RESUMED | FLAG_TRANSITION_TO_RESUMED; private static final int FLAGS_LAUNCHER_ACTIVE = FLAG_RESUMED | FLAG_TRANSITION_TO_RESUMED;
/** Equivalent to an int with all 1s for binary operation purposes */ /** Equivalent to an int with all 1s for binary operation purposes */
private static final int FLAGS_ALL = ~0; private static final int FLAGS_ALL = ~0;
@@ -259,18 +263,23 @@ public class TaskbarLauncherStateController {
mShouldDelayLauncherStateAnim = shouldDelayLauncherStateAnim; mShouldDelayLauncherStateAnim = shouldDelayLauncherStateAnim;
} }
/** Screen state changed, see QuickStepContract.SCREEN_STATE_* values. */ /** SysUI flags updated, see QuickStepContract.SYSUI_STATE_* values. */
public void onChangeScreenState(int screenState, boolean fromInit) { public void updateStateForSysuiFlags(int systemUiStateFlags, boolean skipAnim) {
final boolean prevScreenIsOn = hasAnyFlag(FLAG_SCREEN_ON); final boolean prevScreenIsOn = hasAnyFlag(FLAG_SCREEN_ON);
final boolean currScreenIsOn = hasAnyFlag(screenState, SYSUI_STATE_SCREEN_ON); final boolean currScreenIsOn = hasAnyFlag(systemUiStateFlags, SYSUI_STATE_SCREEN_ON);
if (prevScreenIsOn == currScreenIsOn) return;
updateStateForFlag(FLAG_SCREEN_ON, currScreenIsOn); updateStateForFlag(FLAG_SCREEN_ON, currScreenIsOn);
updateStateForFlag(FLAG_LAUNCHER_ACTIVE_AT_SCREEN_OFF, if (prevScreenIsOn != currScreenIsOn) {
prevScreenIsOn && hasAnyFlag(FLAGS_LAUNCHER_ACTIVE)); // The screen is switching between on/off. When turning off, capture whether the
// launcher is active and memoize this state.
updateStateForFlag(FLAG_LAUNCHER_ACTIVE_AT_SCREEN_OFF,
prevScreenIsOn && hasAnyFlag(FLAGS_LAUNCHER_ACTIVE));
}
if (fromInit) { boolean isDeviceLocked = hasAnyFlag(systemUiStateFlags, MASK_ANY_SYSUI_LOCKED);
updateStateForFlag(FLAG_DEVICE_LOCKED, isDeviceLocked);
if (skipAnim) {
applyState(0); applyState(0);
} else { } else {
applyState(); applyState();
@@ -448,7 +457,13 @@ public class TaskbarLauncherStateController {
animatorSet.play(mTaskbarCornerRoundness.animateToValue(cornerRoundness)); animatorSet.play(mTaskbarCornerRoundness.animateToValue(cornerRoundness));
} }
if (mIconAlignment.isAnimatingToValue(toAlignment) if (hasAnyFlag(changedFlags, FLAG_DEVICE_LOCKED)) {
// When transitioning between locked/unlocked, there is no stashing animation.
mIconAlignment.cancelAnimation();
// updateValue ensures onIconAlignmentRatioChanged will be called if there is an actual
// change in value
mIconAlignment.updateValue(toAlignment);
} else if (mIconAlignment.isAnimatingToValue(toAlignment)
|| mIconAlignment.isSettledOnValue(toAlignment)) { || mIconAlignment.isSettledOnValue(toAlignment)) {
// Already at desired value, but make sure we run the callback at the end. // Already at desired value, but make sure we run the callback at the end.
animatorSet.addListener(AnimatorListeners.forEndCallback( animatorSet.addListener(AnimatorListeners.forEndCallback(
@@ -656,6 +671,7 @@ public class TaskbarLauncherStateController {
appendFlag(result, flags, FLAG_SCREEN_ON, "screen_on"); appendFlag(result, flags, FLAG_SCREEN_ON, "screen_on");
appendFlag(result, flags, FLAG_LAUNCHER_ACTIVE_AT_SCREEN_OFF, appendFlag(result, flags, FLAG_LAUNCHER_ACTIVE_AT_SCREEN_OFF,
"launcher_active_at_screen_off"); "launcher_active_at_screen_off");
appendFlag(result, flags, FLAG_DEVICE_LOCKED, "device_locked");
return result.toString(); return result.toString();
} }
@@ -27,16 +27,14 @@ import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCH
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_LONGPRESS_SHOW; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TASKBAR_LONGPRESS_SHOW;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TRANSIENT_TASKBAR_HIDE; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TRANSIENT_TASKBAR_HIDE;
import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TRANSIENT_TASKBAR_SHOW; import static com.android.launcher3.logging.StatsLogManager.LauncherEvent.LAUNCHER_TRANSIENT_TASKBAR_SHOW;
import static com.android.launcher3.taskbar.TaskbarKeyguardController.MASK_ANY_SYSUI_LOCKED;
import static com.android.launcher3.util.FlagDebugUtils.appendFlag; import static com.android.launcher3.util.FlagDebugUtils.appendFlag;
import static com.android.launcher3.util.FlagDebugUtils.formatFlagChange; import static com.android.launcher3.util.FlagDebugUtils.formatFlagChange;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_BOUNCER_SHOWING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SHOWING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SWITCHER_SHOWING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_IME_SWITCHER_SHOWING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_QUICK_SETTINGS_EXPANDED;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING; import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_SCREEN_PINNING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING;
import static com.android.systemui.shared.system.QuickStepContract.SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED;
import android.animation.Animator; import android.animation.Animator;
import android.animation.AnimatorListenerAdapter; import android.animation.AnimatorListenerAdapter;
@@ -89,7 +87,8 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
public static final int FLAG_IN_SETUP = 1 << 7; // In the Setup Wizard public static final int FLAG_IN_SETUP = 1 << 7; // In the Setup Wizard
public static final int FLAG_STASHED_SMALL_SCREEN = 1 << 8; // phone screen gesture nav, stashed public static final int FLAG_STASHED_SMALL_SCREEN = 1 << 8; // phone screen gesture nav, stashed
public static final int FLAG_STASHED_IN_APP_AUTO = 1 << 9; // Autohide (transient taskbar). public static final int FLAG_STASHED_IN_APP_AUTO = 1 << 9; // Autohide (transient taskbar).
public static final int FLAG_STASHED_SYSUI = 1 << 10; // app pinning, keyguard, etc. public static final int FLAG_STASHED_SYSUI = 1 << 10; // app pinning,...
public static final int FLAG_STASHED_DEVICE_LOCKED = 1 << 11; // device is locked: keyguard, ...
// If any of these flags are enabled, isInApp should return true. // If any of these flags are enabled, isInApp should return true.
private static final int FLAGS_IN_APP = FLAG_IN_APP | FLAG_IN_SETUP; private static final int FLAGS_IN_APP = FLAG_IN_APP | FLAG_IN_SETUP;
@@ -110,6 +109,10 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
private static final int FLAGS_REPORT_STASHED_INSETS_TO_APP = FLAGS_STASHED_IN_APP 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;
// If any of these flags are enabled, the taskbar must be stashed.
private static final int FLAGS_FORCE_STASHED = FLAG_STASHED_SYSUI | FLAG_STASHED_DEVICE_LOCKED
| FLAG_STASHED_IN_TASKBAR_ALL_APPS | FLAG_STASHED_SMALL_SCREEN;
/** /**
* How long to stash/unstash when manually invoked via long press. * How long to stash/unstash when manually invoked via long press.
* *
@@ -219,10 +222,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
boolean inApp = hasAnyFlag(flags, FLAGS_IN_APP); boolean inApp = hasAnyFlag(flags, FLAGS_IN_APP);
boolean stashedInApp = hasAnyFlag(flags, FLAGS_STASHED_IN_APP); boolean stashedInApp = hasAnyFlag(flags, FLAGS_STASHED_IN_APP);
boolean stashedLauncherState = hasAnyFlag(flags, FLAG_IN_STASHED_LAUNCHER_STATE); boolean stashedLauncherState = hasAnyFlag(flags, FLAG_IN_STASHED_LAUNCHER_STATE);
boolean forceStashed = hasAnyFlag(flags, boolean forceStashed = hasAnyFlag(flags, FLAGS_FORCE_STASHED);
FLAG_STASHED_SYSUI
| FLAG_STASHED_IN_TASKBAR_ALL_APPS
| FLAG_STASHED_SMALL_SCREEN);
return (inApp && stashedInApp) || (!inApp && stashedLauncherState) || forceStashed; return (inApp && stashedInApp) || (!inApp && stashedLauncherState) || forceStashed;
}); });
@@ -584,8 +584,12 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
// If Hotseat is not the top element during animation to/from Launcher, fade in/out a // If Hotseat is not the top element during animation to/from Launcher, fade in/out a
// already stashed Taskbar. // already stashed Taskbar.
boolean skipStashAnimation = !mControllers.uiController.isHotseatIconOnTopWhenAligned() boolean hotseatTopElement = mControllers.uiController.isHotseatIconOnTopWhenAligned()
&& hasAnyFlag(changedFlags, FLAG_IN_APP); || !hasAnyFlag(changedFlags, FLAG_IN_APP);
// If transitioning between locked/unlocked device, do not play a stash animation.
boolean unLockedTransition = hasAnyFlag(changedFlags, FLAG_STASHED_DEVICE_LOCKED);
boolean skipStashAnimation = !hotseatTopElement || unLockedTransition;
if (isTransientTaskbar) { if (isTransientTaskbar) {
createTransientAnimToIsStashed(mAnimator, isStashed, duration, animateBg, changedFlags, createTransientAnimToIsStashed(mAnimator, isStashed, duration, animateBg, changedFlags,
skipStashAnimation); skipStashAnimation);
@@ -905,11 +909,10 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
updateStateForFlag(FLAG_STASHED_IN_APP_SYSUI, hasAnyFlag(systemUiStateFlags, updateStateForFlag(FLAG_STASHED_IN_APP_SYSUI, hasAnyFlag(systemUiStateFlags,
SYSUI_STATE_QUICK_SETTINGS_EXPANDED SYSUI_STATE_QUICK_SETTINGS_EXPANDED
| SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED)); | SYSUI_STATE_NOTIFICATION_PANEL_EXPANDED));
updateStateForFlag(FLAG_STASHED_SYSUI, hasAnyFlag(systemUiStateFlags, updateStateForFlag(FLAG_STASHED_SYSUI,
SYSUI_STATE_SCREEN_PINNING hasAnyFlag(systemUiStateFlags, SYSUI_STATE_SCREEN_PINNING));
| SYSUI_STATE_BOUNCER_SHOWING updateStateForFlag(FLAG_STASHED_DEVICE_LOCKED,
| SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING hasAnyFlag(systemUiStateFlags, MASK_ANY_SYSUI_LOCKED));
| SYSUI_STATE_STATUS_BAR_KEYGUARD_SHOWING_OCCLUDED));
// Only update FLAG_STASHED_IN_APP_IME when system gesture is not in progress. // Only update FLAG_STASHED_IN_APP_IME when system gesture is not in progress.
mIsImeShowing = hasAnyFlag(systemUiStateFlags, SYSUI_STATE_IME_SHOWING); mIsImeShowing = hasAnyFlag(systemUiStateFlags, SYSUI_STATE_IME_SHOWING);
@@ -1081,6 +1084,7 @@ public class TaskbarStashController implements TaskbarControllers.LoggableTaskba
appendFlag(sj, flags, FLAG_IN_SETUP, "FLAG_IN_SETUP"); appendFlag(sj, flags, FLAG_IN_SETUP, "FLAG_IN_SETUP");
appendFlag(sj, flags, FLAG_STASHED_IN_APP_AUTO, "FLAG_STASHED_IN_APP_AUTO"); appendFlag(sj, flags, FLAG_STASHED_IN_APP_AUTO, "FLAG_STASHED_IN_APP_AUTO");
appendFlag(sj, flags, FLAG_STASHED_SYSUI, "FLAG_STASHED_SYSUI"); appendFlag(sj, flags, FLAG_STASHED_SYSUI, "FLAG_STASHED_SYSUI");
appendFlag(sj, flags, FLAG_STASHED_DEVICE_LOCKED, "FLAG_STASHED_DEVICE_LOCKED");
return sj.toString(); return sj.toString();
} }
@@ -125,9 +125,9 @@ public class TaskbarUIController {
} }
/** /**
* Screen state changed, see QuickStepContract.SCREEN_STATE_* values. * SysUI flags updated, see QuickStepContract.SYSUI_STATE_* values.
*/ */
public void onChangeScreenState(int screenState){ public void updateStateForSysuiFlags(int sysuiFlags, boolean skipAnim){
} }
/** /**