Show and hide taskbar tooltips immediately.
Fix: 356352494 Test: TaskbarHoverToolTipControllerTest Flag: EXEMPT bugfix Change-Id: Ie7dc1f341cf059bb38f61fa185152cb2555e36b1
This commit is contained in:
@@ -18,30 +18,22 @@ package com.android.launcher3.taskbar;
|
||||
import static android.view.MotionEvent.ACTION_HOVER_ENTER;
|
||||
import static android.view.MotionEvent.ACTION_HOVER_EXIT;
|
||||
import static android.view.View.ALPHA;
|
||||
import static android.view.View.SCALE_Y;
|
||||
import static android.view.accessibility.AccessibilityManager.FLAG_CONTENT_TEXT;
|
||||
|
||||
import static com.android.app.animation.Interpolators.LINEAR;
|
||||
import static com.android.launcher3.AbstractFloatingView.TYPE_ALL_EXCEPT_ON_BOARD_POPUP;
|
||||
import static com.android.launcher3.AbstractFloatingView.TYPE_FOLDER;
|
||||
import static com.android.launcher3.taskbar.TaskbarAutohideSuspendController.FLAG_AUTOHIDE_SUSPEND_HOVERING_ICONS;
|
||||
import static com.android.launcher3.views.ArrowTipView.TEXT_ALPHA;
|
||||
|
||||
import android.animation.AnimatorSet;
|
||||
import android.animation.ObjectAnimator;
|
||||
import android.graphics.Rect;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
import android.view.ContextThemeWrapper;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.View;
|
||||
|
||||
import com.android.app.animation.Interpolators;
|
||||
import com.android.launcher3.AbstractFloatingView;
|
||||
import com.android.launcher3.BubbleTextView;
|
||||
import com.android.launcher3.R;
|
||||
import com.android.launcher3.Utilities;
|
||||
import com.android.launcher3.apppairs.AppPairIcon;
|
||||
import com.android.launcher3.compat.AccessibilityManagerCompat;
|
||||
import com.android.launcher3.folder.FolderIcon;
|
||||
import com.android.launcher3.views.ArrowTipView;
|
||||
|
||||
@@ -49,13 +41,9 @@ import com.android.launcher3.views.ArrowTipView;
|
||||
* Controls showing a tooltip in the taskbar above each icon when it is hovered.
|
||||
*/
|
||||
public class TaskbarHoverToolTipController implements View.OnHoverListener {
|
||||
|
||||
private static final int HOVER_TOOL_TIP_REVEAL_DURATION = 250;
|
||||
private static final int HOVER_TOOL_TIP_EXIT_DURATION = 150;
|
||||
|
||||
private final Handler mHoverToolTipHandler = new Handler(Looper.getMainLooper());
|
||||
private final Runnable mRevealHoverToolTipRunnable = this::revealHoverToolTip;
|
||||
private final Runnable mHideHoverToolTipRunnable = this::hideHoverToolTip;
|
||||
// Short duration to reveal tooltip, as it is positioned in the x/y via a post() call in
|
||||
// parallel with the open animation. An instant animation could show in the wrong location.
|
||||
private static final int HOVER_TOOL_TIP_REVEAL_DURATION = 15;
|
||||
|
||||
private final TaskbarActivityContext mActivity;
|
||||
private final TaskbarView mTaskbarView;
|
||||
@@ -90,35 +78,11 @@ public class TaskbarHoverToolTipController implements View.OnHoverListener {
|
||||
R.dimen.taskbar_tooltip_horizontal_padding);
|
||||
mHoverToolTipView.findViewById(R.id.text).setPadding(horizontalPadding, verticalPadding,
|
||||
horizontalPadding, verticalPadding);
|
||||
|
||||
AnimatorSet hoverCloseAnimator = new AnimatorSet();
|
||||
ObjectAnimator textCloseAnimator = ObjectAnimator.ofInt(mHoverToolTipView, TEXT_ALPHA, 0);
|
||||
textCloseAnimator.setInterpolator(Interpolators.clampToProgress(LINEAR, 0, 0.33f));
|
||||
ObjectAnimator alphaCloseAnimator = ObjectAnimator.ofFloat(mHoverToolTipView, ALPHA, 0);
|
||||
alphaCloseAnimator.setInterpolator(Interpolators.clampToProgress(LINEAR, 0.33f, 0.66f));
|
||||
ObjectAnimator scaleCloseAnimator = ObjectAnimator.ofFloat(mHoverToolTipView, SCALE_Y, 0);
|
||||
scaleCloseAnimator.setInterpolator(Interpolators.STANDARD);
|
||||
hoverCloseAnimator.playTogether(
|
||||
textCloseAnimator,
|
||||
alphaCloseAnimator,
|
||||
scaleCloseAnimator);
|
||||
hoverCloseAnimator.setStartDelay(0);
|
||||
hoverCloseAnimator.setDuration(HOVER_TOOL_TIP_EXIT_DURATION);
|
||||
mHoverToolTipView.setCustomCloseAnimation(hoverCloseAnimator);
|
||||
mHoverToolTipView.setAlpha(0);
|
||||
|
||||
AnimatorSet hoverOpenAnimator = new AnimatorSet();
|
||||
ObjectAnimator textOpenAnimator =
|
||||
ObjectAnimator.ofInt(mHoverToolTipView, TEXT_ALPHA, 0, 255);
|
||||
textOpenAnimator.setInterpolator(Interpolators.clampToProgress(LINEAR, 0.15f, 0.75f));
|
||||
ObjectAnimator scaleOpenAnimator =
|
||||
ObjectAnimator.ofFloat(mHoverToolTipView, SCALE_Y, 0f, 1f);
|
||||
scaleOpenAnimator.setInterpolator(Interpolators.EMPHASIZED);
|
||||
ObjectAnimator alphaOpenAnimator = ObjectAnimator.ofFloat(mHoverToolTipView, ALPHA, 0f, 1f);
|
||||
alphaOpenAnimator.setInterpolator(Interpolators.clampToProgress(LINEAR, 0f, 0.33f));
|
||||
hoverOpenAnimator.playTogether(
|
||||
scaleOpenAnimator,
|
||||
textOpenAnimator,
|
||||
alphaOpenAnimator);
|
||||
hoverOpenAnimator.play(alphaOpenAnimator);
|
||||
hoverOpenAnimator.setDuration(HOVER_TOOL_TIP_REVEAL_DURATION);
|
||||
mHoverToolTipView.setCustomOpenAnimation(hoverOpenAnimator);
|
||||
|
||||
@@ -131,28 +95,17 @@ public class TaskbarHoverToolTipController implements View.OnHoverListener {
|
||||
|
||||
@Override
|
||||
public boolean onHover(View v, MotionEvent event) {
|
||||
boolean isAnyOtherFloatingViewOpen =
|
||||
AbstractFloatingView.hasOpenView(mActivity, TYPE_ALL_EXCEPT_ON_BOARD_POPUP);
|
||||
if (isAnyOtherFloatingViewOpen) {
|
||||
mHoverToolTipHandler.removeCallbacksAndMessages(null);
|
||||
}
|
||||
boolean isFolderOpen = AbstractFloatingView.hasOpenView(mActivity, TYPE_FOLDER);
|
||||
// If hover leaves a taskbar icon animate the tooltip closed.
|
||||
if (event.getAction() == ACTION_HOVER_EXIT) {
|
||||
startHideHoverToolTip();
|
||||
mHoverToolTipView.close(/* animate= */ false);
|
||||
mActivity.setAutohideSuspendFlag(FLAG_AUTOHIDE_SUSPEND_HOVERING_ICONS, false);
|
||||
return true;
|
||||
} else if (!isAnyOtherFloatingViewOpen && event.getAction() == ACTION_HOVER_ENTER) {
|
||||
// If hovering above a taskbar icon starts, animate the tooltip open. Do not
|
||||
// reveal if any floating views such as folders or edu pop-ups are open.
|
||||
startRevealHoverToolTip();
|
||||
} else if (!isFolderOpen && event.getAction() == ACTION_HOVER_ENTER) {
|
||||
// Do not reveal if any floating views such as folders or edu pop-ups are open.
|
||||
revealHoverToolTip();
|
||||
mActivity.setAutohideSuspendFlag(FLAG_AUTOHIDE_SUSPEND_HOVERING_ICONS, true);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void startRevealHoverToolTip() {
|
||||
mHoverToolTipHandler.post(mRevealHoverToolTipRunnable);
|
||||
return true;
|
||||
}
|
||||
|
||||
private void revealHoverToolTip() {
|
||||
@@ -170,14 +123,4 @@ public class TaskbarHoverToolTipController implements View.OnHoverListener {
|
||||
mHoverToolTipView.showAtLocation(mToolTipText, iconViewBounds.centerX(),
|
||||
mTaskbarView.getTop(), /* shouldAutoClose= */ false);
|
||||
}
|
||||
|
||||
private void startHideHoverToolTip() {
|
||||
int accessibilityHideTimeout = AccessibilityManagerCompat.getRecommendedTimeoutMillis(
|
||||
mActivity, /* originalTimeout= */ 0, FLAG_CONTENT_TEXT);
|
||||
mHoverToolTipHandler.postDelayed(mHideHoverToolTipRunnable, accessibilityHideTimeout);
|
||||
}
|
||||
|
||||
private void hideHoverToolTip() {
|
||||
mHoverToolTipView.close(/* animate = */ true);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user