Loading quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarController.java +20 −6 Original line number Diff line number Diff line Loading @@ -220,7 +220,7 @@ public class BubbleBarController extends IBubblesListener.Stub { mBubbleStashedHandleViewController.setHiddenForBubbles( !sBubbleBarEnabled || mBubbles.isEmpty()); mBubbleBarViewController.setUpdateSelectedBubbleAfterCollapse( key -> setSelectedBubble(mBubbles.get(key))); key -> setSelectedBubbleInternal(mBubbles.get(key))); }); } Loading Loading @@ -390,7 +390,7 @@ public class BubbleBarController extends IBubblesListener.Stub { } } if (bubbleToSelect != null) { setSelectedBubble(bubbleToSelect); setSelectedBubbleInternal(bubbleToSelect); if (previouslySelectedBubble == null) { mBubbleStashController.animateToInitialState(update.expanded); } Loading @@ -409,8 +409,7 @@ public class BubbleBarController extends IBubblesListener.Stub { if (update.bubbleBarLocation != mBubbleBarViewController.getBubbleBarLocation()) { // Animate when receiving updates. Skip it if we received the initial state. boolean animate = !update.initialState; mBubbleBarViewController.setBubbleBarLocation(update.bubbleBarLocation, animate); mBubbleStashController.setBubbleBarLocation(update.bubbleBarLocation); updateBubbleBarLocationInternal(update.bubbleBarLocation, animate); } } } Loading @@ -436,7 +435,7 @@ public class BubbleBarController extends IBubblesListener.Stub { /** Updates the currently selected bubble for launcher views and tells WMShell to show it. */ public void showAndSelectBubble(BubbleBarItem b) { if (DEBUG) Log.w(TAG, "showingSelectedBubble: " + b.getKey()); setSelectedBubble(b); setSelectedBubbleInternal(b); showSelectedBubble(); } Loading @@ -445,7 +444,7 @@ public class BubbleBarController extends IBubblesListener.Stub { * WMShell that the selection has changed, that should go through either * {@link #showSelectedBubble()} or {@link #showAndSelectBubble(BubbleBarItem)}. */ private void setSelectedBubble(BubbleBarItem b) { private void setSelectedBubbleInternal(BubbleBarItem b) { if (!Objects.equals(b, mSelectedBubble)) { if (DEBUG) Log.w(TAG, "selectingBubble: " + b.getKey()); mSelectedBubble = b; Loading @@ -464,6 +463,21 @@ public class BubbleBarController extends IBubblesListener.Stub { return null; } /** * Set a new bubble bar location. * <p> * Updates the value locally in Launcher and in WMShell. */ public void updateBubbleBarLocation(BubbleBarLocation location) { updateBubbleBarLocationInternal(location, false /* animate */); mSystemUiProxy.setBubbleBarLocation(location); } private void updateBubbleBarLocationInternal(BubbleBarLocation location, boolean animate) { mBubbleBarViewController.setBubbleBarLocation(location, animate); mBubbleStashController.setBubbleBarLocation(location); } // // Loading data for the bubbles // Loading quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java +84 −4 Original line number Diff line number Diff line Loading @@ -24,7 +24,9 @@ import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.annotation.Nullable; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.PointF; import android.graphics.Rect; import android.util.AttributeSet; import android.util.LayoutDirection; Loading Loading @@ -108,6 +110,7 @@ public class BubbleBarView extends FrameLayout { private final float mIconSize; // The elevation of the bubbles within the bar private final float mBubbleElevation; private final float mDragElevation; private final int mPointerSize; // Whether the bar is expanded (i.e. the bubble activity is being displayed). Loading Loading @@ -138,11 +141,15 @@ public class BubbleBarView extends FrameLayout { @Nullable private Consumer<String> mUpdateSelectedBubbleAfterCollapse; private boolean mDragging; @Nullable private BubbleView mDraggedBubbleView; private int mPreviousLayoutDirection = LayoutDirection.UNDEFINED; private boolean mLocationChangePending; public BubbleBarView(Context context) { this(context, null); } Loading @@ -163,6 +170,7 @@ public class BubbleBarView extends FrameLayout { mIconSpacing = getResources().getDimensionPixelSize(R.dimen.bubblebar_icon_spacing); mIconSize = getResources().getDimensionPixelSize(R.dimen.bubblebar_icon_size); mBubbleElevation = getResources().getDimensionPixelSize(R.dimen.bubblebar_icon_elevation); mDragElevation = getResources().getDimensionPixelSize(R.dimen.bubblebar_drag_elevation); mPointerSize = getResources().getDimensionPixelSize(R.dimen.bubblebar_pointer_size); setClipToPadding(false); Loading Loading @@ -237,12 +245,13 @@ public class BubbleBarView extends FrameLayout { } } @SuppressLint("RtlHardcoded") private void onBubbleBarLocationChanged() { mLocationChangePending = false; final boolean onLeft = mBubbleBarLocation.isOnLeft(isLayoutRtl()); mBubbleBarBackground.setAnchorLeft(onLeft); mRelativePivotX = onLeft ? 0f : 1f; ViewGroup.LayoutParams layoutParams = getLayoutParams(); if (layoutParams instanceof LayoutParams lp) { if (getLayoutParams() instanceof LayoutParams lp) { lp.gravity = Gravity.BOTTOM | (onLeft ? Gravity.LEFT : Gravity.RIGHT); setLayoutParams(lp); } Loading @@ -267,13 +276,84 @@ public class BubbleBarView extends FrameLayout { } } /** * Set whether this view is being currently being dragged */ public void setIsDragging(boolean dragging) { if (mDragging == dragging) { return; } mDragging = dragging; setElevation(dragging ? mDragElevation : mBubbleElevation); if (!dragging && mLocationChangePending) { // During drag finish animation we may update the translation x value to shift the // bubble to the new drop target. Clear the translation here. setTranslationX(0f); onBubbleBarLocationChanged(); } } /** * Adjust resting position for the bubble bar while it is being dragged. * <p> * Bubble bar is laid out on left or right side of the screen. When it is being dragged to * the opposite side, the resting position should be on that side. Calculate any additional * translation that may be required to move the bubble bar to the new side. * * @param restingPosition relative resting position of the bubble bar from the laid out position */ @SuppressLint("RtlHardcoded") void adjustRelativeRestingPosition(PointF restingPosition) { final boolean locationOnLeft = mBubbleBarLocation.isOnLeft(isLayoutRtl()); // Bubble bar is placed left or right with gravity. Check where it is currently. final int absoluteGravity = Gravity.getAbsoluteGravity( ((LayoutParams) getLayoutParams()).gravity, getLayoutDirection()); final boolean gravityOnLeft = (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == Gravity.LEFT; // Bubble bar is pinned to the same side per gravity and the desired location. // Resting translation does not need to be adjusted. if (locationOnLeft == gravityOnLeft) { return; } // Bubble bar is laid out on left or right side of the screen. And the desired new // location is on the other side. Calculate x translation value required to shift the // bubble bar from one side to the other. float x = getDistanceFromOtherSide(); if (locationOnLeft) { // New location is on the left, shift left // before -> |......ooo.| after -> |.ooo......| restingPosition.x = -x; } else { // New location is on the right, shift right // before -> |.ooo......| after -> |......ooo.| restingPosition.x = x; } } private float getDistanceFromOtherSide() { // Calculate the shift needed to position the bubble bar on the other side int displayWidth = getResources().getDisplayMetrics().widthPixels; int margin = 0; if (getLayoutParams() instanceof MarginLayoutParams lp) { margin += lp.leftMargin; margin += lp.rightMargin; } return (float) (displayWidth - getWidth() - margin); } private void setBubbleBarLocationInternal(BubbleBarLocation bubbleBarLocation) { if (bubbleBarLocation != mBubbleBarLocation) { mBubbleBarLocation = bubbleBarLocation; if (mDragging) { mLocationChangePending = true; } else { onBubbleBarLocationChanged(); invalidate(); } } } private void animateToBubbleBarLocation(BubbleBarLocation bubbleBarLocation) { if (bubbleBarLocation == mBubbleBarLocation) { Loading quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleDragController.java +20 −11 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.view.ViewConfiguration; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.launcher3.R; import com.android.launcher3.taskbar.TaskbarActivityContext; /** Loading Loading @@ -55,9 +54,8 @@ public class BubbleDragController { mBubbleBarViewController = bubbleControllers.bubbleBarViewController; mBubbleDismissController = bubbleControllers.bubbleDismissController; mBubbleBarPinController = bubbleControllers.bubbleBarPinController; mBubbleBarPinController.setListener(location -> { // TODO(b/330585397): update bubble bar location in shell }); mBubbleBarPinController.setListener( bubbleControllers.bubbleBarController::updateBubbleBarLocation); mBubbleDismissController.setListener( stuck -> mBubbleBarPinController.setDropTargetHidden(stuck)); } Loading Loading @@ -96,11 +94,8 @@ public class BubbleDragController { @SuppressLint("ClickableViewAccessibility") public void setupBubbleBarView(@NonNull BubbleBarView bubbleBarView) { PointF initialRelativePivot = new PointF(); final int restingElevation = bubbleBarView.getResources().getDimensionPixelSize( R.dimen.bubblebar_elevation); final int dragElevation = bubbleBarView.getResources().getDimensionPixelSize( R.dimen.bubblebar_drag_elevation); bubbleBarView.setOnTouchListener(new BubbleTouchListener() { @Override protected boolean onTouchDown(@NonNull View view, @NonNull MotionEvent event) { if (bubbleBarView.isExpanded()) return false; Loading @@ -114,7 +109,7 @@ public class BubbleDragController { // By default the bubble bar view pivot is in bottom right corner, while dragging // it should be centered in order to align it with the dismiss target view bubbleBarView.setRelativePivot(/* x = */ 0.5f, /* y = */ 0.5f); bubbleBarView.setElevation(dragElevation); bubbleBarView.setIsDragging(true); mBubbleBarPinController.onDragStart( bubbleBarView.getBubbleBarLocation().isOnLeft(bubbleBarView.isLayoutRtl())); } Loading @@ -138,7 +133,14 @@ public class BubbleDragController { void onDragEnd() { // Restoring the initial pivot for the bubble bar view bubbleBarView.setRelativePivot(initialRelativePivot.x, initialRelativePivot.y); bubbleBarView.setElevation(restingElevation); bubbleBarView.setIsDragging(false); } @Override protected PointF getRestingPosition() { PointF restingPosition = super.getRestingPosition(); bubbleBarView.adjustRelativeRestingPosition(restingPosition); return restingPosition; } }); } Loading Loading @@ -226,6 +228,13 @@ public class BubbleDragController { protected void onDragDismiss() { } /** * Get the resting position of the view when drag is released */ protected PointF getRestingPosition() { return mViewInitialPosition; } @Override @SuppressLint("ClickableViewAccessibility") public boolean onTouch(@NonNull View view, @NonNull MotionEvent event) { Loading Loading @@ -353,7 +362,7 @@ public class BubbleDragController { mAnimator.animateDismiss(mViewInitialPosition, onComplete); } else { onDragRelease(); mAnimator.animateToInitialState(mViewInitialPosition, getCurrentVelocity(), mAnimator.animateToInitialState(getRestingPosition(), getCurrentVelocity(), onComplete); } mBubbleDismissController.hideDismissView(); Loading quickstep/src/com/android/quickstep/SystemUiProxy.java +13 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ import com.android.systemui.unfold.progress.IUnfoldTransitionListener; import com.android.wm.shell.back.IBackAnimation; import com.android.wm.shell.bubbles.IBubbles; import com.android.wm.shell.bubbles.IBubblesListener; import com.android.wm.shell.common.bubbles.BubbleBarLocation; import com.android.wm.shell.common.pip.IPip; import com.android.wm.shell.common.pip.IPipAnimationListener; import com.android.wm.shell.common.split.SplitScreenConstants.PersistentSnapPosition; Loading Loading @@ -808,6 +809,18 @@ public class SystemUiProxy implements ISystemUiProxy, NavHandle { } } /** * Tells SysUI to update the bubble bar location to the new location. * @param location new location for the bubble bar */ public void setBubbleBarLocation(BubbleBarLocation location) { try { mBubbles.setBubbleBarLocation(location); } catch (RemoteException e) { Log.w(TAG, "Failed call setBubbleBarLocation"); } } // // Splitscreen // Loading Loading
quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarController.java +20 −6 Original line number Diff line number Diff line Loading @@ -220,7 +220,7 @@ public class BubbleBarController extends IBubblesListener.Stub { mBubbleStashedHandleViewController.setHiddenForBubbles( !sBubbleBarEnabled || mBubbles.isEmpty()); mBubbleBarViewController.setUpdateSelectedBubbleAfterCollapse( key -> setSelectedBubble(mBubbles.get(key))); key -> setSelectedBubbleInternal(mBubbles.get(key))); }); } Loading Loading @@ -390,7 +390,7 @@ public class BubbleBarController extends IBubblesListener.Stub { } } if (bubbleToSelect != null) { setSelectedBubble(bubbleToSelect); setSelectedBubbleInternal(bubbleToSelect); if (previouslySelectedBubble == null) { mBubbleStashController.animateToInitialState(update.expanded); } Loading @@ -409,8 +409,7 @@ public class BubbleBarController extends IBubblesListener.Stub { if (update.bubbleBarLocation != mBubbleBarViewController.getBubbleBarLocation()) { // Animate when receiving updates. Skip it if we received the initial state. boolean animate = !update.initialState; mBubbleBarViewController.setBubbleBarLocation(update.bubbleBarLocation, animate); mBubbleStashController.setBubbleBarLocation(update.bubbleBarLocation); updateBubbleBarLocationInternal(update.bubbleBarLocation, animate); } } } Loading @@ -436,7 +435,7 @@ public class BubbleBarController extends IBubblesListener.Stub { /** Updates the currently selected bubble for launcher views and tells WMShell to show it. */ public void showAndSelectBubble(BubbleBarItem b) { if (DEBUG) Log.w(TAG, "showingSelectedBubble: " + b.getKey()); setSelectedBubble(b); setSelectedBubbleInternal(b); showSelectedBubble(); } Loading @@ -445,7 +444,7 @@ public class BubbleBarController extends IBubblesListener.Stub { * WMShell that the selection has changed, that should go through either * {@link #showSelectedBubble()} or {@link #showAndSelectBubble(BubbleBarItem)}. */ private void setSelectedBubble(BubbleBarItem b) { private void setSelectedBubbleInternal(BubbleBarItem b) { if (!Objects.equals(b, mSelectedBubble)) { if (DEBUG) Log.w(TAG, "selectingBubble: " + b.getKey()); mSelectedBubble = b; Loading @@ -464,6 +463,21 @@ public class BubbleBarController extends IBubblesListener.Stub { return null; } /** * Set a new bubble bar location. * <p> * Updates the value locally in Launcher and in WMShell. */ public void updateBubbleBarLocation(BubbleBarLocation location) { updateBubbleBarLocationInternal(location, false /* animate */); mSystemUiProxy.setBubbleBarLocation(location); } private void updateBubbleBarLocationInternal(BubbleBarLocation location, boolean animate) { mBubbleBarViewController.setBubbleBarLocation(location, animate); mBubbleStashController.setBubbleBarLocation(location); } // // Loading data for the bubbles // Loading
quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleBarView.java +84 −4 Original line number Diff line number Diff line Loading @@ -24,7 +24,9 @@ import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.animation.ValueAnimator; import android.annotation.Nullable; import android.annotation.SuppressLint; import android.content.Context; import android.graphics.PointF; import android.graphics.Rect; import android.util.AttributeSet; import android.util.LayoutDirection; Loading Loading @@ -108,6 +110,7 @@ public class BubbleBarView extends FrameLayout { private final float mIconSize; // The elevation of the bubbles within the bar private final float mBubbleElevation; private final float mDragElevation; private final int mPointerSize; // Whether the bar is expanded (i.e. the bubble activity is being displayed). Loading Loading @@ -138,11 +141,15 @@ public class BubbleBarView extends FrameLayout { @Nullable private Consumer<String> mUpdateSelectedBubbleAfterCollapse; private boolean mDragging; @Nullable private BubbleView mDraggedBubbleView; private int mPreviousLayoutDirection = LayoutDirection.UNDEFINED; private boolean mLocationChangePending; public BubbleBarView(Context context) { this(context, null); } Loading @@ -163,6 +170,7 @@ public class BubbleBarView extends FrameLayout { mIconSpacing = getResources().getDimensionPixelSize(R.dimen.bubblebar_icon_spacing); mIconSize = getResources().getDimensionPixelSize(R.dimen.bubblebar_icon_size); mBubbleElevation = getResources().getDimensionPixelSize(R.dimen.bubblebar_icon_elevation); mDragElevation = getResources().getDimensionPixelSize(R.dimen.bubblebar_drag_elevation); mPointerSize = getResources().getDimensionPixelSize(R.dimen.bubblebar_pointer_size); setClipToPadding(false); Loading Loading @@ -237,12 +245,13 @@ public class BubbleBarView extends FrameLayout { } } @SuppressLint("RtlHardcoded") private void onBubbleBarLocationChanged() { mLocationChangePending = false; final boolean onLeft = mBubbleBarLocation.isOnLeft(isLayoutRtl()); mBubbleBarBackground.setAnchorLeft(onLeft); mRelativePivotX = onLeft ? 0f : 1f; ViewGroup.LayoutParams layoutParams = getLayoutParams(); if (layoutParams instanceof LayoutParams lp) { if (getLayoutParams() instanceof LayoutParams lp) { lp.gravity = Gravity.BOTTOM | (onLeft ? Gravity.LEFT : Gravity.RIGHT); setLayoutParams(lp); } Loading @@ -267,13 +276,84 @@ public class BubbleBarView extends FrameLayout { } } /** * Set whether this view is being currently being dragged */ public void setIsDragging(boolean dragging) { if (mDragging == dragging) { return; } mDragging = dragging; setElevation(dragging ? mDragElevation : mBubbleElevation); if (!dragging && mLocationChangePending) { // During drag finish animation we may update the translation x value to shift the // bubble to the new drop target. Clear the translation here. setTranslationX(0f); onBubbleBarLocationChanged(); } } /** * Adjust resting position for the bubble bar while it is being dragged. * <p> * Bubble bar is laid out on left or right side of the screen. When it is being dragged to * the opposite side, the resting position should be on that side. Calculate any additional * translation that may be required to move the bubble bar to the new side. * * @param restingPosition relative resting position of the bubble bar from the laid out position */ @SuppressLint("RtlHardcoded") void adjustRelativeRestingPosition(PointF restingPosition) { final boolean locationOnLeft = mBubbleBarLocation.isOnLeft(isLayoutRtl()); // Bubble bar is placed left or right with gravity. Check where it is currently. final int absoluteGravity = Gravity.getAbsoluteGravity( ((LayoutParams) getLayoutParams()).gravity, getLayoutDirection()); final boolean gravityOnLeft = (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) == Gravity.LEFT; // Bubble bar is pinned to the same side per gravity and the desired location. // Resting translation does not need to be adjusted. if (locationOnLeft == gravityOnLeft) { return; } // Bubble bar is laid out on left or right side of the screen. And the desired new // location is on the other side. Calculate x translation value required to shift the // bubble bar from one side to the other. float x = getDistanceFromOtherSide(); if (locationOnLeft) { // New location is on the left, shift left // before -> |......ooo.| after -> |.ooo......| restingPosition.x = -x; } else { // New location is on the right, shift right // before -> |.ooo......| after -> |......ooo.| restingPosition.x = x; } } private float getDistanceFromOtherSide() { // Calculate the shift needed to position the bubble bar on the other side int displayWidth = getResources().getDisplayMetrics().widthPixels; int margin = 0; if (getLayoutParams() instanceof MarginLayoutParams lp) { margin += lp.leftMargin; margin += lp.rightMargin; } return (float) (displayWidth - getWidth() - margin); } private void setBubbleBarLocationInternal(BubbleBarLocation bubbleBarLocation) { if (bubbleBarLocation != mBubbleBarLocation) { mBubbleBarLocation = bubbleBarLocation; if (mDragging) { mLocationChangePending = true; } else { onBubbleBarLocationChanged(); invalidate(); } } } private void animateToBubbleBarLocation(BubbleBarLocation bubbleBarLocation) { if (bubbleBarLocation == mBubbleBarLocation) { Loading
quickstep/src/com/android/launcher3/taskbar/bubbles/BubbleDragController.java +20 −11 Original line number Diff line number Diff line Loading @@ -25,7 +25,6 @@ import android.view.ViewConfiguration; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.android.launcher3.R; import com.android.launcher3.taskbar.TaskbarActivityContext; /** Loading Loading @@ -55,9 +54,8 @@ public class BubbleDragController { mBubbleBarViewController = bubbleControllers.bubbleBarViewController; mBubbleDismissController = bubbleControllers.bubbleDismissController; mBubbleBarPinController = bubbleControllers.bubbleBarPinController; mBubbleBarPinController.setListener(location -> { // TODO(b/330585397): update bubble bar location in shell }); mBubbleBarPinController.setListener( bubbleControllers.bubbleBarController::updateBubbleBarLocation); mBubbleDismissController.setListener( stuck -> mBubbleBarPinController.setDropTargetHidden(stuck)); } Loading Loading @@ -96,11 +94,8 @@ public class BubbleDragController { @SuppressLint("ClickableViewAccessibility") public void setupBubbleBarView(@NonNull BubbleBarView bubbleBarView) { PointF initialRelativePivot = new PointF(); final int restingElevation = bubbleBarView.getResources().getDimensionPixelSize( R.dimen.bubblebar_elevation); final int dragElevation = bubbleBarView.getResources().getDimensionPixelSize( R.dimen.bubblebar_drag_elevation); bubbleBarView.setOnTouchListener(new BubbleTouchListener() { @Override protected boolean onTouchDown(@NonNull View view, @NonNull MotionEvent event) { if (bubbleBarView.isExpanded()) return false; Loading @@ -114,7 +109,7 @@ public class BubbleDragController { // By default the bubble bar view pivot is in bottom right corner, while dragging // it should be centered in order to align it with the dismiss target view bubbleBarView.setRelativePivot(/* x = */ 0.5f, /* y = */ 0.5f); bubbleBarView.setElevation(dragElevation); bubbleBarView.setIsDragging(true); mBubbleBarPinController.onDragStart( bubbleBarView.getBubbleBarLocation().isOnLeft(bubbleBarView.isLayoutRtl())); } Loading @@ -138,7 +133,14 @@ public class BubbleDragController { void onDragEnd() { // Restoring the initial pivot for the bubble bar view bubbleBarView.setRelativePivot(initialRelativePivot.x, initialRelativePivot.y); bubbleBarView.setElevation(restingElevation); bubbleBarView.setIsDragging(false); } @Override protected PointF getRestingPosition() { PointF restingPosition = super.getRestingPosition(); bubbleBarView.adjustRelativeRestingPosition(restingPosition); return restingPosition; } }); } Loading Loading @@ -226,6 +228,13 @@ public class BubbleDragController { protected void onDragDismiss() { } /** * Get the resting position of the view when drag is released */ protected PointF getRestingPosition() { return mViewInitialPosition; } @Override @SuppressLint("ClickableViewAccessibility") public boolean onTouch(@NonNull View view, @NonNull MotionEvent event) { Loading Loading @@ -353,7 +362,7 @@ public class BubbleDragController { mAnimator.animateDismiss(mViewInitialPosition, onComplete); } else { onDragRelease(); mAnimator.animateToInitialState(mViewInitialPosition, getCurrentVelocity(), mAnimator.animateToInitialState(getRestingPosition(), getCurrentVelocity(), onComplete); } mBubbleDismissController.hideDismissView(); Loading
quickstep/src/com/android/quickstep/SystemUiProxy.java +13 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ import com.android.systemui.unfold.progress.IUnfoldTransitionListener; import com.android.wm.shell.back.IBackAnimation; import com.android.wm.shell.bubbles.IBubbles; import com.android.wm.shell.bubbles.IBubblesListener; import com.android.wm.shell.common.bubbles.BubbleBarLocation; import com.android.wm.shell.common.pip.IPip; import com.android.wm.shell.common.pip.IPipAnimationListener; import com.android.wm.shell.common.split.SplitScreenConstants.PersistentSnapPosition; Loading Loading @@ -808,6 +809,18 @@ public class SystemUiProxy implements ISystemUiProxy, NavHandle { } } /** * Tells SysUI to update the bubble bar location to the new location. * @param location new location for the bubble bar */ public void setBubbleBarLocation(BubbleBarLocation location) { try { mBubbles.setBubbleBarLocation(location); } catch (RemoteException e) { Log.w(TAG, "Failed call setBubbleBarLocation"); } } // // Splitscreen // Loading