diff options
| author | 2017-08-11 18:13:24 -0700 | |
|---|---|---|
| committer | 2017-08-11 18:13:24 -0700 | |
| commit | 0a2f34fd20b8b51c7f291d3dfcfaa3781d1c7ca3 (patch) | |
| tree | c6845e9ef7f5ec17c264a8ee496f6accd6509319 | |
| parent | 06668b5f739de23487ed0e8258923581d9585d3f (diff) | |
Workaround the IME dismissing when dragging PiP.
- When the IME is shown, skip showing the dismiss scrim in the menu
because starting the activity will cause a window focus change, which
will close the IME (it will still be covered by the dismiss overlay).
This is slightly inconsistent from dragging while the IME is not visible,
but is preferable to having the IME close.
- Also, use the inset bounds to calculate the fraction, which aligns
closer to the dismiss check (which is also based on the display bounds
and not the current (possibly inset) movement bounds.
Bug: 37655837
Test: Drag PIP over IME, ensure that it does not hide the IME.
Change-Id: I86228371effce2d962ab4367497f5b1bf32456ec
| -rw-r--r-- | packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java index 9b4832097528..56a3c87b6b74 100644 --- a/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java +++ b/packages/SystemUI/src/com/android/systemui/pip/phone/PipTouchHandler.java @@ -31,7 +31,6 @@ import android.content.res.Resources; import android.graphics.Point; import android.graphics.PointF; import android.graphics.Rect; -import android.graphics.RectF; import android.os.Handler; import android.os.RemoteException; import android.util.Log; @@ -47,10 +46,8 @@ import android.view.accessibility.AccessibilityWindowInfo; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.policy.PipSnapAlgorithm; -import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.statusbar.FlingAnimationUtils; -import com.android.systemui.tuner.TunerService; import java.io.PrintWriter; @@ -90,6 +87,8 @@ public class PipTouchHandler { // The current movement bounds private Rect mMovementBounds = new Rect(); + // The reference inset bounds, used to determine the dismiss fraction + private Rect mInsetBounds = new Rect(); // The reference bounds used to calculate the normal/expanded target bounds private Rect mNormalBounds = new Rect(); private Rect mNormalMovementBounds = new Rect(); @@ -311,6 +310,7 @@ public class PipTouchHandler { mNormalMovementBounds = normalMovementBounds; mExpandedMovementBounds = expandedMovementBounds; mDisplayRotation = displayRotation; + mInsetBounds.set(insetBounds); updateMovementBounds(mMenuState); // If we have a deferred resize, apply it now @@ -418,9 +418,12 @@ public class PipTouchHandler { * Updates the appearance of the menu and scrim on top of the PiP while dismissing. */ private void updateDismissFraction() { - if (mMenuController != null) { + // Skip updating the dismiss fraction when the IME is showing. This is to work around an + // issue where starting the menu activity for the dismiss overlay will steal the window + // focus, which closes the IME. + if (mMenuController != null && !mIsImeShowing) { Rect bounds = mMotionHelper.getBounds(); - final float target = mMovementBounds.bottom + bounds.height(); + final float target = mInsetBounds.bottom; float fraction = 0f; if (bounds.bottom > target) { final float distance = bounds.bottom - target; |