Take account of IME insets
Fix: 233159032
Test: manual
Change-Id: I2a23c13f7b2bcd8b0c758140dd1fdd5bb800f3f1
diff --git a/src/com/android/launcher3/views/BaseDragLayer.java b/src/com/android/launcher3/views/BaseDragLayer.java
index f553fb4..800b1f6 100644
--- a/src/com/android/launcher3/views/BaseDragLayer.java
+++ b/src/com/android/launcher3/views/BaseDragLayer.java
@@ -22,13 +22,11 @@
import static com.android.launcher3.util.window.RefreshRateTracker.getSingleFrameMs;
-import android.annotation.TargetApi;
import android.app.WallpaperManager;
import android.content.Context;
import android.graphics.Insets;
import android.graphics.Rect;
import android.graphics.RectF;
-import android.os.Build;
import android.util.AttributeSet;
import android.util.Property;
import android.view.MotionEvent;
@@ -550,18 +548,24 @@
}
@Override
- @TargetApi(Build.VERSION_CODES.Q)
public WindowInsets dispatchApplyWindowInsets(WindowInsets insets) {
if (Utilities.ATLEAST_Q) {
Insets gestureInsets = insets.getMandatorySystemGestureInsets();
int gestureInsetBottom = gestureInsets.bottom;
+ Insets imeInset = Utilities.ATLEAST_R
+ ? insets.getInsets(WindowInsets.Type.ime())
+ : Insets.NONE;
DeviceProfile dp = mActivity.getDeviceProfile();
if (dp.isTaskbarPresent) {
// Ignore taskbar gesture insets to avoid interfering with TouchControllers.
gestureInsetBottom = Math.max(0, gestureInsetBottom - dp.taskbarSize);
}
- mSystemGestureRegion.set(gestureInsets.left, gestureInsets.top,
- gestureInsets.right, gestureInsetBottom);
+ mSystemGestureRegion.set(
+ Math.max(gestureInsets.left, imeInset.left),
+ Math.max(gestureInsets.top, imeInset.top),
+ Math.max(gestureInsets.right, imeInset.right),
+ Math.max(gestureInsetBottom, imeInset.bottom)
+ );
}
return super.dispatchApplyWindowInsets(insets);
}