diff options
| -rw-r--r-- | core/java/android/view/InputWindowHandle.java | 14 | ||||
| -rw-r--r-- | core/java/android/window/WindowInfosListenerForTest.java | 4 | ||||
| -rw-r--r-- | core/jni/android_hardware_input_InputWindowHandle.cpp | 41 | ||||
| -rw-r--r-- | core/jni/jni_common.cpp | 9 | ||||
| -rw-r--r-- | core/jni/jni_common.h | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/AccessibilityWindowsPopulator.java | 8 | ||||
| -rw-r--r-- | services/core/java/com/android/server/wm/InputWindowHandleWrapper.java | 12 |
7 files changed, 28 insertions, 61 deletions
diff --git a/core/java/android/view/InputWindowHandle.java b/core/java/android/view/InputWindowHandle.java index 3812d37a5fed..2761aaeb4a7d 100644 --- a/core/java/android/view/InputWindowHandle.java +++ b/core/java/android/view/InputWindowHandle.java @@ -19,6 +19,7 @@ package android.view; import android.annotation.IntDef; import android.annotation.Nullable; import android.graphics.Matrix; +import android.graphics.Rect; import android.graphics.Region; import android.gui.TouchOcclusionMode; import android.os.IBinder; @@ -103,10 +104,7 @@ public final class InputWindowHandle { public long dispatchingTimeoutMillis; // Window frame. - public int frameLeft; - public int frameTop; - public int frameRight; - public int frameBottom; + public final Rect frame = new Rect(); public int surfaceInset; @@ -184,10 +182,7 @@ public final class InputWindowHandle { layoutParamsFlags = other.layoutParamsFlags; layoutParamsType = other.layoutParamsType; dispatchingTimeoutMillis = other.dispatchingTimeoutMillis; - frameLeft = other.frameLeft; - frameTop = other.frameTop; - frameRight = other.frameRight; - frameBottom = other.frameBottom; + frame.set(other.frame); surfaceInset = other.surfaceInset; scaleFactor = other.scaleFactor; touchableRegion.set(other.touchableRegion); @@ -209,8 +204,7 @@ public final class InputWindowHandle { @Override public String toString() { return new StringBuilder(name != null ? name : "") - .append(", frame=[").append(frameLeft).append(",").append(frameTop).append(",") - .append(frameRight).append(",").append(frameBottom).append("]") + .append(", frame=[").append(frame).append("]") .append(", touchableRegion=").append(touchableRegion) .append(", scaleFactor=").append(scaleFactor) .append(", transform=").append(transform) diff --git a/core/java/android/window/WindowInfosListenerForTest.java b/core/java/android/window/WindowInfosListenerForTest.java index be88e53ad507..6e9f04482313 100644 --- a/core/java/android/window/WindowInfosListenerForTest.java +++ b/core/java/android/window/WindowInfosListenerForTest.java @@ -161,10 +161,8 @@ public class WindowInfosListenerForTest { private static List<WindowInfo> buildWindowInfos(InputWindowHandle[] windowHandles) { var windowInfos = new ArrayList<WindowInfo>(windowHandles.length); for (var handle : windowHandles) { - var bounds = new Rect(handle.frameLeft, handle.frameTop, handle.frameRight, - handle.frameBottom); windowInfos.add(new WindowInfo(handle.getWindowToken(), handle.name, handle.displayId, - bounds, handle.inputConfig, handle.transform)); + handle.frame, handle.inputConfig, handle.transform)); } return windowInfos; } diff --git a/core/jni/android_hardware_input_InputWindowHandle.cpp b/core/jni/android_hardware_input_InputWindowHandle.cpp index eb5f2977e221..ea3c70f5e60b 100644 --- a/core/jni/android_hardware_input_InputWindowHandle.cpp +++ b/core/jni/android_hardware_input_InputWindowHandle.cpp @@ -35,6 +35,7 @@ #include "android_util_Binder.h" #include "core_jni_helpers.h" #include "jni.h" +#include "jni_common.h" namespace android { @@ -57,10 +58,7 @@ static struct { jfieldID layoutParamsFlags; jfieldID layoutParamsType; jfieldID dispatchingTimeoutMillis; - jfieldID frameLeft; - jfieldID frameTop; - jfieldID frameRight; - jfieldID frameBottom; + jfieldID frame; jfieldID surfaceInset; jfieldID scaleFactor; jfieldID touchableRegion; @@ -128,14 +126,11 @@ bool NativeInputWindowHandle::updateInfo() { mInfo.dispatchingTimeout = std::chrono::milliseconds( env->GetLongField(obj, gInputWindowHandleClassInfo.dispatchingTimeoutMillis)); - mInfo.frameLeft = env->GetIntField(obj, - gInputWindowHandleClassInfo.frameLeft); - mInfo.frameTop = env->GetIntField(obj, - gInputWindowHandleClassInfo.frameTop); - mInfo.frameRight = env->GetIntField(obj, - gInputWindowHandleClassInfo.frameRight); - mInfo.frameBottom = env->GetIntField(obj, - gInputWindowHandleClassInfo.frameBottom); + + ScopedLocalRef<jobject> frameObj(env, + env->GetObjectField(obj, gInputWindowHandleClassInfo.frame)); + mInfo.frame = JNICommon::rectFromObj(env, frameObj.get()); + mInfo.surfaceInset = env->GetIntField(obj, gInputWindowHandleClassInfo.surfaceInset); mInfo.globalScaleFactor = env->GetFloatField(obj, @@ -283,13 +278,9 @@ jobject android_view_InputWindowHandle_fromWindowInfo(JNIEnv* env, gui::WindowIn std::chrono::duration_cast<std::chrono::milliseconds>( windowInfo.dispatchingTimeout) .count()); - env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.frameLeft, - windowInfo.frameLeft); - env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.frameTop, windowInfo.frameTop); - env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.frameRight, - windowInfo.frameRight); - env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.frameBottom, - windowInfo.frameBottom); + ScopedLocalRef<jobject> rectObj(env, JNICommon::objFromRect(env, windowInfo.frame)); + env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.frame, rectObj.get()); + env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.surfaceInset, windowInfo.surfaceInset); env->SetFloatField(inputWindowHandle, gInputWindowHandleClassInfo.scaleFactor, @@ -400,17 +391,7 @@ int register_android_view_InputWindowHandle(JNIEnv* env) { GET_FIELD_ID(gInputWindowHandleClassInfo.dispatchingTimeoutMillis, clazz, "dispatchingTimeoutMillis", "J"); - GET_FIELD_ID(gInputWindowHandleClassInfo.frameLeft, clazz, - "frameLeft", "I"); - - GET_FIELD_ID(gInputWindowHandleClassInfo.frameTop, clazz, - "frameTop", "I"); - - GET_FIELD_ID(gInputWindowHandleClassInfo.frameRight, clazz, - "frameRight", "I"); - - GET_FIELD_ID(gInputWindowHandleClassInfo.frameBottom, clazz, - "frameBottom", "I"); + GET_FIELD_ID(gInputWindowHandleClassInfo.frame, clazz, "frame", "Landroid/graphics/Rect;"); GET_FIELD_ID(gInputWindowHandleClassInfo.surfaceInset, clazz, "surfaceInset", "I"); diff --git a/core/jni/jni_common.cpp b/core/jni/jni_common.cpp index 8d376cf2c7f9..b81c9b6eed95 100644 --- a/core/jni/jni_common.cpp +++ b/core/jni/jni_common.cpp @@ -26,6 +26,8 @@ namespace android { static struct { + jclass clazz; + jmethodID ctor; jfieldID bottom; jfieldID left; jfieldID right; @@ -40,8 +42,15 @@ Rect JNICommon::rectFromObj(JNIEnv* env, jobject rectObj) { return Rect(left, top, right, bottom); } +jobject JNICommon::objFromRect(JNIEnv* env, Rect rect) { + return env->NewObject(gRectClassInfo.clazz, gRectClassInfo.ctor, rect.left, rect.top, + rect.right, rect.bottom); +} + int register_jni_common(JNIEnv* env) { jclass rectClazz = FindClassOrDie(env, "android/graphics/Rect"); + gRectClassInfo.clazz = MakeGlobalRefOrDie(env, rectClazz); + gRectClassInfo.ctor = GetMethodIDOrDie(env, rectClazz, "<init>", "(IIII)V"); gRectClassInfo.bottom = GetFieldIDOrDie(env, rectClazz, "bottom", "I"); gRectClassInfo.left = GetFieldIDOrDie(env, rectClazz, "left", "I"); gRectClassInfo.right = GetFieldIDOrDie(env, rectClazz, "right", "I"); diff --git a/core/jni/jni_common.h b/core/jni/jni_common.h index a2bf6fb3f5e0..d670a7d6bd59 100644 --- a/core/jni/jni_common.h +++ b/core/jni/jni_common.h @@ -22,5 +22,6 @@ class Rect; class JNICommon { public: static Rect rectFromObj(JNIEnv* env, jobject rectObj); + static jobject objFromRect(JNIEnv* env, Rect rect); }; } // namespace android
\ No newline at end of file diff --git a/services/core/java/com/android/server/wm/AccessibilityWindowsPopulator.java b/services/core/java/com/android/server/wm/AccessibilityWindowsPopulator.java index 70f20075b48c..cdd1a2699e5b 100644 --- a/services/core/java/com/android/server/wm/AccessibilityWindowsPopulator.java +++ b/services/core/java/com/android/server/wm/AccessibilityWindowsPopulator.java @@ -161,9 +161,7 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener { final boolean visible = (window.inputConfig & InputConfig.NOT_VISIBLE) == 0; final boolean isNotClone = (window.inputConfig & InputConfig.CLONE) == 0; final boolean hasTouchableRegion = !window.touchableRegion.isEmpty(); - final boolean hasNonEmptyFrame = - (window.frameBottom != window.frameTop) && (window.frameLeft - != window.frameRight); + final boolean hasNonEmptyFrame = !window.frame.isEmpty(); if (visible && isNotClone && hasTouchableRegion && hasNonEmptyFrame) { tempVisibleWindows.add(window); } @@ -694,9 +692,7 @@ public final class AccessibilityWindowsPopulator extends WindowInfosListener { instance.mIgnoreDuetoRecentsAnimation = windowState != null && controller != null && controller.shouldIgnoreForAccessibility(windowState); - final Rect windowFrame = new Rect(inputWindowHandle.frameLeft, - inputWindowHandle.frameTop, inputWindowHandle.frameRight, - inputWindowHandle.frameBottom); + final Rect windowFrame = new Rect(inputWindowHandle.frame); getTouchableRegionInWindow(instance.mShouldMagnify, inputWindowHandle.touchableRegion, instance.mTouchableRegionInWindow, windowFrame, magnificationInverseMatrix, displayMatrix); diff --git a/services/core/java/com/android/server/wm/InputWindowHandleWrapper.java b/services/core/java/com/android/server/wm/InputWindowHandleWrapper.java index 3d4e0ebac258..64b7a6064e45 100644 --- a/services/core/java/com/android/server/wm/InputWindowHandleWrapper.java +++ b/services/core/java/com/android/server/wm/InputWindowHandleWrapper.java @@ -227,18 +227,6 @@ class InputWindowHandleWrapper { mChanged = true; } - void setFrame(int left, int top, int right, int bottom) { - if (mHandle.frameLeft == left && mHandle.frameTop == top && mHandle.frameRight == right - && mHandle.frameBottom == bottom) { - return; - } - mHandle.frameLeft = left; - mHandle.frameTop = top; - mHandle.frameRight = right; - mHandle.frameBottom = bottom; - mChanged = true; - } - void setSurfaceInset(int inset) { if (mHandle.surfaceInset == inset) { return; |