com_android_server_input_InputWindowHandle.cpp revision 9302c8796fc4dcda08d4bd1e11733848fd4fafaf
1928e054931d357326613c78e62f4d850b7c442ffJeff Brown/*
2928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Copyright (C) 2011 The Android Open Source Project
3928e054931d357326613c78e62f4d850b7c442ffJeff Brown *
4928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Licensed under the Apache License, Version 2.0 (the "License");
5928e054931d357326613c78e62f4d850b7c442ffJeff Brown * you may not use this file except in compliance with the License.
6928e054931d357326613c78e62f4d850b7c442ffJeff Brown * You may obtain a copy of the License at
7928e054931d357326613c78e62f4d850b7c442ffJeff Brown *
8928e054931d357326613c78e62f4d850b7c442ffJeff Brown *      http://www.apache.org/licenses/LICENSE-2.0
9928e054931d357326613c78e62f4d850b7c442ffJeff Brown *
10928e054931d357326613c78e62f4d850b7c442ffJeff Brown * Unless required by applicable law or agreed to in writing, software
11928e054931d357326613c78e62f4d850b7c442ffJeff Brown * distributed under the License is distributed on an "AS IS" BASIS,
12928e054931d357326613c78e62f4d850b7c442ffJeff Brown * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13928e054931d357326613c78e62f4d850b7c442ffJeff Brown * See the License for the specific language governing permissions and
14928e054931d357326613c78e62f4d850b7c442ffJeff Brown * limitations under the License.
15928e054931d357326613c78e62f4d850b7c442ffJeff Brown */
16928e054931d357326613c78e62f4d850b7c442ffJeff Brown
17928e054931d357326613c78e62f4d850b7c442ffJeff Brown#define LOG_TAG "InputWindowHandle"
18928e054931d357326613c78e62f4d850b7c442ffJeff Brown
19928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include "JNIHelp.h"
20928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include "jni.h"
21928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include <android_runtime/AndroidRuntime.h>
22928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include <utils/threads.h>
23928e054931d357326613c78e62f4d850b7c442ffJeff Brown
249302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown#include <android_view_InputChannel.h>
259302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown#include <android/graphics/Region.h>
269302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
27928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include "com_android_server_InputWindowHandle.h"
28928e054931d357326613c78e62f4d850b7c442ffJeff Brown#include "com_android_server_InputApplicationHandle.h"
29928e054931d357326613c78e62f4d850b7c442ffJeff Brown
30928e054931d357326613c78e62f4d850b7c442ffJeff Brownnamespace android {
31928e054931d357326613c78e62f4d850b7c442ffJeff Brown
32928e054931d357326613c78e62f4d850b7c442ffJeff Brownstatic struct {
33928e054931d357326613c78e62f4d850b7c442ffJeff Brown    jfieldID ptr;
34928e054931d357326613c78e62f4d850b7c442ffJeff Brown    jfieldID inputApplicationHandle;
359302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID inputChannel;
369302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID name;
379302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID layoutParamsFlags;
389302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID layoutParamsType;
399302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID dispatchingTimeoutNanos;
409302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID frameLeft;
419302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID frameTop;
429302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID frameRight;
439302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID frameBottom;
449302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID scaleFactor;
459302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID touchableRegion;
469302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID visible;
479302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID canReceiveKeys;
489302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID hasFocus;
499302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID hasWallpaper;
509302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID paused;
519302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID layer;
529302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID ownerPid;
539302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID ownerUid;
549302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jfieldID inputFeatures;
55928e054931d357326613c78e62f4d850b7c442ffJeff Brown} gInputWindowHandleClassInfo;
56928e054931d357326613c78e62f4d850b7c442ffJeff Brown
57928e054931d357326613c78e62f4d850b7c442ffJeff Brownstatic Mutex gHandleMutex;
58928e054931d357326613c78e62f4d850b7c442ffJeff Brown
59928e054931d357326613c78e62f4d850b7c442ffJeff Brown
60928e054931d357326613c78e62f4d850b7c442ffJeff Brown// --- NativeInputWindowHandle ---
61928e054931d357326613c78e62f4d850b7c442ffJeff Brown
62928e054931d357326613c78e62f4d850b7c442ffJeff BrownNativeInputWindowHandle::NativeInputWindowHandle(
63928e054931d357326613c78e62f4d850b7c442ffJeff Brown        const sp<InputApplicationHandle>& inputApplicationHandle, jweak objWeak) :
64928e054931d357326613c78e62f4d850b7c442ffJeff Brown        InputWindowHandle(inputApplicationHandle),
65928e054931d357326613c78e62f4d850b7c442ffJeff Brown        mObjWeak(objWeak) {
66928e054931d357326613c78e62f4d850b7c442ffJeff Brown}
67928e054931d357326613c78e62f4d850b7c442ffJeff Brown
68928e054931d357326613c78e62f4d850b7c442ffJeff BrownNativeInputWindowHandle::~NativeInputWindowHandle() {
69928e054931d357326613c78e62f4d850b7c442ffJeff Brown    JNIEnv* env = AndroidRuntime::getJNIEnv();
70928e054931d357326613c78e62f4d850b7c442ffJeff Brown    env->DeleteWeakGlobalRef(mObjWeak);
71928e054931d357326613c78e62f4d850b7c442ffJeff Brown}
72928e054931d357326613c78e62f4d850b7c442ffJeff Brown
73928e054931d357326613c78e62f4d850b7c442ffJeff Brownjobject NativeInputWindowHandle::getInputWindowHandleObjLocalRef(JNIEnv* env) {
74928e054931d357326613c78e62f4d850b7c442ffJeff Brown    return env->NewLocalRef(mObjWeak);
75928e054931d357326613c78e62f4d850b7c442ffJeff Brown}
76928e054931d357326613c78e62f4d850b7c442ffJeff Brown
779302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brownbool NativeInputWindowHandle::update() {
789302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    JNIEnv* env = AndroidRuntime::getJNIEnv();
799302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jobject obj = env->NewLocalRef(mObjWeak);
809302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    if (!obj) {
819302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown        return false;
829302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    }
839302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
849302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jobject inputChannelObj = env->GetObjectField(obj,
859302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.inputChannel);
869302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    if (inputChannelObj) {
879302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown        inputChannel = android_view_InputChannel_getInputChannel(env, inputChannelObj);
889302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown        env->DeleteLocalRef(inputChannelObj);
899302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    } else {
909302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown        inputChannel = NULL;
919302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    }
929302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
939302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jstring nameObj = jstring(env->GetObjectField(obj,
949302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.name));
959302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    if (nameObj) {
969302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown        const char* nameStr = env->GetStringUTFChars(nameObj, NULL);
979302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown        name.setTo(nameStr);
989302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown        env->ReleaseStringUTFChars(nameObj, nameStr);
999302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown        env->DeleteLocalRef(nameObj);
1009302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    } else {
1019302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown        name.setTo("<null>");
1029302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    }
1039302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
1049302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    layoutParamsFlags = env->GetIntField(obj,
1059302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.layoutParamsFlags);
1069302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    layoutParamsType = env->GetIntField(obj,
1079302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.layoutParamsType);
1089302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    dispatchingTimeout = env->GetLongField(obj,
1099302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.dispatchingTimeoutNanos);
1109302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    frameLeft = env->GetIntField(obj,
1119302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.frameLeft);
1129302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    frameTop = env->GetIntField(obj,
1139302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.frameTop);
1149302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    frameRight = env->GetIntField(obj,
1159302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.frameRight);
1169302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    frameBottom = env->GetIntField(obj,
1179302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.frameBottom);
1189302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    scaleFactor = env->GetFloatField(obj,
1199302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.scaleFactor);
1209302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
1219302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    jobject regionObj = env->GetObjectField(obj,
1229302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.touchableRegion);
1239302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    if (regionObj) {
1249302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown        SkRegion* region = android_graphics_Region_getSkRegion(env, regionObj);
1259302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown        touchableRegion.set(*region);
1269302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown        env->DeleteLocalRef(regionObj);
1279302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    } else {
1289302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown        touchableRegion.setEmpty();
1299302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    }
1309302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
1319302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    visible = env->GetBooleanField(obj,
1329302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.visible);
1339302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    canReceiveKeys = env->GetBooleanField(obj,
1349302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.canReceiveKeys);
1359302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    hasFocus = env->GetBooleanField(obj,
1369302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.hasFocus);
1379302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    hasWallpaper = env->GetBooleanField(obj,
1389302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.hasWallpaper);
1399302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    paused = env->GetBooleanField(obj,
1409302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.paused);
1419302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    layer = env->GetIntField(obj,
1429302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.layer);
1439302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    ownerPid = env->GetIntField(obj,
1449302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.ownerPid);
1459302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    ownerUid = env->GetIntField(obj,
1469302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.ownerUid);
1479302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    inputFeatures = env->GetIntField(obj,
1489302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            gInputWindowHandleClassInfo.inputFeatures);
1499302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
1509302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    env->DeleteLocalRef(obj);
1519302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    return true;
1529302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown}
1539302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
154928e054931d357326613c78e62f4d850b7c442ffJeff Brown
155928e054931d357326613c78e62f4d850b7c442ffJeff Brown// --- Global functions ---
156928e054931d357326613c78e62f4d850b7c442ffJeff Brown
157928e054931d357326613c78e62f4d850b7c442ffJeff Brownsp<NativeInputWindowHandle> android_server_InputWindowHandle_getHandle(
158928e054931d357326613c78e62f4d850b7c442ffJeff Brown        JNIEnv* env, jobject inputWindowHandleObj) {
159928e054931d357326613c78e62f4d850b7c442ffJeff Brown    if (!inputWindowHandleObj) {
160928e054931d357326613c78e62f4d850b7c442ffJeff Brown        return NULL;
161928e054931d357326613c78e62f4d850b7c442ffJeff Brown    }
162928e054931d357326613c78e62f4d850b7c442ffJeff Brown
163928e054931d357326613c78e62f4d850b7c442ffJeff Brown    AutoMutex _l(gHandleMutex);
164928e054931d357326613c78e62f4d850b7c442ffJeff Brown
165928e054931d357326613c78e62f4d850b7c442ffJeff Brown    int ptr = env->GetIntField(inputWindowHandleObj, gInputWindowHandleClassInfo.ptr);
166928e054931d357326613c78e62f4d850b7c442ffJeff Brown    NativeInputWindowHandle* handle;
167928e054931d357326613c78e62f4d850b7c442ffJeff Brown    if (ptr) {
168928e054931d357326613c78e62f4d850b7c442ffJeff Brown        handle = reinterpret_cast<NativeInputWindowHandle*>(ptr);
169928e054931d357326613c78e62f4d850b7c442ffJeff Brown    } else {
170928e054931d357326613c78e62f4d850b7c442ffJeff Brown        jobject inputApplicationHandleObj = env->GetObjectField(inputWindowHandleObj,
171928e054931d357326613c78e62f4d850b7c442ffJeff Brown                gInputWindowHandleClassInfo.inputApplicationHandle);
172928e054931d357326613c78e62f4d850b7c442ffJeff Brown        sp<InputApplicationHandle> inputApplicationHandle =
173928e054931d357326613c78e62f4d850b7c442ffJeff Brown                android_server_InputApplicationHandle_getHandle(env, inputApplicationHandleObj);
174928e054931d357326613c78e62f4d850b7c442ffJeff Brown        env->DeleteLocalRef(inputApplicationHandleObj);
175928e054931d357326613c78e62f4d850b7c442ffJeff Brown
176928e054931d357326613c78e62f4d850b7c442ffJeff Brown        jweak objWeak = env->NewWeakGlobalRef(inputWindowHandleObj);
177928e054931d357326613c78e62f4d850b7c442ffJeff Brown        handle = new NativeInputWindowHandle(inputApplicationHandle, objWeak);
178928e054931d357326613c78e62f4d850b7c442ffJeff Brown        handle->incStrong(inputWindowHandleObj);
179928e054931d357326613c78e62f4d850b7c442ffJeff Brown        env->SetIntField(inputWindowHandleObj, gInputWindowHandleClassInfo.ptr,
180928e054931d357326613c78e62f4d850b7c442ffJeff Brown                reinterpret_cast<int>(handle));
181928e054931d357326613c78e62f4d850b7c442ffJeff Brown    }
182928e054931d357326613c78e62f4d850b7c442ffJeff Brown    return handle;
183928e054931d357326613c78e62f4d850b7c442ffJeff Brown}
184928e054931d357326613c78e62f4d850b7c442ffJeff Brown
185928e054931d357326613c78e62f4d850b7c442ffJeff Brown
186928e054931d357326613c78e62f4d850b7c442ffJeff Brown// --- JNI ---
187928e054931d357326613c78e62f4d850b7c442ffJeff Brown
188928e054931d357326613c78e62f4d850b7c442ffJeff Brownstatic void android_server_InputWindowHandle_nativeDispose(JNIEnv* env, jobject obj) {
189928e054931d357326613c78e62f4d850b7c442ffJeff Brown    AutoMutex _l(gHandleMutex);
190928e054931d357326613c78e62f4d850b7c442ffJeff Brown
191928e054931d357326613c78e62f4d850b7c442ffJeff Brown    int ptr = env->GetIntField(obj, gInputWindowHandleClassInfo.ptr);
192928e054931d357326613c78e62f4d850b7c442ffJeff Brown    if (ptr) {
193928e054931d357326613c78e62f4d850b7c442ffJeff Brown        env->SetIntField(obj, gInputWindowHandleClassInfo.ptr, 0);
194928e054931d357326613c78e62f4d850b7c442ffJeff Brown
195928e054931d357326613c78e62f4d850b7c442ffJeff Brown        NativeInputWindowHandle* handle = reinterpret_cast<NativeInputWindowHandle*>(ptr);
196928e054931d357326613c78e62f4d850b7c442ffJeff Brown        handle->decStrong(obj);
197928e054931d357326613c78e62f4d850b7c442ffJeff Brown    }
198928e054931d357326613c78e62f4d850b7c442ffJeff Brown}
199928e054931d357326613c78e62f4d850b7c442ffJeff Brown
200928e054931d357326613c78e62f4d850b7c442ffJeff Brown
201928e054931d357326613c78e62f4d850b7c442ffJeff Brownstatic JNINativeMethod gInputWindowHandleMethods[] = {
202928e054931d357326613c78e62f4d850b7c442ffJeff Brown    /* name, signature, funcPtr */
203928e054931d357326613c78e62f4d850b7c442ffJeff Brown    { "nativeDispose", "()V",
204928e054931d357326613c78e62f4d850b7c442ffJeff Brown            (void*) android_server_InputWindowHandle_nativeDispose },
205928e054931d357326613c78e62f4d850b7c442ffJeff Brown};
206928e054931d357326613c78e62f4d850b7c442ffJeff Brown
207928e054931d357326613c78e62f4d850b7c442ffJeff Brown#define FIND_CLASS(var, className) \
208928e054931d357326613c78e62f4d850b7c442ffJeff Brown        var = env->FindClass(className); \
20917cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro        LOG_FATAL_IF(! var, "Unable to find class " className);
210928e054931d357326613c78e62f4d850b7c442ffJeff Brown
211928e054931d357326613c78e62f4d850b7c442ffJeff Brown#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \
212928e054931d357326613c78e62f4d850b7c442ffJeff Brown        var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \
213928e054931d357326613c78e62f4d850b7c442ffJeff Brown        LOG_FATAL_IF(! var, "Unable to find field " fieldName);
214928e054931d357326613c78e62f4d850b7c442ffJeff Brown
215928e054931d357326613c78e62f4d850b7c442ffJeff Brownint register_android_server_InputWindowHandle(JNIEnv* env) {
216a924dc0db952fe32509435fdb8dc9c84a9e181f3Dianne Hackborn    int res = jniRegisterNativeMethods(env, "com/android/server/wm/InputWindowHandle",
217928e054931d357326613c78e62f4d850b7c442ffJeff Brown            gInputWindowHandleMethods, NELEM(gInputWindowHandleMethods));
218928e054931d357326613c78e62f4d850b7c442ffJeff Brown    LOG_FATAL_IF(res < 0, "Unable to register native methods.");
219928e054931d357326613c78e62f4d850b7c442ffJeff Brown
22017cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro    jclass clazz;
22117cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro    FIND_CLASS(clazz, "com/android/server/wm/InputWindowHandle");
222928e054931d357326613c78e62f4d850b7c442ffJeff Brown
22317cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro    GET_FIELD_ID(gInputWindowHandleClassInfo.ptr, clazz,
224928e054931d357326613c78e62f4d850b7c442ffJeff Brown            "ptr", "I");
225928e054931d357326613c78e62f4d850b7c442ffJeff Brown
226928e054931d357326613c78e62f4d850b7c442ffJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.inputApplicationHandle,
22717cc33a35729733aaa0a7706f38b1c45f0b1590aCarl Shapiro            clazz,
228a924dc0db952fe32509435fdb8dc9c84a9e181f3Dianne Hackborn            "inputApplicationHandle", "Lcom/android/server/wm/InputApplicationHandle;");
229928e054931d357326613c78e62f4d850b7c442ffJeff Brown
2309302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.inputChannel, clazz,
2319302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "inputChannel", "Landroid/view/InputChannel;");
2329302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2339302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.name, clazz,
2349302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "name", "Ljava/lang/String;");
2359302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2369302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsFlags, clazz,
2379302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "layoutParamsFlags", "I");
2389302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2399302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsType, clazz,
2409302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "layoutParamsType", "I");
2419302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2429302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.dispatchingTimeoutNanos, clazz,
2439302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "dispatchingTimeoutNanos", "J");
2449302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2459302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.frameLeft, clazz,
2469302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "frameLeft", "I");
2479302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2489302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.frameTop, clazz,
2499302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "frameTop", "I");
2509302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2519302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.frameRight, clazz,
2529302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "frameRight", "I");
2539302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2549302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.frameBottom, clazz,
2559302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "frameBottom", "I");
2569302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2579302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.scaleFactor, clazz,
2589302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "scaleFactor", "F");
2599302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2609302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.touchableRegion, clazz,
2619302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "touchableRegion", "Landroid/graphics/Region;");
2629302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2639302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.visible, clazz,
2649302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "visible", "Z");
2659302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2669302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.canReceiveKeys, clazz,
2679302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "canReceiveKeys", "Z");
2689302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2699302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.hasFocus, clazz,
2709302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "hasFocus", "Z");
2719302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2729302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.hasWallpaper, clazz,
2739302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "hasWallpaper", "Z");
2749302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2759302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.paused, clazz,
2769302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "paused", "Z");
2779302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2789302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.layer, clazz,
2799302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "layer", "I");
2809302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2819302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.ownerPid, clazz,
2829302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "ownerPid", "I");
2839302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2849302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.ownerUid, clazz,
2859302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "ownerUid", "I");
2869302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown
2879302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown    GET_FIELD_ID(gInputWindowHandleClassInfo.inputFeatures, clazz,
2889302c8796fc4dcda08d4bd1e11733848fd4fafafJeff Brown            "inputFeatures", "I");
289928e054931d357326613c78e62f4d850b7c442ffJeff Brown    return 0;
290928e054931d357326613c78e62f4d850b7c442ffJeff Brown}
291928e054931d357326613c78e62f4d850b7c442ffJeff Brown
292928e054931d357326613c78e62f4d850b7c442ffJeff Brown} /* namespace android */
293