From 56162a0a51e2aa752a500d941869f1af652eabbf Mon Sep 17 00:00:00 2001 From: Albert Chaulk Date: Mon, 5 Jun 2017 19:35:23 -0400 Subject: [PATCH] Add a WM API to query the touch region for the input method window This is needed by VR to handle keyboards that display a window larger than the interactable region Bug: 62194867 Test: Manually with prints Change-Id: I7288956ed8da8d24e7c46ffa8f27461f7abbca5e --- core/java/android/view/IWindowManager.aidl | 6 ++++++ .../com/android/server/wm/WindowManagerService.java | 11 +++++++++++ 2 files changed, 17 insertions(+) diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 58a6a5e788031..2b73c14540d50 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -29,6 +29,7 @@ import android.graphics.Bitmap; import android.graphics.GraphicBuffer; import android.graphics.Point; import android.graphics.Rect; +import android.graphics.Region; import android.os.Bundle; import android.os.IRemoteCallback; import android.os.ParcelFileDescriptor; @@ -377,4 +378,9 @@ interface IWindowManager * associated with that InputConsumer. */ boolean destroyInputConsumer(String name); + + /** + * Return the touch region for the current IME window, or an empty region if there is none. + */ + Region getCurrentImeTouchRegion(); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 9d1b3d9ed81aa..f19994b872f28 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -6168,6 +6168,17 @@ public class WindowManagerService extends IWindowManager.Stub } } + @Override + public Region getCurrentImeTouchRegion() { + synchronized (mWindowMap) { + final Region r = new Region(); + if (mInputMethodWindow != null) { + mInputMethodWindow.getTouchableRegion(r); + } + return r; + } + } + @Override public boolean hasNavigationBar() { return mPolicy.hasNavigationBar();