Set snapTargetBeforeMinimized to middle target if position is negative

There are cases where the last snapTarget position is negative.
Specifically, it can be negative if the divider was moved up, making the
last position negative off-screen. Instead save the middle SnapTarget,
which is the default, so bounds aren't accidentally calculated with
negative position.

Fixes: 74440003
Test: Bug no longer occurs
Test: Split screen with 3rd party launcher
Test: ActivityManagerSplitScreenTests

Change-Id: Id3261d6e31622a96f71ff80301dd9cc39599b7ec
This commit is contained in:
chaviw
2018-03-27 16:49:27 -07:00
parent 294ad78534
commit ee947f2ecc

View File

@@ -592,7 +592,16 @@ public class DividerView extends FrameLayout implements OnTouchListener,
// Record last snap target the divider moved to
if (mHomeStackResizable && !mIsInMinimizeInteraction) {
saveSnapTargetBeforeMinimized(snapTarget);
// The last snapTarget position can be negative when the last divider position was
// offscreen. In that case, save the middle (default) SnapTarget so calculating next
// position isn't negative.
final SnapTarget saveTarget;
if (snapTarget.position < 0) {
saveTarget = mSnapAlgorithm.getMiddleTarget();
} else {
saveTarget = snapTarget;
}
saveSnapTargetBeforeMinimized(saveTarget);
}
};
Runnable notCancelledEndAction = () -> {