From 4cbceb120832ec8e8613077141eccc04b47cea8d Mon Sep 17 00:00:00 2001 From: Tracy Zhou Date: Tue, 27 Aug 2024 20:51:00 -0700 Subject: [PATCH] Skip nav button animation in gesture nav mode - Also removed unused rotation button code - Skip adding certain property holders in phone mode - Update FLAG_SMALL_SCREEN value from isPhoneButtonNavMode to isPhoneMode, so that it's more aligned with what the name suggests (it shouldn't affect the functionality regardless as the view is invisible in small screen) Based on https://b.corp.google.com/issues/361593564#comment4 Bug: 361593564 Test: manual Flag: EXEMPT bugfix Change-Id: I1de7fa061a6c6aba9f949a0bcf8cfced84273e3f --- .../taskbar/NavbarButtonsViewController.java | 149 +++++------------- .../taskbar/TaskbarViewController.java | 4 +- 2 files changed, 41 insertions(+), 112 deletions(-) diff --git a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java index f61840a55d..a979d5859c 100644 --- a/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/NavbarButtonsViewController.java @@ -63,7 +63,6 @@ import android.graphics.Point; import android.graphics.Rect; import android.graphics.Region; import android.graphics.Region.Op; -import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.PaintDrawable; import android.graphics.drawable.RotateDrawable; @@ -74,8 +73,6 @@ import android.view.Gravity; import android.view.MotionEvent; import android.view.View; import android.view.View.OnAttachStateChangeListener; -import android.view.View.OnClickListener; -import android.view.View.OnHoverListener; import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.WindowManager; @@ -106,7 +103,6 @@ import com.android.launcher3.views.BaseDragLayer; import com.android.systemui.shared.navigationbar.KeyButtonRipple; import com.android.systemui.shared.rotation.FloatingRotationButton; import com.android.systemui.shared.rotation.RotationButton; -import com.android.systemui.shared.rotation.RotationButtonController; import com.android.systemui.shared.statusbar.phone.BarTransitions; import com.android.systemui.shared.system.QuickStepContract; import com.android.systemui.shared.system.QuickStepContract.SystemUiStateFlags; @@ -304,8 +300,13 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT .get(ALPHA_INDEX_SMALL_SCREEN), flags -> (flags & FLAG_SMALL_SCREEN) == 0)); - mPropertyHolders.add(new StatePropertyHolder(mControllers.taskbarDragLayerController - .getKeyguardBgTaskbar(), flags -> (flags & FLAG_KEYGUARD_VISIBLE) == 0)); + if (!mContext.isPhoneMode()) { + mPropertyHolders.add(new StatePropertyHolder(mControllers.taskbarDragLayerController + .getKeyguardBgTaskbar(), flags -> (flags & FLAG_KEYGUARD_VISIBLE) == 0)); + } + + // Start at 1 because relevant flags are unset at init. + mOnBackgroundNavButtonColorOverrideMultiplier.value = 1; // Force nav buttons (specifically back button) to be visible during setup wizard. boolean isInSetup = !mContext.isUserSetupComplete(); @@ -317,39 +318,41 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT // - IME is showing (add separate translation for IME) // - VoiceInteractionWindow (assistant) is showing // - Keyboard shortcuts helper is showing - int flagsToRemoveTranslation = FLAG_NOTIFICATION_SHADE_EXPANDED | FLAG_IME_VISIBLE - | FLAG_VOICE_INTERACTION_WINDOW_SHOWING | FLAG_KEYBOARD_SHORTCUT_HELPER_SHOWING; - mPropertyHolders.add(new StatePropertyHolder(mNavButtonInAppDisplayProgressForSysui, - flags -> (flags & flagsToRemoveTranslation) != 0, AnimatedFloat.VALUE, - 1, 0)); - // Center nav buttons in new height for IME. - float transForIme = (mContext.getDeviceProfile().taskbarHeight - - mControllers.taskbarInsetsController.getTaskbarHeightForIme()) / 2f; - // For gesture nav, nav buttons only show for IME anyway so keep them translated down. - float defaultButtonTransY = alwaysShowButtons ? 0 : transForIme; - mPropertyHolders.add(new StatePropertyHolder(mTaskbarNavButtonTranslationYForIme, - flags -> (flags & FLAG_IME_VISIBLE) != 0 && !isInKidsMode, AnimatedFloat.VALUE, - transForIme, defaultButtonTransY)); + if (!mContext.isPhoneMode()) { + int flagsToRemoveTranslation = FLAG_NOTIFICATION_SHADE_EXPANDED | FLAG_IME_VISIBLE + | FLAG_VOICE_INTERACTION_WINDOW_SHOWING | FLAG_KEYBOARD_SHORTCUT_HELPER_SHOWING; + mPropertyHolders.add(new StatePropertyHolder(mNavButtonInAppDisplayProgressForSysui, + flags -> (flags & flagsToRemoveTranslation) != 0, AnimatedFloat.VALUE, + 1, 0)); + // Center nav buttons in new height for IME. + float transForIme = (mContext.getDeviceProfile().taskbarHeight + - mControllers.taskbarInsetsController.getTaskbarHeightForIme()) / 2f; + // For gesture nav, nav buttons only show for IME anyway so keep them translated down. + float defaultButtonTransY = alwaysShowButtons ? 0 : transForIme; + mPropertyHolders.add(new StatePropertyHolder(mTaskbarNavButtonTranslationYForIme, + flags -> (flags & FLAG_IME_VISIBLE) != 0 && !isInKidsMode, AnimatedFloat.VALUE, + transForIme, defaultButtonTransY)); - // Start at 1 because relevant flags are unset at init. - mOnBackgroundNavButtonColorOverrideMultiplier.value = 1; - mPropertyHolders.add(new StatePropertyHolder( - mOnBackgroundNavButtonColorOverrideMultiplier, - flags -> (flags & FLAGS_ON_BACKGROUND_COLOR_OVERRIDE_DISABLED) == 0)); + mPropertyHolders.add(new StatePropertyHolder( + mOnBackgroundNavButtonColorOverrideMultiplier, + flags -> (flags & FLAGS_ON_BACKGROUND_COLOR_OVERRIDE_DISABLED) == 0)); - mPropertyHolders.add(new StatePropertyHolder( - mSlideInViewVisibleNavButtonColorOverride, - flags -> (flags & FLAG_SLIDE_IN_VIEW_VISIBLE) != 0)); + mPropertyHolders.add(new StatePropertyHolder( + mSlideInViewVisibleNavButtonColorOverride, + flags -> (flags & FLAG_SLIDE_IN_VIEW_VISIBLE) != 0)); + } if (alwaysShowButtons) { initButtons(mNavButtonContainer, mEndContextualContainer, mControllers.navButtonController); updateButtonLayoutSpacing(); - updateStateForFlag(FLAG_SMALL_SCREEN, mContext.isPhoneButtonNavMode()); + updateStateForFlag(FLAG_SMALL_SCREEN, mContext.isPhoneMode()); - mPropertyHolders.add(new StatePropertyHolder( - mControllers.taskbarDragLayerController.getNavbarBackgroundAlpha(), - flags -> (flags & FLAG_ONLY_BACK_FOR_BOUNCER_VISIBLE) != 0)); + if (!mContext.isPhoneMode()) { + mPropertyHolders.add(new StatePropertyHolder( + mControllers.taskbarDragLayerController.getNavbarBackgroundAlpha(), + flags -> (flags & FLAG_ONLY_BACK_FOR_BOUNCER_VISIBLE) != 0)); + } } else if (!mIsImeRenderingNavButtons) { View imeDownButton = addButton(R.drawable.ic_sysbar_back, BUTTON_BACK, mStartContextualContainer, mControllers.navButtonController, R.id.back); @@ -711,7 +714,7 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT private void applyState() { int count = mPropertyHolders.size(); for (int i = 0; i < count; i++) { - mPropertyHolders.get(i).setState(mState); + mPropertyHolders.get(i).setState(mState, mContext.isGestureNav()); } } @@ -1177,83 +1180,6 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT } } - private class RotationButtonImpl implements RotationButton { - - private final ImageView mButton; - private AnimatedVectorDrawable mImageDrawable; - - RotationButtonImpl(ImageView button) { - mButton = button; - } - - @Override - public void setRotationButtonController(RotationButtonController rotationButtonController) { - // TODO(b/187754252) UI polish, different icons based on light/dark context, etc - mImageDrawable = (AnimatedVectorDrawable) mButton.getContext() - .getDrawable(rotationButtonController.getIconResId()); - mButton.setImageDrawable(mImageDrawable); - mButton.setContentDescription(mButton.getResources() - .getString(R.string.accessibility_rotate_button)); - mImageDrawable.setCallback(mButton); - } - - @Override - public View getCurrentView() { - return mButton; - } - - @Override - public boolean show() { - mButton.setVisibility(View.VISIBLE); - mState |= FLAG_ROTATION_BUTTON_VISIBLE; - applyState(); - return true; - } - - @Override - public boolean hide() { - mButton.setVisibility(View.GONE); - mState &= ~FLAG_ROTATION_BUTTON_VISIBLE; - applyState(); - return true; - } - - @Override - public boolean isVisible() { - return mButton.getVisibility() == View.VISIBLE; - } - - @Override - public void updateIcon(int lightIconColor, int darkIconColor) { - // TODO(b/187754252): UI Polish - } - - @Override - public void setOnClickListener(OnClickListener onClickListener) { - mButton.setOnClickListener(onClickListener); - } - - @Override - public void setOnHoverListener(OnHoverListener onHoverListener) { - mButton.setOnHoverListener(onHoverListener); - } - - @Override - public AnimatedVectorDrawable getImageDrawable() { - return mImageDrawable; - } - - @Override - public void setDarkIntensity(float darkIntensity) { - // TODO(b/187754252) UI polish - } - - @Override - public boolean acceptRotationProposal() { - return mButton.isAttachedToWindow(); - } - } - private static class StatePropertyHolder { private final float mEnabledValue, mDisabledValue; @@ -1284,13 +1210,16 @@ public class NavbarButtonsViewController implements TaskbarControllers.LoggableT mAnimator = ObjectAnimator.ofFloat(target, property, enabledValue, disabledValue); } - public void setState(int flags) { + public void setState(int flags, boolean skipAnimation) { boolean isEnabled = mEnableCondition.test(flags); if (mIsEnabled != isEnabled) { mIsEnabled = isEnabled; mAnimator.cancel(); mAnimator.setFloatValues(mIsEnabled ? mEnabledValue : mDisabledValue); mAnimator.start(); + if (skipAnimation) { + mAnimator.end(); + } } } diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java index aef21aa6d1..27c1d9c800 100644 --- a/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java +++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarViewController.java @@ -219,8 +219,8 @@ public class TaskbarViewController implements TaskbarControllers.LoggableTaskbar if (ENABLE_TASKBAR_NAVBAR_UNIFICATION) { // This gets modified in NavbarButtonsViewController, but the initial value it reads // may be incorrect since it's state gets destroyed on taskbar recreate, so reset here - mTaskbarIconAlpha.get(ALPHA_INDEX_SMALL_SCREEN) - .animateToValue(mActivity.isPhoneButtonNavMode() ? 0 : 1).start(); + mTaskbarIconAlpha.get(ALPHA_INDEX_SMALL_SCREEN).setValue( + mActivity.isPhoneMode() ? 0 : 1); } if (enableTaskbarPinning()) { mTaskbarView.addOnLayoutChangeListener(mTaskbarViewLayoutChangeListener);