Fix app opening transition for deep shortcuts.
With this change, the floating view now starts on top of the
deep shortcut icon; before this change the view stared in the
middle of the text portion of the view.
Bug: 70220260
Change-Id: I7a1ed705f6f8d9d2ff594f52c4cf678aa0575012
diff --git a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
index b614d15..1df8cfd 100644
--- a/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
+++ b/quickstep/src/com/android/launcher3/LauncherAppTransitionManagerImpl.java
@@ -51,6 +51,8 @@
import com.android.launcher3.anim.PropertyListBuilder;
import com.android.launcher3.dragndrop.DragLayer;
import com.android.launcher3.graphics.DrawableFactory;
+import com.android.launcher3.shortcuts.DeepShortcutTextView;
+import com.android.launcher3.shortcuts.DeepShortcutView;
import com.android.quickstep.RecentsAnimationInterpolator;
import com.android.quickstep.RecentsAnimationInterpolator.TaskWindowBounds;
import com.android.quickstep.RecentsView;
@@ -498,7 +500,7 @@
* @return Animator that controls the icon used to launch the target.
*/
private AnimatorSet getIconAnimator(View v) {
- boolean isBubbleTextView = v instanceof BubbleTextView;
+ final boolean isBubbleTextView = v instanceof BubbleTextView;
mFloatingView = new View(mLauncher);
if (isBubbleTextView && v.getTag() instanceof ItemInfoWithIcon ) {
// Create a copy of the app icon
@@ -510,14 +512,24 @@
// Position the floating view exactly on top of the original
Rect rect = new Rect();
- mDragLayer.getDescendantRectRelativeToSelf(v, rect);
- int viewLocationStart = mIsRtl
+ final boolean isDeepShortcutTextView = v instanceof DeepShortcutTextView
+ && v.getParent() != null && v.getParent() instanceof DeepShortcutView;
+ if (isDeepShortcutTextView) {
+ // Deep shortcut views have their icon drawn in a sibling view.
+ DeepShortcutView view = (DeepShortcutView) v.getParent();
+ mDragLayer.getDescendantRectRelativeToSelf(view.getIconView(), rect);
+ } else {
+ mDragLayer.getDescendantRectRelativeToSelf(v, rect);
+ }
+ final int viewLocationStart = mIsRtl
? mDeviceProfile.widthPx - rect.right
: rect.left;
- int viewLocationTop = rect.top;
+ final int viewLocationTop = rect.top;
- if (isBubbleTextView) {
+ if (isBubbleTextView && !isDeepShortcutTextView) {
((BubbleTextView) v).getIconBounds(rect);
+ } else {
+ rect.set(0, 0, rect.width(), rect.height());
}
LayoutParams lp = new LayoutParams(rect.width(), rect.height());
lp.ignoreInsets = true;