diff options
| -rw-r--r-- | core/java/android/view/InputWindowHandle.java | 6 | ||||
| -rw-r--r-- | core/jni/android_hardware_input_InputWindowHandle.cpp | 7 | ||||
| -rw-r--r-- | core/jni/jni_common.cpp | 14 | ||||
| -rw-r--r-- | core/jni/jni_common.h | 3 |
4 files changed, 30 insertions, 0 deletions
diff --git a/core/java/android/view/InputWindowHandle.java b/core/java/android/view/InputWindowHandle.java index 45b3fdd7e5bc..6a588eb8171b 100644 --- a/core/java/android/view/InputWindowHandle.java +++ b/core/java/android/view/InputWindowHandle.java @@ -26,6 +26,7 @@ import android.graphics.Region; import android.gui.TouchOcclusionMode; import android.os.IBinder; import android.os.InputConfig; +import android.util.Size; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -106,6 +107,9 @@ public final class InputWindowHandle { // Window frame. public final Rect frame = new Rect(); + // The real size of the content, excluding any crop. If no buffer is rendered, this is 0,0 + public Size contentSize = new Size(0, 0); + public int surfaceInset; // Global scaling factor applied to touch events when they are dispatched @@ -199,6 +203,7 @@ public final class InputWindowHandle { transform.set(other.transform); } focusTransferTarget = other.focusTransferTarget; + contentSize = new Size(other.contentSize.getWidth(), other.contentSize.getHeight()); } @Override @@ -211,6 +216,7 @@ public final class InputWindowHandle { .append(", windowToken=").append(windowToken) .append(", displayId=").append(displayId) .append(", isClone=").append((inputConfig & InputConfig.CLONE) != 0) + .append(", contentSize=").append(contentSize) .toString(); } diff --git a/core/jni/android_hardware_input_InputWindowHandle.cpp b/core/jni/android_hardware_input_InputWindowHandle.cpp index ea3c70f5e60b..c3d21a4024f8 100644 --- a/core/jni/android_hardware_input_InputWindowHandle.cpp +++ b/core/jni/android_hardware_input_InputWindowHandle.cpp @@ -59,6 +59,7 @@ static struct { jfieldID layoutParamsType; jfieldID dispatchingTimeoutMillis; jfieldID frame; + jfieldID contentSize; jfieldID surfaceInset; jfieldID scaleFactor; jfieldID touchableRegion; @@ -281,6 +282,9 @@ jobject android_view_InputWindowHandle_fromWindowInfo(JNIEnv* env, gui::WindowIn ScopedLocalRef<jobject> rectObj(env, JNICommon::objFromRect(env, windowInfo.frame)); env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.frame, rectObj.get()); + ScopedLocalRef<jobject> sizeObj(env, JNICommon::objFromSize(env, windowInfo.contentSize)); + env->SetObjectField(inputWindowHandle, gInputWindowHandleClassInfo.contentSize, sizeObj.get()); + env->SetIntField(inputWindowHandle, gInputWindowHandleClassInfo.surfaceInset, windowInfo.surfaceInset); env->SetFloatField(inputWindowHandle, gInputWindowHandleClassInfo.scaleFactor, @@ -393,6 +397,9 @@ int register_android_view_InputWindowHandle(JNIEnv* env) { GET_FIELD_ID(gInputWindowHandleClassInfo.frame, clazz, "frame", "Landroid/graphics/Rect;"); + GET_FIELD_ID(gInputWindowHandleClassInfo.contentSize, clazz, "contentSize", + "Landroid/util/Size;"); + GET_FIELD_ID(gInputWindowHandleClassInfo.surfaceInset, clazz, "surfaceInset", "I"); diff --git a/core/jni/jni_common.cpp b/core/jni/jni_common.cpp index b81c9b6eed95..dd69b16f5a96 100644 --- a/core/jni/jni_common.cpp +++ b/core/jni/jni_common.cpp @@ -34,6 +34,11 @@ static struct { jfieldID top; } gRectClassInfo; +static struct { + jclass clazz; + jmethodID ctor; +} gSizeClassInfo; + Rect JNICommon::rectFromObj(JNIEnv* env, jobject rectObj) { int left = env->GetIntField(rectObj, gRectClassInfo.left); int top = env->GetIntField(rectObj, gRectClassInfo.top); @@ -47,6 +52,10 @@ jobject JNICommon::objFromRect(JNIEnv* env, Rect rect) { rect.right, rect.bottom); } +jobject JNICommon::objFromSize(JNIEnv* env, Size size) { + return env->NewObject(gSizeClassInfo.clazz, gSizeClassInfo.ctor, size.width, size.height); +} + int register_jni_common(JNIEnv* env) { jclass rectClazz = FindClassOrDie(env, "android/graphics/Rect"); gRectClassInfo.clazz = MakeGlobalRefOrDie(env, rectClazz); @@ -55,6 +64,11 @@ int register_jni_common(JNIEnv* env) { gRectClassInfo.left = GetFieldIDOrDie(env, rectClazz, "left", "I"); gRectClassInfo.right = GetFieldIDOrDie(env, rectClazz, "right", "I"); gRectClassInfo.top = GetFieldIDOrDie(env, rectClazz, "top", "I"); + + jclass sizeClazz = FindClassOrDie(env, "android/util/Size"); + gSizeClassInfo.clazz = MakeGlobalRefOrDie(env, sizeClazz); + gSizeClassInfo.ctor = GetMethodIDOrDie(env, sizeClazz, "<init>", "(II)V"); + return 0; } diff --git a/core/jni/jni_common.h b/core/jni/jni_common.h index d670a7d6bd59..f1c60148d6b6 100644 --- a/core/jni/jni_common.h +++ b/core/jni/jni_common.h @@ -14,14 +14,17 @@ * limitations under the License. */ #include <jni.h> +#include <ui/Size.h> namespace android { class Rect; +using ui::Size; class JNICommon { public: static Rect rectFromObj(JNIEnv* env, jobject rectObj); static jobject objFromRect(JNIEnv* env, Rect rect); + static jobject objFromSize(JNIEnv* env, Size size); }; } // namespace android
\ No newline at end of file |