summaryrefslogtreecommitdiffstats
path: root/services/jni
diff options
context:
space:
mode:
Diffstat (limited to 'services/jni')
-rw-r--r--services/jni/Android.mk63
-rw-r--r--services/jni/com_android_server_AlarmManagerService.cpp114
-rw-r--r--services/jni/com_android_server_AssetAtlasService.cpp272
-rw-r--r--services/jni/com_android_server_ConsumerIrService.cpp114
-rw-r--r--services/jni/com_android_server_LightsService.cpp141
-rw-r--r--services/jni/com_android_server_SerialService.cpp82
-rw-r--r--services/jni/com_android_server_SystemServer.cpp51
-rw-r--r--services/jni/com_android_server_UsbDeviceManager.cpp157
-rw-r--r--services/jni/com_android_server_UsbHostManager.cpp204
-rw-r--r--services/jni/com_android_server_VibratorService.cpp61
-rw-r--r--services/jni/com_android_server_connectivity_Vpn.cpp450
-rw-r--r--services/jni/com_android_server_input_InputApplicationHandle.cpp158
-rw-r--r--services/jni/com_android_server_input_InputApplicationHandle.h46
-rw-r--r--services/jni/com_android_server_input_InputManagerService.cpp1464
-rw-r--r--services/jni/com_android_server_input_InputWindowHandle.cpp309
-rw-r--r--services/jni/com_android_server_input_InputWindowHandle.h47
-rw-r--r--services/jni/com_android_server_location_FlpHardwareProvider.cpp1002
-rw-r--r--services/jni/com_android_server_location_GpsLocationProvider.cpp777
-rw-r--r--services/jni/com_android_server_power_PowerManagerService.cpp252
-rw-r--r--services/jni/com_android_server_power_PowerManagerService.h35
-rw-r--r--services/jni/onload.cpp73
21 files changed, 0 insertions, 5872 deletions
diff --git a/services/jni/Android.mk b/services/jni/Android.mk
deleted file mode 100644
index 98e9b30..0000000
--- a/services/jni/Android.mk
+++ /dev/null
@@ -1,63 +0,0 @@
-LOCAL_PATH:= $(call my-dir)
-include $(CLEAR_VARS)
-
-LOCAL_SRC_FILES:= \
- com_android_server_AlarmManagerService.cpp \
- com_android_server_AssetAtlasService.cpp \
- com_android_server_ConsumerIrService.cpp \
- com_android_server_input_InputApplicationHandle.cpp \
- com_android_server_input_InputManagerService.cpp \
- com_android_server_input_InputWindowHandle.cpp \
- com_android_server_LightsService.cpp \
- com_android_server_power_PowerManagerService.cpp \
- com_android_server_SerialService.cpp \
- com_android_server_SystemServer.cpp \
- com_android_server_UsbDeviceManager.cpp \
- com_android_server_UsbHostManager.cpp \
- com_android_server_VibratorService.cpp \
- com_android_server_location_GpsLocationProvider.cpp \
- com_android_server_location_FlpHardwareProvider.cpp \
- com_android_server_connectivity_Vpn.cpp \
- onload.cpp
-
-LOCAL_C_INCLUDES += \
- $(JNI_H_INCLUDE) \
- frameworks/base/services \
- frameworks/base/core/jni \
- frameworks/native/services \
- external/skia/include/core \
- libcore/include \
- libcore/include/libsuspend \
- $(call include-path-for, libhardware)/hardware \
- $(call include-path-for, libhardware_legacy)/hardware_legacy \
-
-LOCAL_SHARED_LIBRARIES := \
- libandroid_runtime \
- libandroidfw \
- libbinder \
- libcutils \
- liblog \
- libhardware \
- libhardware_legacy \
- libnativehelper \
- libutils \
- libui \
- libinput \
- libinputservice \
- libsensorservice \
- libskia \
- libgui \
- libusbhost \
- libsuspend \
- libEGL \
- libGLESv2
-
-LOCAL_CFLAGS += -DEGL_EGLEXT_PROTOTYPES -DGL_GLEXT_PROTOTYPES
-
-ifeq ($(WITH_MALLOC_LEAK_CHECK),true)
- LOCAL_CFLAGS += -DMALLOC_LEAK_CHECK
-endif
-
-LOCAL_MODULE:= libandroid_servers
-
-include $(BUILD_SHARED_LIBRARY)
diff --git a/services/jni/com_android_server_AlarmManagerService.cpp b/services/jni/com_android_server_AlarmManagerService.cpp
deleted file mode 100644
index c2f6151..0000000
--- a/services/jni/com_android_server_AlarmManagerService.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/* //device/libs/android_runtime/android_server_AlarmManagerService.cpp
-**
-** Copyright 2006, The Android Open Source Project
-**
-** Licensed under the Apache License, Version 2.0 (the "License");
-** you may not use this file except in compliance with the License.
-** You may obtain a copy of the License at
-**
-** http://www.apache.org/licenses/LICENSE-2.0
-**
-** Unless required by applicable law or agreed to in writing, software
-** distributed under the License is distributed on an "AS IS" BASIS,
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-** See the License for the specific language governing permissions and
-** limitations under the License.
-*/
-
-#define LOG_TAG "AlarmManagerService"
-
-#include "JNIHelp.h"
-#include "jni.h"
-#include <utils/Log.h>
-#include <utils/misc.h>
-
-#include <fcntl.h>
-#include <stdio.h>
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <netinet/in.h>
-#include <stdlib.h>
-#include <errno.h>
-#include <unistd.h>
-#include <linux/ioctl.h>
-#include <linux/android_alarm.h>
-
-namespace android {
-
-static jint android_server_AlarmManagerService_setKernelTimezone(JNIEnv* env, jobject obj, jint fd, jint minswest)
-{
- struct timezone tz;
-
- tz.tz_minuteswest = minswest;
- tz.tz_dsttime = 0;
-
- int result = settimeofday(NULL, &tz);
- if (result < 0) {
- ALOGE("Unable to set kernel timezone to %d: %s\n", minswest, strerror(errno));
- return -1;
- } else {
- ALOGD("Kernel timezone updated to %d minutes west of GMT\n", minswest);
- }
-
- return 0;
-}
-
-static jint android_server_AlarmManagerService_init(JNIEnv* env, jobject obj)
-{
- return open("/dev/alarm", O_RDWR);
-}
-
-static void android_server_AlarmManagerService_close(JNIEnv* env, jobject obj, jint fd)
-{
- close(fd);
-}
-
-static void android_server_AlarmManagerService_set(JNIEnv* env, jobject obj, jint fd, jint type, jlong seconds, jlong nanoseconds)
-{
- struct timespec ts;
- ts.tv_sec = seconds;
- ts.tv_nsec = nanoseconds;
-
- int result = ioctl(fd, ANDROID_ALARM_SET(type), &ts);
- if (result < 0)
- {
- ALOGE("Unable to set alarm to %lld.%09lld: %s\n", seconds, nanoseconds, strerror(errno));
- }
-}
-
-static jint android_server_AlarmManagerService_waitForAlarm(JNIEnv* env, jobject obj, jint fd)
-{
- int result = 0;
-
- do
- {
- result = ioctl(fd, ANDROID_ALARM_WAIT);
- } while (result < 0 && errno == EINTR);
-
- if (result < 0)
- {
- ALOGE("Unable to wait on alarm: %s\n", strerror(errno));
- return 0;
- }
-
- return result;
-}
-
-static JNINativeMethod sMethods[] = {
- /* name, signature, funcPtr */
- {"init", "()I", (void*)android_server_AlarmManagerService_init},
- {"close", "(I)V", (void*)android_server_AlarmManagerService_close},
- {"set", "(IIJJ)V", (void*)android_server_AlarmManagerService_set},
- {"waitForAlarm", "(I)I", (void*)android_server_AlarmManagerService_waitForAlarm},
- {"setKernelTimezone", "(II)I", (void*)android_server_AlarmManagerService_setKernelTimezone},
-};
-
-int register_android_server_AlarmManagerService(JNIEnv* env)
-{
- return jniRegisterNativeMethods(env, "com/android/server/AlarmManagerService",
- sMethods, NELEM(sMethods));
-}
-
-} /* namespace android */
diff --git a/services/jni/com_android_server_AssetAtlasService.cpp b/services/jni/com_android_server_AssetAtlasService.cpp
deleted file mode 100644
index 885d21e..0000000
--- a/services/jni/com_android_server_AssetAtlasService.cpp
+++ /dev/null
@@ -1,272 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "AssetAtlasService"
-
-#include "jni.h"
-#include "JNIHelp.h"
-
-#include <android_view_GraphicBuffer.h>
-#include <cutils/log.h>
-
-#include <GLES2/gl2.h>
-#include <GLES2/gl2ext.h>
-
-#include <EGL/egl.h>
-#include <EGL/eglext.h>
-
-#include <SkCanvas.h>
-#include <SkBitmap.h>
-
-namespace android {
-
-// ----------------------------------------------------------------------------
-// Defines
-// ----------------------------------------------------------------------------
-
-// Defines how long to wait for the GPU when uploading the atlas
-// This timeout is defined in nanoseconds (see EGL_KHR_fence_sync extension)
-#define FENCE_TIMEOUT 2000000000
-
-// ----------------------------------------------------------------------------
-// JNI Helpers
-// ----------------------------------------------------------------------------
-
-static struct {
- jfieldID mFinalizer;
- jfieldID mNativeCanvas;
-} gCanvasClassInfo;
-
-static struct {
- jfieldID mNativeCanvas;
-} gCanvasFinalizerClassInfo;
-
-#define GET_INT(object, field) \
- env->GetIntField(object, field)
-
-#define SET_INT(object, field, value) \
- env->SetIntField(object, field, value)
-
-// ----------------------------------------------------------------------------
-// Canvas management
-// ----------------------------------------------------------------------------
-
-static inline void swapCanvasPtr(JNIEnv* env, jobject canvasObj, SkCanvas* newCanvas) {
- jobject canvasFinalizerObj = env->GetObjectField(canvasObj, gCanvasClassInfo.mFinalizer);
- SkCanvas* previousCanvas = reinterpret_cast<SkCanvas*>(
- GET_INT(canvasObj, gCanvasClassInfo.mNativeCanvas));
- SET_INT(canvasObj, gCanvasClassInfo.mNativeCanvas, (int) newCanvas);
- SET_INT(canvasFinalizerObj, gCanvasFinalizerClassInfo.mNativeCanvas, (int) newCanvas);
- SkSafeUnref(previousCanvas);
-}
-
-static SkBitmap* com_android_server_AssetAtlasService_acquireCanvas(JNIEnv* env, jobject,
- jobject canvas, jint width, jint height) {
-
- SkBitmap* bitmap = new SkBitmap;
- bitmap->setConfig(SkBitmap::kARGB_8888_Config, width, height);
- bitmap->allocPixels();
- bitmap->eraseColor(0);
-
- SkCanvas* nativeCanvas = SkNEW_ARGS(SkCanvas, (*bitmap));
- swapCanvasPtr(env, canvas, nativeCanvas);
-
- return bitmap;
-}
-
-static void com_android_server_AssetAtlasService_releaseCanvas(JNIEnv* env, jobject,
- jobject canvas, SkBitmap* bitmap) {
-
- SkCanvas* nativeCanvas = SkNEW(SkCanvas);
- swapCanvasPtr(env, canvas, nativeCanvas);
-
- delete bitmap;
-}
-
-#define CLEANUP_GL_AND_RETURN(result) \
- if (fence != EGL_NO_SYNC_KHR) eglDestroySyncKHR(display, fence); \
- if (image) eglDestroyImageKHR(display, image); \
- if (texture) glDeleteTextures(1, &texture); \
- if (surface != EGL_NO_SURFACE) eglDestroySurface(display, surface); \
- if (context != EGL_NO_CONTEXT) eglDestroyContext(display, context); \
- eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); \
- eglReleaseThread(); \
- eglTerminate(display); \
- return result;
-
-static jboolean com_android_server_AssetAtlasService_upload(JNIEnv* env, jobject,
- jobject graphicBuffer, SkBitmap* bitmap) {
-
- // The goal of this method is to copy the bitmap into the GraphicBuffer
- // using the GPU to swizzle the texture content
- sp<GraphicBuffer> buffer(graphicBufferForJavaObject(env, graphicBuffer));
-
- if (buffer != NULL) {
- EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
- if (display == EGL_NO_DISPLAY) return false;
-
- EGLint major;
- EGLint minor;
- if (!eglInitialize(display, &major, &minor)) {
- ALOGW("Could not initialize EGL");
- return false;
- }
-
- // We're going to use a 1x1 pbuffer surface later on
- // The configuration doesn't really matter for what we're trying to do
- EGLint configAttrs[] = {
- EGL_RENDERABLE_TYPE, EGL_OPENGL_ES2_BIT,
- EGL_RED_SIZE, 8,
- EGL_GREEN_SIZE, 8,
- EGL_BLUE_SIZE, 8,
- EGL_ALPHA_SIZE, 0,
- EGL_DEPTH_SIZE, 0,
- EGL_STENCIL_SIZE, 0,
- EGL_NONE
- };
- EGLConfig configs[1];
- EGLint configCount;
- if (!eglChooseConfig(display, configAttrs, configs, 1, &configCount)) {
- ALOGW("Could not select EGL configuration");
- eglReleaseThread();
- eglTerminate(display);
- return false;
- }
- if (configCount <= 0) {
- ALOGW("Could not find EGL configuration");
- eglReleaseThread();
- eglTerminate(display);
- return false;
- }
-
- // These objects are initialized below but the default "null"
- // values are used to cleanup properly at any point in the
- // initialization sequence
- GLuint texture = 0;
- EGLImageKHR image = EGL_NO_IMAGE_KHR;
- EGLSurface surface = EGL_NO_SURFACE;
- EGLSyncKHR fence = EGL_NO_SYNC_KHR;
-
- EGLint attrs[] = { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE };
- EGLContext context = eglCreateContext(display, configs[0], EGL_NO_CONTEXT, attrs);
- if (context == EGL_NO_CONTEXT) {
- ALOGW("Could not create EGL context");
- CLEANUP_GL_AND_RETURN(false);
- }
-
- // Create the 1x1 pbuffer
- EGLint surfaceAttrs[] = { EGL_WIDTH, 1, EGL_HEIGHT, 1, EGL_NONE };
- surface = eglCreatePbufferSurface(display, configs[0], surfaceAttrs);
- if (surface == EGL_NO_SURFACE) {
- ALOGW("Could not create EGL surface");
- CLEANUP_GL_AND_RETURN(false);
- }
-
- if (!eglMakeCurrent(display, surface, surface, context)) {
- ALOGW("Could not change current EGL context");
- CLEANUP_GL_AND_RETURN(false);
- }
-
- // We use an EGLImage to access the content of the GraphicBuffer
- // The EGL image is later bound to a 2D texture
- EGLClientBuffer clientBuffer = (EGLClientBuffer) buffer->getNativeBuffer();
- EGLint imageAttrs[] = { EGL_IMAGE_PRESERVED_KHR, EGL_TRUE, EGL_NONE };
- image = eglCreateImageKHR(display, EGL_NO_CONTEXT,
- EGL_NATIVE_BUFFER_ANDROID, clientBuffer, imageAttrs);
- if (image == EGL_NO_IMAGE_KHR) {
- ALOGW("Could not create EGL image");
- CLEANUP_GL_AND_RETURN(false);
- }
-
- glGenTextures(1, &texture);
- glBindTexture(GL_TEXTURE_2D, texture);
- glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image);
- if (glGetError() != GL_NO_ERROR) {
- ALOGW("Could not create/bind texture");
- CLEANUP_GL_AND_RETURN(false);
- }
-
- // Upload the content of the bitmap in the GraphicBuffer
- glPixelStorei(GL_UNPACK_ALIGNMENT, bitmap->bytesPerPixel());
- glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, bitmap->width(), bitmap->height(),
- GL_RGBA, GL_UNSIGNED_BYTE, bitmap->getPixels());
- if (glGetError() != GL_NO_ERROR) {
- ALOGW("Could not upload to texture");
- CLEANUP_GL_AND_RETURN(false);
- }
-
- // The fence is used to wait for the texture upload to finish
- // properly. We cannot rely on glFlush() and glFinish() as
- // some drivers completely ignore these API calls
- fence = eglCreateSyncKHR(display, EGL_SYNC_FENCE_KHR, NULL);
- if (fence == EGL_NO_SYNC_KHR) {
- ALOGW("Could not create sync fence %#x", eglGetError());
- CLEANUP_GL_AND_RETURN(false);
- }
-
- // The flag EGL_SYNC_FLUSH_COMMANDS_BIT_KHR will trigger a
- // pipeline flush (similar to what a glFlush() would do.)
- EGLint waitStatus = eglClientWaitSyncKHR(display, fence,
- EGL_SYNC_FLUSH_COMMANDS_BIT_KHR, FENCE_TIMEOUT);
- if (waitStatus != EGL_CONDITION_SATISFIED_KHR) {
- ALOGW("Failed to wait for the fence %#x", eglGetError());
- CLEANUP_GL_AND_RETURN(false);
- }
-
- CLEANUP_GL_AND_RETURN(true);
- }
-
- return false;
-}
-
-// ----------------------------------------------------------------------------
-// JNI Glue
-// ----------------------------------------------------------------------------
-
-#define FIND_CLASS(var, className) \
- var = env->FindClass(className); \
- LOG_FATAL_IF(! var, "Unable to find class " className);
-
-#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \
- var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \
- LOG_FATAL_IF(! var, "Unable to find field " fieldName);
-
-const char* const kClassPathName = "com/android/server/AssetAtlasService";
-
-static JNINativeMethod gMethods[] = {
- { "nAcquireAtlasCanvas", "(Landroid/graphics/Canvas;II)I",
- (void*) com_android_server_AssetAtlasService_acquireCanvas },
- { "nReleaseAtlasCanvas", "(Landroid/graphics/Canvas;I)V",
- (void*) com_android_server_AssetAtlasService_releaseCanvas },
- { "nUploadAtlas", "(Landroid/view/GraphicBuffer;I)Z",
- (void*) com_android_server_AssetAtlasService_upload },
-};
-
-int register_android_server_AssetAtlasService(JNIEnv* env) {
- jclass clazz;
-
- FIND_CLASS(clazz, "android/graphics/Canvas");
- GET_FIELD_ID(gCanvasClassInfo.mFinalizer, clazz, "mFinalizer",
- "Landroid/graphics/Canvas$CanvasFinalizer;");
- GET_FIELD_ID(gCanvasClassInfo.mNativeCanvas, clazz, "mNativeCanvas", "I");
-
- FIND_CLASS(clazz, "android/graphics/Canvas$CanvasFinalizer");
- GET_FIELD_ID(gCanvasFinalizerClassInfo.mNativeCanvas, clazz, "mNativeCanvas", "I");
-
- return jniRegisterNativeMethods(env, kClassPathName, gMethods, NELEM(gMethods));
-}
-
-};
diff --git a/services/jni/com_android_server_ConsumerIrService.cpp b/services/jni/com_android_server_ConsumerIrService.cpp
deleted file mode 100644
index 004c0aa..0000000
--- a/services/jni/com_android_server_ConsumerIrService.cpp
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "ConsumerIrService"
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-
-#include <stdlib.h>
-#include <utils/misc.h>
-#include <utils/Log.h>
-#include <hardware/hardware.h>
-#include <hardware/consumerir.h>
-#include <ScopedPrimitiveArray.h>
-
-namespace android {
-
-static jint halOpen(JNIEnv *env, jobject obj) {
- hw_module_t const* module;
- consumerir_device_t *dev;
- int err;
-
- err = hw_get_module(CONSUMERIR_HARDWARE_MODULE_ID, &module);
- if (err != 0) {
- ALOGE("Can't open consumer IR HW Module, error: %d", err);
- return 0;
- }
-
- err = module->methods->open(module, CONSUMERIR_TRANSMITTER,
- (hw_device_t **) &dev);
- if (err < 0) {
- ALOGE("Can't open consumer IR transmitter, error: %d", err);
- return 0;
- }
-
- return reinterpret_cast<jint>(dev);
-}
-
-static jint halTransmit(JNIEnv *env, jobject obj, jint halObject,
- jint carrierFrequency, jintArray pattern) {
- int ret;
-
- consumerir_device_t *dev = reinterpret_cast<consumerir_device_t*>(halObject);
- ScopedIntArrayRO cPattern(env, pattern);
- if (cPattern.get() == NULL) {
- return -EINVAL;
- }
- jsize patternLength = cPattern.size();
-
- ret = dev->transmit(dev, carrierFrequency, cPattern.get(), patternLength);
-
- return reinterpret_cast<jint>(ret);
-}
-
-static jintArray halGetCarrierFrequencies(JNIEnv *env, jobject obj,
- jint halObject) {
- consumerir_device_t *dev = (consumerir_device_t *) halObject;
- consumerir_freq_range_t *ranges;
- int len;
-
- len = dev->get_num_carrier_freqs(dev);
- if (len <= 0)
- return NULL;
-
- ranges = new consumerir_freq_range_t[len];
-
- len = dev->get_carrier_freqs(dev, len, ranges);
- if (len <= 0) {
- delete[] ranges;
- return NULL;
- }
-
- int i;
- ScopedIntArrayRW freqsOut(env, env->NewIntArray(len*2));
- jint *arr = freqsOut.get();
- if (arr == NULL) {
- delete[] ranges;
- return NULL;
- }
- for (i = 0; i < len; i++) {
- arr[i*2] = ranges[i].min;
- arr[i*2+1] = ranges[i].max;
- }
-
- delete[] ranges;
- return freqsOut.getJavaArray();
-}
-
-static JNINativeMethod method_table[] = {
- { "halOpen", "()I", (void *)halOpen },
- { "halTransmit", "(II[I)I", (void *)halTransmit },
- { "halGetCarrierFrequencies", "(I)[I", (void *)halGetCarrierFrequencies},
-};
-
-int register_android_server_ConsumerIrService(JNIEnv *env) {
- return jniRegisterNativeMethods(env, "com/android/server/ConsumerIrService",
- method_table, NELEM(method_table));
-}
-
-};
diff --git a/services/jni/com_android_server_LightsService.cpp b/services/jni/com_android_server_LightsService.cpp
deleted file mode 100644
index 401e1aa..0000000
--- a/services/jni/com_android_server_LightsService.cpp
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "LightsService"
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-
-#include <utils/misc.h>
-#include <utils/Log.h>
-#include <hardware/hardware.h>
-#include <hardware/lights.h>
-
-#include <stdio.h>
-
-namespace android
-{
-
-// These values must correspond with the LIGHT_ID constants in
-// LightsService.java
-enum {
- LIGHT_INDEX_BACKLIGHT = 0,
- LIGHT_INDEX_KEYBOARD = 1,
- LIGHT_INDEX_BUTTONS = 2,
- LIGHT_INDEX_BATTERY = 3,
- LIGHT_INDEX_NOTIFICATIONS = 4,
- LIGHT_INDEX_ATTENTION = 5,
- LIGHT_INDEX_BLUETOOTH = 6,
- LIGHT_INDEX_WIFI = 7,
- LIGHT_COUNT
-};
-
-struct Devices {
- light_device_t* lights[LIGHT_COUNT];
-};
-
-static light_device_t* get_device(hw_module_t* module, char const* name)
-{
- int err;
- hw_device_t* device;
- err = module->methods->open(module, name, &device);
- if (err == 0) {
- return (light_device_t*)device;
- } else {
- return NULL;
- }
-}
-
-static jint init_native(JNIEnv *env, jobject clazz)
-{
- int err;
- hw_module_t* module;
- Devices* devices;
-
- devices = (Devices*)malloc(sizeof(Devices));
-
- err = hw_get_module(LIGHTS_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
- if (err == 0) {
- devices->lights[LIGHT_INDEX_BACKLIGHT]
- = get_device(module, LIGHT_ID_BACKLIGHT);
- devices->lights[LIGHT_INDEX_KEYBOARD]
- = get_device(module, LIGHT_ID_KEYBOARD);
- devices->lights[LIGHT_INDEX_BUTTONS]
- = get_device(module, LIGHT_ID_BUTTONS);
- devices->lights[LIGHT_INDEX_BATTERY]
- = get_device(module, LIGHT_ID_BATTERY);
- devices->lights[LIGHT_INDEX_NOTIFICATIONS]
- = get_device(module, LIGHT_ID_NOTIFICATIONS);
- devices->lights[LIGHT_INDEX_ATTENTION]
- = get_device(module, LIGHT_ID_ATTENTION);
- devices->lights[LIGHT_INDEX_BLUETOOTH]
- = get_device(module, LIGHT_ID_BLUETOOTH);
- devices->lights[LIGHT_INDEX_WIFI]
- = get_device(module, LIGHT_ID_WIFI);
- } else {
- memset(devices, 0, sizeof(Devices));
- }
-
- return (jint)devices;
-}
-
-static void finalize_native(JNIEnv *env, jobject clazz, int ptr)
-{
- Devices* devices = (Devices*)ptr;
- if (devices == NULL) {
- return;
- }
-
- free(devices);
-}
-
-static void setLight_native(JNIEnv *env, jobject clazz, int ptr,
- int light, int colorARGB, int flashMode, int onMS, int offMS, int brightnessMode)
-{
- Devices* devices = (Devices*)ptr;
- light_state_t state;
-
- if (light < 0 || light >= LIGHT_COUNT || devices->lights[light] == NULL) {
- return ;
- }
-
- memset(&state, 0, sizeof(light_state_t));
- state.color = colorARGB;
- state.flashMode = flashMode;
- state.flashOnMS = onMS;
- state.flashOffMS = offMS;
- state.brightnessMode = brightnessMode;
-
- {
- ALOGD_IF_SLOW(50, "Excessive delay setting light");
- devices->lights[light]->set_light(devices->lights[light], &state);
- }
-}
-
-static JNINativeMethod method_table[] = {
- { "init_native", "()I", (void*)init_native },
- { "finalize_native", "(I)V", (void*)finalize_native },
- { "setLight_native", "(IIIIIII)V", (void*)setLight_native },
-};
-
-int register_android_server_LightsService(JNIEnv *env)
-{
- return jniRegisterNativeMethods(env, "com/android/server/LightsService",
- method_table, NELEM(method_table));
-}
-
-};
diff --git a/services/jni/com_android_server_SerialService.cpp b/services/jni/com_android_server_SerialService.cpp
deleted file mode 100644
index b889b78..0000000
--- a/services/jni/com_android_server_SerialService.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "SerialServiceJNI"
-#include "utils/Log.h"
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-namespace android
-{
-
-static struct parcel_file_descriptor_offsets_t
-{
- jclass mClass;
- jmethodID mConstructor;
-} gParcelFileDescriptorOffsets;
-
-static jobject android_server_SerialService_open(JNIEnv *env, jobject thiz, jstring path)
-{
- const char *pathStr = env->GetStringUTFChars(path, NULL);
-
- int fd = open(pathStr, O_RDWR | O_NOCTTY);
- if (fd < 0) {
- ALOGE("could not open %s", pathStr);
- env->ReleaseStringUTFChars(path, pathStr);
- return NULL;
- }
- env->ReleaseStringUTFChars(path, pathStr);
-
- jobject fileDescriptor = jniCreateFileDescriptor(env, fd);
- if (fileDescriptor == NULL) {
- return NULL;
- }
- return env->NewObject(gParcelFileDescriptorOffsets.mClass,
- gParcelFileDescriptorOffsets.mConstructor, fileDescriptor);
-}
-
-
-static JNINativeMethod method_table[] = {
- { "native_open", "(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;",
- (void*)android_server_SerialService_open },
-};
-
-int register_android_server_SerialService(JNIEnv *env)
-{
- jclass clazz = env->FindClass("com/android/server/SerialService");
- if (clazz == NULL) {
- ALOGE("Can't find com/android/server/SerialService");
- return -1;
- }
-
- clazz = env->FindClass("android/os/ParcelFileDescriptor");
- LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.ParcelFileDescriptor");
- gParcelFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz);
- gParcelFileDescriptorOffsets.mConstructor = env->GetMethodID(clazz, "<init>", "(Ljava/io/FileDescriptor;)V");
- LOG_FATAL_IF(gParcelFileDescriptorOffsets.mConstructor == NULL,
- "Unable to find constructor for android.os.ParcelFileDescriptor");
-
- return jniRegisterNativeMethods(env, "com/android/server/SerialService",
- method_table, NELEM(method_table));
-}
-
-};
diff --git a/services/jni/com_android_server_SystemServer.cpp b/services/jni/com_android_server_SystemServer.cpp
deleted file mode 100644
index 0625544..0000000
--- a/services/jni/com_android_server_SystemServer.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (C) 2007 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <jni.h>
-#include <JNIHelp.h>
-
-#include <sensorservice/SensorService.h>
-
-#include <cutils/properties.h>
-#include <utils/Log.h>
-#include <utils/misc.h>
-
-namespace android {
-
-static void android_server_SystemServer_nativeInit(JNIEnv* env, jobject clazz) {
- char propBuf[PROPERTY_VALUE_MAX];
- property_get("system_init.startsensorservice", propBuf, "1");
- if (strcmp(propBuf, "1") == 0) {
- // Start the sensor service
- SensorService::instantiate();
- }
-}
-
-/*
- * JNI registration.
- */
-static JNINativeMethod gMethods[] = {
- /* name, signature, funcPtr */
- { "nativeInit", "()V", (void*) android_server_SystemServer_nativeInit },
-};
-
-int register_android_server_SystemServer(JNIEnv* env)
-{
- return jniRegisterNativeMethods(env, "com/android/server/SystemServer",
- gMethods, NELEM(gMethods));
-}
-
-}; // namespace android
diff --git a/services/jni/com_android_server_UsbDeviceManager.cpp b/services/jni/com_android_server_UsbDeviceManager.cpp
deleted file mode 100644
index 3551733..0000000
--- a/services/jni/com_android_server_UsbDeviceManager.cpp
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "UsbDeviceManagerJNI"
-#include "utils/Log.h"
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-#include "android_runtime/Log.h"
-
-#include <stdio.h>
-#include <asm/byteorder.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-#include <linux/usb/f_accessory.h>
-
-#define DRIVER_NAME "/dev/usb_accessory"
-
-namespace android
-{
-
-static struct parcel_file_descriptor_offsets_t
-{
- jclass mClass;
- jmethodID mConstructor;
-} gParcelFileDescriptorOffsets;
-
-static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
- if (env->ExceptionCheck()) {
- ALOGE("An exception was thrown by callback '%s'.", methodName);
- LOGE_EX(env);
- env->ExceptionClear();
- }
-}
-
-static void set_accessory_string(JNIEnv *env, int fd, int cmd, jobjectArray strArray, int index)
-{
- char buffer[256];
-
- buffer[0] = 0;
- int length = ioctl(fd, cmd, buffer);
- if (buffer[0]) {
- jstring obj = env->NewStringUTF(buffer);
- env->SetObjectArrayElement(strArray, index, obj);
- env->DeleteLocalRef(obj);
- }
-}
-
-
-static jobjectArray android_server_UsbDeviceManager_getAccessoryStrings(JNIEnv *env, jobject thiz)
-{
- int fd = open(DRIVER_NAME, O_RDWR);
- if (fd < 0) {
- ALOGE("could not open %s", DRIVER_NAME);
- return NULL;
- }
- jclass stringClass = env->FindClass("java/lang/String");
- jobjectArray strArray = env->NewObjectArray(6, stringClass, NULL);
- if (!strArray) goto out;
- set_accessory_string(env, fd, ACCESSORY_GET_STRING_MANUFACTURER, strArray, 0);
- set_accessory_string(env, fd, ACCESSORY_GET_STRING_MODEL, strArray, 1);
- set_accessory_string(env, fd, ACCESSORY_GET_STRING_DESCRIPTION, strArray, 2);
- set_accessory_string(env, fd, ACCESSORY_GET_STRING_VERSION, strArray, 3);
- set_accessory_string(env, fd, ACCESSORY_GET_STRING_URI, strArray, 4);
- set_accessory_string(env, fd, ACCESSORY_GET_STRING_SERIAL, strArray, 5);
-
-out:
- close(fd);
- return strArray;
-}
-
-static jobject android_server_UsbDeviceManager_openAccessory(JNIEnv *env, jobject thiz)
-{
- int fd = open(DRIVER_NAME, O_RDWR);
- if (fd < 0) {
- ALOGE("could not open %s", DRIVER_NAME);
- return NULL;
- }
- jobject fileDescriptor = jniCreateFileDescriptor(env, fd);
- if (fileDescriptor == NULL) {
- return NULL;
- }
- return env->NewObject(gParcelFileDescriptorOffsets.mClass,
- gParcelFileDescriptorOffsets.mConstructor, fileDescriptor);
-}
-
-static jboolean android_server_UsbDeviceManager_isStartRequested(JNIEnv *env, jobject thiz)
-{
- int fd = open(DRIVER_NAME, O_RDWR);
- if (fd < 0) {
- ALOGE("could not open %s", DRIVER_NAME);
- return false;
- }
- int result = ioctl(fd, ACCESSORY_IS_START_REQUESTED);
- close(fd);
- return (result == 1);
-}
-
-static jint android_server_UsbDeviceManager_getAudioMode(JNIEnv *env, jobject thiz)
-{
- int fd = open(DRIVER_NAME, O_RDWR);
- if (fd < 0) {
- ALOGE("could not open %s", DRIVER_NAME);
- return false;
- }
- int result = ioctl(fd, ACCESSORY_GET_AUDIO_MODE);
- close(fd);
- return result;
-}
-
-static JNINativeMethod method_table[] = {
- { "nativeGetAccessoryStrings", "()[Ljava/lang/String;",
- (void*)android_server_UsbDeviceManager_getAccessoryStrings },
- { "nativeOpenAccessory", "()Landroid/os/ParcelFileDescriptor;",
- (void*)android_server_UsbDeviceManager_openAccessory },
- { "nativeIsStartRequested", "()Z",
- (void*)android_server_UsbDeviceManager_isStartRequested },
- { "nativeGetAudioMode", "()I",
- (void*)android_server_UsbDeviceManager_getAudioMode },
-};
-
-int register_android_server_UsbDeviceManager(JNIEnv *env)
-{
- jclass clazz = env->FindClass("com/android/server/usb/UsbDeviceManager");
- if (clazz == NULL) {
- ALOGE("Can't find com/android/server/usb/UsbDeviceManager");
- return -1;
- }
-
- clazz = env->FindClass("android/os/ParcelFileDescriptor");
- LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.ParcelFileDescriptor");
- gParcelFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz);
- gParcelFileDescriptorOffsets.mConstructor = env->GetMethodID(clazz, "<init>", "(Ljava/io/FileDescriptor;)V");
- LOG_FATAL_IF(gParcelFileDescriptorOffsets.mConstructor == NULL,
- "Unable to find constructor for android.os.ParcelFileDescriptor");
-
- return jniRegisterNativeMethods(env, "com/android/server/usb/UsbDeviceManager",
- method_table, NELEM(method_table));
-}
-
-};
diff --git a/services/jni/com_android_server_UsbHostManager.cpp b/services/jni/com_android_server_UsbHostManager.cpp
deleted file mode 100644
index 639790b..0000000
--- a/services/jni/com_android_server_UsbHostManager.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "UsbHostManagerJNI"
-#include "utils/Log.h"
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-#include "android_runtime/Log.h"
-#include "utils/Vector.h"
-
-#include <usbhost/usbhost.h>
-
-#include <stdio.h>
-#include <asm/byteorder.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <sys/ioctl.h>
-
-namespace android
-{
-
-static struct parcel_file_descriptor_offsets_t
-{
- jclass mClass;
- jmethodID mConstructor;
-} gParcelFileDescriptorOffsets;
-
-static jmethodID method_usbDeviceAdded;
-static jmethodID method_usbDeviceRemoved;
-
-static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
- if (env->ExceptionCheck()) {
- ALOGE("An exception was thrown by callback '%s'.", methodName);
- LOGE_EX(env);
- env->ExceptionClear();
- }
-}
-
-static int usb_device_added(const char *devname, void* client_data) {
- struct usb_descriptor_header* desc;
- struct usb_descriptor_iter iter;
-
- struct usb_device *device = usb_device_open(devname);
- if (!device) {
- ALOGE("usb_device_open failed\n");
- return 0;
- }
-
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- jobject thiz = (jobject)client_data;
- Vector<int> interfaceValues;
- Vector<int> endpointValues;
- const usb_device_descriptor* deviceDesc = usb_device_get_device_descriptor(device);
-
- uint16_t vendorId = usb_device_get_vendor_id(device);
- uint16_t productId = usb_device_get_product_id(device);
- uint8_t deviceClass = deviceDesc->bDeviceClass;
- uint8_t deviceSubClass = deviceDesc->bDeviceSubClass;
- uint8_t protocol = deviceDesc->bDeviceProtocol;
-
- usb_descriptor_iter_init(device, &iter);
-
- while ((desc = usb_descriptor_iter_next(&iter)) != NULL) {
- if (desc->bDescriptorType == USB_DT_INTERFACE) {
- struct usb_interface_descriptor *interface = (struct usb_interface_descriptor *)desc;
-
- // push class, subclass, protocol and number of endpoints into interfaceValues vector
- interfaceValues.add(interface->bInterfaceNumber);
- interfaceValues.add(interface->bInterfaceClass);
- interfaceValues.add(interface->bInterfaceSubClass);
- interfaceValues.add(interface->bInterfaceProtocol);
- interfaceValues.add(interface->bNumEndpoints);
- } else if (desc->bDescriptorType == USB_DT_ENDPOINT) {
- struct usb_endpoint_descriptor *endpoint = (struct usb_endpoint_descriptor *)desc;
-
- // push address, attributes, max packet size and interval into endpointValues vector
- endpointValues.add(endpoint->bEndpointAddress);
- endpointValues.add(endpoint->bmAttributes);
- endpointValues.add(__le16_to_cpu(endpoint->wMaxPacketSize));
- endpointValues.add(endpoint->bInterval);
- }
- }
-
- usb_device_close(device);
-
- // handle generic device notification
- int length = interfaceValues.size();
- jintArray interfaceArray = env->NewIntArray(length);
- env->SetIntArrayRegion(interfaceArray, 0, length, interfaceValues.array());
-
- length = endpointValues.size();
- jintArray endpointArray = env->NewIntArray(length);
- env->SetIntArrayRegion(endpointArray, 0, length, endpointValues.array());
-
- jstring deviceName = env->NewStringUTF(devname);
- env->CallVoidMethod(thiz, method_usbDeviceAdded,
- deviceName, vendorId, productId, deviceClass,
- deviceSubClass, protocol, interfaceArray, endpointArray);
-
- env->DeleteLocalRef(interfaceArray);
- env->DeleteLocalRef(endpointArray);
- env->DeleteLocalRef(deviceName);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-
- return 0;
-}
-
-static int usb_device_removed(const char *devname, void* client_data) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- jobject thiz = (jobject)client_data;
-
- jstring deviceName = env->NewStringUTF(devname);
- env->CallVoidMethod(thiz, method_usbDeviceRemoved, deviceName);
- env->DeleteLocalRef(deviceName);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
- return 0;
-}
-
-static void android_server_UsbHostManager_monitorUsbHostBus(JNIEnv *env, jobject thiz)
-{
- struct usb_host_context* context = usb_host_init();
- if (!context) {
- ALOGE("usb_host_init failed");
- return;
- }
- // this will never return so it is safe to pass thiz directly
- usb_host_run(context, usb_device_added, usb_device_removed, NULL, (void *)thiz);
-}
-
-static jobject android_server_UsbHostManager_openDevice(JNIEnv *env, jobject thiz, jstring deviceName)
-{
- const char *deviceNameStr = env->GetStringUTFChars(deviceName, NULL);
- struct usb_device* device = usb_device_open(deviceNameStr);
- env->ReleaseStringUTFChars(deviceName, deviceNameStr);
-
- if (!device)
- return NULL;
-
- int fd = usb_device_get_fd(device);
- if (fd < 0)
- return NULL;
- int newFD = dup(fd);
- usb_device_close(device);
-
- jobject fileDescriptor = jniCreateFileDescriptor(env, newFD);
- if (fileDescriptor == NULL) {
- return NULL;
- }
- return env->NewObject(gParcelFileDescriptorOffsets.mClass,
- gParcelFileDescriptorOffsets.mConstructor, fileDescriptor);
-}
-
-static JNINativeMethod method_table[] = {
- { "monitorUsbHostBus", "()V", (void*)android_server_UsbHostManager_monitorUsbHostBus },
- { "nativeOpenDevice", "(Ljava/lang/String;)Landroid/os/ParcelFileDescriptor;",
- (void*)android_server_UsbHostManager_openDevice },
-};
-
-int register_android_server_UsbHostManager(JNIEnv *env)
-{
- jclass clazz = env->FindClass("com/android/server/usb/UsbHostManager");
- if (clazz == NULL) {
- ALOGE("Can't find com/android/server/usb/UsbHostManager");
- return -1;
- }
- method_usbDeviceAdded = env->GetMethodID(clazz, "usbDeviceAdded", "(Ljava/lang/String;IIIII[I[I)V");
- if (method_usbDeviceAdded == NULL) {
- ALOGE("Can't find usbDeviceAdded");
- return -1;
- }
- method_usbDeviceRemoved = env->GetMethodID(clazz, "usbDeviceRemoved", "(Ljava/lang/String;)V");
- if (method_usbDeviceRemoved == NULL) {
- ALOGE("Can't find usbDeviceRemoved");
- return -1;
- }
-
- clazz = env->FindClass("android/os/ParcelFileDescriptor");
- LOG_FATAL_IF(clazz == NULL, "Unable to find class android.os.ParcelFileDescriptor");
- gParcelFileDescriptorOffsets.mClass = (jclass) env->NewGlobalRef(clazz);
- gParcelFileDescriptorOffsets.mConstructor = env->GetMethodID(clazz, "<init>", "(Ljava/io/FileDescriptor;)V");
- LOG_FATAL_IF(gParcelFileDescriptorOffsets.mConstructor == NULL,
- "Unable to find constructor for android.os.ParcelFileDescriptor");
-
- return jniRegisterNativeMethods(env, "com/android/server/usb/UsbHostManager",
- method_table, NELEM(method_table));
-}
-
-};
diff --git a/services/jni/com_android_server_VibratorService.cpp b/services/jni/com_android_server_VibratorService.cpp
deleted file mode 100644
index 2b3f74a..0000000
--- a/services/jni/com_android_server_VibratorService.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "VibratorService"
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-
-#include <utils/misc.h>
-#include <utils/Log.h>
-#include <hardware_legacy/vibrator.h>
-
-#include <stdio.h>
-
-namespace android
-{
-
-static jboolean vibratorExists(JNIEnv *env, jobject clazz)
-{
- return vibrator_exists() > 0 ? JNI_TRUE : JNI_FALSE;
-}
-
-static void vibratorOn(JNIEnv *env, jobject clazz, jlong timeout_ms)
-{
- // ALOGI("vibratorOn\n");
- vibrator_on(timeout_ms);
-}
-
-static void vibratorOff(JNIEnv *env, jobject clazz)
-{
- // ALOGI("vibratorOff\n");
- vibrator_off();
-}
-
-static JNINativeMethod method_table[] = {
- { "vibratorExists", "()Z", (void*)vibratorExists },
- { "vibratorOn", "(J)V", (void*)vibratorOn },
- { "vibratorOff", "()V", (void*)vibratorOff }
-};
-
-int register_android_server_VibratorService(JNIEnv *env)
-{
- return jniRegisterNativeMethods(env, "com/android/server/VibratorService",
- method_table, NELEM(method_table));
-}
-
-};
diff --git a/services/jni/com_android_server_connectivity_Vpn.cpp b/services/jni/com_android_server_connectivity_Vpn.cpp
deleted file mode 100644
index bf34a74..0000000
--- a/services/jni/com_android_server_connectivity_Vpn.cpp
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_NDEBUG 0
-
-#define LOG_TAG "VpnJni"
-#include <cutils/log.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <sys/ioctl.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <errno.h>
-#include <fcntl.h>
-
-#include <linux/if.h>
-#include <linux/if_tun.h>
-#include <linux/route.h>
-#include <linux/ipv6_route.h>
-
-#include "jni.h"
-#include "JNIHelp.h"
-
-namespace android
-{
-
-static int inet4 = -1;
-static int inet6 = -1;
-
-static inline in_addr_t *as_in_addr(sockaddr *sa) {
- return &((sockaddr_in *)sa)->sin_addr.s_addr;
-}
-
-//------------------------------------------------------------------------------
-
-#define SYSTEM_ERROR -1
-#define BAD_ARGUMENT -2
-
-static int create_interface(int mtu)
-{
- int tun = open("/dev/tun", O_RDWR | O_NONBLOCK);
-
- ifreq ifr4;
- memset(&ifr4, 0, sizeof(ifr4));
-
- // Allocate interface.
- ifr4.ifr_flags = IFF_TUN | IFF_NO_PI;
- if (ioctl(tun, TUNSETIFF, &ifr4)) {
- ALOGE("Cannot allocate TUN: %s", strerror(errno));
- goto error;
- }
-
- // Activate interface.
- ifr4.ifr_flags = IFF_UP;
- if (ioctl(inet4, SIOCSIFFLAGS, &ifr4)) {
- ALOGE("Cannot activate %s: %s", ifr4.ifr_name, strerror(errno));
- goto error;
- }
-
- // Set MTU if it is specified.
- ifr4.ifr_mtu = mtu;
- if (mtu > 0 && ioctl(inet4, SIOCSIFMTU, &ifr4)) {
- ALOGE("Cannot set MTU on %s: %s", ifr4.ifr_name, strerror(errno));
- goto error;
- }
-
- return tun;
-
-error:
- close(tun);
- return SYSTEM_ERROR;
-}
-
-static int get_interface_name(char *name, int tun)
-{
- ifreq ifr4;
- if (ioctl(tun, TUNGETIFF, &ifr4)) {
- ALOGE("Cannot get interface name: %s", strerror(errno));
- return SYSTEM_ERROR;
- }
- strncpy(name, ifr4.ifr_name, IFNAMSIZ);
- return 0;
-}
-
-static int get_interface_index(const char *name)
-{
- ifreq ifr4;
- strncpy(ifr4.ifr_name, name, IFNAMSIZ);
- if (ioctl(inet4, SIOGIFINDEX, &ifr4)) {
- ALOGE("Cannot get index of %s: %s", name, strerror(errno));
- return SYSTEM_ERROR;
- }
- return ifr4.ifr_ifindex;
-}
-
-static int set_addresses(const char *name, const char *addresses)
-{
- int index = get_interface_index(name);
- if (index < 0) {
- return index;
- }
-
- ifreq ifr4;
- memset(&ifr4, 0, sizeof(ifr4));
- strncpy(ifr4.ifr_name, name, IFNAMSIZ);
- ifr4.ifr_addr.sa_family = AF_INET;
- ifr4.ifr_netmask.sa_family = AF_INET;
-
- in6_ifreq ifr6;
- memset(&ifr6, 0, sizeof(ifr6));
- ifr6.ifr6_ifindex = index;
-
- char address[65];
- int prefix;
- int chars;
- int count = 0;
-
- while (sscanf(addresses, " %64[^/]/%d %n", address, &prefix, &chars) == 2) {
- addresses += chars;
-
- if (strchr(address, ':')) {
- // Add an IPv6 address.
- if (inet_pton(AF_INET6, address, &ifr6.ifr6_addr) != 1 ||
- prefix < 0 || prefix > 128) {
- count = BAD_ARGUMENT;
- break;
- }
-
- ifr6.ifr6_prefixlen = prefix;
- if (ioctl(inet6, SIOCSIFADDR, &ifr6)) {
- count = (errno == EINVAL) ? BAD_ARGUMENT : SYSTEM_ERROR;
- break;
- }
- } else {
- // Add an IPv4 address.
- if (inet_pton(AF_INET, address, as_in_addr(&ifr4.ifr_addr)) != 1 ||
- prefix < 0 || prefix > 32) {
- count = BAD_ARGUMENT;
- break;
- }
-
- if (count) {
- sprintf(ifr4.ifr_name, "%s:%d", name, count);
- }
- if (ioctl(inet4, SIOCSIFADDR, &ifr4)) {
- count = (errno == EINVAL) ? BAD_ARGUMENT : SYSTEM_ERROR;
- break;
- }
-
- in_addr_t mask = prefix ? (~0 << (32 - prefix)) : 0;
- *as_in_addr(&ifr4.ifr_netmask) = htonl(mask);
- if (ioctl(inet4, SIOCSIFNETMASK, &ifr4)) {
- count = (errno == EINVAL) ? BAD_ARGUMENT : SYSTEM_ERROR;
- break;
- }
- }
- ALOGD("Address added on %s: %s/%d", name, address, prefix);
- ++count;
- }
-
- if (count == BAD_ARGUMENT) {
- ALOGE("Invalid address: %s/%d", address, prefix);
- } else if (count == SYSTEM_ERROR) {
- ALOGE("Cannot add address: %s/%d: %s", address, prefix, strerror(errno));
- } else if (*addresses) {
- ALOGE("Invalid address: %s", addresses);
- count = BAD_ARGUMENT;
- }
-
- return count;
-}
-
-static int set_routes(const char *name, const char *routes)
-{
- int index = get_interface_index(name);
- if (index < 0) {
- return index;
- }
-
- rtentry rt4;
- memset(&rt4, 0, sizeof(rt4));
- rt4.rt_dev = (char *)name;
- rt4.rt_flags = RTF_UP;
- rt4.rt_dst.sa_family = AF_INET;
- rt4.rt_genmask.sa_family = AF_INET;
-
- in6_rtmsg rt6;
- memset(&rt6, 0, sizeof(rt6));
- rt6.rtmsg_ifindex = index;
- rt6.rtmsg_flags = RTF_UP;
-
- char address[65];
- int prefix;
- int chars;
- int count = 0;
-
- while (sscanf(routes, " %64[^/]/%d %n", address, &prefix, &chars) == 2) {
- routes += chars;
-
- if (strchr(address, ':')) {
- // Add an IPv6 route.
- if (inet_pton(AF_INET6, address, &rt6.rtmsg_dst) != 1 ||
- prefix < 0 || prefix > 128) {
- count = BAD_ARGUMENT;
- break;
- }
-
- rt6.rtmsg_dst_len = prefix ? prefix : 1;
- if (ioctl(inet6, SIOCADDRT, &rt6) && errno != EEXIST) {
- count = (errno == EINVAL) ? BAD_ARGUMENT : SYSTEM_ERROR;
- break;
- }
-
- if (!prefix) {
- // Split the route instead of replacing the default route.
- rt6.rtmsg_dst.s6_addr[0] ^= 0x80;
- if (ioctl(inet6, SIOCADDRT, &rt6) && errno != EEXIST) {
- count = SYSTEM_ERROR;
- break;
- }
- }
- } else {
- // Add an IPv4 route.
- if (inet_pton(AF_INET, address, as_in_addr(&rt4.rt_dst)) != 1 ||
- prefix < 0 || prefix > 32) {
- count = BAD_ARGUMENT;
- break;
- }
-
- in_addr_t mask = prefix ? (~0 << (32 - prefix)) : 0x80000000;
- *as_in_addr(&rt4.rt_genmask) = htonl(mask);
- if (ioctl(inet4, SIOCADDRT, &rt4) && errno != EEXIST) {
- count = (errno == EINVAL) ? BAD_ARGUMENT : SYSTEM_ERROR;
- break;
- }
-
- if (!prefix) {
- // Split the route instead of replacing the default route.
- *as_in_addr(&rt4.rt_dst) ^= htonl(0x80000000);
- if (ioctl(inet4, SIOCADDRT, &rt4) && errno != EEXIST) {
- count = SYSTEM_ERROR;
- break;
- }
- }
- }
- ALOGD("Route added on %s: %s/%d", name, address, prefix);
- ++count;
- }
-
- if (count == BAD_ARGUMENT) {
- ALOGE("Invalid route: %s/%d", address, prefix);
- } else if (count == SYSTEM_ERROR) {
- ALOGE("Cannot add route: %s/%d: %s",
- address, prefix, strerror(errno));
- } else if (*routes) {
- ALOGE("Invalid route: %s", routes);
- count = BAD_ARGUMENT;
- }
-
- return count;
-}
-
-static int reset_interface(const char *name)
-{
- ifreq ifr4;
- strncpy(ifr4.ifr_name, name, IFNAMSIZ);
- ifr4.ifr_flags = 0;
-
- if (ioctl(inet4, SIOCSIFFLAGS, &ifr4) && errno != ENODEV) {
- ALOGE("Cannot reset %s: %s", name, strerror(errno));
- return SYSTEM_ERROR;
- }
- return 0;
-}
-
-static int check_interface(const char *name)
-{
- ifreq ifr4;
- strncpy(ifr4.ifr_name, name, IFNAMSIZ);
- ifr4.ifr_flags = 0;
-
- if (ioctl(inet4, SIOCGIFFLAGS, &ifr4) && errno != ENODEV) {
- ALOGE("Cannot check %s: %s", name, strerror(errno));
- }
- return ifr4.ifr_flags;
-}
-
-//------------------------------------------------------------------------------
-
-static void throwException(JNIEnv *env, int error, const char *message)
-{
- if (error == SYSTEM_ERROR) {
- jniThrowException(env, "java/lang/IllegalStateException", message);
- } else {
- jniThrowException(env, "java/lang/IllegalArgumentException", message);
- }
-}
-
-static jint create(JNIEnv *env, jobject thiz, jint mtu)
-{
- int tun = create_interface(mtu);
- if (tun < 0) {
- throwException(env, tun, "Cannot create interface");
- return -1;
- }
- return tun;
-}
-
-static jstring getName(JNIEnv *env, jobject thiz, jint tun)
-{
- char name[IFNAMSIZ];
- if (get_interface_name(name, tun) < 0) {
- throwException(env, SYSTEM_ERROR, "Cannot get interface name");
- return NULL;
- }
- return env->NewStringUTF(name);
-}
-
-static jint setAddresses(JNIEnv *env, jobject thiz, jstring jName,
- jstring jAddresses)
-{
- const char *name = NULL;
- const char *addresses = NULL;
- int count = -1;
-
- name = jName ? env->GetStringUTFChars(jName, NULL) : NULL;
- if (!name) {
- jniThrowNullPointerException(env, "name");
- goto error;
- }
- addresses = jAddresses ? env->GetStringUTFChars(jAddresses, NULL) : NULL;
- if (!addresses) {
- jniThrowNullPointerException(env, "addresses");
- goto error;
- }
- count = set_addresses(name, addresses);
- if (count < 0) {
- throwException(env, count, "Cannot set address");
- count = -1;
- }
-
-error:
- if (name) {
- env->ReleaseStringUTFChars(jName, name);
- }
- if (addresses) {
- env->ReleaseStringUTFChars(jAddresses, addresses);
- }
- return count;
-}
-
-static jint setRoutes(JNIEnv *env, jobject thiz, jstring jName,
- jstring jRoutes)
-{
- const char *name = NULL;
- const char *routes = NULL;
- int count = -1;
-
- name = jName ? env->GetStringUTFChars(jName, NULL) : NULL;
- if (!name) {
- jniThrowNullPointerException(env, "name");
- goto error;
- }
- routes = jRoutes ? env->GetStringUTFChars(jRoutes, NULL) : NULL;
- if (!routes) {
- jniThrowNullPointerException(env, "routes");
- goto error;
- }
- count = set_routes(name, routes);
- if (count < 0) {
- throwException(env, count, "Cannot set route");
- count = -1;
- }
-
-error:
- if (name) {
- env->ReleaseStringUTFChars(jName, name);
- }
- if (routes) {
- env->ReleaseStringUTFChars(jRoutes, routes);
- }
- return count;
-}
-
-static void reset(JNIEnv *env, jobject thiz, jstring jName)
-{
- const char *name = jName ? env->GetStringUTFChars(jName, NULL) : NULL;
- if (!name) {
- jniThrowNullPointerException(env, "name");
- return;
- }
- if (reset_interface(name) < 0) {
- throwException(env, SYSTEM_ERROR, "Cannot reset interface");
- }
- env->ReleaseStringUTFChars(jName, name);
-}
-
-static jint check(JNIEnv *env, jobject thiz, jstring jName)
-{
- const char *name = jName ? env->GetStringUTFChars(jName, NULL) : NULL;
- if (!name) {
- jniThrowNullPointerException(env, "name");
- return 0;
- }
- int flags = check_interface(name);
- env->ReleaseStringUTFChars(jName, name);
- return flags;
-}
-
-//------------------------------------------------------------------------------
-
-static JNINativeMethod gMethods[] = {
- {"jniCreate", "(I)I", (void *)create},
- {"jniGetName", "(I)Ljava/lang/String;", (void *)getName},
- {"jniSetAddresses", "(Ljava/lang/String;Ljava/lang/String;)I", (void *)setAddresses},
- {"jniSetRoutes", "(Ljava/lang/String;Ljava/lang/String;)I", (void *)setRoutes},
- {"jniReset", "(Ljava/lang/String;)V", (void *)reset},
- {"jniCheck", "(Ljava/lang/String;)I", (void *)check},
-};
-
-int register_android_server_connectivity_Vpn(JNIEnv *env)
-{
- if (inet4 == -1) {
- inet4 = socket(AF_INET, SOCK_DGRAM, 0);
- }
- if (inet6 == -1) {
- inet6 = socket(AF_INET6, SOCK_DGRAM, 0);
- }
- return jniRegisterNativeMethods(env, "com/android/server/connectivity/Vpn",
- gMethods, NELEM(gMethods));
-}
-
-};
diff --git a/services/jni/com_android_server_input_InputApplicationHandle.cpp b/services/jni/com_android_server_input_InputApplicationHandle.cpp
deleted file mode 100644
index b9681ab..0000000
--- a/services/jni/com_android_server_input_InputApplicationHandle.cpp
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "InputApplicationHandle"
-
-#include "JNIHelp.h"
-#include "jni.h"
-#include <android_runtime/AndroidRuntime.h>
-#include <utils/threads.h>
-
-#include "com_android_server_input_InputApplicationHandle.h"
-
-namespace android {
-
-static struct {
- jfieldID ptr;
- jfieldID name;
- jfieldID dispatchingTimeoutNanos;
-} gInputApplicationHandleClassInfo;
-
-static Mutex gHandleMutex;
-
-
-// --- NativeInputApplicationHandle ---
-
-NativeInputApplicationHandle::NativeInputApplicationHandle(jweak objWeak) :
- mObjWeak(objWeak) {
-}
-
-NativeInputApplicationHandle::~NativeInputApplicationHandle() {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- env->DeleteWeakGlobalRef(mObjWeak);
-}
-
-jobject NativeInputApplicationHandle::getInputApplicationHandleObjLocalRef(JNIEnv* env) {
- return env->NewLocalRef(mObjWeak);
-}
-
-bool NativeInputApplicationHandle::updateInfo() {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- jobject obj = env->NewLocalRef(mObjWeak);
- if (!obj) {
- releaseInfo();
- return false;
- }
-
- if (!mInfo) {
- mInfo = new InputApplicationInfo();
- }
-
- jstring nameObj = jstring(env->GetObjectField(obj,
- gInputApplicationHandleClassInfo.name));
- if (nameObj) {
- const char* nameStr = env->GetStringUTFChars(nameObj, NULL);
- mInfo->name.setTo(nameStr);
- env->ReleaseStringUTFChars(nameObj, nameStr);
- env->DeleteLocalRef(nameObj);
- } else {
- mInfo->name.setTo("<null>");
- }
-
- mInfo->dispatchingTimeout = env->GetLongField(obj,
- gInputApplicationHandleClassInfo.dispatchingTimeoutNanos);
-
- env->DeleteLocalRef(obj);
- return true;
-}
-
-
-// --- Global functions ---
-
-sp<InputApplicationHandle> android_server_InputApplicationHandle_getHandle(
- JNIEnv* env, jobject inputApplicationHandleObj) {
- if (!inputApplicationHandleObj) {
- return NULL;
- }
-
- AutoMutex _l(gHandleMutex);
-
- int ptr = env->GetIntField(inputApplicationHandleObj, gInputApplicationHandleClassInfo.ptr);
- NativeInputApplicationHandle* handle;
- if (ptr) {
- handle = reinterpret_cast<NativeInputApplicationHandle*>(ptr);
- } else {
- jweak objWeak = env->NewWeakGlobalRef(inputApplicationHandleObj);
- handle = new NativeInputApplicationHandle(objWeak);
- handle->incStrong((void*)android_server_InputApplicationHandle_getHandle);
- env->SetIntField(inputApplicationHandleObj, gInputApplicationHandleClassInfo.ptr,
- reinterpret_cast<int>(handle));
- }
- return handle;
-}
-
-
-// --- JNI ---
-
-static void android_server_InputApplicationHandle_nativeDispose(JNIEnv* env, jobject obj) {
- AutoMutex _l(gHandleMutex);
-
- int ptr = env->GetIntField(obj, gInputApplicationHandleClassInfo.ptr);
- if (ptr) {
- env->SetIntField(obj, gInputApplicationHandleClassInfo.ptr, 0);
-
- NativeInputApplicationHandle* handle = reinterpret_cast<NativeInputApplicationHandle*>(ptr);
- handle->decStrong((void*)android_server_InputApplicationHandle_getHandle);
- }
-}
-
-
-static JNINativeMethod gInputApplicationHandleMethods[] = {
- /* name, signature, funcPtr */
- { "nativeDispose", "()V",
- (void*) android_server_InputApplicationHandle_nativeDispose },
-};
-
-#define FIND_CLASS(var, className) \
- var = env->FindClass(className); \
- LOG_FATAL_IF(! var, "Unable to find class " className);
-
-#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \
- var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \
- LOG_FATAL_IF(! var, "Unable to find field " fieldName);
-
-int register_android_server_InputApplicationHandle(JNIEnv* env) {
- int res = jniRegisterNativeMethods(env, "com/android/server/input/InputApplicationHandle",
- gInputApplicationHandleMethods, NELEM(gInputApplicationHandleMethods));
- LOG_FATAL_IF(res < 0, "Unable to register native methods.");
-
- jclass clazz;
- FIND_CLASS(clazz, "com/android/server/input/InputApplicationHandle");
-
- GET_FIELD_ID(gInputApplicationHandleClassInfo.ptr, clazz,
- "ptr", "I");
-
- GET_FIELD_ID(gInputApplicationHandleClassInfo.name, clazz,
- "name", "Ljava/lang/String;");
-
- GET_FIELD_ID(gInputApplicationHandleClassInfo.dispatchingTimeoutNanos,
- clazz,
- "dispatchingTimeoutNanos", "J");
-
- return 0;
-}
-
-} /* namespace android */
diff --git a/services/jni/com_android_server_input_InputApplicationHandle.h b/services/jni/com_android_server_input_InputApplicationHandle.h
deleted file mode 100644
index 89d48c6..0000000
--- a/services/jni/com_android_server_input_InputApplicationHandle.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _ANDROID_SERVER_INPUT_APPLICATION_HANDLE_H
-#define _ANDROID_SERVER_INPUT_APPLICATION_HANDLE_H
-
-#include <input/InputApplication.h>
-
-#include "JNIHelp.h"
-#include "jni.h"
-
-namespace android {
-
-class NativeInputApplicationHandle : public InputApplicationHandle {
-public:
- NativeInputApplicationHandle(jweak objWeak);
- virtual ~NativeInputApplicationHandle();
-
- jobject getInputApplicationHandleObjLocalRef(JNIEnv* env);
-
- virtual bool updateInfo();
-
-private:
- jweak mObjWeak;
-};
-
-
-extern sp<InputApplicationHandle> android_server_InputApplicationHandle_getHandle(
- JNIEnv* env, jobject inputApplicationHandleObj);
-
-} // namespace android
-
-#endif // _ANDROID_SERVER_INPUT_APPLICATION_HANDLE_H
diff --git a/services/jni/com_android_server_input_InputManagerService.cpp b/services/jni/com_android_server_input_InputManagerService.cpp
deleted file mode 100644
index 4ab2086..0000000
--- a/services/jni/com_android_server_input_InputManagerService.cpp
+++ /dev/null
@@ -1,1464 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "InputManager-JNI"
-
-//#define LOG_NDEBUG 0
-
-// Log debug messages about InputReaderPolicy
-#define DEBUG_INPUT_READER_POLICY 0
-
-// Log debug messages about InputDispatcherPolicy
-#define DEBUG_INPUT_DISPATCHER_POLICY 0
-
-
-#include "JNIHelp.h"
-#include "jni.h"
-#include <limits.h>
-#include <android_runtime/AndroidRuntime.h>
-#include <android_runtime/Log.h>
-
-#include <utils/Log.h>
-#include <utils/Looper.h>
-#include <utils/threads.h>
-
-#include <input/InputManager.h>
-#include <input/PointerController.h>
-#include <input/SpriteController.h>
-
-#include <android_os_MessageQueue.h>
-#include <android_view_InputDevice.h>
-#include <android_view_KeyEvent.h>
-#include <android_view_MotionEvent.h>
-#include <android_view_InputChannel.h>
-#include <android_view_PointerIcon.h>
-#include <android/graphics/GraphicsJNI.h>
-
-#include <ScopedLocalRef.h>
-#include <ScopedUtfChars.h>
-
-#include "com_android_server_power_PowerManagerService.h"
-#include "com_android_server_input_InputApplicationHandle.h"
-#include "com_android_server_input_InputWindowHandle.h"
-
-namespace android {
-
-// The exponent used to calculate the pointer speed scaling factor.
-// The scaling factor is calculated as 2 ^ (speed * exponent),
-// where the speed ranges from -7 to + 7 and is supplied by the user.
-static const float POINTER_SPEED_EXPONENT = 1.0f / 4;
-
-static struct {
- jmethodID notifyConfigurationChanged;
- jmethodID notifyInputDevicesChanged;
- jmethodID notifySwitch;
- jmethodID notifyInputChannelBroken;
- jmethodID notifyANR;
- jmethodID filterInputEvent;
- jmethodID interceptKeyBeforeQueueing;
- jmethodID interceptMotionBeforeQueueingWhenScreenOff;
- jmethodID interceptKeyBeforeDispatching;
- jmethodID dispatchUnhandledKey;
- jmethodID checkInjectEventsPermission;
- jmethodID getVirtualKeyQuietTimeMillis;
- jmethodID getExcludedDeviceNames;
- jmethodID getKeyRepeatTimeout;
- jmethodID getKeyRepeatDelay;
- jmethodID getHoverTapTimeout;
- jmethodID getHoverTapSlop;
- jmethodID getDoubleTapTimeout;
- jmethodID getLongPressTimeout;
- jmethodID getPointerLayer;
- jmethodID getPointerIcon;
- jmethodID getKeyboardLayoutOverlay;
- jmethodID getDeviceAlias;
-} gServiceClassInfo;
-
-static struct {
- jclass clazz;
-} gInputDeviceClassInfo;
-
-static struct {
- jclass clazz;
-} gKeyEventClassInfo;
-
-static struct {
- jclass clazz;
-} gMotionEventClassInfo;
-
-
-// --- Global functions ---
-
-template<typename T>
-inline static T min(const T& a, const T& b) {
- return a < b ? a : b;
-}
-
-template<typename T>
-inline static T max(const T& a, const T& b) {
- return a > b ? a : b;
-}
-
-static jobject getInputApplicationHandleObjLocalRef(JNIEnv* env,
- const sp<InputApplicationHandle>& inputApplicationHandle) {
- if (inputApplicationHandle == NULL) {
- return NULL;
- }
- return static_cast<NativeInputApplicationHandle*>(inputApplicationHandle.get())->
- getInputApplicationHandleObjLocalRef(env);
-}
-
-static jobject getInputWindowHandleObjLocalRef(JNIEnv* env,
- const sp<InputWindowHandle>& inputWindowHandle) {
- if (inputWindowHandle == NULL) {
- return NULL;
- }
- return static_cast<NativeInputWindowHandle*>(inputWindowHandle.get())->
- getInputWindowHandleObjLocalRef(env);
-}
-
-static void loadSystemIconAsSprite(JNIEnv* env, jobject contextObj, int32_t style,
- SpriteIcon* outSpriteIcon) {
- PointerIcon pointerIcon;
- status_t status = android_view_PointerIcon_loadSystemIcon(env,
- contextObj, style, &pointerIcon);
- if (!status) {
- pointerIcon.bitmap.copyTo(&outSpriteIcon->bitmap, SkBitmap::kARGB_8888_Config);
- outSpriteIcon->hotSpotX = pointerIcon.hotSpotX;
- outSpriteIcon->hotSpotY = pointerIcon.hotSpotY;
- }
-}
-
-enum {
- WM_ACTION_PASS_TO_USER = 1,
- WM_ACTION_WAKE_UP = 2,
- WM_ACTION_GO_TO_SLEEP = 4,
-};
-
-
-// --- NativeInputManager ---
-
-class NativeInputManager : public virtual RefBase,
- public virtual InputReaderPolicyInterface,
- public virtual InputDispatcherPolicyInterface,
- public virtual PointerControllerPolicyInterface {
-protected:
- virtual ~NativeInputManager();
-
-public:
- NativeInputManager(jobject contextObj, jobject serviceObj, const sp<Looper>& looper);
-
- inline sp<InputManager> getInputManager() const { return mInputManager; }
-
- void dump(String8& dump);
-
- void setDisplayViewport(bool external, const DisplayViewport& viewport);
-
- status_t registerInputChannel(JNIEnv* env, const sp<InputChannel>& inputChannel,
- const sp<InputWindowHandle>& inputWindowHandle, bool monitor);
- status_t unregisterInputChannel(JNIEnv* env, const sp<InputChannel>& inputChannel);
-
- void setInputWindows(JNIEnv* env, jobjectArray windowHandleObjArray);
- void setFocusedApplication(JNIEnv* env, jobject applicationHandleObj);
- void setInputDispatchMode(bool enabled, bool frozen);
- void setSystemUiVisibility(int32_t visibility);
- void setPointerSpeed(int32_t speed);
- void setShowTouches(bool enabled);
-
- /* --- InputReaderPolicyInterface implementation --- */
-
- virtual void getReaderConfiguration(InputReaderConfiguration* outConfig);
- virtual sp<PointerControllerInterface> obtainPointerController(int32_t deviceId);
- virtual void notifyInputDevicesChanged(const Vector<InputDeviceInfo>& inputDevices);
- virtual sp<KeyCharacterMap> getKeyboardLayoutOverlay(const String8& inputDeviceDescriptor);
- virtual String8 getDeviceAlias(const InputDeviceIdentifier& identifier);
-
- /* --- InputDispatcherPolicyInterface implementation --- */
-
- virtual void notifySwitch(nsecs_t when, uint32_t switchValues, uint32_t switchMask,
- uint32_t policyFlags);
- virtual void notifyConfigurationChanged(nsecs_t when);
- virtual nsecs_t notifyANR(const sp<InputApplicationHandle>& inputApplicationHandle,
- const sp<InputWindowHandle>& inputWindowHandle,
- const String8& reason);
- virtual void notifyInputChannelBroken(const sp<InputWindowHandle>& inputWindowHandle);
- virtual bool filterInputEvent(const InputEvent* inputEvent, uint32_t policyFlags);
- virtual void getDispatcherConfiguration(InputDispatcherConfiguration* outConfig);
- virtual bool isKeyRepeatEnabled();
- virtual void interceptKeyBeforeQueueing(const KeyEvent* keyEvent, uint32_t& policyFlags);
- virtual void interceptMotionBeforeQueueing(nsecs_t when, uint32_t& policyFlags);
- virtual nsecs_t interceptKeyBeforeDispatching(
- const sp<InputWindowHandle>& inputWindowHandle,
- const KeyEvent* keyEvent, uint32_t policyFlags);
- virtual bool dispatchUnhandledKey(const sp<InputWindowHandle>& inputWindowHandle,
- const KeyEvent* keyEvent, uint32_t policyFlags, KeyEvent* outFallbackKeyEvent);
- virtual void pokeUserActivity(nsecs_t eventTime, int32_t eventType);
- virtual bool checkInjectEventsPermissionNonReentrant(
- int32_t injectorPid, int32_t injectorUid);
-
- /* --- PointerControllerPolicyInterface implementation --- */
-
- virtual void loadPointerResources(PointerResources* outResources);
-
-private:
- sp<InputManager> mInputManager;
-
- jobject mContextObj;
- jobject mServiceObj;
- sp<Looper> mLooper;
-
- Mutex mLock;
- struct Locked {
- // Display size information.
- DisplayViewport internalViewport;
- DisplayViewport externalViewport;
-
- // System UI visibility.
- int32_t systemUiVisibility;
-
- // Pointer speed.
- int32_t pointerSpeed;
-
- // True if pointer gestures are enabled.
- bool pointerGesturesEnabled;
-
- // Show touches feature enable/disable.
- bool showTouches;
-
- // Sprite controller singleton, created on first use.
- sp<SpriteController> spriteController;
-
- // Pointer controller singleton, created and destroyed as needed.
- wp<PointerController> pointerController;
- } mLocked;
-
- void updateInactivityTimeoutLocked(const sp<PointerController>& controller);
- void handleInterceptActions(jint wmActions, nsecs_t when, uint32_t& policyFlags);
- void ensureSpriteControllerLocked();
-
- // Power manager interactions.
- bool isScreenOn();
- bool isScreenBright();
-
- static bool checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName);
-
- static inline JNIEnv* jniEnv() {
- return AndroidRuntime::getJNIEnv();
- }
-};
-
-
-
-NativeInputManager::NativeInputManager(jobject contextObj,
- jobject serviceObj, const sp<Looper>& looper) :
- mLooper(looper) {
- JNIEnv* env = jniEnv();
-
- mContextObj = env->NewGlobalRef(contextObj);
- mServiceObj = env->NewGlobalRef(serviceObj);
-
- {
- AutoMutex _l(mLock);
- mLocked.systemUiVisibility = ASYSTEM_UI_VISIBILITY_STATUS_BAR_VISIBLE;
- mLocked.pointerSpeed = 0;
- mLocked.pointerGesturesEnabled = true;
- mLocked.showTouches = false;
- }
-
- sp<EventHub> eventHub = new EventHub();
- mInputManager = new InputManager(eventHub, this, this);
-}
-
-NativeInputManager::~NativeInputManager() {
- JNIEnv* env = jniEnv();
-
- env->DeleteGlobalRef(mContextObj);
- env->DeleteGlobalRef(mServiceObj);
-}
-
-void NativeInputManager::dump(String8& dump) {
- mInputManager->getReader()->dump(dump);
- dump.append("\n");
-
- mInputManager->getDispatcher()->dump(dump);
- dump.append("\n");
-}
-
-bool NativeInputManager::checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
- if (env->ExceptionCheck()) {
- ALOGE("An exception was thrown by callback '%s'.", methodName);
- LOGE_EX(env);
- env->ExceptionClear();
- return true;
- }
- return false;
-}
-
-void NativeInputManager::setDisplayViewport(bool external, const DisplayViewport& viewport) {
- bool changed = false;
- {
- AutoMutex _l(mLock);
-
- DisplayViewport& v = external ? mLocked.externalViewport : mLocked.internalViewport;
- if (v != viewport) {
- changed = true;
- v = viewport;
-
- if (!external) {
- sp<PointerController> controller = mLocked.pointerController.promote();
- if (controller != NULL) {
- controller->setDisplayViewport(
- viewport.logicalRight - viewport.logicalLeft,
- viewport.logicalBottom - viewport.logicalTop,
- viewport.orientation);
- }
- }
- }
- }
-
- if (changed) {
- mInputManager->getReader()->requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_DISPLAY_INFO);
- }
-}
-
-status_t NativeInputManager::registerInputChannel(JNIEnv* env,
- const sp<InputChannel>& inputChannel,
- const sp<InputWindowHandle>& inputWindowHandle, bool monitor) {
- return mInputManager->getDispatcher()->registerInputChannel(
- inputChannel, inputWindowHandle, monitor);
-}
-
-status_t NativeInputManager::unregisterInputChannel(JNIEnv* env,
- const sp<InputChannel>& inputChannel) {
- return mInputManager->getDispatcher()->unregisterInputChannel(inputChannel);
-}
-
-void NativeInputManager::getReaderConfiguration(InputReaderConfiguration* outConfig) {
- JNIEnv* env = jniEnv();
-
- jint virtualKeyQuietTime = env->CallIntMethod(mServiceObj,
- gServiceClassInfo.getVirtualKeyQuietTimeMillis);
- if (!checkAndClearExceptionFromCallback(env, "getVirtualKeyQuietTimeMillis")) {
- outConfig->virtualKeyQuietTime = milliseconds_to_nanoseconds(virtualKeyQuietTime);
- }
-
- outConfig->excludedDeviceNames.clear();
- jobjectArray excludedDeviceNames = jobjectArray(env->CallObjectMethod(mServiceObj,
- gServiceClassInfo.getExcludedDeviceNames));
- if (!checkAndClearExceptionFromCallback(env, "getExcludedDeviceNames") && excludedDeviceNames) {
- jsize length = env->GetArrayLength(excludedDeviceNames);
- for (jsize i = 0; i < length; i++) {
- jstring item = jstring(env->GetObjectArrayElement(excludedDeviceNames, i));
- const char* deviceNameChars = env->GetStringUTFChars(item, NULL);
- outConfig->excludedDeviceNames.add(String8(deviceNameChars));
- env->ReleaseStringUTFChars(item, deviceNameChars);
- env->DeleteLocalRef(item);
- }
- env->DeleteLocalRef(excludedDeviceNames);
- }
-
- jint hoverTapTimeout = env->CallIntMethod(mServiceObj,
- gServiceClassInfo.getHoverTapTimeout);
- if (!checkAndClearExceptionFromCallback(env, "getHoverTapTimeout")) {
- jint doubleTapTimeout = env->CallIntMethod(mServiceObj,
- gServiceClassInfo.getDoubleTapTimeout);
- if (!checkAndClearExceptionFromCallback(env, "getDoubleTapTimeout")) {
- jint longPressTimeout = env->CallIntMethod(mServiceObj,
- gServiceClassInfo.getLongPressTimeout);
- if (!checkAndClearExceptionFromCallback(env, "getLongPressTimeout")) {
- outConfig->pointerGestureTapInterval = milliseconds_to_nanoseconds(hoverTapTimeout);
-
- // We must ensure that the tap-drag interval is significantly shorter than
- // the long-press timeout because the tap is held down for the entire duration
- // of the double-tap timeout.
- jint tapDragInterval = max(min(longPressTimeout - 100,
- doubleTapTimeout), hoverTapTimeout);
- outConfig->pointerGestureTapDragInterval =
- milliseconds_to_nanoseconds(tapDragInterval);
- }
- }
- }
-
- jint hoverTapSlop = env->CallIntMethod(mServiceObj,
- gServiceClassInfo.getHoverTapSlop);
- if (!checkAndClearExceptionFromCallback(env, "getHoverTapSlop")) {
- outConfig->pointerGestureTapSlop = hoverTapSlop;
- }
-
- { // acquire lock
- AutoMutex _l(mLock);
-
- outConfig->pointerVelocityControlParameters.scale = exp2f(mLocked.pointerSpeed
- * POINTER_SPEED_EXPONENT);
- outConfig->pointerGesturesEnabled = mLocked.pointerGesturesEnabled;
-
- outConfig->showTouches = mLocked.showTouches;
-
- outConfig->setDisplayInfo(false /*external*/, mLocked.internalViewport);
- outConfig->setDisplayInfo(true /*external*/, mLocked.externalViewport);
- } // release lock
-}
-
-sp<PointerControllerInterface> NativeInputManager::obtainPointerController(int32_t deviceId) {
- AutoMutex _l(mLock);
-
- sp<PointerController> controller = mLocked.pointerController.promote();
- if (controller == NULL) {
- ensureSpriteControllerLocked();
-
- controller = new PointerController(this, mLooper, mLocked.spriteController);
- mLocked.pointerController = controller;
-
- DisplayViewport& v = mLocked.internalViewport;
- controller->setDisplayViewport(
- v.logicalRight - v.logicalLeft,
- v.logicalBottom - v.logicalTop,
- v.orientation);
-
- JNIEnv* env = jniEnv();
- jobject pointerIconObj = env->CallObjectMethod(mServiceObj,
- gServiceClassInfo.getPointerIcon);
- if (!checkAndClearExceptionFromCallback(env, "getPointerIcon")) {
- PointerIcon pointerIcon;
- status_t status = android_view_PointerIcon_load(env, pointerIconObj,
- mContextObj, &pointerIcon);
- if (!status && !pointerIcon.isNullIcon()) {
- controller->setPointerIcon(SpriteIcon(pointerIcon.bitmap,
- pointerIcon.hotSpotX, pointerIcon.hotSpotY));
- } else {
- controller->setPointerIcon(SpriteIcon());
- }
- env->DeleteLocalRef(pointerIconObj);
- }
-
- updateInactivityTimeoutLocked(controller);
- }
- return controller;
-}
-
-void NativeInputManager::ensureSpriteControllerLocked() {
- if (mLocked.spriteController == NULL) {
- JNIEnv* env = jniEnv();
- jint layer = env->CallIntMethod(mServiceObj, gServiceClassInfo.getPointerLayer);
- if (checkAndClearExceptionFromCallback(env, "getPointerLayer")) {
- layer = -1;
- }
- mLocked.spriteController = new SpriteController(mLooper, layer);
- }
-}
-
-void NativeInputManager::notifyInputDevicesChanged(const Vector<InputDeviceInfo>& inputDevices) {
- JNIEnv* env = jniEnv();
-
- size_t count = inputDevices.size();
- jobjectArray inputDevicesObjArray = env->NewObjectArray(
- count, gInputDeviceClassInfo.clazz, NULL);
- if (inputDevicesObjArray) {
- bool error = false;
- for (size_t i = 0; i < count; i++) {
- jobject inputDeviceObj = android_view_InputDevice_create(env, inputDevices.itemAt(i));
- if (!inputDeviceObj) {
- error = true;
- break;
- }
-
- env->SetObjectArrayElement(inputDevicesObjArray, i, inputDeviceObj);
- env->DeleteLocalRef(inputDeviceObj);
- }
-
- if (!error) {
- env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyInputDevicesChanged,
- inputDevicesObjArray);
- }
-
- env->DeleteLocalRef(inputDevicesObjArray);
- }
-
- checkAndClearExceptionFromCallback(env, "notifyInputDevicesChanged");
-}
-
-sp<KeyCharacterMap> NativeInputManager::getKeyboardLayoutOverlay(
- const String8& inputDeviceDescriptor) {
- JNIEnv* env = jniEnv();
-
- sp<KeyCharacterMap> result;
- ScopedLocalRef<jstring> descriptorObj(env, env->NewStringUTF(inputDeviceDescriptor.string()));
- ScopedLocalRef<jobjectArray> arrayObj(env, jobjectArray(env->CallObjectMethod(mServiceObj,
- gServiceClassInfo.getKeyboardLayoutOverlay, descriptorObj.get())));
- if (arrayObj.get()) {
- ScopedLocalRef<jstring> filenameObj(env,
- jstring(env->GetObjectArrayElement(arrayObj.get(), 0)));
- ScopedLocalRef<jstring> contentsObj(env,
- jstring(env->GetObjectArrayElement(arrayObj.get(), 1)));
- ScopedUtfChars filenameChars(env, filenameObj.get());
- ScopedUtfChars contentsChars(env, contentsObj.get());
-
- KeyCharacterMap::loadContents(String8(filenameChars.c_str()),
- String8(contentsChars.c_str()), KeyCharacterMap::FORMAT_OVERLAY, &result);
- }
- checkAndClearExceptionFromCallback(env, "getKeyboardLayoutOverlay");
- return result;
-}
-
-String8 NativeInputManager::getDeviceAlias(const InputDeviceIdentifier& identifier) {
- JNIEnv* env = jniEnv();
-
- ScopedLocalRef<jstring> uniqueIdObj(env, env->NewStringUTF(identifier.uniqueId.string()));
- ScopedLocalRef<jstring> aliasObj(env, jstring(env->CallObjectMethod(mServiceObj,
- gServiceClassInfo.getDeviceAlias, uniqueIdObj.get())));
- String8 result;
- if (aliasObj.get()) {
- ScopedUtfChars aliasChars(env, aliasObj.get());
- result.setTo(aliasChars.c_str());
- }
- checkAndClearExceptionFromCallback(env, "getDeviceAlias");
- return result;
-}
-
-void NativeInputManager::notifySwitch(nsecs_t when,
- uint32_t switchValues, uint32_t switchMask, uint32_t policyFlags) {
-#if DEBUG_INPUT_DISPATCHER_POLICY
- ALOGD("notifySwitch - when=%lld, switchValues=0x%08x, switchMask=0x%08x, policyFlags=0x%x",
- when, switchValues, switchMask, policyFlags);
-#endif
-
- JNIEnv* env = jniEnv();
-
- env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifySwitch,
- when, switchValues, switchMask);
- checkAndClearExceptionFromCallback(env, "notifySwitch");
-}
-
-void NativeInputManager::notifyConfigurationChanged(nsecs_t when) {
-#if DEBUG_INPUT_DISPATCHER_POLICY
- ALOGD("notifyConfigurationChanged - when=%lld", when);
-#endif
-
- JNIEnv* env = jniEnv();
-
- env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyConfigurationChanged, when);
- checkAndClearExceptionFromCallback(env, "notifyConfigurationChanged");
-}
-
-nsecs_t NativeInputManager::notifyANR(const sp<InputApplicationHandle>& inputApplicationHandle,
- const sp<InputWindowHandle>& inputWindowHandle, const String8& reason) {
-#if DEBUG_INPUT_DISPATCHER_POLICY
- ALOGD("notifyANR");
-#endif
-
- JNIEnv* env = jniEnv();
-
- jobject inputApplicationHandleObj =
- getInputApplicationHandleObjLocalRef(env, inputApplicationHandle);
- jobject inputWindowHandleObj =
- getInputWindowHandleObjLocalRef(env, inputWindowHandle);
- jstring reasonObj = env->NewStringUTF(reason.string());
-
- jlong newTimeout = env->CallLongMethod(mServiceObj,
- gServiceClassInfo.notifyANR, inputApplicationHandleObj, inputWindowHandleObj,
- reasonObj);
- if (checkAndClearExceptionFromCallback(env, "notifyANR")) {
- newTimeout = 0; // abort dispatch
- } else {
- assert(newTimeout >= 0);
- }
-
- env->DeleteLocalRef(reasonObj);
- env->DeleteLocalRef(inputWindowHandleObj);
- env->DeleteLocalRef(inputApplicationHandleObj);
- return newTimeout;
-}
-
-void NativeInputManager::notifyInputChannelBroken(const sp<InputWindowHandle>& inputWindowHandle) {
-#if DEBUG_INPUT_DISPATCHER_POLICY
- ALOGD("notifyInputChannelBroken");
-#endif
-
- JNIEnv* env = jniEnv();
-
- jobject inputWindowHandleObj =
- getInputWindowHandleObjLocalRef(env, inputWindowHandle);
- if (inputWindowHandleObj) {
- env->CallVoidMethod(mServiceObj, gServiceClassInfo.notifyInputChannelBroken,
- inputWindowHandleObj);
- checkAndClearExceptionFromCallback(env, "notifyInputChannelBroken");
-
- env->DeleteLocalRef(inputWindowHandleObj);
- }
-}
-
-void NativeInputManager::getDispatcherConfiguration(InputDispatcherConfiguration* outConfig) {
- JNIEnv* env = jniEnv();
-
- jint keyRepeatTimeout = env->CallIntMethod(mServiceObj,
- gServiceClassInfo.getKeyRepeatTimeout);
- if (!checkAndClearExceptionFromCallback(env, "getKeyRepeatTimeout")) {
- outConfig->keyRepeatTimeout = milliseconds_to_nanoseconds(keyRepeatTimeout);
- }
-
- jint keyRepeatDelay = env->CallIntMethod(mServiceObj,
- gServiceClassInfo.getKeyRepeatDelay);
- if (!checkAndClearExceptionFromCallback(env, "getKeyRepeatDelay")) {
- outConfig->keyRepeatDelay = milliseconds_to_nanoseconds(keyRepeatDelay);
- }
-}
-
-bool NativeInputManager::isKeyRepeatEnabled() {
- // Only enable automatic key repeating when the screen is on.
- return isScreenOn();
-}
-
-void NativeInputManager::setInputWindows(JNIEnv* env, jobjectArray windowHandleObjArray) {
- Vector<sp<InputWindowHandle> > windowHandles;
-
- if (windowHandleObjArray) {
- jsize length = env->GetArrayLength(windowHandleObjArray);
- for (jsize i = 0; i < length; i++) {
- jobject windowHandleObj = env->GetObjectArrayElement(windowHandleObjArray, i);
- if (! windowHandleObj) {
- break; // found null element indicating end of used portion of the array
- }
-
- sp<InputWindowHandle> windowHandle =
- android_server_InputWindowHandle_getHandle(env, windowHandleObj);
- if (windowHandle != NULL) {
- windowHandles.push(windowHandle);
- }
- env->DeleteLocalRef(windowHandleObj);
- }
- }
-
- mInputManager->getDispatcher()->setInputWindows(windowHandles);
-
- // Do this after the dispatcher has updated the window handle state.
- bool newPointerGesturesEnabled = true;
- size_t numWindows = windowHandles.size();
- for (size_t i = 0; i < numWindows; i++) {
- const sp<InputWindowHandle>& windowHandle = windowHandles.itemAt(i);
- const InputWindowInfo* windowInfo = windowHandle->getInfo();
- if (windowInfo && windowInfo->hasFocus && (windowInfo->inputFeatures
- & InputWindowInfo::INPUT_FEATURE_DISABLE_TOUCH_PAD_GESTURES)) {
- newPointerGesturesEnabled = false;
- }
- }
-
- uint32_t changes = 0;
- { // acquire lock
- AutoMutex _l(mLock);
-
- if (mLocked.pointerGesturesEnabled != newPointerGesturesEnabled) {
- mLocked.pointerGesturesEnabled = newPointerGesturesEnabled;
- changes |= InputReaderConfiguration::CHANGE_POINTER_GESTURE_ENABLEMENT;
- }
- } // release lock
-
- if (changes) {
- mInputManager->getReader()->requestRefreshConfiguration(changes);
- }
-}
-
-void NativeInputManager::setFocusedApplication(JNIEnv* env, jobject applicationHandleObj) {
- sp<InputApplicationHandle> applicationHandle =
- android_server_InputApplicationHandle_getHandle(env, applicationHandleObj);
- mInputManager->getDispatcher()->setFocusedApplication(applicationHandle);
-}
-
-void NativeInputManager::setInputDispatchMode(bool enabled, bool frozen) {
- mInputManager->getDispatcher()->setInputDispatchMode(enabled, frozen);
-}
-
-void NativeInputManager::setSystemUiVisibility(int32_t visibility) {
- AutoMutex _l(mLock);
-
- if (mLocked.systemUiVisibility != visibility) {
- mLocked.systemUiVisibility = visibility;
-
- sp<PointerController> controller = mLocked.pointerController.promote();
- if (controller != NULL) {
- updateInactivityTimeoutLocked(controller);
- }
- }
-}
-
-void NativeInputManager::updateInactivityTimeoutLocked(const sp<PointerController>& controller) {
- bool lightsOut = mLocked.systemUiVisibility & ASYSTEM_UI_VISIBILITY_STATUS_BAR_HIDDEN;
- controller->setInactivityTimeout(lightsOut
- ? PointerController::INACTIVITY_TIMEOUT_SHORT
- : PointerController::INACTIVITY_TIMEOUT_NORMAL);
-}
-
-void NativeInputManager::setPointerSpeed(int32_t speed) {
- { // acquire lock
- AutoMutex _l(mLock);
-
- if (mLocked.pointerSpeed == speed) {
- return;
- }
-
- ALOGI("Setting pointer speed to %d.", speed);
- mLocked.pointerSpeed = speed;
- } // release lock
-
- mInputManager->getReader()->requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_POINTER_SPEED);
-}
-
-void NativeInputManager::setShowTouches(bool enabled) {
- { // acquire lock
- AutoMutex _l(mLock);
-
- if (mLocked.showTouches == enabled) {
- return;
- }
-
- ALOGI("Setting show touches feature to %s.", enabled ? "enabled" : "disabled");
- mLocked.showTouches = enabled;
- } // release lock
-
- mInputManager->getReader()->requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_SHOW_TOUCHES);
-}
-
-bool NativeInputManager::isScreenOn() {
- return android_server_PowerManagerService_isScreenOn();
-}
-
-bool NativeInputManager::isScreenBright() {
- return android_server_PowerManagerService_isScreenBright();
-}
-
-bool NativeInputManager::filterInputEvent(const InputEvent* inputEvent, uint32_t policyFlags) {
- jobject inputEventObj;
-
- JNIEnv* env = jniEnv();
- switch (inputEvent->getType()) {
- case AINPUT_EVENT_TYPE_KEY:
- inputEventObj = android_view_KeyEvent_fromNative(env,
- static_cast<const KeyEvent*>(inputEvent));
- break;
- case AINPUT_EVENT_TYPE_MOTION:
- inputEventObj = android_view_MotionEvent_obtainAsCopy(env,
- static_cast<const MotionEvent*>(inputEvent));
- break;
- default:
- return true; // dispatch the event normally
- }
-
- if (!inputEventObj) {
- ALOGE("Failed to obtain input event object for filterInputEvent.");
- return true; // dispatch the event normally
- }
-
- // The callee is responsible for recycling the event.
- jboolean pass = env->CallBooleanMethod(mServiceObj, gServiceClassInfo.filterInputEvent,
- inputEventObj, policyFlags);
- if (checkAndClearExceptionFromCallback(env, "filterInputEvent")) {
- pass = true;
- }
- env->DeleteLocalRef(inputEventObj);
- return pass;
-}
-
-void NativeInputManager::interceptKeyBeforeQueueing(const KeyEvent* keyEvent,
- uint32_t& policyFlags) {
- // Policy:
- // - Ignore untrusted events and pass them along.
- // - Ask the window manager what to do with normal events and trusted injected events.
- // - For normal events wake and brighten the screen if currently off or dim.
- if ((policyFlags & POLICY_FLAG_TRUSTED)) {
- nsecs_t when = keyEvent->getEventTime();
- bool isScreenOn = this->isScreenOn();
- bool isScreenBright = this->isScreenBright();
-
- JNIEnv* env = jniEnv();
- jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent);
- jint wmActions;
- if (keyEventObj) {
- wmActions = env->CallIntMethod(mServiceObj,
- gServiceClassInfo.interceptKeyBeforeQueueing,
- keyEventObj, policyFlags, isScreenOn);
- if (checkAndClearExceptionFromCallback(env, "interceptKeyBeforeQueueing")) {
- wmActions = 0;
- }
- android_view_KeyEvent_recycle(env, keyEventObj);
- env->DeleteLocalRef(keyEventObj);
- } else {
- ALOGE("Failed to obtain key event object for interceptKeyBeforeQueueing.");
- wmActions = 0;
- }
-
- if (!(policyFlags & POLICY_FLAG_INJECTED)) {
- if (!isScreenOn) {
- policyFlags |= POLICY_FLAG_WOKE_HERE;
- }
-
- if (!isScreenBright) {
- policyFlags |= POLICY_FLAG_BRIGHT_HERE;
- }
- }
-
- handleInterceptActions(wmActions, when, /*byref*/ policyFlags);
- } else {
- policyFlags |= POLICY_FLAG_PASS_TO_USER;
- }
-}
-
-void NativeInputManager::interceptMotionBeforeQueueing(nsecs_t when, uint32_t& policyFlags) {
- // Policy:
- // - Ignore untrusted events and pass them along.
- // - No special filtering for injected events required at this time.
- // - Filter normal events based on screen state.
- // - For normal events brighten (but do not wake) the screen if currently dim.
- if ((policyFlags & POLICY_FLAG_TRUSTED) && !(policyFlags & POLICY_FLAG_INJECTED)) {
- if (isScreenOn()) {
- policyFlags |= POLICY_FLAG_PASS_TO_USER;
-
- if (!isScreenBright()) {
- policyFlags |= POLICY_FLAG_BRIGHT_HERE;
- }
- } else {
- JNIEnv* env = jniEnv();
- jint wmActions = env->CallIntMethod(mServiceObj,
- gServiceClassInfo.interceptMotionBeforeQueueingWhenScreenOff,
- policyFlags);
- if (checkAndClearExceptionFromCallback(env,
- "interceptMotionBeforeQueueingWhenScreenOff")) {
- wmActions = 0;
- }
-
- policyFlags |= POLICY_FLAG_WOKE_HERE | POLICY_FLAG_BRIGHT_HERE;
- handleInterceptActions(wmActions, when, /*byref*/ policyFlags);
- }
- } else {
- policyFlags |= POLICY_FLAG_PASS_TO_USER;
- }
-}
-
-void NativeInputManager::handleInterceptActions(jint wmActions, nsecs_t when,
- uint32_t& policyFlags) {
- if (wmActions & WM_ACTION_GO_TO_SLEEP) {
-#if DEBUG_INPUT_DISPATCHER_POLICY
- ALOGD("handleInterceptActions: Going to sleep.");
-#endif
- android_server_PowerManagerService_goToSleep(when);
- }
-
- if (wmActions & WM_ACTION_WAKE_UP) {
-#if DEBUG_INPUT_DISPATCHER_POLICY
- ALOGD("handleInterceptActions: Waking up.");
-#endif
- android_server_PowerManagerService_wakeUp(when);
- }
-
- if (wmActions & WM_ACTION_PASS_TO_USER) {
- policyFlags |= POLICY_FLAG_PASS_TO_USER;
- } else {
-#if DEBUG_INPUT_DISPATCHER_POLICY
- ALOGD("handleInterceptActions: Not passing key to user.");
-#endif
- }
-}
-
-nsecs_t NativeInputManager::interceptKeyBeforeDispatching(
- const sp<InputWindowHandle>& inputWindowHandle,
- const KeyEvent* keyEvent, uint32_t policyFlags) {
- // Policy:
- // - Ignore untrusted events and pass them along.
- // - Filter normal events and trusted injected events through the window manager policy to
- // handle the HOME key and the like.
- nsecs_t result = 0;
- if (policyFlags & POLICY_FLAG_TRUSTED) {
- JNIEnv* env = jniEnv();
-
- // Note: inputWindowHandle may be null.
- jobject inputWindowHandleObj = getInputWindowHandleObjLocalRef(env, inputWindowHandle);
- jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent);
- if (keyEventObj) {
- jlong delayMillis = env->CallLongMethod(mServiceObj,
- gServiceClassInfo.interceptKeyBeforeDispatching,
- inputWindowHandleObj, keyEventObj, policyFlags);
- bool error = checkAndClearExceptionFromCallback(env, "interceptKeyBeforeDispatching");
- android_view_KeyEvent_recycle(env, keyEventObj);
- env->DeleteLocalRef(keyEventObj);
- if (!error) {
- if (delayMillis < 0) {
- result = -1;
- } else if (delayMillis > 0) {
- result = milliseconds_to_nanoseconds(delayMillis);
- }
- }
- } else {
- ALOGE("Failed to obtain key event object for interceptKeyBeforeDispatching.");
- }
- env->DeleteLocalRef(inputWindowHandleObj);
- }
- return result;
-}
-
-bool NativeInputManager::dispatchUnhandledKey(const sp<InputWindowHandle>& inputWindowHandle,
- const KeyEvent* keyEvent, uint32_t policyFlags, KeyEvent* outFallbackKeyEvent) {
- // Policy:
- // - Ignore untrusted events and do not perform default handling.
- bool result = false;
- if (policyFlags & POLICY_FLAG_TRUSTED) {
- JNIEnv* env = jniEnv();
-
- // Note: inputWindowHandle may be null.
- jobject inputWindowHandleObj = getInputWindowHandleObjLocalRef(env, inputWindowHandle);
- jobject keyEventObj = android_view_KeyEvent_fromNative(env, keyEvent);
- if (keyEventObj) {
- jobject fallbackKeyEventObj = env->CallObjectMethod(mServiceObj,
- gServiceClassInfo.dispatchUnhandledKey,
- inputWindowHandleObj, keyEventObj, policyFlags);
- if (checkAndClearExceptionFromCallback(env, "dispatchUnhandledKey")) {
- fallbackKeyEventObj = NULL;
- }
- android_view_KeyEvent_recycle(env, keyEventObj);
- env->DeleteLocalRef(keyEventObj);
-
- if (fallbackKeyEventObj) {
- // Note: outFallbackKeyEvent may be the same object as keyEvent.
- if (!android_view_KeyEvent_toNative(env, fallbackKeyEventObj,
- outFallbackKeyEvent)) {
- result = true;
- }
- android_view_KeyEvent_recycle(env, fallbackKeyEventObj);
- env->DeleteLocalRef(fallbackKeyEventObj);
- }
- } else {
- ALOGE("Failed to obtain key event object for dispatchUnhandledKey.");
- }
- env->DeleteLocalRef(inputWindowHandleObj);
- }
- return result;
-}
-
-void NativeInputManager::pokeUserActivity(nsecs_t eventTime, int32_t eventType) {
- android_server_PowerManagerService_userActivity(eventTime, eventType);
-}
-
-
-bool NativeInputManager::checkInjectEventsPermissionNonReentrant(
- int32_t injectorPid, int32_t injectorUid) {
- JNIEnv* env = jniEnv();
- jboolean result = env->CallBooleanMethod(mServiceObj,
- gServiceClassInfo.checkInjectEventsPermission, injectorPid, injectorUid);
- if (checkAndClearExceptionFromCallback(env, "checkInjectEventsPermission")) {
- result = false;
- }
- return result;
-}
-
-void NativeInputManager::loadPointerResources(PointerResources* outResources) {
- JNIEnv* env = jniEnv();
-
- loadSystemIconAsSprite(env, mContextObj, POINTER_ICON_STYLE_SPOT_HOVER,
- &outResources->spotHover);
- loadSystemIconAsSprite(env, mContextObj, POINTER_ICON_STYLE_SPOT_TOUCH,
- &outResources->spotTouch);
- loadSystemIconAsSprite(env, mContextObj, POINTER_ICON_STYLE_SPOT_ANCHOR,
- &outResources->spotAnchor);
-}
-
-
-// ----------------------------------------------------------------------------
-
-static jint nativeInit(JNIEnv* env, jclass clazz,
- jobject serviceObj, jobject contextObj, jobject messageQueueObj) {
- sp<MessageQueue> messageQueue = android_os_MessageQueue_getMessageQueue(env, messageQueueObj);
- if (messageQueue == NULL) {
- jniThrowRuntimeException(env, "MessageQueue is not initialized.");
- return 0;
- }
-
- NativeInputManager* im = new NativeInputManager(contextObj, serviceObj,
- messageQueue->getLooper());
- im->incStrong(0);
- return reinterpret_cast<jint>(im);
-}
-
-static void nativeStart(JNIEnv* env, jclass clazz, jint ptr) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- status_t result = im->getInputManager()->start();
- if (result) {
- jniThrowRuntimeException(env, "Input manager could not be started.");
- }
-}
-
-static void nativeSetDisplayViewport(JNIEnv* env, jclass clazz, jint ptr, jboolean external,
- jint displayId, jint orientation,
- jint logicalLeft, jint logicalTop, jint logicalRight, jint logicalBottom,
- jint physicalLeft, jint physicalTop, jint physicalRight, jint physicalBottom,
- jint deviceWidth, jint deviceHeight) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- DisplayViewport v;
- v.displayId = displayId;
- v.orientation = orientation;
- v.logicalLeft = logicalLeft;
- v.logicalTop = logicalTop;
- v.logicalRight = logicalRight;
- v.logicalBottom = logicalBottom;
- v.physicalLeft = physicalLeft;
- v.physicalTop = physicalTop;
- v.physicalRight = physicalRight;
- v.physicalBottom = physicalBottom;
- v.deviceWidth = deviceWidth;
- v.deviceHeight = deviceHeight;
- im->setDisplayViewport(external, v);
-}
-
-static jint nativeGetScanCodeState(JNIEnv* env, jclass clazz,
- jint ptr, jint deviceId, jint sourceMask, jint scanCode) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- return im->getInputManager()->getReader()->getScanCodeState(
- deviceId, uint32_t(sourceMask), scanCode);
-}
-
-static jint nativeGetKeyCodeState(JNIEnv* env, jclass clazz,
- jint ptr, jint deviceId, jint sourceMask, jint keyCode) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- return im->getInputManager()->getReader()->getKeyCodeState(
- deviceId, uint32_t(sourceMask), keyCode);
-}
-
-static jint nativeGetSwitchState(JNIEnv* env, jclass clazz,
- jint ptr, jint deviceId, jint sourceMask, jint sw) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- return im->getInputManager()->getReader()->getSwitchState(
- deviceId, uint32_t(sourceMask), sw);
-}
-
-static jboolean nativeHasKeys(JNIEnv* env, jclass clazz,
- jint ptr, jint deviceId, jint sourceMask, jintArray keyCodes, jbooleanArray outFlags) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- int32_t* codes = env->GetIntArrayElements(keyCodes, NULL);
- uint8_t* flags = env->GetBooleanArrayElements(outFlags, NULL);
- jsize numCodes = env->GetArrayLength(keyCodes);
- jboolean result;
- if (numCodes == env->GetArrayLength(keyCodes)) {
- result = im->getInputManager()->getReader()->hasKeys(
- deviceId, uint32_t(sourceMask), numCodes, codes, flags);
- } else {
- result = JNI_FALSE;
- }
-
- env->ReleaseBooleanArrayElements(outFlags, flags, 0);
- env->ReleaseIntArrayElements(keyCodes, codes, 0);
- return result;
-}
-
-static void throwInputChannelNotInitialized(JNIEnv* env) {
- jniThrowException(env, "java/lang/IllegalStateException",
- "inputChannel is not initialized");
-}
-
-static void handleInputChannelDisposed(JNIEnv* env,
- jobject inputChannelObj, const sp<InputChannel>& inputChannel, void* data) {
- NativeInputManager* im = static_cast<NativeInputManager*>(data);
-
- ALOGW("Input channel object '%s' was disposed without first being unregistered with "
- "the input manager!", inputChannel->getName().string());
- im->unregisterInputChannel(env, inputChannel);
-}
-
-static void nativeRegisterInputChannel(JNIEnv* env, jclass clazz,
- jint ptr, jobject inputChannelObj, jobject inputWindowHandleObj, jboolean monitor) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- sp<InputChannel> inputChannel = android_view_InputChannel_getInputChannel(env,
- inputChannelObj);
- if (inputChannel == NULL) {
- throwInputChannelNotInitialized(env);
- return;
- }
-
- sp<InputWindowHandle> inputWindowHandle =
- android_server_InputWindowHandle_getHandle(env, inputWindowHandleObj);
-
- status_t status = im->registerInputChannel(
- env, inputChannel, inputWindowHandle, monitor);
- if (status) {
- String8 message;
- message.appendFormat("Failed to register input channel. status=%d", status);
- jniThrowRuntimeException(env, message.string());
- return;
- }
-
- if (! monitor) {
- android_view_InputChannel_setDisposeCallback(env, inputChannelObj,
- handleInputChannelDisposed, im);
- }
-}
-
-static void nativeUnregisterInputChannel(JNIEnv* env, jclass clazz,
- jint ptr, jobject inputChannelObj) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- sp<InputChannel> inputChannel = android_view_InputChannel_getInputChannel(env,
- inputChannelObj);
- if (inputChannel == NULL) {
- throwInputChannelNotInitialized(env);
- return;
- }
-
- android_view_InputChannel_setDisposeCallback(env, inputChannelObj, NULL, NULL);
-
- status_t status = im->unregisterInputChannel(env, inputChannel);
- if (status && status != BAD_VALUE) { // ignore already unregistered channel
- String8 message;
- message.appendFormat("Failed to unregister input channel. status=%d", status);
- jniThrowRuntimeException(env, message.string());
- }
-}
-
-static void nativeSetInputFilterEnabled(JNIEnv* env, jclass clazz,
- jint ptr, jboolean enabled) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- im->getInputManager()->getDispatcher()->setInputFilterEnabled(enabled);
-}
-
-static jint nativeInjectInputEvent(JNIEnv* env, jclass clazz,
- jint ptr, jobject inputEventObj, jint injectorPid, jint injectorUid,
- jint syncMode, jint timeoutMillis, jint policyFlags) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- if (env->IsInstanceOf(inputEventObj, gKeyEventClassInfo.clazz)) {
- KeyEvent keyEvent;
- status_t status = android_view_KeyEvent_toNative(env, inputEventObj, & keyEvent);
- if (status) {
- jniThrowRuntimeException(env, "Could not read contents of KeyEvent object.");
- return INPUT_EVENT_INJECTION_FAILED;
- }
-
- return im->getInputManager()->getDispatcher()->injectInputEvent(
- & keyEvent, injectorPid, injectorUid, syncMode, timeoutMillis,
- uint32_t(policyFlags));
- } else if (env->IsInstanceOf(inputEventObj, gMotionEventClassInfo.clazz)) {
- const MotionEvent* motionEvent = android_view_MotionEvent_getNativePtr(env, inputEventObj);
- if (!motionEvent) {
- jniThrowRuntimeException(env, "Could not read contents of MotionEvent object.");
- return INPUT_EVENT_INJECTION_FAILED;
- }
-
- return im->getInputManager()->getDispatcher()->injectInputEvent(
- motionEvent, injectorPid, injectorUid, syncMode, timeoutMillis,
- uint32_t(policyFlags));
- } else {
- jniThrowRuntimeException(env, "Invalid input event type.");
- return INPUT_EVENT_INJECTION_FAILED;
- }
-}
-
-static void nativeSetInputWindows(JNIEnv* env, jclass clazz,
- jint ptr, jobjectArray windowHandleObjArray) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- im->setInputWindows(env, windowHandleObjArray);
-}
-
-static void nativeSetFocusedApplication(JNIEnv* env, jclass clazz,
- jint ptr, jobject applicationHandleObj) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- im->setFocusedApplication(env, applicationHandleObj);
-}
-
-static void nativeSetInputDispatchMode(JNIEnv* env,
- jclass clazz, jint ptr, jboolean enabled, jboolean frozen) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- im->setInputDispatchMode(enabled, frozen);
-}
-
-static void nativeSetSystemUiVisibility(JNIEnv* env,
- jclass clazz, jint ptr, jint visibility) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- im->setSystemUiVisibility(visibility);
-}
-
-static jboolean nativeTransferTouchFocus(JNIEnv* env,
- jclass clazz, jint ptr, jobject fromChannelObj, jobject toChannelObj) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- sp<InputChannel> fromChannel =
- android_view_InputChannel_getInputChannel(env, fromChannelObj);
- sp<InputChannel> toChannel =
- android_view_InputChannel_getInputChannel(env, toChannelObj);
-
- if (fromChannel == NULL || toChannel == NULL) {
- return false;
- }
-
- return im->getInputManager()->getDispatcher()->
- transferTouchFocus(fromChannel, toChannel);
-}
-
-static void nativeSetPointerSpeed(JNIEnv* env,
- jclass clazz, jint ptr, jint speed) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- im->setPointerSpeed(speed);
-}
-
-static void nativeSetShowTouches(JNIEnv* env,
- jclass clazz, jint ptr, jboolean enabled) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- im->setShowTouches(enabled);
-}
-
-static void nativeVibrate(JNIEnv* env,
- jclass clazz, jint ptr, jint deviceId, jlongArray patternObj,
- jint repeat, jint token) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- size_t patternSize = env->GetArrayLength(patternObj);
- if (patternSize > MAX_VIBRATE_PATTERN_SIZE) {
- ALOGI("Skipped requested vibration because the pattern size is %d "
- "which is more than the maximum supported size of %d.",
- patternSize, MAX_VIBRATE_PATTERN_SIZE);
- return; // limit to reasonable size
- }
-
- jlong* patternMillis = static_cast<jlong*>(env->GetPrimitiveArrayCritical(
- patternObj, NULL));
- nsecs_t pattern[patternSize];
- for (size_t i = 0; i < patternSize; i++) {
- pattern[i] = max(jlong(0), min(patternMillis[i],
- MAX_VIBRATE_PATTERN_DELAY_NSECS / 1000000LL)) * 1000000LL;
- }
- env->ReleasePrimitiveArrayCritical(patternObj, patternMillis, JNI_ABORT);
-
- im->getInputManager()->getReader()->vibrate(deviceId, pattern, patternSize, repeat, token);
-}
-
-static void nativeCancelVibrate(JNIEnv* env,
- jclass clazz, jint ptr, jint deviceId, jint token) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- im->getInputManager()->getReader()->cancelVibrate(deviceId, token);
-}
-
-static void nativeReloadKeyboardLayouts(JNIEnv* env,
- jclass clazz, jint ptr) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- im->getInputManager()->getReader()->requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_KEYBOARD_LAYOUTS);
-}
-
-static void nativeReloadDeviceAliases(JNIEnv* env,
- jclass clazz, jint ptr) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- im->getInputManager()->getReader()->requestRefreshConfiguration(
- InputReaderConfiguration::CHANGE_DEVICE_ALIAS);
-}
-
-static jstring nativeDump(JNIEnv* env, jclass clazz, jint ptr) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- String8 dump;
- im->dump(dump);
- return env->NewStringUTF(dump.string());
-}
-
-static void nativeMonitor(JNIEnv* env, jclass clazz, jint ptr) {
- NativeInputManager* im = reinterpret_cast<NativeInputManager*>(ptr);
-
- im->getInputManager()->getReader()->monitor();
- im->getInputManager()->getDispatcher()->monitor();
-}
-
-// ----------------------------------------------------------------------------
-
-static JNINativeMethod gInputManagerMethods[] = {
- /* name, signature, funcPtr */
- { "nativeInit",
- "(Lcom/android/server/input/InputManagerService;Landroid/content/Context;Landroid/os/MessageQueue;)I",
- (void*) nativeInit },
- { "nativeStart", "(I)V",
- (void*) nativeStart },
- { "nativeSetDisplayViewport", "(IZIIIIIIIIIIII)V",
- (void*) nativeSetDisplayViewport },
- { "nativeGetScanCodeState", "(IIII)I",
- (void*) nativeGetScanCodeState },
- { "nativeGetKeyCodeState", "(IIII)I",
- (void*) nativeGetKeyCodeState },
- { "nativeGetSwitchState", "(IIII)I",
- (void*) nativeGetSwitchState },
- { "nativeHasKeys", "(III[I[Z)Z",
- (void*) nativeHasKeys },
- { "nativeRegisterInputChannel",
- "(ILandroid/view/InputChannel;Lcom/android/server/input/InputWindowHandle;Z)V",
- (void*) nativeRegisterInputChannel },
- { "nativeUnregisterInputChannel", "(ILandroid/view/InputChannel;)V",
- (void*) nativeUnregisterInputChannel },
- { "nativeSetInputFilterEnabled", "(IZ)V",
- (void*) nativeSetInputFilterEnabled },
- { "nativeInjectInputEvent", "(ILandroid/view/InputEvent;IIIII)I",
- (void*) nativeInjectInputEvent },
- { "nativeSetInputWindows", "(I[Lcom/android/server/input/InputWindowHandle;)V",
- (void*) nativeSetInputWindows },
- { "nativeSetFocusedApplication", "(ILcom/android/server/input/InputApplicationHandle;)V",
- (void*) nativeSetFocusedApplication },
- { "nativeSetInputDispatchMode", "(IZZ)V",
- (void*) nativeSetInputDispatchMode },
- { "nativeSetSystemUiVisibility", "(II)V",
- (void*) nativeSetSystemUiVisibility },
- { "nativeTransferTouchFocus", "(ILandroid/view/InputChannel;Landroid/view/InputChannel;)Z",
- (void*) nativeTransferTouchFocus },
- { "nativeSetPointerSpeed", "(II)V",
- (void*) nativeSetPointerSpeed },
- { "nativeSetShowTouches", "(IZ)V",
- (void*) nativeSetShowTouches },
- { "nativeVibrate", "(II[JII)V",
- (void*) nativeVibrate },
- { "nativeCancelVibrate", "(III)V",
- (void*) nativeCancelVibrate },
- { "nativeReloadKeyboardLayouts", "(I)V",
- (void*) nativeReloadKeyboardLayouts },
- { "nativeReloadDeviceAliases", "(I)V",
- (void*) nativeReloadDeviceAliases },
- { "nativeDump", "(I)Ljava/lang/String;",
- (void*) nativeDump },
- { "nativeMonitor", "(I)V",
- (void*) nativeMonitor },
-};
-
-#define FIND_CLASS(var, className) \
- var = env->FindClass(className); \
- LOG_FATAL_IF(! var, "Unable to find class " className);
-
-#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \
- var = env->GetMethodID(clazz, methodName, methodDescriptor); \
- LOG_FATAL_IF(! var, "Unable to find method " methodName);
-
-#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \
- var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \
- LOG_FATAL_IF(! var, "Unable to find field " fieldName);
-
-int register_android_server_InputManager(JNIEnv* env) {
- int res = jniRegisterNativeMethods(env, "com/android/server/input/InputManagerService",
- gInputManagerMethods, NELEM(gInputManagerMethods));
- LOG_FATAL_IF(res < 0, "Unable to register native methods.");
-
- // Callbacks
-
- jclass clazz;
- FIND_CLASS(clazz, "com/android/server/input/InputManagerService");
-
- GET_METHOD_ID(gServiceClassInfo.notifyConfigurationChanged, clazz,
- "notifyConfigurationChanged", "(J)V");
-
- GET_METHOD_ID(gServiceClassInfo.notifyInputDevicesChanged, clazz,
- "notifyInputDevicesChanged", "([Landroid/view/InputDevice;)V");
-
- GET_METHOD_ID(gServiceClassInfo.notifySwitch, clazz,
- "notifySwitch", "(JII)V");
-
- GET_METHOD_ID(gServiceClassInfo.notifyInputChannelBroken, clazz,
- "notifyInputChannelBroken", "(Lcom/android/server/input/InputWindowHandle;)V");
-
- GET_METHOD_ID(gServiceClassInfo.notifyANR, clazz,
- "notifyANR",
- "(Lcom/android/server/input/InputApplicationHandle;Lcom/android/server/input/InputWindowHandle;Ljava/lang/String;)J");
-
- GET_METHOD_ID(gServiceClassInfo.filterInputEvent, clazz,
- "filterInputEvent", "(Landroid/view/InputEvent;I)Z");
-
- GET_METHOD_ID(gServiceClassInfo.interceptKeyBeforeQueueing, clazz,
- "interceptKeyBeforeQueueing", "(Landroid/view/KeyEvent;IZ)I");
-
- GET_METHOD_ID(gServiceClassInfo.interceptMotionBeforeQueueingWhenScreenOff,
- clazz,
- "interceptMotionBeforeQueueingWhenScreenOff", "(I)I");
-
- GET_METHOD_ID(gServiceClassInfo.interceptKeyBeforeDispatching, clazz,
- "interceptKeyBeforeDispatching",
- "(Lcom/android/server/input/InputWindowHandle;Landroid/view/KeyEvent;I)J");
-
- GET_METHOD_ID(gServiceClassInfo.dispatchUnhandledKey, clazz,
- "dispatchUnhandledKey",
- "(Lcom/android/server/input/InputWindowHandle;Landroid/view/KeyEvent;I)Landroid/view/KeyEvent;");
-
- GET_METHOD_ID(gServiceClassInfo.checkInjectEventsPermission, clazz,
- "checkInjectEventsPermission", "(II)Z");
-
- GET_METHOD_ID(gServiceClassInfo.getVirtualKeyQuietTimeMillis, clazz,
- "getVirtualKeyQuietTimeMillis", "()I");
-
- GET_METHOD_ID(gServiceClassInfo.getExcludedDeviceNames, clazz,
- "getExcludedDeviceNames", "()[Ljava/lang/String;");
-
- GET_METHOD_ID(gServiceClassInfo.getKeyRepeatTimeout, clazz,
- "getKeyRepeatTimeout", "()I");
-
- GET_METHOD_ID(gServiceClassInfo.getKeyRepeatDelay, clazz,
- "getKeyRepeatDelay", "()I");
-
- GET_METHOD_ID(gServiceClassInfo.getHoverTapTimeout, clazz,
- "getHoverTapTimeout", "()I");
-
- GET_METHOD_ID(gServiceClassInfo.getHoverTapSlop, clazz,
- "getHoverTapSlop", "()I");
-
- GET_METHOD_ID(gServiceClassInfo.getDoubleTapTimeout, clazz,
- "getDoubleTapTimeout", "()I");
-
- GET_METHOD_ID(gServiceClassInfo.getLongPressTimeout, clazz,
- "getLongPressTimeout", "()I");
-
- GET_METHOD_ID(gServiceClassInfo.getPointerLayer, clazz,
- "getPointerLayer", "()I");
-
- GET_METHOD_ID(gServiceClassInfo.getPointerIcon, clazz,
- "getPointerIcon", "()Landroid/view/PointerIcon;");
-
- GET_METHOD_ID(gServiceClassInfo.getKeyboardLayoutOverlay, clazz,
- "getKeyboardLayoutOverlay", "(Ljava/lang/String;)[Ljava/lang/String;");
-
- GET_METHOD_ID(gServiceClassInfo.getDeviceAlias, clazz,
- "getDeviceAlias", "(Ljava/lang/String;)Ljava/lang/String;");
-
- // InputDevice
-
- FIND_CLASS(gInputDeviceClassInfo.clazz, "android/view/InputDevice");
- gInputDeviceClassInfo.clazz = jclass(env->NewGlobalRef(gInputDeviceClassInfo.clazz));
-
- // KeyEvent
-
- FIND_CLASS(gKeyEventClassInfo.clazz, "android/view/KeyEvent");
- gKeyEventClassInfo.clazz = jclass(env->NewGlobalRef(gKeyEventClassInfo.clazz));
-
- // MotionEvent
-
- FIND_CLASS(gMotionEventClassInfo.clazz, "android/view/MotionEvent");
- gMotionEventClassInfo.clazz = jclass(env->NewGlobalRef(gMotionEventClassInfo.clazz));
-
- return 0;
-}
-
-} /* namespace android */
diff --git a/services/jni/com_android_server_input_InputWindowHandle.cpp b/services/jni/com_android_server_input_InputWindowHandle.cpp
deleted file mode 100644
index 82e3dad..0000000
--- a/services/jni/com_android_server_input_InputWindowHandle.cpp
+++ /dev/null
@@ -1,309 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "InputWindowHandle"
-
-#include "JNIHelp.h"
-#include "jni.h"
-#include <android_runtime/AndroidRuntime.h>
-#include <utils/threads.h>
-
-#include <android_view_InputChannel.h>
-#include <android/graphics/Region.h>
-
-#include "com_android_server_input_InputWindowHandle.h"
-#include "com_android_server_input_InputApplicationHandle.h"
-
-namespace android {
-
-static struct {
- jfieldID ptr;
- jfieldID inputApplicationHandle;
- jfieldID inputChannel;
- jfieldID name;
- jfieldID layoutParamsFlags;
- jfieldID layoutParamsPrivateFlags;
- jfieldID layoutParamsType;
- jfieldID dispatchingTimeoutNanos;
- jfieldID frameLeft;
- jfieldID frameTop;
- jfieldID frameRight;
- jfieldID frameBottom;
- jfieldID scaleFactor;
- jfieldID touchableRegion;
- jfieldID visible;
- jfieldID canReceiveKeys;
- jfieldID hasFocus;
- jfieldID hasWallpaper;
- jfieldID paused;
- jfieldID layer;
- jfieldID ownerPid;
- jfieldID ownerUid;
- jfieldID inputFeatures;
- jfieldID displayId;
-} gInputWindowHandleClassInfo;
-
-static Mutex gHandleMutex;
-
-
-// --- NativeInputWindowHandle ---
-
-NativeInputWindowHandle::NativeInputWindowHandle(
- const sp<InputApplicationHandle>& inputApplicationHandle, jweak objWeak) :
- InputWindowHandle(inputApplicationHandle),
- mObjWeak(objWeak) {
-}
-
-NativeInputWindowHandle::~NativeInputWindowHandle() {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- env->DeleteWeakGlobalRef(mObjWeak);
-}
-
-jobject NativeInputWindowHandle::getInputWindowHandleObjLocalRef(JNIEnv* env) {
- return env->NewLocalRef(mObjWeak);
-}
-
-bool NativeInputWindowHandle::updateInfo() {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- jobject obj = env->NewLocalRef(mObjWeak);
- if (!obj) {
- releaseInfo();
- return false;
- }
-
- if (!mInfo) {
- mInfo = new InputWindowInfo();
- }
-
- jobject inputChannelObj = env->GetObjectField(obj,
- gInputWindowHandleClassInfo.inputChannel);
- if (inputChannelObj) {
- mInfo->inputChannel = android_view_InputChannel_getInputChannel(env, inputChannelObj);
- env->DeleteLocalRef(inputChannelObj);
- } else {
- mInfo->inputChannel.clear();
- }
-
- jstring nameObj = jstring(env->GetObjectField(obj,
- gInputWindowHandleClassInfo.name));
- if (nameObj) {
- const char* nameStr = env->GetStringUTFChars(nameObj, NULL);
- mInfo->name.setTo(nameStr);
- env->ReleaseStringUTFChars(nameObj, nameStr);
- env->DeleteLocalRef(nameObj);
- } else {
- mInfo->name.setTo("<null>");
- }
-
- mInfo->layoutParamsFlags = env->GetIntField(obj,
- gInputWindowHandleClassInfo.layoutParamsFlags);
- mInfo->layoutParamsPrivateFlags = env->GetIntField(obj,
- gInputWindowHandleClassInfo.layoutParamsPrivateFlags);
- mInfo->layoutParamsType = env->GetIntField(obj,
- gInputWindowHandleClassInfo.layoutParamsType);
- mInfo->dispatchingTimeout = env->GetLongField(obj,
- gInputWindowHandleClassInfo.dispatchingTimeoutNanos);
- 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);
- mInfo->scaleFactor = env->GetFloatField(obj,
- gInputWindowHandleClassInfo.scaleFactor);
-
- jobject regionObj = env->GetObjectField(obj,
- gInputWindowHandleClassInfo.touchableRegion);
- if (regionObj) {
- SkRegion* region = android_graphics_Region_getSkRegion(env, regionObj);
- mInfo->touchableRegion.set(*region);
- env->DeleteLocalRef(regionObj);
- } else {
- mInfo->touchableRegion.setEmpty();
- }
-
- mInfo->visible = env->GetBooleanField(obj,
- gInputWindowHandleClassInfo.visible);
- mInfo->canReceiveKeys = env->GetBooleanField(obj,
- gInputWindowHandleClassInfo.canReceiveKeys);
- mInfo->hasFocus = env->GetBooleanField(obj,
- gInputWindowHandleClassInfo.hasFocus);
- mInfo->hasWallpaper = env->GetBooleanField(obj,
- gInputWindowHandleClassInfo.hasWallpaper);
- mInfo->paused = env->GetBooleanField(obj,
- gInputWindowHandleClassInfo.paused);
- mInfo->layer = env->GetIntField(obj,
- gInputWindowHandleClassInfo.layer);
- mInfo->ownerPid = env->GetIntField(obj,
- gInputWindowHandleClassInfo.ownerPid);
- mInfo->ownerUid = env->GetIntField(obj,
- gInputWindowHandleClassInfo.ownerUid);
- mInfo->inputFeatures = env->GetIntField(obj,
- gInputWindowHandleClassInfo.inputFeatures);
- mInfo->displayId = env->GetIntField(obj,
- gInputWindowHandleClassInfo.displayId);
-
- env->DeleteLocalRef(obj);
- return true;
-}
-
-
-// --- Global functions ---
-
-sp<NativeInputWindowHandle> android_server_InputWindowHandle_getHandle(
- JNIEnv* env, jobject inputWindowHandleObj) {
- if (!inputWindowHandleObj) {
- return NULL;
- }
-
- AutoMutex _l(gHandleMutex);
-
- int ptr = env->GetIntField(inputWindowHandleObj, gInputWindowHandleClassInfo.ptr);
- NativeInputWindowHandle* handle;
- if (ptr) {
- handle = reinterpret_cast<NativeInputWindowHandle*>(ptr);
- } else {
- jobject inputApplicationHandleObj = env->GetObjectField(inputWindowHandleObj,
- gInputWindowHandleClassInfo.inputApplicationHandle);
- sp<InputApplicationHandle> inputApplicationHandle =
- android_server_InputApplicationHandle_getHandle(env, inputApplicationHandleObj);
- env->DeleteLocalRef(inputApplicationHandleObj);
-
- jweak objWeak = env->NewWeakGlobalRef(inputWindowHandleObj);
- handle = new NativeInputWindowHandle(inputApplicationHandle, objWeak);
- handle->incStrong((void*)android_server_InputWindowHandle_getHandle);
- env->SetIntField(inputWindowHandleObj, gInputWindowHandleClassInfo.ptr,
- reinterpret_cast<int>(handle));
- }
- return handle;
-}
-
-
-// --- JNI ---
-
-static void android_server_InputWindowHandle_nativeDispose(JNIEnv* env, jobject obj) {
- AutoMutex _l(gHandleMutex);
-
- int ptr = env->GetIntField(obj, gInputWindowHandleClassInfo.ptr);
- if (ptr) {
- env->SetIntField(obj, gInputWindowHandleClassInfo.ptr, 0);
-
- NativeInputWindowHandle* handle = reinterpret_cast<NativeInputWindowHandle*>(ptr);
- handle->decStrong((void*)android_server_InputWindowHandle_getHandle);
- }
-}
-
-
-static JNINativeMethod gInputWindowHandleMethods[] = {
- /* name, signature, funcPtr */
- { "nativeDispose", "()V",
- (void*) android_server_InputWindowHandle_nativeDispose },
-};
-
-#define FIND_CLASS(var, className) \
- var = env->FindClass(className); \
- LOG_FATAL_IF(! var, "Unable to find class " className);
-
-#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \
- var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \
- LOG_FATAL_IF(! var, "Unable to find field " fieldName);
-
-int register_android_server_InputWindowHandle(JNIEnv* env) {
- int res = jniRegisterNativeMethods(env, "com/android/server/input/InputWindowHandle",
- gInputWindowHandleMethods, NELEM(gInputWindowHandleMethods));
- LOG_FATAL_IF(res < 0, "Unable to register native methods.");
-
- jclass clazz;
- FIND_CLASS(clazz, "com/android/server/input/InputWindowHandle");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.ptr, clazz,
- "ptr", "I");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.inputApplicationHandle,
- clazz,
- "inputApplicationHandle", "Lcom/android/server/input/InputApplicationHandle;");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.inputChannel, clazz,
- "inputChannel", "Landroid/view/InputChannel;");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.name, clazz,
- "name", "Ljava/lang/String;");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsFlags, clazz,
- "layoutParamsFlags", "I");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsPrivateFlags, clazz,
- "layoutParamsPrivateFlags", "I");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.layoutParamsType, clazz,
- "layoutParamsType", "I");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.dispatchingTimeoutNanos, clazz,
- "dispatchingTimeoutNanos", "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.scaleFactor, clazz,
- "scaleFactor", "F");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.touchableRegion, clazz,
- "touchableRegion", "Landroid/graphics/Region;");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.visible, clazz,
- "visible", "Z");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.canReceiveKeys, clazz,
- "canReceiveKeys", "Z");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.hasFocus, clazz,
- "hasFocus", "Z");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.hasWallpaper, clazz,
- "hasWallpaper", "Z");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.paused, clazz,
- "paused", "Z");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.layer, clazz,
- "layer", "I");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.ownerPid, clazz,
- "ownerPid", "I");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.ownerUid, clazz,
- "ownerUid", "I");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.inputFeatures, clazz,
- "inputFeatures", "I");
-
- GET_FIELD_ID(gInputWindowHandleClassInfo.displayId, clazz,
- "displayId", "I");
- return 0;
-}
-
-} /* namespace android */
diff --git a/services/jni/com_android_server_input_InputWindowHandle.h b/services/jni/com_android_server_input_InputWindowHandle.h
deleted file mode 100644
index 2cfa17d3..0000000
--- a/services/jni/com_android_server_input_InputWindowHandle.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _ANDROID_SERVER_INPUT_WINDOW_HANDLE_H
-#define _ANDROID_SERVER_INPUT_WINDOW_HANDLE_H
-
-#include <input/InputWindow.h>
-
-#include "JNIHelp.h"
-#include "jni.h"
-
-namespace android {
-
-class NativeInputWindowHandle : public InputWindowHandle {
-public:
- NativeInputWindowHandle(const sp<InputApplicationHandle>& inputApplicationHandle,
- jweak objWeak);
- virtual ~NativeInputWindowHandle();
-
- jobject getInputWindowHandleObjLocalRef(JNIEnv* env);
-
- virtual bool updateInfo();
-
-private:
- jweak mObjWeak;
-};
-
-
-extern sp<NativeInputWindowHandle> android_server_InputWindowHandle_getHandle(
- JNIEnv* env, jobject inputWindowHandleObj);
-
-} // namespace android
-
-#endif // _ANDROID_SERVER_INPUT_WINDOW_HANDLE_H
diff --git a/services/jni/com_android_server_location_FlpHardwareProvider.cpp b/services/jni/com_android_server_location_FlpHardwareProvider.cpp
deleted file mode 100644
index 6c14887..0000000
--- a/services/jni/com_android_server_location_FlpHardwareProvider.cpp
+++ /dev/null
@@ -1,1002 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the license at
- *
- * http://www.apache.org/license/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the license.
- */
-
-#define LOG_TAG "FlpHardwareProvider"
-#define LOG_NDEBUG 0
-
-#define WAKE_LOCK_NAME "FLP"
-#define LOCATION_CLASS_NAME "android/location/Location"
-
-#include "jni.h"
-#include "JNIHelp.h"
-#include "android_runtime/AndroidRuntime.h"
-#include "android_runtime/Log.h"
-#include "hardware/fused_location.h"
-#include "hardware_legacy/power.h"
-
-static jobject sCallbacksObj = NULL;
-static JNIEnv *sCallbackEnv = NULL;
-static hw_device_t* sHardwareDevice = NULL;
-
-static jmethodID sOnLocationReport = NULL;
-static jmethodID sOnDataReport = NULL;
-static jmethodID sOnGeofenceTransition = NULL;
-static jmethodID sOnGeofenceMonitorStatus = NULL;
-static jmethodID sOnGeofenceAdd = NULL;
-static jmethodID sOnGeofenceRemove = NULL;
-static jmethodID sOnGeofencePause = NULL;
-static jmethodID sOnGeofenceResume = NULL;
-
-static const FlpLocationInterface* sFlpInterface = NULL;
-static const FlpDiagnosticInterface* sFlpDiagnosticInterface = NULL;
-static const FlpGeofencingInterface* sFlpGeofencingInterface = NULL;
-static const FlpDeviceContextInterface* sFlpDeviceContextInterface = NULL;
-
-namespace android {
-
-static inline void CheckExceptions(JNIEnv* env, const char* methodName) {
- if(!env->ExceptionCheck()) {
- return;
- }
-
- ALOGE("An exception was thrown by '%s'.", methodName);
- LOGE_EX(env);
- env->ExceptionClear();
-}
-
-static inline void ThrowOnError(
- JNIEnv* env,
- int resultCode,
- const char* methodName) {
- if(resultCode == FLP_RESULT_SUCCESS) {
- return;
- }
-
- ALOGE("Error %d in '%s'", resultCode, methodName);
- env->FatalError(methodName);
-}
-
-static bool IsValidCallbackThread() {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
-
- if(sCallbackEnv == NULL || sCallbackEnv != env) {
- ALOGE("CallbackThread check fail: env=%p, expected=%p", env, sCallbackEnv);
- return false;
- }
-
- return true;
-}
-
-static int SetThreadEvent(ThreadEvent event) {
- JavaVM* javaVm = AndroidRuntime::getJavaVM();
-
- switch(event) {
- case ASSOCIATE_JVM:
- {
- if(sCallbackEnv != NULL) {
- ALOGE(
- "Attempted to associate callback in '%s'. Callback already associated.",
- __FUNCTION__
- );
- return FLP_RESULT_ERROR;
- }
-
- JavaVMAttachArgs args = {
- JNI_VERSION_1_6,
- "FLP Service Callback Thread",
- /* group */ NULL
- };
-
- jint attachResult = javaVm->AttachCurrentThread(&sCallbackEnv, &args);
- if (attachResult != 0) {
- ALOGE("Callback thread attachment error: %d", attachResult);
- return FLP_RESULT_ERROR;
- }
-
- ALOGV("Callback thread attached: %p", sCallbackEnv);
- break;
- }
- case DISASSOCIATE_JVM:
- {
- if (!IsValidCallbackThread()) {
- ALOGE(
- "Attempted to dissasociate an unnownk callback thread : '%s'.",
- __FUNCTION__
- );
- return FLP_RESULT_ERROR;
- }
-
- if (javaVm->DetachCurrentThread() != 0) {
- return FLP_RESULT_ERROR;
- }
-
- sCallbackEnv = NULL;
- break;
- }
- default:
- ALOGE("Invalid ThreadEvent request %d", event);
- return FLP_RESULT_ERROR;
- }
-
- return FLP_RESULT_SUCCESS;
-}
-
-/*
- * Initializes the FlpHardwareProvider class from the native side by opening
- * the HW module and obtaining the proper interfaces.
- */
-static void ClassInit(JNIEnv* env, jclass clazz) {
- // get references to the Java provider methods
- sOnLocationReport = env->GetMethodID(
- clazz,
- "onLocationReport",
- "([Landroid/location/Location;)V");
- sOnDataReport = env->GetMethodID(
- clazz,
- "onDataReport",
- "(Ljava/lang/String;)V"
- );
- sOnGeofenceTransition = env->GetMethodID(
- clazz,
- "onGeofenceTransition",
- "(ILandroid/location/Location;IJI)V"
- );
- sOnGeofenceMonitorStatus = env->GetMethodID(
- clazz,
- "onGeofenceMonitorStatus",
- "(IILandroid/location/Location;)V"
- );
- sOnGeofenceAdd = env->GetMethodID(clazz, "onGeofenceAdd", "(II)V");
- sOnGeofenceRemove = env->GetMethodID(clazz, "onGeofenceRemove", "(II)V");
- sOnGeofencePause = env->GetMethodID(clazz, "onGeofencePause", "(II)V");
- sOnGeofenceResume = env->GetMethodID(clazz, "onGeofenceResume", "(II)V");
-}
-
-/*
- * Helper function to unwrap a java object back into a FlpLocation structure.
- */
-static void TranslateFromObject(
- JNIEnv* env,
- jobject locationObject,
- FlpLocation& location) {
- location.size = sizeof(FlpLocation);
- location.flags = 0;
-
- jclass locationClass = env->GetObjectClass(locationObject);
-
- jmethodID getLatitude = env->GetMethodID(locationClass, "getLatitude", "()D");
- location.latitude = env->CallDoubleMethod(locationObject, getLatitude);
- jmethodID getLongitude = env->GetMethodID(locationClass, "getLongitude", "()D");
- location.longitude = env->CallDoubleMethod(locationObject, getLongitude);
- jmethodID getTime = env->GetMethodID(locationClass, "getTime", "()J");
- location.timestamp = env->CallLongMethod(locationObject, getTime);
- location.flags |= FLP_LOCATION_HAS_LAT_LONG;
-
- jmethodID hasAltitude = env->GetMethodID(locationClass, "hasAltitude", "()Z");
- if (env->CallBooleanMethod(locationObject, hasAltitude)) {
- jmethodID getAltitude = env->GetMethodID(locationClass, "getAltitude", "()D");
- location.altitude = env->CallDoubleMethod(locationObject, getAltitude);
- location.flags |= FLP_LOCATION_HAS_ALTITUDE;
- }
-
- jmethodID hasSpeed = env->GetMethodID(locationClass, "hasSpeed", "()Z");
- if (env->CallBooleanMethod(locationObject, hasSpeed)) {
- jmethodID getSpeed = env->GetMethodID(locationClass, "getSpeed", "()F");
- location.speed = env->CallFloatMethod(locationObject, getSpeed);
- location.flags |= FLP_LOCATION_HAS_SPEED;
- }
-
- jmethodID hasBearing = env->GetMethodID(locationClass, "hasBearing", "()Z");
- if (env->CallBooleanMethod(locationObject, hasBearing)) {
- jmethodID getBearing = env->GetMethodID(locationClass, "getBearing", "()F");
- location.bearing = env->CallFloatMethod(locationObject, getBearing);
- location.flags |= FLP_LOCATION_HAS_BEARING;
- }
-
- jmethodID hasAccuracy = env->GetMethodID(locationClass, "hasAccuracy", "()Z");
- if (env->CallBooleanMethod(locationObject, hasAccuracy)) {
- jmethodID getAccuracy = env->GetMethodID(
- locationClass,
- "getAccuracy",
- "()F"
- );
- location.accuracy = env->CallFloatMethod(locationObject, getAccuracy);
- location.flags |= FLP_LOCATION_HAS_ACCURACY;
- }
-
- // TODO: wire sources_used if Location class exposes them
-
- env->DeleteLocalRef(locationClass);
-}
-
-/*
- * Helper function to unwrap FlpBatchOptions from the Java Runtime calls.
- */
-static void TranslateFromObject(
- JNIEnv* env,
- jobject batchOptionsObject,
- FlpBatchOptions& batchOptions) {
- jclass batchOptionsClass = env->GetObjectClass(batchOptionsObject);
-
- jmethodID getMaxPower = env->GetMethodID(
- batchOptionsClass,
- "getMaxPowerAllocationInMW",
- "()D"
- );
- batchOptions.max_power_allocation_mW = env->CallDoubleMethod(
- batchOptionsObject,
- getMaxPower
- );
-
- jmethodID getPeriod = env->GetMethodID(
- batchOptionsClass,
- "getPeriodInNS",
- "()J"
- );
- batchOptions.period_ns = env->CallLongMethod(batchOptionsObject, getPeriod);
-
- jmethodID getSourcesToUse = env->GetMethodID(
- batchOptionsClass,
- "getSourcesToUse",
- "()I"
- );
- batchOptions.sources_to_use = env->CallIntMethod(
- batchOptionsObject,
- getSourcesToUse
- );
-
- jmethodID getFlags = env->GetMethodID(batchOptionsClass, "getFlags", "()I");
- batchOptions.flags = env->CallIntMethod(batchOptionsObject, getFlags);
-
- env->DeleteLocalRef(batchOptionsClass);
-}
-
-/*
- * Helper function to unwrap Geofence structures from the Java Runtime calls.
- */
-static void TranslateGeofenceFromGeofenceHardwareRequestParcelable(
- JNIEnv* env,
- jobject geofenceRequestObject,
- Geofence& geofence) {
- jclass geofenceRequestClass = env->GetObjectClass(geofenceRequestObject);
-
- jmethodID getId = env->GetMethodID(geofenceRequestClass, "getId", "()I");
- geofence.geofence_id = env->CallIntMethod(geofenceRequestObject, getId);
-
- jmethodID getType = env->GetMethodID(geofenceRequestClass, "getType", "()I");
- // this works because GeofenceHardwareRequest.java and fused_location.h have
- // the same notion of geofence types
- GeofenceType type = (GeofenceType)env->CallIntMethod(geofenceRequestObject, getType);
- if(type != TYPE_CIRCLE) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
- geofence.data->type = type;
- GeofenceCircle& circle = geofence.data->geofence.circle;
-
- jmethodID getLatitude = env->GetMethodID(
- geofenceRequestClass,
- "getLatitude",
- "()D");
- circle.latitude = env->CallDoubleMethod(geofenceRequestObject, getLatitude);
-
- jmethodID getLongitude = env->GetMethodID(
- geofenceRequestClass,
- "getLongitude",
- "()D");
- circle.longitude = env->CallDoubleMethod(geofenceRequestObject, getLongitude);
-
- jmethodID getRadius = env->GetMethodID(geofenceRequestClass, "getRadius", "()D");
- circle.radius_m = env->CallDoubleMethod(geofenceRequestObject, getRadius);
-
- GeofenceOptions* options = geofence.options;
- jmethodID getMonitorTransitions = env->GetMethodID(
- geofenceRequestClass,
- "getMonitorTransitions",
- "()I");
- options->monitor_transitions = env->CallIntMethod(
- geofenceRequestObject,
- getMonitorTransitions);
-
- jmethodID getUnknownTimer = env->GetMethodID(
- geofenceRequestClass,
- "getUnknownTimer",
- "()I");
- options->unknown_timer_ms = env->CallIntMethod(geofenceRequestObject, getUnknownTimer);
-
- jmethodID getNotificationResponsiveness = env->GetMethodID(
- geofenceRequestClass,
- "getNotificationResponsiveness",
- "()I");
- options->notification_responsivenes_ms = env->CallIntMethod(
- geofenceRequestObject,
- getNotificationResponsiveness);
-
- jmethodID getLastTransition = env->GetMethodID(
- geofenceRequestClass,
- "getLastTransition",
- "()I");
- options->last_transition = env->CallIntMethod(geofenceRequestObject, getLastTransition);
-
- // TODO: set data.sources_to_use when available
-
- env->DeleteLocalRef(geofenceRequestClass);
-}
-
-/*
- * Helper function to transform FlpLocation into a java object.
- */
-static void TranslateToObject(const FlpLocation* location, jobject& locationObject) {
- jclass locationClass = sCallbackEnv->FindClass(LOCATION_CLASS_NAME);
- jmethodID locationCtor = sCallbackEnv->GetMethodID(
- locationClass,
- "<init>",
- "(Ljava/lang/String;)V"
- );
-
- // the provider is set in the upper JVM layer
- locationObject = sCallbackEnv->NewObject(locationClass, locationCtor, NULL);
- jint flags = location->flags;
-
- // set the valid information in the object
- if (flags & FLP_LOCATION_HAS_LAT_LONG) {
- jmethodID setLatitude = sCallbackEnv->GetMethodID(
- locationClass,
- "setLatitude",
- "(D)V"
- );
- sCallbackEnv->CallVoidMethod(locationObject, setLatitude, location->latitude);
-
- jmethodID setLongitude = sCallbackEnv->GetMethodID(
- locationClass,
- "setLongitude",
- "(D)V"
- );
- sCallbackEnv->CallVoidMethod(
- locationObject,
- setLongitude,
- location->longitude
- );
-
- jmethodID setTime = sCallbackEnv->GetMethodID(
- locationClass,
- "setTime",
- "(J)V"
- );
- sCallbackEnv->CallVoidMethod(locationObject, setTime, location->timestamp);
- }
-
- if (flags & FLP_LOCATION_HAS_ALTITUDE) {
- jmethodID setAltitude = sCallbackEnv->GetMethodID(
- locationClass,
- "setAltitude",
- "(D)V"
- );
- sCallbackEnv->CallVoidMethod(locationObject, setAltitude, location->altitude);
- }
-
- if (flags & FLP_LOCATION_HAS_SPEED) {
- jmethodID setSpeed = sCallbackEnv->GetMethodID(
- locationClass,
- "setSpeed",
- "(F)V"
- );
- sCallbackEnv->CallVoidMethod(locationObject, setSpeed, location->speed);
- }
-
- if (flags & FLP_LOCATION_HAS_BEARING) {
- jmethodID setBearing = sCallbackEnv->GetMethodID(
- locationClass,
- "setBearing",
- "(F)V"
- );
- sCallbackEnv->CallVoidMethod(locationObject, setBearing, location->bearing);
- }
-
- if (flags & FLP_LOCATION_HAS_ACCURACY) {
- jmethodID setAccuracy = sCallbackEnv->GetMethodID(
- locationClass,
- "setAccuracy",
- "(F)V"
- );
- sCallbackEnv->CallVoidMethod(locationObject, setAccuracy, location->accuracy);
- }
-
- // TODO: wire FlpLocation::sources_used when needed
-
- sCallbackEnv->DeleteLocalRef(locationClass);
-}
-
-/*
- * Helper function to serialize FlpLocation structures.
- */
-static void TranslateToObjectArray(
- int32_t locationsCount,
- FlpLocation** locations,
- jobjectArray& locationsArray) {
- jclass locationClass = sCallbackEnv->FindClass(LOCATION_CLASS_NAME);
- locationsArray = sCallbackEnv->NewObjectArray(
- locationsCount,
- locationClass,
- /* initialElement */ NULL
- );
-
- for (int i = 0; i < locationsCount; ++i) {
- jobject locationObject = NULL;
- TranslateToObject(locations[i], locationObject);
- sCallbackEnv->SetObjectArrayElement(locationsArray, i, locationObject);
- sCallbackEnv->DeleteLocalRef(locationObject);
- }
-
- sCallbackEnv->DeleteLocalRef(locationClass);
-}
-
-static void LocationCallback(int32_t locationsCount, FlpLocation** locations) {
- if(!IsValidCallbackThread()) {
- return;
- }
-
- if(locationsCount == 0 || locations == NULL) {
- ALOGE(
- "Invalid LocationCallback. Count: %d, Locations: %p",
- locationsCount,
- locations
- );
- return;
- }
-
- jobjectArray locationsArray = NULL;
- TranslateToObjectArray(locationsCount, locations, locationsArray);
-
- sCallbackEnv->CallVoidMethod(
- sCallbacksObj,
- sOnLocationReport,
- locationsArray
- );
- CheckExceptions(sCallbackEnv, __FUNCTION__);
-
- if(locationsArray != NULL) {
- sCallbackEnv->DeleteLocalRef(locationsArray);
- }
-}
-
-static void AcquireWakelock() {
- acquire_wake_lock(PARTIAL_WAKE_LOCK, WAKE_LOCK_NAME);
-}
-
-static void ReleaseWakelock() {
- release_wake_lock(WAKE_LOCK_NAME);
-}
-
-FlpCallbacks sFlpCallbacks = {
- sizeof(FlpCallbacks),
- LocationCallback,
- AcquireWakelock,
- ReleaseWakelock,
- SetThreadEvent
-};
-
-static void ReportData(char* data, int length) {
- jstring stringData = NULL;
-
- if(length != 0 && data != NULL) {
- stringData = sCallbackEnv->NewString(reinterpret_cast<jchar*>(data), length);
- } else {
- ALOGE("Invalid ReportData callback. Length: %d, Data: %p", length, data);
- return;
- }
-
- sCallbackEnv->CallVoidMethod(sCallbacksObj, sOnDataReport, stringData);
- CheckExceptions(sCallbackEnv, __FUNCTION__);
-}
-
-FlpDiagnosticCallbacks sFlpDiagnosticCallbacks = {
- sizeof(FlpDiagnosticCallbacks),
- SetThreadEvent,
- ReportData
-};
-
-static void GeofenceTransitionCallback(
- int32_t geofenceId,
- FlpLocation* location,
- int32_t transition,
- FlpUtcTime timestamp,
- uint32_t sourcesUsed
- ) {
- if(!IsValidCallbackThread()) {
- return;
- }
-
- if(location == NULL) {
- ALOGE("GeofenceTransition received with invalid location: %p", location);
- return;
- }
-
- jobject locationObject = NULL;
- TranslateToObject(location, locationObject);
-
- sCallbackEnv->CallVoidMethod(
- sCallbacksObj,
- sOnGeofenceTransition,
- geofenceId,
- locationObject,
- transition,
- timestamp,
- sourcesUsed
- );
- CheckExceptions(sCallbackEnv, __FUNCTION__);
-
- if(locationObject != NULL) {
- sCallbackEnv->DeleteLocalRef(locationObject);
- }
-}
-
-static void GeofenceMonitorStatusCallback(
- int32_t status,
- uint32_t source,
- FlpLocation* lastLocation) {
- if(!IsValidCallbackThread()) {
- return;
- }
-
- jobject locationObject = NULL;
- if(lastLocation != NULL) {
- TranslateToObject(lastLocation, locationObject);
- }
-
- sCallbackEnv->CallVoidMethod(
- sCallbacksObj,
- sOnGeofenceMonitorStatus,
- status,
- source,
- locationObject
- );
- CheckExceptions(sCallbackEnv, __FUNCTION__);
-
- if(locationObject != NULL) {
- sCallbackEnv->DeleteLocalRef(locationObject);
- }
-}
-
-static void GeofenceAddCallback(int32_t geofenceId, int32_t result) {
- if(!IsValidCallbackThread()) {
- return;
- }
-
- sCallbackEnv->CallVoidMethod(sCallbacksObj, sOnGeofenceAdd, geofenceId, result);
- CheckExceptions(sCallbackEnv, __FUNCTION__);
-}
-
-static void GeofenceRemoveCallback(int32_t geofenceId, int32_t result) {
- if(!IsValidCallbackThread()) {
- return;
- }
-
- sCallbackEnv->CallVoidMethod(
- sCallbacksObj,
- sOnGeofenceRemove,
- geofenceId,
- result
- );
- CheckExceptions(sCallbackEnv, __FUNCTION__);
-}
-
-static void GeofencePauseCallback(int32_t geofenceId, int32_t result) {
- if(!IsValidCallbackThread()) {
- return;
- }
-
- sCallbackEnv->CallVoidMethod(
- sCallbacksObj,
- sOnGeofencePause,
- geofenceId,
- result
- );
- CheckExceptions(sCallbackEnv, __FUNCTION__);
-}
-
-static void GeofenceResumeCallback(int32_t geofenceId, int32_t result) {
- if(!IsValidCallbackThread()) {
- return;
- }
-
- sCallbackEnv->CallVoidMethod(
- sCallbacksObj,
- sOnGeofenceResume,
- geofenceId,
- result
- );
- CheckExceptions(sCallbackEnv, __FUNCTION__);
-}
-
-FlpGeofenceCallbacks sFlpGeofenceCallbacks = {
- sizeof(FlpGeofenceCallbacks),
- GeofenceTransitionCallback,
- GeofenceMonitorStatusCallback,
- GeofenceAddCallback,
- GeofenceRemoveCallback,
- GeofencePauseCallback,
- GeofenceResumeCallback,
- SetThreadEvent
-};
-
-/*
- * Initializes the Fused Location Provider in the native side. It ensures that
- * the Flp interfaces are initialized properly.
- */
-static void Init(JNIEnv* env, jobject obj) {
- if(sHardwareDevice != NULL) {
- ALOGD("Hardware Device already opened.");
- return;
- }
-
- const hw_module_t* module = NULL;
- int err = hw_get_module(FUSED_LOCATION_HARDWARE_MODULE_ID, &module);
- if(err != 0) {
- ALOGE("Error hw_get_module '%s': %d", FUSED_LOCATION_HARDWARE_MODULE_ID, err);
- return;
- }
-
- err = module->methods->open(
- module,
- FUSED_LOCATION_HARDWARE_MODULE_ID, &sHardwareDevice);
- if(err != 0) {
- ALOGE("Error opening device '%s': %d", FUSED_LOCATION_HARDWARE_MODULE_ID, err);
- return;
- }
-
- sFlpInterface = NULL;
- flp_device_t* flp_device = reinterpret_cast<flp_device_t*>(sHardwareDevice);
- sFlpInterface = flp_device->get_flp_interface(flp_device);
-
- if(sFlpInterface != NULL) {
- sFlpDiagnosticInterface = reinterpret_cast<const FlpDiagnosticInterface*>(
- sFlpInterface->get_extension(FLP_DIAGNOSTIC_INTERFACE)
- );
-
- sFlpGeofencingInterface = reinterpret_cast<const FlpGeofencingInterface*>(
- sFlpInterface->get_extension(FLP_GEOFENCING_INTERFACE)
- );
-
- sFlpDeviceContextInterface = reinterpret_cast<const FlpDeviceContextInterface*>(
- sFlpInterface->get_extension(FLP_DEVICE_CONTEXT_INTERFACE)
- );
- }
-
- if(sCallbacksObj == NULL) {
- sCallbacksObj = env->NewGlobalRef(obj);
- }
-
- // initialize the Flp interfaces
- if(sFlpInterface == NULL || sFlpInterface->init(&sFlpCallbacks) != 0) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- if(sFlpDiagnosticInterface != NULL) {
- sFlpDiagnosticInterface->init(&sFlpDiagnosticCallbacks);
- }
-
- if(sFlpGeofencingInterface != NULL) {
- sFlpGeofencingInterface->init(&sFlpGeofenceCallbacks);
- }
-
- // TODO: inject any device context if when needed
-}
-
-static jboolean IsSupported(JNIEnv* env, jclass clazz) {
- return sFlpInterface != NULL;
-}
-
-static jint GetBatchSize(JNIEnv* env, jobject object) {
- if(sFlpInterface == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- return sFlpInterface->get_batch_size();
-}
-
-static void StartBatching(
- JNIEnv* env,
- jobject object,
- jint id,
- jobject optionsObject) {
- if(sFlpInterface == NULL || optionsObject == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- FlpBatchOptions options;
- TranslateFromObject(env, optionsObject, options);
- int result = sFlpInterface->start_batching(id, &options);
- ThrowOnError(env, result, __FUNCTION__);
-}
-
-static void UpdateBatchingOptions(
- JNIEnv* env,
- jobject object,
- jint id,
- jobject optionsObject) {
- if(sFlpInterface == NULL || optionsObject == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- FlpBatchOptions options;
- TranslateFromObject(env, optionsObject, options);
- int result = sFlpInterface->update_batching_options(id, &options);
- ThrowOnError(env, result, __FUNCTION__);
-}
-
-static void StopBatching(JNIEnv* env, jobject object, jint id) {
- if(sFlpInterface == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- sFlpInterface->stop_batching(id);
-}
-
-static void Cleanup(JNIEnv* env, jobject object) {
- if(sFlpInterface == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- sFlpInterface->cleanup();
-
- if(sCallbacksObj != NULL) {
- env->DeleteGlobalRef(sCallbacksObj);
- sCallbacksObj = NULL;
- }
-
- sFlpInterface = NULL;
- sFlpDiagnosticInterface = NULL;
- sFlpDeviceContextInterface = NULL;
- sFlpGeofencingInterface = NULL;
-
- if(sHardwareDevice != NULL) {
- sHardwareDevice->close(sHardwareDevice);
- sHardwareDevice = NULL;
- }
-}
-
-static void GetBatchedLocation(JNIEnv* env, jobject object, jint lastNLocations) {
- if(sFlpInterface == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- sFlpInterface->get_batched_location(lastNLocations);
-}
-
-static void InjectLocation(JNIEnv* env, jobject object, jobject locationObject) {
- if(locationObject == NULL) {
- ALOGE("Invalid location for injection: %p", locationObject);
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- if(sFlpInterface == NULL) {
- // there is no listener, bail
- return;
- }
-
- FlpLocation location;
- TranslateFromObject(env, locationObject, location);
- int result = sFlpInterface->inject_location(&location);
- if (result != FLP_RESULT_SUCCESS) {
- // do not throw but log, this operation should be fire and forget
- ALOGE("Error %d in '%s'", result, __FUNCTION__);
- }
-}
-
-static jboolean IsDiagnosticSupported() {
- return sFlpDiagnosticInterface != NULL;
-}
-
-static void InjectDiagnosticData(JNIEnv* env, jobject object, jstring stringData) {
- if(stringData == NULL) {
- ALOGE("Invalid diagnostic data for injection: %p", stringData);
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- if(sFlpDiagnosticInterface == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- int length = env->GetStringLength(stringData);
- const jchar* data = env->GetStringChars(stringData, /* isCopy */ NULL);
- if(data == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- int result = sFlpDiagnosticInterface->inject_data((char*) data, length);
- ThrowOnError(env, result, __FUNCTION__);
-}
-
-static jboolean IsDeviceContextSupported() {
- return sFlpDeviceContextInterface != NULL;
-}
-
-static void InjectDeviceContext(JNIEnv* env, jobject object, jint enabledMask) {
- if(sFlpDeviceContextInterface == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- int result = sFlpDeviceContextInterface->inject_device_context(enabledMask);
- ThrowOnError(env, result, __FUNCTION__);
-}
-
-static jboolean IsGeofencingSupported() {
- return sFlpGeofencingInterface != NULL;
-}
-
-static void AddGeofences(
- JNIEnv* env,
- jobject object,
- jobjectArray geofenceRequestsArray) {
- if(geofenceRequestsArray == NULL) {
- ALOGE("Invalid Geofences to add: %p", geofenceRequestsArray);
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- if (sFlpGeofencingInterface == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- jint geofenceRequestsCount = env->GetArrayLength(geofenceRequestsArray);
- if(geofenceRequestsCount == 0) {
- return;
- }
-
- Geofence* geofences = new Geofence[geofenceRequestsCount];
- if (geofences == NULL) {
- ThrowOnError(env, FLP_RESULT_INSUFFICIENT_MEMORY, __FUNCTION__);
- }
-
- for (int i = 0; i < geofenceRequestsCount; ++i) {
- geofences[i].data = new GeofenceData();
- geofences[i].options = new GeofenceOptions();
- jobject geofenceObject = env->GetObjectArrayElement(geofenceRequestsArray, i);
-
- TranslateGeofenceFromGeofenceHardwareRequestParcelable(env, geofenceObject, geofences[i]);
- env->DeleteLocalRef(geofenceObject);
- }
-
- sFlpGeofencingInterface->add_geofences(geofenceRequestsCount, &geofences);
- if (geofences != NULL) {
- for(int i = 0; i < geofenceRequestsCount; ++i) {
- delete geofences[i].data;
- delete geofences[i].options;
- }
- delete[] geofences;
- }
-}
-
-static void PauseGeofence(JNIEnv* env, jobject object, jint geofenceId) {
- if(sFlpGeofencingInterface == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- sFlpGeofencingInterface->pause_geofence(geofenceId);
-}
-
-static void ResumeGeofence(
- JNIEnv* env,
- jobject object,
- jint geofenceId,
- jint monitorTransitions) {
- if(sFlpGeofencingInterface == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- sFlpGeofencingInterface->resume_geofence(geofenceId, monitorTransitions);
-}
-
-static void ModifyGeofenceOption(
- JNIEnv* env,
- jobject object,
- jint geofenceId,
- jint lastTransition,
- jint monitorTransitions,
- jint notificationResponsiveness,
- jint unknownTimer,
- jint sourcesToUse) {
- if(sFlpGeofencingInterface == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- GeofenceOptions options = {
- lastTransition,
- monitorTransitions,
- notificationResponsiveness,
- unknownTimer,
- (uint32_t)sourcesToUse
- };
-
- sFlpGeofencingInterface->modify_geofence_option(geofenceId, &options);
-}
-
-static void RemoveGeofences(
- JNIEnv* env,
- jobject object,
- jintArray geofenceIdsArray) {
- if(sFlpGeofencingInterface == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- jsize geofenceIdsCount = env->GetArrayLength(geofenceIdsArray);
- jint* geofenceIds = env->GetIntArrayElements(geofenceIdsArray, /* isCopy */ NULL);
- if(geofenceIds == NULL) {
- ThrowOnError(env, FLP_RESULT_ERROR, __FUNCTION__);
- }
-
- sFlpGeofencingInterface->remove_geofences(geofenceIdsCount, geofenceIds);
- env->ReleaseIntArrayElements(geofenceIdsArray, geofenceIds, 0 /*mode*/);
-}
-
-static JNINativeMethod sMethods[] = {
- //{"name", "signature", functionPointer }
- {"nativeClassInit", "()V", reinterpret_cast<void*>(ClassInit)},
- {"nativeInit", "()V", reinterpret_cast<void*>(Init)},
- {"nativeCleanup", "()V", reinterpret_cast<void*>(Cleanup)},
- {"nativeIsSupported", "()Z", reinterpret_cast<void*>(IsSupported)},
- {"nativeGetBatchSize", "()I", reinterpret_cast<void*>(GetBatchSize)},
- {"nativeStartBatching",
- "(ILandroid/location/FusedBatchOptions;)V",
- reinterpret_cast<void*>(StartBatching)},
- {"nativeUpdateBatchingOptions",
- "(ILandroid/location/FusedBatchOptions;)V",
- reinterpret_cast<void*>(UpdateBatchingOptions)},
- {"nativeStopBatching", "(I)V", reinterpret_cast<void*>(StopBatching)},
- {"nativeRequestBatchedLocation",
- "(I)V",
- reinterpret_cast<void*>(GetBatchedLocation)},
- {"nativeInjectLocation",
- "(Landroid/location/Location;)V",
- reinterpret_cast<void*>(InjectLocation)},
- {"nativeIsDiagnosticSupported",
- "()Z",
- reinterpret_cast<void*>(IsDiagnosticSupported)},
- {"nativeInjectDiagnosticData",
- "(Ljava/lang/String;)V",
- reinterpret_cast<void*>(InjectDiagnosticData)},
- {"nativeIsDeviceContextSupported",
- "()Z",
- reinterpret_cast<void*>(IsDeviceContextSupported)},
- {"nativeInjectDeviceContext",
- "(I)V",
- reinterpret_cast<void*>(InjectDeviceContext)},
- {"nativeIsGeofencingSupported",
- "()Z",
- reinterpret_cast<void*>(IsGeofencingSupported)},
- {"nativeAddGeofences",
- "([Landroid/hardware/location/GeofenceHardwareRequestParcelable;)V",
- reinterpret_cast<void*>(AddGeofences)},
- {"nativePauseGeofence", "(I)V", reinterpret_cast<void*>(PauseGeofence)},
- {"nativeResumeGeofence", "(II)V", reinterpret_cast<void*>(ResumeGeofence)},
- {"nativeModifyGeofenceOption",
- "(IIIIII)V",
- reinterpret_cast<void*>(ModifyGeofenceOption)},
- {"nativeRemoveGeofences", "([I)V", reinterpret_cast<void*>(RemoveGeofences)}
-};
-
-/*
- * Registration method invoked on JNI Load.
- */
-int register_android_server_location_FlpHardwareProvider(JNIEnv* env) {
- return jniRegisterNativeMethods(
- env,
- "com/android/server/location/FlpHardwareProvider",
- sMethods,
- NELEM(sMethods)
- );
-}
-
-} /* name-space Android */
diff --git a/services/jni/com_android_server_location_GpsLocationProvider.cpp b/services/jni/com_android_server_location_GpsLocationProvider.cpp
deleted file mode 100644
index aec254b..0000000
--- a/services/jni/com_android_server_location_GpsLocationProvider.cpp
+++ /dev/null
@@ -1,777 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "GpsLocationProvider"
-
-#define LOG_NDEBUG 0
-
-#include "JNIHelp.h"
-#include "jni.h"
-#include "hardware/hardware.h"
-#include "hardware/gps.h"
-#include "hardware_legacy/power.h"
-#include "utils/Log.h"
-#include "utils/misc.h"
-#include "android_runtime/AndroidRuntime.h"
-#include "android_runtime/Log.h"
-
-#include <string.h>
-#include <pthread.h>
-
-static jobject mCallbacksObj = NULL;
-
-static jmethodID method_reportLocation;
-static jmethodID method_reportStatus;
-static jmethodID method_reportSvStatus;
-static jmethodID method_reportAGpsStatus;
-static jmethodID method_reportNmea;
-static jmethodID method_setEngineCapabilities;
-static jmethodID method_xtraDownloadRequest;
-static jmethodID method_reportNiNotification;
-static jmethodID method_requestRefLocation;
-static jmethodID method_requestSetID;
-static jmethodID method_requestUtcTime;
-static jmethodID method_reportGeofenceTransition;
-static jmethodID method_reportGeofenceStatus;
-static jmethodID method_reportGeofenceAddStatus;
-static jmethodID method_reportGeofenceRemoveStatus;
-static jmethodID method_reportGeofencePauseStatus;
-static jmethodID method_reportGeofenceResumeStatus;
-
-static const GpsInterface* sGpsInterface = NULL;
-static const GpsXtraInterface* sGpsXtraInterface = NULL;
-static const AGpsInterface* sAGpsInterface = NULL;
-static const GpsNiInterface* sGpsNiInterface = NULL;
-static const GpsDebugInterface* sGpsDebugInterface = NULL;
-static const AGpsRilInterface* sAGpsRilInterface = NULL;
-static const GpsGeofencingInterface* sGpsGeofencingInterface = NULL;
-
-// temporary storage for GPS callbacks
-static GpsSvStatus sGpsSvStatus;
-static const char* sNmeaString;
-static int sNmeaStringLength;
-
-#define WAKE_LOCK_NAME "GPS"
-
-namespace android {
-
-static void checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
- if (env->ExceptionCheck()) {
- ALOGE("An exception was thrown by callback '%s'.", methodName);
- LOGE_EX(env);
- env->ExceptionClear();
- }
-}
-
-static void location_callback(GpsLocation* location)
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- env->CallVoidMethod(mCallbacksObj, method_reportLocation, location->flags,
- (jdouble)location->latitude, (jdouble)location->longitude,
- (jdouble)location->altitude,
- (jfloat)location->speed, (jfloat)location->bearing,
- (jfloat)location->accuracy, (jlong)location->timestamp);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-static void status_callback(GpsStatus* status)
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- env->CallVoidMethod(mCallbacksObj, method_reportStatus, status->status);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-static void sv_status_callback(GpsSvStatus* sv_status)
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- memcpy(&sGpsSvStatus, sv_status, sizeof(sGpsSvStatus));
- env->CallVoidMethod(mCallbacksObj, method_reportSvStatus);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-static void nmea_callback(GpsUtcTime timestamp, const char* nmea, int length)
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- // The Java code will call back to read these values
- // We do this to avoid creating unnecessary String objects
- sNmeaString = nmea;
- sNmeaStringLength = length;
- env->CallVoidMethod(mCallbacksObj, method_reportNmea, timestamp);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-static void set_capabilities_callback(uint32_t capabilities)
-{
- ALOGD("set_capabilities_callback: %du\n", capabilities);
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- env->CallVoidMethod(mCallbacksObj, method_setEngineCapabilities, capabilities);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-static void acquire_wakelock_callback()
-{
- acquire_wake_lock(PARTIAL_WAKE_LOCK, WAKE_LOCK_NAME);
-}
-
-static void release_wakelock_callback()
-{
- release_wake_lock(WAKE_LOCK_NAME);
-}
-
-static void request_utc_time_callback()
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- env->CallVoidMethod(mCallbacksObj, method_requestUtcTime);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-static pthread_t create_thread_callback(const char* name, void (*start)(void *), void* arg)
-{
- return (pthread_t)AndroidRuntime::createJavaThread(name, start, arg);
-}
-
-GpsCallbacks sGpsCallbacks = {
- sizeof(GpsCallbacks),
- location_callback,
- status_callback,
- sv_status_callback,
- nmea_callback,
- set_capabilities_callback,
- acquire_wakelock_callback,
- release_wakelock_callback,
- create_thread_callback,
- request_utc_time_callback,
-};
-
-static void xtra_download_request_callback()
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- env->CallVoidMethod(mCallbacksObj, method_xtraDownloadRequest);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-GpsXtraCallbacks sGpsXtraCallbacks = {
- xtra_download_request_callback,
- create_thread_callback,
-};
-
-static void agps_status_callback(AGpsStatus* agps_status)
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
-
- uint32_t ipaddr;
- // ipaddr field was not included in original AGpsStatus
- if (agps_status->size >= sizeof(AGpsStatus))
- ipaddr = agps_status->ipaddr;
- else
- ipaddr = 0xFFFFFFFF;
- env->CallVoidMethod(mCallbacksObj, method_reportAGpsStatus,
- agps_status->type, agps_status->status, ipaddr);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-AGpsCallbacks sAGpsCallbacks = {
- agps_status_callback,
- create_thread_callback,
-};
-
-static void gps_ni_notify_callback(GpsNiNotification *notification)
-{
- ALOGD("gps_ni_notify_callback\n");
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- jstring requestor_id = env->NewStringUTF(notification->requestor_id);
- jstring text = env->NewStringUTF(notification->text);
- jstring extras = env->NewStringUTF(notification->extras);
-
- if (requestor_id && text && extras) {
- env->CallVoidMethod(mCallbacksObj, method_reportNiNotification,
- notification->notification_id, notification->ni_type,
- notification->notify_flags, notification->timeout,
- notification->default_response, requestor_id, text,
- notification->requestor_id_encoding,
- notification->text_encoding, extras);
- } else {
- ALOGE("out of memory in gps_ni_notify_callback\n");
- }
-
- if (requestor_id)
- env->DeleteLocalRef(requestor_id);
- if (text)
- env->DeleteLocalRef(text);
- if (extras)
- env->DeleteLocalRef(extras);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-GpsNiCallbacks sGpsNiCallbacks = {
- gps_ni_notify_callback,
- create_thread_callback,
-};
-
-static void agps_request_set_id(uint32_t flags)
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- env->CallVoidMethod(mCallbacksObj, method_requestSetID, flags);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-static void agps_request_ref_location(uint32_t flags)
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- env->CallVoidMethod(mCallbacksObj, method_requestRefLocation, flags);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-}
-
-AGpsRilCallbacks sAGpsRilCallbacks = {
- agps_request_set_id,
- agps_request_ref_location,
- create_thread_callback,
-};
-
-static void gps_geofence_transition_callback(int32_t geofence_id, GpsLocation* location,
- int32_t transition, GpsUtcTime timestamp)
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
-
- env->CallVoidMethod(mCallbacksObj, method_reportGeofenceTransition, geofence_id,
- location->flags, (jdouble)location->latitude, (jdouble)location->longitude,
- (jdouble)location->altitude,
- (jfloat)location->speed, (jfloat)location->bearing,
- (jfloat)location->accuracy, (jlong)location->timestamp,
- transition, timestamp);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-};
-
-static void gps_geofence_status_callback(int32_t status, GpsLocation* location)
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- jint flags = 0;
- jdouble latitude = 0;
- jdouble longitude = 0;
- jdouble altitude = 0;
- jfloat speed = 0;
- jfloat bearing = 0;
- jfloat accuracy = 0;
- jlong timestamp = 0;
- if (location != NULL) {
- flags = location->flags;
- latitude = location->latitude;
- longitude = location->longitude;
- altitude = location->altitude;
- speed = location->speed;
- bearing = location->bearing;
- accuracy = location->accuracy;
- timestamp = location->timestamp;
- }
-
- env->CallVoidMethod(mCallbacksObj, method_reportGeofenceStatus, status,
- flags, latitude, longitude, altitude, speed, bearing, accuracy, timestamp);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-};
-
-static void gps_geofence_add_callback(int32_t geofence_id, int32_t status)
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- if (status != GPS_GEOFENCE_OPERATION_SUCCESS) {
- ALOGE("Error in geofence_add_callback: %d\n", status);
- }
- env->CallVoidMethod(mCallbacksObj, method_reportGeofenceAddStatus, geofence_id, status);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-};
-
-static void gps_geofence_remove_callback(int32_t geofence_id, int32_t status)
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- if (status != GPS_GEOFENCE_OPERATION_SUCCESS) {
- ALOGE("Error in geofence_remove_callback: %d\n", status);
- }
- env->CallVoidMethod(mCallbacksObj, method_reportGeofenceRemoveStatus, geofence_id, status);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-};
-
-static void gps_geofence_resume_callback(int32_t geofence_id, int32_t status)
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- if (status != GPS_GEOFENCE_OPERATION_SUCCESS) {
- ALOGE("Error in geofence_resume_callback: %d\n", status);
- }
- env->CallVoidMethod(mCallbacksObj, method_reportGeofenceResumeStatus, geofence_id, status);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-};
-
-static void gps_geofence_pause_callback(int32_t geofence_id, int32_t status)
-{
- JNIEnv* env = AndroidRuntime::getJNIEnv();
- if (status != GPS_GEOFENCE_OPERATION_SUCCESS) {
- ALOGE("Error in geofence_pause_callback: %d\n", status);
- }
- env->CallVoidMethod(mCallbacksObj, method_reportGeofencePauseStatus, geofence_id, status);
- checkAndClearExceptionFromCallback(env, __FUNCTION__);
-};
-
-GpsGeofenceCallbacks sGpsGeofenceCallbacks = {
- gps_geofence_transition_callback,
- gps_geofence_status_callback,
- gps_geofence_add_callback,
- gps_geofence_remove_callback,
- gps_geofence_pause_callback,
- gps_geofence_resume_callback,
- create_thread_callback,
-};
-
-static void android_location_GpsLocationProvider_class_init_native(JNIEnv* env, jclass clazz) {
- int err;
- hw_module_t* module;
-
- method_reportLocation = env->GetMethodID(clazz, "reportLocation", "(IDDDFFFJ)V");
- method_reportStatus = env->GetMethodID(clazz, "reportStatus", "(I)V");
- method_reportSvStatus = env->GetMethodID(clazz, "reportSvStatus", "()V");
- method_reportAGpsStatus = env->GetMethodID(clazz, "reportAGpsStatus", "(III)V");
- method_reportNmea = env->GetMethodID(clazz, "reportNmea", "(J)V");
- method_setEngineCapabilities = env->GetMethodID(clazz, "setEngineCapabilities", "(I)V");
- method_xtraDownloadRequest = env->GetMethodID(clazz, "xtraDownloadRequest", "()V");
- method_reportNiNotification = env->GetMethodID(clazz, "reportNiNotification",
- "(IIIIILjava/lang/String;Ljava/lang/String;IILjava/lang/String;)V");
- method_requestRefLocation = env->GetMethodID(clazz,"requestRefLocation","(I)V");
- method_requestSetID = env->GetMethodID(clazz,"requestSetID","(I)V");
- method_requestUtcTime = env->GetMethodID(clazz,"requestUtcTime","()V");
- method_reportGeofenceTransition = env->GetMethodID(clazz,"reportGeofenceTransition",
- "(IIDDDFFFJIJ)V");
- method_reportGeofenceStatus = env->GetMethodID(clazz,"reportGeofenceStatus",
- "(IIDDDFFFJ)V");
- method_reportGeofenceAddStatus = env->GetMethodID(clazz,"reportGeofenceAddStatus",
- "(II)V");
- method_reportGeofenceRemoveStatus = env->GetMethodID(clazz,"reportGeofenceRemoveStatus",
- "(II)V");
- method_reportGeofenceResumeStatus = env->GetMethodID(clazz,"reportGeofenceResumeStatus",
- "(II)V");
- method_reportGeofencePauseStatus = env->GetMethodID(clazz,"reportGeofencePauseStatus",
- "(II)V");
-
- err = hw_get_module(GPS_HARDWARE_MODULE_ID, (hw_module_t const**)&module);
- if (err == 0) {
- hw_device_t* device;
- err = module->methods->open(module, GPS_HARDWARE_MODULE_ID, &device);
- if (err == 0) {
- gps_device_t* gps_device = (gps_device_t *)device;
- sGpsInterface = gps_device->get_gps_interface(gps_device);
- }
- }
- if (sGpsInterface) {
- sGpsXtraInterface =
- (const GpsXtraInterface*)sGpsInterface->get_extension(GPS_XTRA_INTERFACE);
- sAGpsInterface =
- (const AGpsInterface*)sGpsInterface->get_extension(AGPS_INTERFACE);
- sGpsNiInterface =
- (const GpsNiInterface*)sGpsInterface->get_extension(GPS_NI_INTERFACE);
- sGpsDebugInterface =
- (const GpsDebugInterface*)sGpsInterface->get_extension(GPS_DEBUG_INTERFACE);
- sAGpsRilInterface =
- (const AGpsRilInterface*)sGpsInterface->get_extension(AGPS_RIL_INTERFACE);
- sGpsGeofencingInterface =
- (const GpsGeofencingInterface*)sGpsInterface->get_extension(GPS_GEOFENCING_INTERFACE);
- }
-}
-
-static jboolean android_location_GpsLocationProvider_is_supported(JNIEnv* env, jclass clazz) {
- return (sGpsInterface != NULL);
-}
-
-static jboolean android_location_GpsLocationProvider_init(JNIEnv* env, jobject obj)
-{
- // this must be set before calling into the HAL library
- if (!mCallbacksObj)
- mCallbacksObj = env->NewGlobalRef(obj);
-
- // fail if the main interface fails to initialize
- if (!sGpsInterface || sGpsInterface->init(&sGpsCallbacks) != 0)
- return false;
-
- // if XTRA initialization fails we will disable it by sGpsXtraInterface to NULL,
- // but continue to allow the rest of the GPS interface to work.
- if (sGpsXtraInterface && sGpsXtraInterface->init(&sGpsXtraCallbacks) != 0)
- sGpsXtraInterface = NULL;
- if (sAGpsInterface)
- sAGpsInterface->init(&sAGpsCallbacks);
- if (sGpsNiInterface)
- sGpsNiInterface->init(&sGpsNiCallbacks);
- if (sAGpsRilInterface)
- sAGpsRilInterface->init(&sAGpsRilCallbacks);
- if (sGpsGeofencingInterface)
- sGpsGeofencingInterface->init(&sGpsGeofenceCallbacks);
-
- return true;
-}
-
-static void android_location_GpsLocationProvider_cleanup(JNIEnv* env, jobject obj)
-{
- if (sGpsInterface)
- sGpsInterface->cleanup();
-}
-
-static jboolean android_location_GpsLocationProvider_set_position_mode(JNIEnv* env, jobject obj,
- jint mode, jint recurrence, jint min_interval, jint preferred_accuracy, jint preferred_time)
-{
- if (sGpsInterface)
- return (sGpsInterface->set_position_mode(mode, recurrence, min_interval, preferred_accuracy,
- preferred_time) == 0);
- else
- return false;
-}
-
-static jboolean android_location_GpsLocationProvider_start(JNIEnv* env, jobject obj)
-{
- if (sGpsInterface)
- return (sGpsInterface->start() == 0);
- else
- return false;
-}
-
-static jboolean android_location_GpsLocationProvider_stop(JNIEnv* env, jobject obj)
-{
- if (sGpsInterface)
- return (sGpsInterface->stop() == 0);
- else
- return false;
-}
-
-static void android_location_GpsLocationProvider_delete_aiding_data(JNIEnv* env, jobject obj, jint flags)
-{
- if (sGpsInterface)
- sGpsInterface->delete_aiding_data(flags);
-}
-
-static jint android_location_GpsLocationProvider_read_sv_status(JNIEnv* env, jobject obj,
- jintArray prnArray, jfloatArray snrArray, jfloatArray elevArray, jfloatArray azumArray,
- jintArray maskArray)
-{
- // this should only be called from within a call to reportSvStatus
-
- jint* prns = env->GetIntArrayElements(prnArray, 0);
- jfloat* snrs = env->GetFloatArrayElements(snrArray, 0);
- jfloat* elev = env->GetFloatArrayElements(elevArray, 0);
- jfloat* azim = env->GetFloatArrayElements(azumArray, 0);
- jint* mask = env->GetIntArrayElements(maskArray, 0);
-
- int num_svs = sGpsSvStatus.num_svs;
- for (int i = 0; i < num_svs; i++) {
- prns[i] = sGpsSvStatus.sv_list[i].prn;
- snrs[i] = sGpsSvStatus.sv_list[i].snr;
- elev[i] = sGpsSvStatus.sv_list[i].elevation;
- azim[i] = sGpsSvStatus.sv_list[i].azimuth;
- }
- mask[0] = sGpsSvStatus.ephemeris_mask;
- mask[1] = sGpsSvStatus.almanac_mask;
- mask[2] = sGpsSvStatus.used_in_fix_mask;
-
- env->ReleaseIntArrayElements(prnArray, prns, 0);
- env->ReleaseFloatArrayElements(snrArray, snrs, 0);
- env->ReleaseFloatArrayElements(elevArray, elev, 0);
- env->ReleaseFloatArrayElements(azumArray, azim, 0);
- env->ReleaseIntArrayElements(maskArray, mask, 0);
- return num_svs;
-}
-
-static void android_location_GpsLocationProvider_agps_set_reference_location_cellid(JNIEnv* env,
- jobject obj, jint type, jint mcc, jint mnc, jint lac, jint cid)
-{
- AGpsRefLocation location;
-
- if (!sAGpsRilInterface) {
- ALOGE("no AGPS RIL interface in agps_set_reference_location_cellid");
- return;
- }
-
- switch(type) {
- case AGPS_REF_LOCATION_TYPE_GSM_CELLID:
- case AGPS_REF_LOCATION_TYPE_UMTS_CELLID:
- location.type = type;
- location.u.cellID.mcc = mcc;
- location.u.cellID.mnc = mnc;
- location.u.cellID.lac = lac;
- location.u.cellID.cid = cid;
- break;
- default:
- ALOGE("Neither a GSM nor a UMTS cellid (%s:%d).",__FUNCTION__,__LINE__);
- return;
- break;
- }
- sAGpsRilInterface->set_ref_location(&location, sizeof(location));
-}
-
-static void android_location_GpsLocationProvider_agps_send_ni_message(JNIEnv* env,
- jobject obj, jbyteArray ni_msg, jint size)
-{
- size_t sz;
-
- if (!sAGpsRilInterface) {
- ALOGE("no AGPS RIL interface in send_ni_message");
- return;
- }
- if (size < 0)
- return;
- sz = (size_t)size;
- jbyte* b = env->GetByteArrayElements(ni_msg, 0);
- sAGpsRilInterface->ni_message((uint8_t *)b,sz);
- env->ReleaseByteArrayElements(ni_msg,b,0);
-}
-
-static void android_location_GpsLocationProvider_agps_set_id(JNIEnv *env,
- jobject obj, jint type, jstring setid_string)
-{
- if (!sAGpsRilInterface) {
- ALOGE("no AGPS RIL interface in agps_set_id");
- return;
- }
-
- const char *setid = env->GetStringUTFChars(setid_string, NULL);
- sAGpsRilInterface->set_set_id(type, setid);
- env->ReleaseStringUTFChars(setid_string, setid);
-}
-
-static jint android_location_GpsLocationProvider_read_nmea(JNIEnv* env, jobject obj,
- jbyteArray nmeaArray, jint buffer_size)
-{
- // this should only be called from within a call to reportNmea
- jbyte* nmea = (jbyte *)env->GetPrimitiveArrayCritical(nmeaArray, 0);
- int length = sNmeaStringLength;
- if (length > buffer_size)
- length = buffer_size;
- memcpy(nmea, sNmeaString, length);
- env->ReleasePrimitiveArrayCritical(nmeaArray, nmea, JNI_ABORT);
- return length;
-}
-
-static void android_location_GpsLocationProvider_inject_time(JNIEnv* env, jobject obj,
- jlong time, jlong timeReference, jint uncertainty)
-{
- if (sGpsInterface)
- sGpsInterface->inject_time(time, timeReference, uncertainty);
-}
-
-static void android_location_GpsLocationProvider_inject_location(JNIEnv* env, jobject obj,
- jdouble latitude, jdouble longitude, jfloat accuracy)
-{
- if (sGpsInterface)
- sGpsInterface->inject_location(latitude, longitude, accuracy);
-}
-
-static jboolean android_location_GpsLocationProvider_supports_xtra(JNIEnv* env, jobject obj)
-{
- return (sGpsXtraInterface != NULL);
-}
-
-static void android_location_GpsLocationProvider_inject_xtra_data(JNIEnv* env, jobject obj,
- jbyteArray data, jint length)
-{
- if (!sGpsXtraInterface) {
- ALOGE("no XTRA interface in inject_xtra_data");
- return;
- }
-
- jbyte* bytes = (jbyte *)env->GetPrimitiveArrayCritical(data, 0);
- sGpsXtraInterface->inject_xtra_data((char *)bytes, length);
- env->ReleasePrimitiveArrayCritical(data, bytes, JNI_ABORT);
-}
-
-static void android_location_GpsLocationProvider_agps_data_conn_open(JNIEnv* env, jobject obj, jstring apn)
-{
- if (!sAGpsInterface) {
- ALOGE("no AGPS interface in agps_data_conn_open");
- return;
- }
- if (apn == NULL) {
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- return;
- }
- const char *apnStr = env->GetStringUTFChars(apn, NULL);
- sAGpsInterface->data_conn_open(apnStr);
- env->ReleaseStringUTFChars(apn, apnStr);
-}
-
-static void android_location_GpsLocationProvider_agps_data_conn_closed(JNIEnv* env, jobject obj)
-{
- if (!sAGpsInterface) {
- ALOGE("no AGPS interface in agps_data_conn_closed");
- return;
- }
- sAGpsInterface->data_conn_closed();
-}
-
-static void android_location_GpsLocationProvider_agps_data_conn_failed(JNIEnv* env, jobject obj)
-{
- if (!sAGpsInterface) {
- ALOGE("no AGPS interface in agps_data_conn_failed");
- return;
- }
- sAGpsInterface->data_conn_failed();
-}
-
-static void android_location_GpsLocationProvider_set_agps_server(JNIEnv* env, jobject obj,
- jint type, jstring hostname, jint port)
-{
- if (!sAGpsInterface) {
- ALOGE("no AGPS interface in set_agps_server");
- return;
- }
- const char *c_hostname = env->GetStringUTFChars(hostname, NULL);
- sAGpsInterface->set_server(type, c_hostname, port);
- env->ReleaseStringUTFChars(hostname, c_hostname);
-}
-
-static void android_location_GpsLocationProvider_send_ni_response(JNIEnv* env, jobject obj,
- jint notifId, jint response)
-{
- if (!sGpsNiInterface) {
- ALOGE("no NI interface in send_ni_response");
- return;
- }
-
- sGpsNiInterface->respond(notifId, response);
-}
-
-static jstring android_location_GpsLocationProvider_get_internal_state(JNIEnv* env, jobject obj)
-{
- jstring result = NULL;
- if (sGpsDebugInterface) {
- const size_t maxLength = 2047;
- char buffer[maxLength+1];
- size_t length = sGpsDebugInterface->get_internal_state(buffer, maxLength);
- if (length > maxLength) length = maxLength;
- buffer[length] = 0;
- result = env->NewStringUTF(buffer);
- }
- return result;
-}
-
-static void android_location_GpsLocationProvider_update_network_state(JNIEnv* env, jobject obj,
- jboolean connected, int type, jboolean roaming, jboolean available, jstring extraInfo, jstring apn)
-{
-
- if (sAGpsRilInterface && sAGpsRilInterface->update_network_state) {
- if (extraInfo) {
- const char *extraInfoStr = env->GetStringUTFChars(extraInfo, NULL);
- sAGpsRilInterface->update_network_state(connected, type, roaming, extraInfoStr);
- env->ReleaseStringUTFChars(extraInfo, extraInfoStr);
- } else {
- sAGpsRilInterface->update_network_state(connected, type, roaming, NULL);
- }
-
- // update_network_availability callback was not included in original AGpsRilInterface
- if (sAGpsRilInterface->size >= sizeof(AGpsRilInterface)
- && sAGpsRilInterface->update_network_availability) {
- const char *c_apn = env->GetStringUTFChars(apn, NULL);
- sAGpsRilInterface->update_network_availability(available, c_apn);
- env->ReleaseStringUTFChars(apn, c_apn);
- }
- }
-}
-
-static jboolean android_location_GpsLocationProvider_is_geofence_supported(JNIEnv* env,
- jobject obj) {
- if (sGpsGeofencingInterface != NULL) {
- return JNI_TRUE;
- }
- return JNI_FALSE;
-}
-
-static jboolean android_location_GpsLocationProvider_add_geofence(JNIEnv* env, jobject obj,
- jint geofence_id, jdouble latitude, jdouble longitude, jdouble radius,
- jint last_transition, jint monitor_transition, jint notification_responsiveness,
- jint unknown_timer) {
- if (sGpsGeofencingInterface != NULL) {
- sGpsGeofencingInterface->add_geofence_area(geofence_id, latitude, longitude,
- radius, last_transition, monitor_transition, notification_responsiveness,
- unknown_timer);
- return JNI_TRUE;
- } else {
- ALOGE("Geofence interface not available");
- }
- return JNI_FALSE;
-}
-
-static jboolean android_location_GpsLocationProvider_remove_geofence(JNIEnv* env, jobject obj,
- jint geofence_id) {
- if (sGpsGeofencingInterface != NULL) {
- sGpsGeofencingInterface->remove_geofence_area(geofence_id);
- return JNI_TRUE;
- } else {
- ALOGE("Geofence interface not available");
- }
- return JNI_FALSE;
-}
-
-static jboolean android_location_GpsLocationProvider_pause_geofence(JNIEnv* env, jobject obj,
- jint geofence_id) {
- if (sGpsGeofencingInterface != NULL) {
- sGpsGeofencingInterface->pause_geofence(geofence_id);
- return JNI_TRUE;
- } else {
- ALOGE("Geofence interface not available");
- }
- return JNI_FALSE;
-}
-
-static jboolean android_location_GpsLocationProvider_resume_geofence(JNIEnv* env, jobject obj,
- jint geofence_id, jint monitor_transition) {
- if (sGpsGeofencingInterface != NULL) {
- sGpsGeofencingInterface->resume_geofence(geofence_id, monitor_transition);
- return JNI_TRUE;
- } else {
- ALOGE("Geofence interface not available");
- }
- return JNI_FALSE;
-}
-
-static JNINativeMethod sMethods[] = {
- /* name, signature, funcPtr */
- {"class_init_native", "()V", (void *)android_location_GpsLocationProvider_class_init_native},
- {"native_is_supported", "()Z", (void*)android_location_GpsLocationProvider_is_supported},
- {"native_init", "()Z", (void*)android_location_GpsLocationProvider_init},
- {"native_cleanup", "()V", (void*)android_location_GpsLocationProvider_cleanup},
- {"native_set_position_mode", "(IIIII)Z", (void*)android_location_GpsLocationProvider_set_position_mode},
- {"native_start", "()Z", (void*)android_location_GpsLocationProvider_start},
- {"native_stop", "()Z", (void*)android_location_GpsLocationProvider_stop},
- {"native_delete_aiding_data", "(I)V", (void*)android_location_GpsLocationProvider_delete_aiding_data},
- {"native_read_sv_status", "([I[F[F[F[I)I", (void*)android_location_GpsLocationProvider_read_sv_status},
- {"native_read_nmea", "([BI)I", (void*)android_location_GpsLocationProvider_read_nmea},
- {"native_inject_time", "(JJI)V", (void*)android_location_GpsLocationProvider_inject_time},
- {"native_inject_location", "(DDF)V", (void*)android_location_GpsLocationProvider_inject_location},
- {"native_supports_xtra", "()Z", (void*)android_location_GpsLocationProvider_supports_xtra},
- {"native_inject_xtra_data", "([BI)V", (void*)android_location_GpsLocationProvider_inject_xtra_data},
- {"native_agps_data_conn_open", "(Ljava/lang/String;)V", (void*)android_location_GpsLocationProvider_agps_data_conn_open},
- {"native_agps_data_conn_closed", "()V", (void*)android_location_GpsLocationProvider_agps_data_conn_closed},
- {"native_agps_data_conn_failed", "()V", (void*)android_location_GpsLocationProvider_agps_data_conn_failed},
- {"native_agps_set_id","(ILjava/lang/String;)V",(void*)android_location_GpsLocationProvider_agps_set_id},
- {"native_agps_set_ref_location_cellid","(IIIII)V",(void*)android_location_GpsLocationProvider_agps_set_reference_location_cellid},
- {"native_set_agps_server", "(ILjava/lang/String;I)V", (void*)android_location_GpsLocationProvider_set_agps_server},
- {"native_send_ni_response", "(II)V", (void*)android_location_GpsLocationProvider_send_ni_response},
- {"native_agps_ni_message", "([BI)V", (void *)android_location_GpsLocationProvider_agps_send_ni_message},
- {"native_get_internal_state", "()Ljava/lang/String;", (void*)android_location_GpsLocationProvider_get_internal_state},
- {"native_update_network_state", "(ZIZZLjava/lang/String;Ljava/lang/String;)V", (void*)android_location_GpsLocationProvider_update_network_state },
- {"native_is_geofence_supported", "()Z", (void*) android_location_GpsLocationProvider_is_geofence_supported},
- {"native_add_geofence", "(IDDDIIII)Z", (void *)android_location_GpsLocationProvider_add_geofence},
- {"native_remove_geofence", "(I)Z", (void *)android_location_GpsLocationProvider_remove_geofence},
- {"native_pause_geofence", "(I)Z", (void *)android_location_GpsLocationProvider_pause_geofence},
- {"native_resume_geofence", "(II)Z", (void *)android_location_GpsLocationProvider_resume_geofence}
-};
-
-int register_android_server_location_GpsLocationProvider(JNIEnv* env)
-{
- return jniRegisterNativeMethods(env, "com/android/server/location/GpsLocationProvider", sMethods, NELEM(sMethods));
-}
-
-} /* namespace android */
diff --git a/services/jni/com_android_server_power_PowerManagerService.cpp b/services/jni/com_android_server_power_PowerManagerService.cpp
deleted file mode 100644
index 151e134..0000000
--- a/services/jni/com_android_server_power_PowerManagerService.cpp
+++ /dev/null
@@ -1,252 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "PowerManagerService-JNI"
-
-//#define LOG_NDEBUG 0
-
-#include "JNIHelp.h"
-#include "jni.h"
-
-#include <ScopedUtfChars.h>
-
-#include <limits.h>
-
-#include <android_runtime/AndroidRuntime.h>
-#include <android_runtime/Log.h>
-#include <utils/Timers.h>
-#include <utils/misc.h>
-#include <utils/String8.h>
-#include <utils/Log.h>
-#include <hardware/power.h>
-#include <hardware_legacy/power.h>
-#include <suspend/autosuspend.h>
-
-#include "com_android_server_power_PowerManagerService.h"
-
-namespace android {
-
-// ----------------------------------------------------------------------------
-
-static struct {
- jmethodID wakeUpFromNative;
- jmethodID goToSleepFromNative;
- jmethodID userActivityFromNative;
-} gPowerManagerServiceClassInfo;
-
-// ----------------------------------------------------------------------------
-
-static jobject gPowerManagerServiceObj;
-static struct power_module* gPowerModule;
-
-static Mutex gPowerManagerLock;
-static bool gScreenOn;
-static bool gScreenBright;
-
-static nsecs_t gLastEventTime[USER_ACTIVITY_EVENT_LAST + 1];
-
-// Throttling interval for user activity calls.
-static const nsecs_t MIN_TIME_BETWEEN_USERACTIVITIES = 500 * 1000000L; // 500ms
-
-// ----------------------------------------------------------------------------
-
-static bool checkAndClearExceptionFromCallback(JNIEnv* env, const char* methodName) {
- if (env->ExceptionCheck()) {
- ALOGE("An exception was thrown by callback '%s'.", methodName);
- LOGE_EX(env);
- env->ExceptionClear();
- return true;
- }
- return false;
-}
-
-bool android_server_PowerManagerService_isScreenOn() {
- AutoMutex _l(gPowerManagerLock);
- return gScreenOn;
-}
-
-bool android_server_PowerManagerService_isScreenBright() {
- AutoMutex _l(gPowerManagerLock);
- return gScreenBright;
-}
-
-void android_server_PowerManagerService_userActivity(nsecs_t eventTime, int32_t eventType) {
- // Tell the power HAL when user activity occurs.
- if (gPowerModule && gPowerModule->powerHint) {
- gPowerModule->powerHint(gPowerModule, POWER_HINT_INTERACTION, NULL);
- }
-
- if (gPowerManagerServiceObj) {
- // Throttle calls into user activity by event type.
- // We're a little conservative about argument checking here in case the caller
- // passes in bad data which could corrupt system state.
- if (eventType >= 0 && eventType <= USER_ACTIVITY_EVENT_LAST) {
- nsecs_t now = systemTime(SYSTEM_TIME_MONOTONIC);
- if (eventTime > now) {
- eventTime = now;
- }
-
- if (gLastEventTime[eventType] + MIN_TIME_BETWEEN_USERACTIVITIES > eventTime) {
- return;
- }
- gLastEventTime[eventType] = eventTime;
- }
-
- JNIEnv* env = AndroidRuntime::getJNIEnv();
-
- env->CallVoidMethod(gPowerManagerServiceObj,
- gPowerManagerServiceClassInfo.userActivityFromNative,
- nanoseconds_to_milliseconds(eventTime), eventType, 0);
- checkAndClearExceptionFromCallback(env, "userActivityFromNative");
- }
-}
-
-void android_server_PowerManagerService_wakeUp(nsecs_t eventTime) {
- if (gPowerManagerServiceObj) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
-
- env->CallVoidMethod(gPowerManagerServiceObj,
- gPowerManagerServiceClassInfo.wakeUpFromNative,
- nanoseconds_to_milliseconds(eventTime));
- checkAndClearExceptionFromCallback(env, "wakeUpFromNative");
- }
-}
-
-void android_server_PowerManagerService_goToSleep(nsecs_t eventTime) {
- if (gPowerManagerServiceObj) {
- JNIEnv* env = AndroidRuntime::getJNIEnv();
-
- env->CallVoidMethod(gPowerManagerServiceObj,
- gPowerManagerServiceClassInfo.goToSleepFromNative,
- nanoseconds_to_milliseconds(eventTime), 0);
- checkAndClearExceptionFromCallback(env, "goToSleepFromNative");
- }
-}
-
-// ----------------------------------------------------------------------------
-
-static void nativeInit(JNIEnv* env, jobject obj) {
- gPowerManagerServiceObj = env->NewGlobalRef(obj);
-
- status_t err = hw_get_module(POWER_HARDWARE_MODULE_ID,
- (hw_module_t const**)&gPowerModule);
- if (!err) {
- gPowerModule->init(gPowerModule);
- } else {
- ALOGE("Couldn't load %s module (%s)", POWER_HARDWARE_MODULE_ID, strerror(-err));
- }
-}
-
-static void nativeSetPowerState(JNIEnv* env,
- jclass clazz, jboolean screenOn, jboolean screenBright) {
- AutoMutex _l(gPowerManagerLock);
- gScreenOn = screenOn;
- gScreenBright = screenBright;
-}
-
-static void nativeAcquireSuspendBlocker(JNIEnv *env, jclass clazz, jstring nameStr) {
- ScopedUtfChars name(env, nameStr);
- acquire_wake_lock(PARTIAL_WAKE_LOCK, name.c_str());
-}
-
-static void nativeReleaseSuspendBlocker(JNIEnv *env, jclass clazz, jstring nameStr) {
- ScopedUtfChars name(env, nameStr);
- release_wake_lock(name.c_str());
-}
-
-static void nativeSetInteractive(JNIEnv *env, jclass clazz, jboolean enable) {
- if (gPowerModule) {
- if (enable) {
- ALOGD_IF_SLOW(20, "Excessive delay in setInteractive(true) while turning screen on");
- gPowerModule->setInteractive(gPowerModule, true);
- } else {
- ALOGD_IF_SLOW(20, "Excessive delay in setInteractive(false) while turning screen off");
- gPowerModule->setInteractive(gPowerModule, false);
- }
- }
-}
-
-static void nativeSetAutoSuspend(JNIEnv *env, jclass clazz, jboolean enable) {
- if (enable) {
- ALOGD_IF_SLOW(100, "Excessive delay in autosuspend_enable() while turning screen off");
- autosuspend_enable();
- } else {
- ALOGD_IF_SLOW(100, "Excessive delay in autosuspend_disable() while turning screen on");
- autosuspend_disable();
- }
-}
-
-// ----------------------------------------------------------------------------
-
-static JNINativeMethod gPowerManagerServiceMethods[] = {
- /* name, signature, funcPtr */
- { "nativeInit", "()V",
- (void*) nativeInit },
- { "nativeSetPowerState", "(ZZ)V",
- (void*) nativeSetPowerState },
- { "nativeAcquireSuspendBlocker", "(Ljava/lang/String;)V",
- (void*) nativeAcquireSuspendBlocker },
- { "nativeReleaseSuspendBlocker", "(Ljava/lang/String;)V",
- (void*) nativeReleaseSuspendBlocker },
- { "nativeSetInteractive", "(Z)V",
- (void*) nativeSetInteractive },
- { "nativeSetAutoSuspend", "(Z)V",
- (void*) nativeSetAutoSuspend },
-};
-
-#define FIND_CLASS(var, className) \
- var = env->FindClass(className); \
- LOG_FATAL_IF(! var, "Unable to find class " className);
-
-#define GET_METHOD_ID(var, clazz, methodName, methodDescriptor) \
- var = env->GetMethodID(clazz, methodName, methodDescriptor); \
- LOG_FATAL_IF(! var, "Unable to find method " methodName);
-
-#define GET_FIELD_ID(var, clazz, fieldName, fieldDescriptor) \
- var = env->GetFieldID(clazz, fieldName, fieldDescriptor); \
- LOG_FATAL_IF(! var, "Unable to find field " fieldName);
-
-int register_android_server_PowerManagerService(JNIEnv* env) {
- int res = jniRegisterNativeMethods(env, "com/android/server/power/PowerManagerService",
- gPowerManagerServiceMethods, NELEM(gPowerManagerServiceMethods));
- LOG_FATAL_IF(res < 0, "Unable to register native methods.");
-
- // Callbacks
-
- jclass clazz;
- FIND_CLASS(clazz, "com/android/server/power/PowerManagerService");
-
- GET_METHOD_ID(gPowerManagerServiceClassInfo.wakeUpFromNative, clazz,
- "wakeUpFromNative", "(J)V");
-
- GET_METHOD_ID(gPowerManagerServiceClassInfo.goToSleepFromNative, clazz,
- "goToSleepFromNative", "(JI)V");
-
- GET_METHOD_ID(gPowerManagerServiceClassInfo.userActivityFromNative, clazz,
- "userActivityFromNative", "(JII)V");
-
- // Initialize
- for (int i = 0; i <= USER_ACTIVITY_EVENT_LAST; i++) {
- gLastEventTime[i] = LLONG_MIN;
- }
- gScreenOn = true;
- gScreenBright = true;
- gPowerManagerServiceObj = NULL;
- gPowerModule = NULL;
- return 0;
-}
-
-} /* namespace android */
diff --git a/services/jni/com_android_server_power_PowerManagerService.h b/services/jni/com_android_server_power_PowerManagerService.h
deleted file mode 100644
index 0808b80..0000000
--- a/services/jni/com_android_server_power_PowerManagerService.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (C) 2010 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef _ANDROID_SERVER_POWER_MANAGER_SERVICE_H
-#define _ANDROID_SERVER_POWER_MANAGER_SERVICE_H
-
-#include "JNIHelp.h"
-#include "jni.h"
-
-#include <androidfw/PowerManager.h>
-
-namespace android {
-
-extern bool android_server_PowerManagerService_isScreenOn();
-extern bool android_server_PowerManagerService_isScreenBright();
-extern void android_server_PowerManagerService_userActivity(nsecs_t eventTime, int32_t eventType);
-extern void android_server_PowerManagerService_wakeUp(nsecs_t eventTime);
-extern void android_server_PowerManagerService_goToSleep(nsecs_t eventTime);
-
-} // namespace android
-
-#endif // _ANDROID_SERVER_POWER_MANAGER_SERVICE_H
diff --git a/services/jni/onload.cpp b/services/jni/onload.cpp
deleted file mode 100644
index efc34a2..0000000
--- a/services/jni/onload.cpp
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "JNIHelp.h"
-#include "jni.h"
-#include "utils/Log.h"
-#include "utils/misc.h"
-
-namespace android {
-int register_android_server_AlarmManagerService(JNIEnv* env);
-int register_android_server_ConsumerIrService(JNIEnv *env);
-int register_android_server_InputApplicationHandle(JNIEnv* env);
-int register_android_server_InputWindowHandle(JNIEnv* env);
-int register_android_server_InputManager(JNIEnv* env);
-int register_android_server_LightsService(JNIEnv* env);
-int register_android_server_PowerManagerService(JNIEnv* env);
-int register_android_server_SerialService(JNIEnv* env);
-int register_android_server_UsbDeviceManager(JNIEnv* env);
-int register_android_server_UsbHostManager(JNIEnv* env);
-int register_android_server_VibratorService(JNIEnv* env);
-int register_android_server_SystemServer(JNIEnv* env);
-int register_android_server_location_GpsLocationProvider(JNIEnv* env);
-int register_android_server_location_FlpHardwareProvider(JNIEnv* env);
-int register_android_server_connectivity_Vpn(JNIEnv* env);
-int register_android_server_AssetAtlasService(JNIEnv* env);
-};
-
-using namespace android;
-
-extern "C" jint JNI_OnLoad(JavaVM* vm, void* reserved)
-{
- JNIEnv* env = NULL;
- jint result = -1;
-
- if (vm->GetEnv((void**) &env, JNI_VERSION_1_4) != JNI_OK) {
- ALOGE("GetEnv failed!");
- return result;
- }
- ALOG_ASSERT(env, "Could not retrieve the env!");
-
- register_android_server_PowerManagerService(env);
- register_android_server_SerialService(env);
- register_android_server_InputApplicationHandle(env);
- register_android_server_InputWindowHandle(env);
- register_android_server_InputManager(env);
- register_android_server_LightsService(env);
- register_android_server_AlarmManagerService(env);
- register_android_server_UsbDeviceManager(env);
- register_android_server_UsbHostManager(env);
- register_android_server_VibratorService(env);
- register_android_server_SystemServer(env);
- register_android_server_location_GpsLocationProvider(env);
- register_android_server_location_FlpHardwareProvider(env);
- register_android_server_connectivity_Vpn(env);
- register_android_server_AssetAtlasService(env);
- register_android_server_ConsumerIrService(env);
-
-
- return JNI_VERSION_1_4;
-}