Make PiP move away to not occlude IME when it's too big

Keep clear algorithm don't change position if there is no space, but in
corner case scenario if the insets simply weren't big enough to even
contain PiP height, it would lead to occluding IME.

With this change we are now moving PiP when it doesn't fit in the insets
to be positioned according to the gravity rules, even if user has
interacted with it, which also brings PiP down when IME hides.

Bug: 283172848
Test: http://recall/-/g8x7ZkgdfbqscttAA9wzl9/4Qxus5Q16e4SyHtJPgdtS

Change-Id: Ia4c797ef484bc917cf1579ab2f0f72cfd4646169
This commit is contained in:
Mateusz Cicheński
2023-05-18 01:47:25 +00:00
parent d401bb91d6
commit e0a81640e5

View File

@@ -65,9 +65,18 @@ public class PhonePipKeepClearAlgorithm implements PipKeepClearAlgorithmInterfac
}
Rect pipBounds = new Rect(startingBounds);
// move PiP towards corner if user hasn't moved it manually or the flag is on
if (mKeepClearAreaGravityEnabled
|| (!pipBoundsState.hasUserMovedPip() && !pipBoundsState.hasUserResizedPip())) {
boolean shouldApplyGravity = false;
// if PiP is outside of screen insets, reposition using gravity
if (!insets.contains(pipBounds)) {
shouldApplyGravity = true;
}
// if user has not interacted with PiP, reposition using gravity
if (!pipBoundsState.hasUserMovedPip() && !pipBoundsState.hasUserResizedPip()) {
shouldApplyGravity = true;
}
// apply gravity that will position PiP in bottom left or bottom right corner within insets
if (mKeepClearAreaGravityEnabled || shouldApplyGravity) {
float snapFraction = pipBoundsAlgorithm.getSnapFraction(startingBounds);
int verticalGravity = Gravity.BOTTOM;
int horizontalGravity;