From 3a7a76f88e51453cc4b70fa68aef2724cccc02c6 Mon Sep 17 00:00:00 2001 From: Andy Wickham Date: Wed, 1 May 2024 14:57:51 -0700 Subject: [PATCH] Implement animateNavBarLongPress for stashed taskbar. I think ideally we would tie this into the taskbar's outline provider, but it seemed more complicated to deal with existing stashing animations. Instead I've just animated the stashed taskbar scale to 0.85 or 1.18, depending on the SHRINK_NAV_HANDLE_ON_PRESS flag. These are based on the existing navbar shrink/expand animations. Demo (the flickering doesn't happen on-device): https://drive.google.com/file/d/1CWCPRsuD3kjtOUbwXspkQ_ZJ6Ln7FnUo/view?usp=sharing&resourcekey=0-kJjfgnuEca1de4u8mbHrig Bug: 308693847 Test: Manual Flag: LEGACY SHRINK_NAV_HANDLE_ON_PRESS DISABLED Flag: LEGACY ANIMATE_LPNH DISABLED Change-Id: I6ecbc849ac1c066a4c018325f0237a61641d99aa --- .../launcher3/taskbar/StashedHandleView.java | 16 ++++++++++++++++ .../taskbar/StashedHandleViewController.java | 12 +++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/StashedHandleView.java b/quickstep/src/com/android/launcher3/taskbar/StashedHandleView.java index 83e457140e..94e2244172 100644 --- a/quickstep/src/com/android/launcher3/taskbar/StashedHandleView.java +++ b/quickstep/src/com/android/launcher3/taskbar/StashedHandleView.java @@ -15,9 +15,12 @@ */ package com.android.launcher3.taskbar; +import static com.android.launcher3.LauncherAnimUtils.SCALE_PROPERTY; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; +import android.animation.PropertyValuesHolder; import android.annotation.Nullable; import android.content.Context; import android.graphics.Rect; @@ -111,4 +114,17 @@ public class StashedHandleView extends View { setBackgroundColor(newColor); } } + + /** + * Updates the handle scale. + * + * @param scale target scale to animate towards (starting from current scale) + * @param durationMs milliseconds for the animation to take + */ + public void animateScale(float scale, long durationMs) { + ObjectAnimator scaleAnim = ObjectAnimator.ofPropertyValuesHolder(this, + PropertyValuesHolder.ofFloat(SCALE_PROPERTY, scale)); + scaleAnim.setDuration(durationMs).setAutoCancel(true); + scaleAnim.start(); + } } diff --git a/quickstep/src/com/android/launcher3/taskbar/StashedHandleViewController.java b/quickstep/src/com/android/launcher3/taskbar/StashedHandleViewController.java index f258b47efc..36e054a56d 100644 --- a/quickstep/src/com/android/launcher3/taskbar/StashedHandleViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/StashedHandleViewController.java @@ -57,6 +57,10 @@ public class StashedHandleViewController implements TaskbarControllers.LoggableT public static final int ALPHA_INDEX_HIDDEN_WHILE_DREAMING = 3; private static final int NUM_ALPHA_CHANNELS = 4; + // Values for long press animations, picked to most closely match navbar spec. + private static final float SCALE_TOUCH_ANIMATION_SHRINK = 0.85f; + private static final float SCALE_TOUCH_ANIMATION_EXPAND = 1.18f; + /** * The SharedPreferences key for whether the stashed handle region is dark. */ @@ -324,7 +328,13 @@ public class StashedHandleViewController implements TaskbarControllers.LoggableT @Override public void animateNavBarLongPress(boolean isTouchDown, boolean shrink, long durationMs) { - // TODO(b/308693847): Animate similarly to NavigationHandle.java (SysUI). + float targetScale; + if (isTouchDown) { + targetScale = shrink ? SCALE_TOUCH_ANIMATION_SHRINK : SCALE_TOUCH_ANIMATION_EXPAND; + } else { + targetScale = 1f; + } + mStashedHandleView.animateScale(targetScale, durationMs); } @Override