Revert "Bubble bar drag to dismiss"
Revert submission 23879277-bubble_bar_dismiss
Reason for revert: issues with touch
Reverted changes: /q/submissionid:23879277-bubble_bar_dismiss
Change-Id: I4311abff0e542907b09b0aa865d68257b47f6af1
diff --git a/quickstep/res/drawable/bg_bubble_dismiss_circle.xml b/quickstep/res/drawable/bg_bubble_dismiss_circle.xml
deleted file mode 100644
index b793eec..0000000
--- a/quickstep/res/drawable/bg_bubble_dismiss_circle.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2023 The Android Open Source Project
- ~
- ~ Licensed under the Apache License, Version 2.0 (the "License");
- ~ you may not use this file except in compliance with the License.
- ~ You may obtain a copy of the License at
- ~
- ~ http://www.apache.org/licenses/LICENSE-2.0
- ~
- ~ Unless required by applicable law or agreed to in writing, software
- ~ distributed under the License is distributed on an "AS IS" BASIS,
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- ~ See the License for the specific language governing permissions and
- ~ limitations under the License.
- -->
-
-<shape
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:shape="oval">
-
- <stroke
- android:width="2dp"
- android:color="@android:color/system_accent1_600" />
-
- <solid android:color="@android:color/system_accent1_600" />
-</shape>
\ No newline at end of file
diff --git a/quickstep/res/drawable/ic_bubble_dismiss_white.xml b/quickstep/res/drawable/ic_bubble_dismiss_white.xml
deleted file mode 100644
index b15111b..0000000
--- a/quickstep/res/drawable/ic_bubble_dismiss_white.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2023 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="20dp"
- android:height="20dp"
- android:viewportWidth="24.0"
- android:viewportHeight="24.0">
- <path
- android:pathData="M19.000000,6.400000l-1.400000,-1.400000 -5.600000,5.600000 -5.600000,-5.600000 -1.400000,1.400000 5.600000,5.600000 -5.600000,5.600000 1.400000,1.400000 5.600000,-5.600000 5.600000,5.600000 1.400000,-1.400000 -5.600000,-5.600000z"
- android:fillColor="@android:color/system_neutral1_50"/>
-</vector>
diff --git a/quickstep/res/values/dimens.xml b/quickstep/res/values/dimens.xml
index 6140d14..e4f6555 100644
--- a/quickstep/res/values/dimens.xml
+++ b/quickstep/res/values/dimens.xml
@@ -367,13 +367,6 @@
<dimen name="bubblebar_icon_spacing">3dp</dimen>
<dimen name="bubblebar_icon_elevation">1dp</dimen>
- <!-- Bubble bar dismiss view -->
- <dimen name="bubblebar_dismiss_target_size">96dp</dimen>
- <dimen name="bubblebar_dismiss_target_small_size">60dp</dimen>
- <dimen name="bubblebar_dismiss_target_icon_size">24dp</dimen>
- <dimen name="bubblebar_dismiss_target_bottom_margin">50dp</dimen>
- <dimen name="bubblebar_dismiss_floating_gradient_height">548dp</dimen>
-
<!-- Launcher splash screen -->
<!-- Note: keep this value in sync with the WindowManager/Shell dimens.xml -->
<!-- starting_surface_exit_animation_window_shift_length -->
diff --git a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
index cb9c329..42cb290 100644
--- a/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
+++ b/quickstep/src/com/android/launcher3/taskbar/TaskbarActivityContext.java
@@ -90,8 +90,6 @@
import com.android.launcher3.taskbar.bubbles.BubbleBarView;
import com.android.launcher3.taskbar.bubbles.BubbleBarViewController;
import com.android.launcher3.taskbar.bubbles.BubbleControllers;
-import com.android.launcher3.taskbar.bubbles.BubbleDismissController;
-import com.android.launcher3.taskbar.bubbles.BubbleDragController;
import com.android.launcher3.taskbar.bubbles.BubbleStashController;
import com.android.launcher3.taskbar.bubbles.BubbleStashedHandleViewController;
import com.android.launcher3.taskbar.overlay.TaskbarOverlayController;
@@ -218,9 +216,7 @@
new BubbleBarController(this, bubbleBarView),
new BubbleBarViewController(this, bubbleBarView),
new BubbleStashController(this),
- new BubbleStashedHandleViewController(this, bubbleHandleView),
- new BubbleDragController(this),
- new BubbleDismissController(this, mDragLayer)));
+ new BubbleStashedHandleViewController(this, bubbleHandleView)));
}
// Construct controllers.
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java
index e0e181c..563ba02 100644
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java
+++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java
@@ -95,8 +95,6 @@
private View.OnClickListener mOnClickListener;
private final Rect mTempRect = new Rect();
- private float mRelativePivotX = 1f;
- private float mRelativePivotY = 1f;
// An animator that represents the expansion state of the bubble bar, where 0 corresponds to the
// collapsed state and 1 to the fully expanded state.
@@ -111,9 +109,6 @@
@Nullable
private Consumer<String> mUpdateSelectedBubbleAfterCollapse;
- @Nullable
- private BubbleView mDraggedBubbleView;
-
public BubbleBarView(Context context) {
this(context, null);
}
@@ -186,10 +181,9 @@
mBubbleBarBounds.right = right;
mBubbleBarBounds.bottom = bottom;
- // The bubble bar handle is aligned according to the relative pivot,
- // by default it's aligned to the bottom edge of the screen so scale towards that
- setPivotX(mRelativePivotX * getWidth());
- setPivotY(mRelativePivotY * getHeight());
+ // The bubble bar handle is aligned to the bottom edge of the screen so scale towards that.
+ setPivotX(getWidth());
+ setPivotY(getHeight());
// Position the views
updateChildrenRenderNodeProperties();
@@ -204,32 +198,6 @@
return mBubbleBarBounds;
}
- /**
- * Set bubble bar relative pivot value for X and Y, applied as a fraction of view width/height
- * respectively. If the value is not in range of 0 to 1 it will be normalized.
- * @param x relative X pivot value in range 0..1
- * @param y relative Y pivot value in range 0..1
- */
- public void setRelativePivot(float x, float y) {
- mRelativePivotX = Float.max(Float.min(x, 1), 0);
- mRelativePivotY = Float.max(Float.min(y, 1), 0);
- requestLayout();
- }
-
- /**
- * Get current relative pivot for X axis
- */
- public float getRelativePivotX() {
- return mRelativePivotX;
- }
-
- /**
- * Get current relative pivot for Y axis
- */
- public float getRelativePivotY() {
- return mRelativePivotY;
- }
-
// TODO: (b/280605790) animate it
@Override
public void addView(View child, int index, ViewGroup.LayoutParams params) {
@@ -279,9 +247,9 @@
// where the bubble will end up when the animation ends
final float targetX = currentWidth - expandedWidth + expandedX;
bv.setTranslationX(widthState * (targetX - collapsedX) + collapsedX);
- // if we're fully expanded, set the z level to 0 or to bubble elevation if dragged
+ // if we're fully expanded, set the z level to 0
if (widthState == 1f) {
- bv.setZ(bv == mDraggedBubbleView ? mBubbleElevation : 0);
+ bv.setZ(0);
}
bv.showBadge();
} else {
@@ -356,14 +324,6 @@
}
/**
- * Sets the dragged bubble view to correctly apply Z order. Dragged view should appear on top
- */
- public void setDraggedBubble(@Nullable BubbleView view) {
- mDraggedBubbleView = view;
- requestLayout();
- }
-
- /**
* Update the arrow position to match the selected bubble.
*
* @param shouldAnimate whether or not to animate the arrow. If the bar was just expanded, this
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java
index 2e3c701..ca0c4cc 100644
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java
+++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarViewController.java
@@ -24,8 +24,6 @@
import android.view.View;
import android.widget.FrameLayout;
-import androidx.annotation.NonNull;
-
import com.android.launcher3.R;
import com.android.launcher3.anim.AnimatedFloat;
import com.android.launcher3.taskbar.TaskbarActivityContext;
@@ -56,7 +54,6 @@
// Initialized in init.
private BubbleStashController mBubbleStashController;
private BubbleBarController mBubbleBarController;
- private BubbleDragController mBubbleDragController;
private TaskbarStashController mTaskbarStashController;
private TaskbarInsetsController mTaskbarInsetsController;
private View.OnClickListener mBubbleClickListener;
@@ -88,7 +85,6 @@
public void init(TaskbarControllers controllers, BubbleControllers bubbleControllers) {
mBubbleStashController = bubbleControllers.bubbleStashController;
mBubbleBarController = bubbleControllers.bubbleBarController;
- mBubbleDragController = bubbleControllers.bubbleDragController;
mTaskbarStashController = controllers.taskbarStashController;
mTaskbarInsetsController = controllers.taskbarInsetsController;
@@ -99,7 +95,6 @@
mBubbleBarScale.updateValue(1f);
mBubbleClickListener = v -> onBubbleClicked(v);
mBubbleBarClickListener = v -> setExpanded(true);
- mBubbleDragController.setupBubbleBarView(mBarView);
mBarView.setOnClickListener(mBubbleBarClickListener);
mBarView.addOnLayoutChangeListener((view, i, i1, i2, i3, i4, i5, i6, i7) ->
mTaskbarInsetsController.onTaskbarOrBubblebarWindowHeightOrInsetsChanged()
@@ -261,7 +256,6 @@
if (b != null) {
mBarView.addView(b.getView(), 0, new FrameLayout.LayoutParams(mIconSize, mIconSize));
b.getView().setOnClickListener(mBubbleClickListener);
- mBubbleDragController.setupBubbleView(b.getView());
} else {
Log.w(TAG, "addBubble, bubble was null!");
}
@@ -313,41 +307,4 @@
mBubbleStashController.showBubbleBar(true /* expand the bubbles */);
}
}
-
- /**
- * Updates the dragged bubble view in the bubble bar view, and notifies SystemUI
- * to collapse the selected bubble while it's dragged.
- * @param bubbleView dragged bubble view
- */
- public void onDragStart(@NonNull BubbleView bubbleView) {
- mBarView.setDraggedBubble(bubbleView);
- if (bubbleView.getBubble() == null) return;
- mSystemUiProxy.collapseWhileDragging(bubbleView.getBubble().getKey(), true /* collapse */);
- }
-
- /**
- * Removes the dragged bubble view in the bubble bar view, and notifies SystemUI
- * to expand the selected bubble when dragging finished.
- * @param bubbleView dragged bubble view
- */
- public void onDragEnd(@NonNull BubbleView bubbleView) {
- mBarView.setDraggedBubble(null);
- if (bubbleView.getBubble() == null) return;
- mSystemUiProxy.collapseWhileDragging(bubbleView.getBubble().getKey(), false /* collapse */);
- }
-
- /**
- * Called when bubble was dragged into the dismiss target. Notifies System
- * @param bubble dismissed bubble item
- */
- public void onDismissBubbleWhileDragging(@NonNull BubbleBarItem bubble) {
- mSystemUiProxy.removeBubble(bubble.getKey());
- }
-
- /**
- * Called when bubble stack was dragged into the dismiss target
- */
- public void onDismissAllBubblesWhileDragging() {
- mSystemUiProxy.removeAllBubbles();
- }
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleControllers.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleControllers.java
index c47427d..6417f3c 100644
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleControllers.java
+++ b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleControllers.java
@@ -27,8 +27,6 @@
public final BubbleBarViewController bubbleBarViewController;
public final BubbleStashController bubbleStashController;
public final BubbleStashedHandleViewController bubbleStashedHandleViewController;
- public final BubbleDragController bubbleDragController;
- public final BubbleDismissController bubbleDismissController;
private final RunnableList mPostInitRunnables = new RunnableList();
@@ -41,15 +39,11 @@
BubbleBarController bubbleBarController,
BubbleBarViewController bubbleBarViewController,
BubbleStashController bubbleStashController,
- BubbleStashedHandleViewController bubbleStashedHandleViewController,
- BubbleDragController bubbleDragController,
- BubbleDismissController bubbleDismissController) {
+ BubbleStashedHandleViewController bubbleStashedHandleViewController) {
this.bubbleBarController = bubbleBarController;
this.bubbleBarViewController = bubbleBarViewController;
this.bubbleStashController = bubbleStashController;
this.bubbleStashedHandleViewController = bubbleStashedHandleViewController;
- this.bubbleDragController = bubbleDragController;
- this.bubbleDismissController = bubbleDismissController;
}
/**
@@ -62,8 +56,6 @@
bubbleBarViewController.init(taskbarControllers, this);
bubbleStashedHandleViewController.init(taskbarControllers, this);
bubbleStashController.init(taskbarControllers, this);
- bubbleDragController.init(/* bubbleControllers = */ this);
- bubbleDismissController.init(/* bubbleControllers = */ this);
mPostInitRunnables.executeAllAndDestroy();
}
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleDismissController.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleDismissController.java
deleted file mode 100644
index 6063376..0000000
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleDismissController.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.launcher3.taskbar.bubbles;
-
-import static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
-
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
-import android.content.res.Resources;
-import android.os.SystemProperties;
-import android.view.MotionEvent;
-import android.view.View;
-import android.widget.FrameLayout;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.dynamicanimation.animation.DynamicAnimation;
-
-import com.android.launcher3.R;
-import com.android.launcher3.taskbar.TaskbarActivityContext;
-import com.android.launcher3.taskbar.TaskbarDragLayer;
-import com.android.wm.shell.common.bubbles.DismissView;
-import com.android.wm.shell.common.magnetictarget.MagnetizedObject;
-
-/**
- * Controls dismiss view presentation for the bubble bar dismiss functionality.
- * Provides the dragged view snapping to the target dismiss area and animates it.
- * When the dragged bubble/bubble stack is realised inside of the target area, it gets dismissed.
- *
- * @see BubbleDragController
- */
-public class BubbleDismissController {
- private static final float FLING_TO_DISMISS_MIN_VELOCITY = 6000f;
- public static final boolean ENABLE_FLING_TO_DISMISS_BUBBLE =
- SystemProperties.getBoolean("persist.wm.debug.fling_to_dismiss_bubble", true);
- private final TaskbarActivityContext mActivity;
- private final TaskbarDragLayer mDragLayer;
- @Nullable
- private BubbleBarViewController mBubbleBarViewController;
-
- // Dismiss view that's attached to drag layer. It consists of the scrim view and the circular
- // dismiss view used as a dismiss target.
- @Nullable
- private DismissView mDismissView;
-
- // The currently magnetized object, which is being dragged and will be attracted to the magnetic
- // dismiss target. This is either the stack itself, or an individual bubble.
- @Nullable
- private MagnetizedObject<View> mMagnetizedObject;
-
- // The MagneticTarget instance for our circular dismiss view. This is added to the
- // MagnetizedObject instances for the stack and any dragged-out bubbles.
- @Nullable
- private MagnetizedObject.MagneticTarget mMagneticTarget;
- @Nullable
- private ValueAnimator mDismissAnimator;
-
- public BubbleDismissController(TaskbarActivityContext activity, TaskbarDragLayer dragLayer) {
- mActivity = activity;
- mDragLayer = dragLayer;
- }
-
- /**
- * Initializes dependencies when bubble controllers are created.
- * Should be careful to only access things that were created in constructors for now, as some
- * controllers may still be waiting for init().
- */
- public void init(@NonNull BubbleControllers bubbleControllers) {
- mBubbleBarViewController = bubbleControllers.bubbleBarViewController;
- }
-
- /**
- * Setup the dismiss view and magnetized object that will be attracted to magnetic target.
- * Should be called before handling events or showing/hiding dismiss view.
- * @param magnetizedView the view to be pulled into target dismiss area
- */
- public void setupDismissView(@NonNull View magnetizedView) {
- setupDismissView();
- setupMagnetizedObject(magnetizedView);
- }
-
- /**
- * Handle the touch event and pass it to the magnetized object.
- * It should be called after {@code setupDismissView}
- */
- public boolean handleTouchEvent(@NonNull MotionEvent event) {
- return mMagnetizedObject != null && mMagnetizedObject.maybeConsumeMotionEvent(event);
- }
-
- /**
- * Show dismiss view with animation
- * It should be called after {@code setupDismissView}
- */
- public void showDismissView() {
- if (mDismissView == null) return;
- mDismissView.show();
- }
-
- /**
- * Hide dismiss view with animation
- * It should be called after {@code setupDismissView}
- */
- public void hideDismissView() {
- if (mDismissView == null) return;
- mDismissView.hide();
- }
-
- /**
- * Dismiss magnetized object when it's released in the dismiss target area
- */
- private void dismissMagnetizedObject() {
- if (mMagnetizedObject == null || mBubbleBarViewController == null) return;
- if (mMagnetizedObject.getUnderlyingObject() instanceof BubbleView) {
- BubbleView bubbleView = (BubbleView) mMagnetizedObject.getUnderlyingObject();
- if (bubbleView.getBubble() != null) {
- mBubbleBarViewController.onDismissBubbleWhileDragging(bubbleView.getBubble());
- }
- } else if (mMagnetizedObject.getUnderlyingObject() instanceof BubbleBarView) {
- mBubbleBarViewController.onDismissAllBubblesWhileDragging();
- }
- cleanUpAnimatedViews();
- }
-
- /**
- * Animate dismiss view when magnetized object gets stuck in the magnetic target
- * @param view captured view
- */
- private void animateDismissCaptured(@NonNull View view) {
- cancelAnimations();
- mDismissAnimator = createDismissAnimator(view);
- mDismissAnimator.start();
- }
-
- /**
- * Animate dismiss view when magnetized object gets unstuck from the magnetic target
- */
- private void animateDismissReleased() {
- if (mDismissAnimator == null) return;
- mDismissAnimator.removeAllListeners();
- mDismissAnimator.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationCancel(Animator animation) {
- cancelAnimations();
- }
-
- @Override
- public void onAnimationEnd(Animator animation) {
- cancelAnimations();
- }
- });
- mDismissAnimator.reverse();
- }
-
- /**
- * Cancel and clear dismiss animations and reset view states
- */
- private void cancelAnimations() {
- if (mDismissAnimator == null) return;
- ValueAnimator animator = mDismissAnimator;
- mDismissAnimator = null;
- animator.cancel();
- }
-
- /**
- * Clean up views changed during animation
- */
- private void cleanUpAnimatedViews() {
- // Cancel animations
- cancelAnimations();
- // Reset dismiss view
- if (mDismissView != null) {
- mDismissView.getCircle().setScaleX(1f);
- mDismissView.getCircle().setScaleY(1f);
- }
- // Reset magnetized view
- if (mMagnetizedObject != null) {
- mMagnetizedObject.getUnderlyingObject().setAlpha(1f);
- mMagnetizedObject.getUnderlyingObject().setScaleX(1f);
- mMagnetizedObject.getUnderlyingObject().setScaleY(1f);
- }
- }
-
- private void setupDismissView() {
- if (mDismissView != null) return;
- mDismissView = new DismissView(mActivity.getApplicationContext());
- BubbleDismissViewUtils.setup(mDismissView);
- mDragLayer.addView(mDismissView, /* index = */ 0,
- new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT));
- setupMagneticTarget(mDismissView.getCircle());
- }
-
- private void setupMagneticTarget(@NonNull View view) {
- int magneticFieldRadius = mActivity.getResources().getDimensionPixelSize(
- R.dimen.bubblebar_dismiss_target_size);
- mMagneticTarget = new MagnetizedObject.MagneticTarget(view, magneticFieldRadius);
- }
-
- private void setupMagnetizedObject(@NonNull View magnetizedView) {
- mMagnetizedObject = new MagnetizedObject<>(mActivity.getApplicationContext(),
- magnetizedView, DynamicAnimation.TRANSLATION_X, DynamicAnimation.TRANSLATION_Y) {
- @Override
- public float getWidth(@NonNull View underlyingObject) {
- return underlyingObject.getWidth();
- }
-
- @Override
- public float getHeight(@NonNull View underlyingObject) {
- return underlyingObject.getHeight();
- }
-
- @Override
- public void getLocationOnScreen(@NonNull View underlyingObject, @NonNull int[] loc) {
- underlyingObject.getLocationOnScreen(loc);
- }
- };
-
- mMagnetizedObject.setHapticsEnabled(true);
- mMagnetizedObject.setFlingToTargetEnabled(ENABLE_FLING_TO_DISMISS_BUBBLE);
- mMagnetizedObject.setFlingToTargetMinVelocity(FLING_TO_DISMISS_MIN_VELOCITY);
- if (mMagneticTarget != null) {
- mMagnetizedObject.addTarget(mMagneticTarget);
- }
- mMagnetizedObject.setMagnetListener(new MagnetizedObject.MagnetListener() {
- @Override
- public void onStuckToTarget(@NonNull MagnetizedObject.MagneticTarget target) {
- animateDismissCaptured(magnetizedView);
- }
-
- @Override
- public void onUnstuckFromTarget(@NonNull MagnetizedObject.MagneticTarget target,
- float velX, float velY, boolean wasFlungOut) {
- animateDismissReleased();
- }
-
- @Override
- public void onReleasedInTarget(@NonNull MagnetizedObject.MagneticTarget target) {
- dismissMagnetizedObject();
- }
- });
- }
-
- private ValueAnimator createDismissAnimator(@NonNull View magnetizedView) {
- Resources resources = mActivity.getResources();
- int expandedSize = resources.getDimensionPixelSize(R.dimen.bubblebar_dismiss_target_size);
- int collapsedSize = resources.getDimensionPixelSize(
- R.dimen.bubblebar_dismiss_target_small_size);
- float minScale = (float) collapsedSize / expandedSize;
- ValueAnimator animator = ValueAnimator.ofFloat(1f, minScale);
- animator.addUpdateListener(animation -> {
- if (mDismissView == null) return;
- final float animatedValue = (float) animation.getAnimatedValue();
- mDismissView.getCircle().setScaleX(animatedValue);
- mDismissView.getCircle().setScaleY(animatedValue);
- magnetizedView.setAlpha(animatedValue);
- if (magnetizedView instanceof BubbleBarView) {
- magnetizedView.setScaleX(animatedValue);
- magnetizedView.setScaleY(animatedValue);
- }
- });
- return animator;
- }
-}
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleDismissViewExt.kt b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleDismissViewExt.kt
deleted file mode 100644
index 4b235a9..0000000
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleDismissViewExt.kt
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-@file:JvmName("BubbleDismissViewUtils")
-
-package com.android.launcher3.taskbar.bubbles
-
-import com.android.launcher3.R
-import com.android.wm.shell.common.bubbles.DismissView
-
-/**
- * Dismiss view is shared from WMShell. It requires setup with local resources.
- *
- * Usage:
- * - Kotlin `dismissView.setup()`
- * - Java `BubbleDismissViewUtils.setup(dismissView)`
- */
-fun DismissView.setup() {
- setup(
- DismissView.Config(
- targetSizeResId = R.dimen.bubblebar_dismiss_target_size,
- iconSizeResId = R.dimen.bubblebar_dismiss_target_icon_size,
- bottomMarginResId = R.dimen.bubblebar_dismiss_target_bottom_margin,
- floatingGradientHeightResId = R.dimen.bubblebar_dismiss_floating_gradient_height,
- floatingGradientColorResId = android.R.color.system_neutral1_900,
- backgroundResId = R.drawable.bg_bubble_dismiss_circle,
- iconResId = R.drawable.ic_bubble_dismiss_white
- )
- )
-}
diff --git a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleDragController.java b/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleDragController.java
deleted file mode 100644
index 28dc62c..0000000
--- a/quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleDragController.java
+++ /dev/null
@@ -1,189 +0,0 @@
-/*
- * Copyright (C) 2023 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.launcher3.taskbar.bubbles;
-
-import android.annotation.SuppressLint;
-import android.graphics.PointF;
-import android.view.MotionEvent;
-import android.view.View;
-
-import androidx.annotation.NonNull;
-
-import com.android.launcher3.taskbar.TaskbarActivityContext;
-import com.android.wm.shell.common.bubbles.RelativeTouchListener;
-
-/**
- * Controls bubble bar drag to dismiss interaction.
- * Interacts with {@link BubbleDismissController}, used by {@link BubbleBarViewController}.
- * Supported interactions:
- * - Drag a single bubble view into dismiss target to remove it.
- * - Drag the bubble stack into dismiss target to remove all.
- * Restores initial position of dragged view if released outside of the dismiss target.
- */
-public class BubbleDragController {
- private final TaskbarActivityContext mActivity;
- private BubbleBarViewController mBubbleBarViewController;
- private BubbleDismissController mBubbleDismissController;
-
- public BubbleDragController(TaskbarActivityContext activity) {
- mActivity = activity;
- }
-
- /**
- * Initializes dependencies when bubble controllers are created.
- * Should be careful to only access things that were created in constructors for now, as some
- * controllers may still be waiting for init().
- */
- public void init(@NonNull BubbleControllers bubbleControllers) {
- mBubbleBarViewController = bubbleControllers.bubbleBarViewController;
- mBubbleDismissController = bubbleControllers.bubbleDismissController;
- }
-
- /**
- * Setup the bubble view for dragging and attach touch listener to it
- */
- @SuppressLint("ClickableViewAccessibility")
- public void setupBubbleView(@NonNull BubbleView bubbleView) {
- // Don't setup dragging for overflow bubble view
- if (bubbleView.getBubble() == null
- || !(bubbleView.getBubble() instanceof BubbleBarBubble)) return;
- bubbleView.setOnTouchListener(new BaseDragListener() {
- @Override
- protected void onDragStart() {
- super.onDragStart();
- mBubbleBarViewController.onDragStart(bubbleView);
- }
-
- @Override
- protected void onDragEnd() {
- super.onDragEnd();
- mBubbleBarViewController.onDragEnd(bubbleView);
- }
- });
- }
-
- /**
- * Setup the bubble bar view for dragging and attach touch listener to it
- */
- @SuppressLint("ClickableViewAccessibility")
- public void setupBubbleBarView(@NonNull BubbleBarView bubbleBarView) {
- PointF initialRelativePivot = new PointF();
- bubbleBarView.setOnTouchListener(new BaseDragListener() {
- @Override
- public boolean onDown(@NonNull View view, @NonNull MotionEvent event) {
- if (bubbleBarView.isExpanded()) return false;
- // Setup dragging only when bubble bar is collapsed
- return super.onDown(view, event);
- }
-
- @Override
- protected void onDragStart() {
- super.onDragStart();
- initialRelativePivot.set(bubbleBarView.getRelativePivotX(),
- bubbleBarView.getRelativePivotY());
- bubbleBarView.setRelativePivot(/* x = */ 0.5f, /* y = */ 0.5f);
- }
-
- @Override
- protected void onDragEnd() {
- super.onDragEnd();
- bubbleBarView.setRelativePivot(initialRelativePivot.x, initialRelativePivot.y);
- }
- });
- }
-
- /**
- * Base drag listener for handling a single bubble view or bubble bar view dragging.
- * Controls dragging interaction and interacts with {@link BubbleDismissController}
- * to coordinate dismiss view presentation.
- * Lifecycle methods can be overridden do add extra setup/clean up steps
- */
- private class BaseDragListener extends RelativeTouchListener {
- private boolean mHandling;
- private boolean mDragging;
-
- @Override
- public boolean onDown(@NonNull View view, @NonNull MotionEvent event) {
- mHandling = true;
- mActivity.setTaskbarWindowFullscreen(true);
- mBubbleDismissController.setupDismissView(view);
- mBubbleDismissController.handleTouchEvent(event);
- return true;
- }
-
- @Override
- public void onMove(@NonNull View view, @NonNull MotionEvent event, float viewInitialX,
- float viewInitialY, float dx, float dy) {
- if (!mHandling) return;
- if (!mDragging) {
- // Start dragging
- mDragging = true;
- onDragStart();
- }
- if (!mBubbleDismissController.handleTouchEvent(event)) {
- // Drag the view if not processed by dismiss controller
- view.setTranslationX(viewInitialX + dx);
- view.setTranslationY(viewInitialY + dy);
- }
- }
-
- @Override
- public void onUp(@NonNull View view, @NonNull MotionEvent event, float viewInitialX,
- float viewInitialY, float dx, float dy, float velX, float velY) {
- onComplete(view, event, viewInitialX, viewInitialY);
- }
-
- @Override
- public void onCancel(@NonNull View view, @NonNull MotionEvent event, float viewInitialX,
- float viewInitialY, float dx, float dy) {
- onComplete(view, event, viewInitialX, viewInitialY);
- }
-
- /**
- * Prepares dismiss view for dragging.
- * This method can be overridden to add extra setup on drag start
- */
- protected void onDragStart() {
- mBubbleDismissController.showDismissView();
- }
-
- /**
- * Cleans up dismiss view after dragging.
- * This method can be overridden to add extra setup on drag end
- */
- protected void onDragEnd() {
- mBubbleDismissController.hideDismissView();
- }
-
- /**
- * Complete drag handling and clean up dependencies
- */
- private void onComplete(@NonNull View view, @NonNull MotionEvent event,
- float viewInitialX, float viewInitialY) {
- if (!mHandling) return;
- if (mDragging) {
- // Stop dragging
- mDragging = false;
- view.setTranslationX(viewInitialX);
- view.setTranslationY(viewInitialY);
- onDragEnd();
- }
- mBubbleDismissController.handleTouchEvent(event);
- mActivity.setTaskbarWindowFullscreen(false);
- mHandling = false;
- }
- }
-}
diff --git a/quickstep/src/com/android/quickstep/SystemUiProxy.java b/quickstep/src/com/android/quickstep/SystemUiProxy.java
index 7336718..d2e7fb5 100644
--- a/quickstep/src/com/android/quickstep/SystemUiProxy.java
+++ b/quickstep/src/com/android/quickstep/SystemUiProxy.java
@@ -660,31 +660,6 @@
}
/**
- * Tells SysUI to remove the bubble with the provided key.
- * @param key the key of the bubble to show.
- */
- public void removeBubble(String key) {
- if (mBubbles == null) return;
- try {
- mBubbles.removeBubble(key);
- } catch (RemoteException e) {
- Log.w(TAG, "Failed call removeBubble");
- }
- }
-
- /**
- * Tells SysUI to remove all bubbles.
- */
- public void removeAllBubbles() {
- if (mBubbles == null) return;
- try {
- mBubbles.removeAllBubbles();
- } catch (RemoteException e) {
- Log.w(TAG, "Failed call removeAllBubbles");
- }
- }
-
- /**
* Tells SysUI to collapse the bubbles.
*/
public void collapseBubbles() {
@@ -697,21 +672,6 @@
}
}
- /**
- * Tells SysUI to collapse/expand selected bubble view while it's dragged.
- * Should be called only when the bubble bar is expanded.
- * @param bubbleKey the key of the bubble to collapse/expand
- * @param collapse whether to collapse/expand selected bubble
- */
- public void collapseWhileDragging(@Nullable String bubbleKey, boolean collapse) {
- if (mBubbles == null) return;
- try {
- mBubbles.collapseWhileDragging(bubbleKey, collapse);
- } catch (RemoteException e) {
- Log.w(TAG, "Failed call collapseWhileDragging");
- }
- }
-
//
// Splitscreen
//