Sync up Home Handle and Assistant Handle fade
Test: Tested locally
BUG:135948401
FIX:135948401
Change-Id: I38917bf16000e723987ca835aa1784b16787a0b4
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java
index 002d4f3..6da3818 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistHandleBehaviorController.java
@@ -74,6 +74,7 @@
private boolean mHandlesShowing = false;
private long mHandlesLastHiddenAt;
+ private long mShowAndGoEndsAt;
/**
* This should always be initialized as {@link AssistHandleBehavior#OFF} to ensure proper
* behavior lifecycle.
@@ -144,7 +145,9 @@
private void showAndGoInternal() {
maybeShowHandles(/* ignoreThreshold = */ false);
- mHandler.postDelayed(mHideHandles, getShowAndGoDuration());
+ long showAndGoDuration = getShowAndGoDuration();
+ mShowAndGoEndsAt = SystemClock.elapsedRealtime() + showAndGoDuration;
+ mHandler.postDelayed(mHideHandles, showAndGoDuration);
}
@Override // AssistHandleCallbacks
@@ -162,6 +165,10 @@
mHandler.post(() -> maybeShowHandles(/* ignoreThreshold = */ true));
}
+ public long getShowAndGoRemainingTimeMs() {
+ return Long.max(mShowAndGoEndsAt - SystemClock.elapsedRealtime(), 0);
+ }
+
boolean areHandlesShowing() {
return mHandlesShowing;
}
@@ -271,6 +278,7 @@
private void clearPendingCommands() {
mHandler.removeCallbacks(mHideHandles);
mHandler.removeCallbacks(mShowAndGo);
+ mShowAndGoEndsAt = 0;
}
@VisibleForTesting
diff --git a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
index 97b6e7c..0b00b91 100644
--- a/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
+++ b/packages/SystemUI/src/com/android/systemui/assist/AssistManager.java
@@ -440,6 +440,10 @@
mAssistUtils.onLockscreenShown();
}
+ public long getAssistHandleShowAndGoRemainingDurationMs() {
+ return mHandleController.getShowAndGoRemainingTimeMs();
+ }
+
/** Returns the logging flags for the given Assistant invocation type. */
public int toLoggingSubType(int invocationType) {
return toLoggingSubType(invocationType, mPhoneStateMonitor.getPhoneState());
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
index d22ad71..fce1dcc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ButtonDispatcher.java
@@ -14,8 +14,6 @@
package com.android.systemui.statusbar.phone;
-import static com.android.systemui.Interpolators.ALPHA_IN;
-import static com.android.systemui.Interpolators.ALPHA_OUT;
import static com.android.systemui.Interpolators.LINEAR;
import android.animation.Animator;
@@ -24,6 +22,8 @@
import android.view.View;
import android.view.View.AccessibilityDelegate;
+import com.android.systemui.Dependency;
+import com.android.systemui.assist.AssistManager;
import com.android.systemui.statusbar.policy.KeyButtonDrawable;
import java.util.ArrayList;
@@ -33,12 +33,13 @@
* multiples of the same nav bar icon appearing.
*/
public class ButtonDispatcher {
- private final static int FADE_DURATION_IN = 150;
- private final static int FADE_DURATION_OUT = 1000;
+ private static final int FADE_DURATION_IN = 150;
+ private static final int FADE_DURATION_OUT = 250;
private final ArrayList<View> mViews = new ArrayList<>();
private final int mId;
+ private final AssistManager mAssistManager;
private View.OnClickListener mClickListener;
private View.OnTouchListener mTouchListener;
@@ -56,7 +57,10 @@
private AccessibilityDelegate mAccessibilityDelegate;
private final ValueAnimator.AnimatorUpdateListener mAlphaListener = animation ->
- setAlpha((float) animation.getAnimatedValue());
+ setAlpha(
+ (float) animation.getAnimatedValue(),
+ false /* animate */,
+ false /* cancelAnimator */);
private final AnimatorListenerAdapter mFadeListener = new AnimatorListenerAdapter() {
@Override
@@ -68,6 +72,7 @@
public ButtonDispatcher(int id) {
mId = id;
+ mAssistManager = Dependency.get(AssistManager.class);
}
void clear() {
@@ -168,16 +173,30 @@
}
public void setAlpha(float alpha, boolean animate) {
- setAlpha(alpha, animate, (getAlpha() < alpha) ? FADE_DURATION_IN : FADE_DURATION_OUT);
+ setAlpha(alpha, animate, true /* cancelAnimator */);
}
public void setAlpha(float alpha, boolean animate, long duration) {
+ setAlpha(alpha, animate, duration, true /* cancelAnimator */);
+ }
+
+ public void setAlpha(float alpha, boolean animate, boolean cancelAnimator) {
+ setAlpha(
+ alpha,
+ animate,
+ (getAlpha() < alpha) ? FADE_DURATION_IN : FADE_DURATION_OUT,
+ cancelAnimator);
+ }
+
+ public void setAlpha(float alpha, boolean animate, long duration, boolean cancelAnimator) {
+ if (mFadeAnimator != null && (cancelAnimator || animate)) {
+ mFadeAnimator.cancel();
+ }
if (animate) {
- if (mFadeAnimator != null) {
- mFadeAnimator.cancel();
- }
setVisibility(View.VISIBLE);
mFadeAnimator = ValueAnimator.ofFloat(getAlpha(), alpha);
+ mFadeAnimator.setStartDelay(
+ mAssistManager.getAssistHandleShowAndGoRemainingDurationMs());
mFadeAnimator.setDuration(duration);
mFadeAnimator.setInterpolator(LINEAR);
mFadeAnimator.addListener(mFadeListener);