Ensure starting position rect isn't empty in FloatingTaskView

* on rotation taskbar re-inflates it's hotseat views.
If we're already in split, then FloatingTaskView tries to do calculations
on the view's position in the window, but has a reference to the
old, pre-rotated view which is no longer in any window.
* This sets startingPosition to be an empty rect, which is used to
set LayoutParam values, which are used downstream in update() to calculate
scale, and thus we end up dividing by 0.
* TODO(b/345556328) figure out a better solution than checking for an
empty rect

Fixes: 342606096
Test: Repro steps don't cause crash
Flag: EXEMPT bugfix
Change-Id: Icb546a05d383d1997a92471fc1de3ffc37d06eca
Merged-In: Icb546a05d383d1997a92471fc1de3ffc37d06eca
(cherry picked from commit 410681a955)
This commit is contained in:
Vinit Nayak
2024-06-06 15:32:33 -07:00
parent b748c8e6ee
commit f8efb32379
@@ -189,7 +189,13 @@ public class FloatingTaskView extends FrameLayout {
viewBounds, false /* ignoreTransform */, null /* recycle */,
mStartingPosition);
}
// In some cases originalView is off-screen so we don't get a valid starting position
// ex. on rotation
// TODO(b/345556328) We shouldn't be animating if starting position of view isn't ready
if (mStartingPosition.isEmpty()) {
// Set to non empty for now so calculations in #update() don't break
mStartingPosition.set(0, 0, 1, 1);
}
final BaseDragLayer.LayoutParams lp = new BaseDragLayer.LayoutParams(
Math.round(mStartingPosition.width()),
Math.round(mStartingPosition.height()));