Loading quickstep/src/com/android/quickstep/views/FloatingTaskView.java +21 −5 Original line number Diff line number Diff line Loading @@ -30,9 +30,11 @@ import com.android.launcher3.touch.PagedOrientationHandler; import com.android.launcher3.views.BaseDragLayer; import com.android.quickstep.util.MultiValueUpdateListener; import java.util.function.Consumer; /** * Create an instance via * {@link #getFloatingTaskView(StatefulActivity, View, Bitmap, Drawable, RectF)} to * {@link #getFloatingTaskView(StatefulActivity, View, Bitmap, Drawable, RectF, Consumer)} to * which will have the thumbnail from the provided existing TaskView overlaying the taskview itself. * * Can then animate the taskview using Loading @@ -46,6 +48,8 @@ public class FloatingTaskView extends FrameLayout { private SplitPlaceholderView mSplitPlaceholderView; private RectF mStartingPosition; @Nullable private Consumer<RectF> mAdditionalOffsetter; private final StatefulActivity mActivity; private final boolean mIsRtl; private final Rect mOutline = new Rect(); Loading Loading @@ -77,8 +81,9 @@ public class FloatingTaskView extends FrameLayout { } private void init(StatefulActivity launcher, View originalView, @Nullable Bitmap thumbnail, Drawable icon, RectF positionOut) { Drawable icon, RectF positionOut, Consumer<RectF> additionalOffsetter) { mStartingPosition = positionOut; mAdditionalOffsetter = additionalOffsetter; updateInitialPositionForView(originalView); final InsettableFrameLayout.LayoutParams lp = (InsettableFrameLayout.LayoutParams) getLayoutParams(); Loading @@ -102,15 +107,21 @@ public class FloatingTaskView extends FrameLayout { /** * Configures and returns a an instance of {@link FloatingTaskView} initially matching the * appearance of {@code originalView}. * * @param additionalOffsetter optional, to set additional offsets to the FloatingTaskView * to account for translations. If {@code null} then the * translation values from originalView will be used */ public static FloatingTaskView getFloatingTaskView(StatefulActivity launcher, View originalView, @Nullable Bitmap thumbnail, Drawable icon, RectF positionOut) { View originalView, @Nullable Bitmap thumbnail, Drawable icon, RectF positionOut, @Nullable Consumer<RectF> additionalOffsetter) { final BaseDragLayer dragLayer = launcher.getDragLayer(); ViewGroup parent = (ViewGroup) dragLayer.getParent(); final FloatingTaskView floatingView = (FloatingTaskView) launcher.getLayoutInflater() .inflate(R.layout.floating_split_select_view, parent, false); floatingView.init(launcher, originalView, thumbnail, icon, positionOut); floatingView.init(launcher, originalView, thumbnail, icon, positionOut, additionalOffsetter); parent.addView(floatingView); return floatingView; } Loading @@ -120,7 +131,12 @@ public class FloatingTaskView extends FrameLayout { Utilities.getBoundsForViewInDragLayer(mActivity.getDragLayer(), originalView, viewBounds, true /* ignoreTransform */, null /* recycle */, mStartingPosition); mStartingPosition.offset(originalView.getTranslationX(), originalView.getTranslationY()); if (mAdditionalOffsetter != null) { mAdditionalOffsetter.accept(mStartingPosition); } else { mStartingPosition.offset(originalView.getTranslationX(), originalView.getTranslationY()); } final InsettableFrameLayout.LayoutParams lp = new InsettableFrameLayout.LayoutParams( Math.round(mStartingPosition.width()), Math.round(mStartingPosition.height())); Loading quickstep/src/com/android/quickstep/views/RecentsView.java +14 −5 Original line number Diff line number Diff line Loading @@ -2727,8 +2727,13 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T if (mSplitHiddenTaskView != null) { mSplitHiddenTaskView.setVisibility(INVISIBLE); mFirstFloatingTaskView = FloatingTaskView.getFloatingTaskView(mActivity, mSplitHiddenTaskView, mSplitHiddenTaskView.getThumbnail().getThumbnail(), mSplitHiddenTaskView.getIconView().getDrawable(), startingTaskRect); mSplitHiddenTaskView.getThumbnail(), mSplitHiddenTaskView.getThumbnail().getThumbnail(), mSplitHiddenTaskView.getIconView().getDrawable(), startingTaskRect, floatingTaskViewStartingPosition -> floatingTaskViewStartingPosition.offset( mSplitHiddenTaskView.getTranslationX(), mSplitHiddenTaskView.getTranslationY() )); mFirstFloatingTaskView.setAlpha(1); mFirstFloatingTaskView.addAnimation(anim, startingTaskRect, mTempRect, mSplitHiddenTaskView, true /*fadeWithThumbnail*/); Loading @@ -2736,7 +2741,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T mSplitSelectSource.view.setVisibility(INVISIBLE); mFirstFloatingTaskView = FloatingTaskView.getFloatingTaskView(mActivity, mSplitSelectSource.view, null, mSplitSelectSource.drawable, startingTaskRect); mSplitSelectSource.drawable, startingTaskRect, null /*additionalOffsetter*/); mFirstFloatingTaskView.setAlpha(1); mFirstFloatingTaskView.addAnimation(anim, startingTaskRect, mTempRect, mSplitSelectSource.view, true /*fadeWithThumbnail*/); Loading Loading @@ -4027,8 +4032,12 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T false /*fadeWithThumbnail*/); mSecondFloatingTaskView = FloatingTaskView.getFloatingTaskView(mActivity, taskView, taskView.getThumbnail().getThumbnail(), taskView.getIconView().getDrawable(), secondTaskStartingBounds); taskView.getThumbnail(), taskView.getThumbnail().getThumbnail(), taskView.getIconView().getDrawable(), secondTaskStartingBounds, floatingTaskViewStartingPosition -> floatingTaskViewStartingPosition.offset( taskView.getTranslationX(), taskView.getTranslationY() )); mSecondFloatingTaskView.setAlpha(1); mSecondFloatingTaskView.addAnimation(pendingAnimation, secondTaskStartingBounds, secondTaskEndingBounds, taskView.getThumbnail(), Loading Loading
quickstep/src/com/android/quickstep/views/FloatingTaskView.java +21 −5 Original line number Diff line number Diff line Loading @@ -30,9 +30,11 @@ import com.android.launcher3.touch.PagedOrientationHandler; import com.android.launcher3.views.BaseDragLayer; import com.android.quickstep.util.MultiValueUpdateListener; import java.util.function.Consumer; /** * Create an instance via * {@link #getFloatingTaskView(StatefulActivity, View, Bitmap, Drawable, RectF)} to * {@link #getFloatingTaskView(StatefulActivity, View, Bitmap, Drawable, RectF, Consumer)} to * which will have the thumbnail from the provided existing TaskView overlaying the taskview itself. * * Can then animate the taskview using Loading @@ -46,6 +48,8 @@ public class FloatingTaskView extends FrameLayout { private SplitPlaceholderView mSplitPlaceholderView; private RectF mStartingPosition; @Nullable private Consumer<RectF> mAdditionalOffsetter; private final StatefulActivity mActivity; private final boolean mIsRtl; private final Rect mOutline = new Rect(); Loading Loading @@ -77,8 +81,9 @@ public class FloatingTaskView extends FrameLayout { } private void init(StatefulActivity launcher, View originalView, @Nullable Bitmap thumbnail, Drawable icon, RectF positionOut) { Drawable icon, RectF positionOut, Consumer<RectF> additionalOffsetter) { mStartingPosition = positionOut; mAdditionalOffsetter = additionalOffsetter; updateInitialPositionForView(originalView); final InsettableFrameLayout.LayoutParams lp = (InsettableFrameLayout.LayoutParams) getLayoutParams(); Loading @@ -102,15 +107,21 @@ public class FloatingTaskView extends FrameLayout { /** * Configures and returns a an instance of {@link FloatingTaskView} initially matching the * appearance of {@code originalView}. * * @param additionalOffsetter optional, to set additional offsets to the FloatingTaskView * to account for translations. If {@code null} then the * translation values from originalView will be used */ public static FloatingTaskView getFloatingTaskView(StatefulActivity launcher, View originalView, @Nullable Bitmap thumbnail, Drawable icon, RectF positionOut) { View originalView, @Nullable Bitmap thumbnail, Drawable icon, RectF positionOut, @Nullable Consumer<RectF> additionalOffsetter) { final BaseDragLayer dragLayer = launcher.getDragLayer(); ViewGroup parent = (ViewGroup) dragLayer.getParent(); final FloatingTaskView floatingView = (FloatingTaskView) launcher.getLayoutInflater() .inflate(R.layout.floating_split_select_view, parent, false); floatingView.init(launcher, originalView, thumbnail, icon, positionOut); floatingView.init(launcher, originalView, thumbnail, icon, positionOut, additionalOffsetter); parent.addView(floatingView); return floatingView; } Loading @@ -120,7 +131,12 @@ public class FloatingTaskView extends FrameLayout { Utilities.getBoundsForViewInDragLayer(mActivity.getDragLayer(), originalView, viewBounds, true /* ignoreTransform */, null /* recycle */, mStartingPosition); mStartingPosition.offset(originalView.getTranslationX(), originalView.getTranslationY()); if (mAdditionalOffsetter != null) { mAdditionalOffsetter.accept(mStartingPosition); } else { mStartingPosition.offset(originalView.getTranslationX(), originalView.getTranslationY()); } final InsettableFrameLayout.LayoutParams lp = new InsettableFrameLayout.LayoutParams( Math.round(mStartingPosition.width()), Math.round(mStartingPosition.height())); Loading
quickstep/src/com/android/quickstep/views/RecentsView.java +14 −5 Original line number Diff line number Diff line Loading @@ -2727,8 +2727,13 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T if (mSplitHiddenTaskView != null) { mSplitHiddenTaskView.setVisibility(INVISIBLE); mFirstFloatingTaskView = FloatingTaskView.getFloatingTaskView(mActivity, mSplitHiddenTaskView, mSplitHiddenTaskView.getThumbnail().getThumbnail(), mSplitHiddenTaskView.getIconView().getDrawable(), startingTaskRect); mSplitHiddenTaskView.getThumbnail(), mSplitHiddenTaskView.getThumbnail().getThumbnail(), mSplitHiddenTaskView.getIconView().getDrawable(), startingTaskRect, floatingTaskViewStartingPosition -> floatingTaskViewStartingPosition.offset( mSplitHiddenTaskView.getTranslationX(), mSplitHiddenTaskView.getTranslationY() )); mFirstFloatingTaskView.setAlpha(1); mFirstFloatingTaskView.addAnimation(anim, startingTaskRect, mTempRect, mSplitHiddenTaskView, true /*fadeWithThumbnail*/); Loading @@ -2736,7 +2741,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T mSplitSelectSource.view.setVisibility(INVISIBLE); mFirstFloatingTaskView = FloatingTaskView.getFloatingTaskView(mActivity, mSplitSelectSource.view, null, mSplitSelectSource.drawable, startingTaskRect); mSplitSelectSource.drawable, startingTaskRect, null /*additionalOffsetter*/); mFirstFloatingTaskView.setAlpha(1); mFirstFloatingTaskView.addAnimation(anim, startingTaskRect, mTempRect, mSplitSelectSource.view, true /*fadeWithThumbnail*/); Loading Loading @@ -4027,8 +4032,12 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T false /*fadeWithThumbnail*/); mSecondFloatingTaskView = FloatingTaskView.getFloatingTaskView(mActivity, taskView, taskView.getThumbnail().getThumbnail(), taskView.getIconView().getDrawable(), secondTaskStartingBounds); taskView.getThumbnail(), taskView.getThumbnail().getThumbnail(), taskView.getIconView().getDrawable(), secondTaskStartingBounds, floatingTaskViewStartingPosition -> floatingTaskViewStartingPosition.offset( taskView.getTranslationX(), taskView.getTranslationY() )); mSecondFloatingTaskView.setAlpha(1); mSecondFloatingTaskView.addAnimation(pendingAnimation, secondTaskStartingBounds, secondTaskEndingBounds, taskView.getThumbnail(), Loading