diff --git a/packages/SystemUI/res/drawable/bubble_dismiss_circle.xml b/packages/SystemUI/res/drawable/bubble_dismiss_circle.xml
index 1661bb22d148e..8c7e82f821869 100644
--- a/packages/SystemUI/res/drawable/bubble_dismiss_circle.xml
+++ b/packages/SystemUI/res/drawable/bubble_dismiss_circle.xml
@@ -24,4 +24,5 @@
android:width="1dp"
android:color="#66FFFFFF" />
+
\ No newline at end of file
diff --git a/packages/SystemUI/res/layout/bubble_dismiss_target.xml b/packages/SystemUI/res/layout/bubble_dismiss_target.xml
index 245177c8461b6..ca085b69c35da 100644
--- a/packages/SystemUI/res/layout/bubble_dismiss_target.xml
+++ b/packages/SystemUI/res/layout/bubble_dismiss_target.xml
@@ -20,6 +20,13 @@
android:layout_height="@dimen/pip_dismiss_gradient_height"
android:layout_gravity="bottom|center_horizontal">
+
+
-
-
-
-
-
\ No newline at end of file
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index 2a845e0962467..cc31676a0d095 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1114,7 +1114,7 @@
52dp
- 56dp
+ 52dp
16dp
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleDismissView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleDismissView.java
index 4db1e276f431d..3ae2b74179adc 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleDismissView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleDismissView.java
@@ -16,18 +16,13 @@
package com.android.systemui.bubbles;
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-
import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.animation.AccelerateDecelerateInterpolator;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
-import android.widget.TextView;
import androidx.dynamicanimation.animation.DynamicAnimation;
import androidx.dynamicanimation.animation.SpringAnimation;
@@ -37,14 +32,13 @@ import com.android.systemui.R;
/** Dismiss view that contains a scrim gradient, as well as a dismiss icon, text, and circle. */
public class BubbleDismissView extends FrameLayout {
- /** Duration for animations involving the dismiss target text/icon/gradient. */
+ /** Duration for animations involving the dismiss target text/icon. */
private static final int DISMISS_TARGET_ANIMATION_BASE_DURATION = 150;
-
- private View mDismissGradient;
+ private static final float SCALE_FOR_POP = 1.2f;
+ private static final float SCALE_FOR_DISMISS = 0.9f;
private LinearLayout mDismissTarget;
private ImageView mDismissIcon;
- private TextView mDismissText;
private View mDismissCircle;
private SpringAnimation mDismissTargetAlphaSpring;
@@ -54,36 +48,15 @@ public class BubbleDismissView extends FrameLayout {
super(context);
setVisibility(GONE);
- mDismissGradient = new FrameLayout(mContext);
-
- FrameLayout.LayoutParams gradientParams =
- new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT);
- gradientParams.gravity = Gravity.BOTTOM;
- mDismissGradient.setLayoutParams(gradientParams);
-
- Drawable gradient = mContext.getResources().getDrawable(R.drawable.pip_dismiss_scrim);
- gradient.setAlpha((int) (255 * 0.85f));
- mDismissGradient.setBackground(gradient);
-
- mDismissGradient.setVisibility(GONE);
- addView(mDismissGradient);
-
LayoutInflater.from(context).inflate(R.layout.bubble_dismiss_target, this, true);
mDismissTarget = findViewById(R.id.bubble_dismiss_icon_container);
mDismissIcon = findViewById(R.id.bubble_dismiss_close_icon);
- mDismissText = findViewById(R.id.bubble_dismiss_text);
mDismissCircle = findViewById(R.id.bubble_dismiss_circle);
// Set up the basic target area animations. These are very simple animations that don't need
// fancy interpolators.
final AccelerateDecelerateInterpolator interpolator =
new AccelerateDecelerateInterpolator();
- mDismissGradient.animate()
- .setDuration(DISMISS_TARGET_ANIMATION_BASE_DURATION)
- .setInterpolator(interpolator);
- mDismissText.animate()
- .setDuration(DISMISS_TARGET_ANIMATION_BASE_DURATION)
- .setInterpolator(interpolator);
mDismissIcon.animate()
.setDuration(DISMISS_TARGET_ANIMATION_BASE_DURATION)
.setInterpolator(interpolator);
@@ -113,105 +86,53 @@ public class BubbleDismissView extends FrameLayout {
});
}
- /** Springs in the dismiss target and fades in the gradient. */
+ /** Springs in the dismiss target. */
void springIn() {
setVisibility(View.VISIBLE);
- // Fade in the dismiss target (icon + text).
+ // Fade in the dismiss target icon.
+ mDismissIcon.animate()
+ .setDuration(50)
+ .scaleX(1f)
+ .scaleY(1f)
+ .alpha(1f);
mDismissTarget.setAlpha(0f);
mDismissTargetAlphaSpring.animateToFinalPosition(1f);
- // Spring up the dismiss target (icon + text).
+ // Spring up the dismiss target.
mDismissTarget.setTranslationY(mDismissTarget.getHeight() / 2f);
mDismissTargetVerticalSpring.animateToFinalPosition(0);
- // Fade in the gradient.
- mDismissGradient.setVisibility(VISIBLE);
- mDismissGradient.animate().alpha(1f);
+ mDismissCircle.setAlpha(0f);
+ mDismissCircle.setScaleX(SCALE_FOR_POP);
+ mDismissCircle.setScaleY(SCALE_FOR_POP);
- // Make sure the dismiss elements are in the separated position (in case we hid the target
- // while they were condensed to cover the bubbles being in the target).
- mDismissIcon.setAlpha(1f);
- mDismissIcon.setScaleX(1f);
- mDismissIcon.setScaleY(1f);
- mDismissIcon.setTranslationX(0f);
- mDismissText.setAlpha(1f);
- mDismissText.setTranslationX(0f);
+ // Fade in circle and reduce size.
+ mDismissCircle.animate()
+ .alpha(1f)
+ .scaleX(1f)
+ .scaleY(1f);
}
- /** Springs out the dismiss target and fades out the gradient. */
+ /** Springs out the dismiss target. */
void springOut() {
+ // Fade out the target icon.
+ mDismissIcon.animate()
+ .setDuration(50)
+ .scaleX(SCALE_FOR_DISMISS)
+ .scaleY(SCALE_FOR_DISMISS)
+ .alpha(0f);
+
// Fade out the target.
mDismissTargetAlphaSpring.animateToFinalPosition(0f);
// Spring the target down a bit.
mDismissTargetVerticalSpring.animateToFinalPosition(mDismissTarget.getHeight() / 2f);
- // Fade out the gradient and then set it to GONE so it's not in the SBV hierarchy.
- mDismissGradient.animate().alpha(0f).withEndAction(
- () -> mDismissGradient.setVisibility(GONE));
-
- // Pop out the dismiss circle.
- mDismissCircle.animate().alpha(0f).scaleX(1.2f).scaleY(1.2f);
- }
-
- /**
- * Encircles the center of the dismiss target, pulling the X towards the center and hiding the
- * text.
- */
- void animateEncircleCenterWithX(boolean encircle) {
- // Pull the text towards the center if we're encircling (it'll be faded out, leaving only
- // the X icon over the bubbles), or back to normal if we're un-encircling.
- final float textTranslation = encircle
- ? -mDismissIcon.getWidth() / 4f
- : 0f;
-
- // Center the icon if we're encircling, or put it back to normal if not.
- final float iconTranslation = encircle
- ? mDismissTarget.getWidth() / 2f
- - mDismissIcon.getWidth() / 2f
- - mDismissIcon.getLeft()
- : 0f;
-
- // Fade in/out the text and translate it.
- mDismissText.animate()
- .alpha(encircle ? 0f : 1f)
- .translationX(textTranslation);
-
- mDismissIcon.animate()
- .setDuration(150)
- .translationX(iconTranslation);
-
- // Fade out the gradient if we're encircling (the bubbles will 'absorb' it by darkening
- // themselves).
- mDismissGradient.animate()
- .alpha(encircle ? 0f : 1f);
-
- // Prepare the circle to be 'dropped in'.
- if (encircle) {
- mDismissCircle.setAlpha(0f);
- mDismissCircle.setScaleX(1.2f);
- mDismissCircle.setScaleY(1.2f);
- }
-
- // Drop in the circle, or pull it back up.
+ // Pop out the circle.
mDismissCircle.animate()
- .alpha(encircle ? 1f : 0f)
- .scaleX(encircle ? 1f : 0f)
- .scaleY(encircle ? 1f : 0f);
- }
-
- /** Animates the circle and the centered icon out. */
- void animateEncirclingCircleDisappearance() {
- // Pop out the dismiss icon and circle.
- mDismissIcon.animate()
- .setDuration(50)
- .scaleX(0.9f)
- .scaleY(0.9f)
- .alpha(0f);
- mDismissCircle.animate()
- .scaleX(0.9f)
- .scaleY(0.9f)
+ .scaleX(SCALE_FOR_DISMISS)
+ .scaleY(SCALE_FOR_DISMISS)
.alpha(0f);
}
diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
index 38d7d8cd2f7a1..44e84b9da2f3c 100644
--- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
+++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java
@@ -367,13 +367,6 @@ public class BubbleStackView extends FrameLayout {
Gravity.BOTTOM));
addView(mDismissContainer);
- mDismissContainer = new BubbleDismissView(mContext);
- mDismissContainer.setLayoutParams(new FrameLayout.LayoutParams(
- MATCH_PARENT,
- getResources().getDimensionPixelSize(R.dimen.pip_dismiss_gradient_height),
- Gravity.BOTTOM));
- addView(mDismissContainer);
-
mExpandedViewXAnim =
new SpringAnimation(mExpandedViewContainer, DynamicAnimation.TRANSLATION_X);
mExpandedViewXAnim.setSpring(
@@ -1003,7 +996,7 @@ public class BubbleStackView extends FrameLayout {
}
mExpandedAnimationController.snapBubbleBack(bubble, velX, velY);
- springOutDismissTargetAndHideCircle();
+ hideDismissTarget();
}
void onDragStart() {
@@ -1045,7 +1038,7 @@ public class BubbleStackView extends FrameLayout {
mStackOnLeftOrWillBe = newStackX <= 0;
updateBubbleShadowsAndDotPosition(true /* animate */);
- springOutDismissTargetAndHideCircle();
+ hideDismissTarget();
}
void onFlyoutDragStart() {
@@ -1179,9 +1172,6 @@ public class BubbleStackView extends FrameLayout {
animateDesaturateAndDarken(magnetView, true);
}
-
- mDismissContainer.animateEncircleCenterWithX(true);
-
} else {
mAnimatingMagnet = false;
@@ -1192,8 +1182,6 @@ public class BubbleStackView extends FrameLayout {
mExpandedAnimationController.demagnetizeBubbleTo(x, y, velX, velY);
animateDesaturateAndDarken(magnetView, false);
}
-
- mDismissContainer.animateEncircleCenterWithX(false);
}
mVibrator.vibrate(VibrationEffect.get(toTarget
@@ -1212,7 +1200,7 @@ public class BubbleStackView extends FrameLayout {
mAfterMagnet = null;
mVibrator.vibrate(VibrationEffect.get(VibrationEffect.EFFECT_CLICK));
- mDismissContainer.animateEncirclingCircleDisappearance();
+ mDismissContainer.springOut();
// 'Implode' the stack and then hide the dismiss target.
if (touchedView == this) {
@@ -1250,7 +1238,7 @@ public class BubbleStackView extends FrameLayout {
}
}
- /** Animates in the dismiss target, including the gradient behind it. */
+ /** Animates in the dismiss target. */
private void springInDismissTarget() {
if (mShowingDismiss) {
return;
@@ -1268,7 +1256,7 @@ public class BubbleStackView extends FrameLayout {
* Animates the dismiss target out, as well as the circle that encircles the bubbles, if they
* were dragged into the target and encircled.
*/
- private void springOutDismissTargetAndHideCircle() {
+ private void hideDismissTarget() {
if (!mShowingDismiss) {
return;
}