diff options
author | Wu-cheng Li <wuchengli@google.com> | 2012-02-23 19:01:00 -0800 |
---|---|---|
committer | Wu-cheng Li <wuchengli@google.com> | 2012-03-15 14:50:48 +0800 |
commit | a1c41e13b521cdd611a8fc46e43b5ae0a2c00238 (patch) | |
tree | 48877fa91b94c62482519f040e966997a9d214d2 /core/jni/android_hardware_Camera.cpp | |
parent | 5571ffdd9d419e3b1e050501e6f8dbfb04159b5d (diff) | |
download | frameworks_base-a1c41e13b521cdd611a8fc46e43b5ae0a2c00238.zip frameworks_base-a1c41e13b521cdd611a8fc46e43b5ae0a2c00238.tar.gz frameworks_base-a1c41e13b521cdd611a8fc46e43b5ae0a2c00238.tar.bz2 |
Add a new camera open API that allows taking the ownership.
The purpose is to let face unlock always get the camera
successfully. What happened was the camera applications may
have opened the camera in onResume under the lock screen.
This API lets face unlock take the camera from the camera
application. A new permission will be added, so other
applicatoins won't be able to take the camera from the face
unlock.
bug:5584464
Change-Id: Ib3d9dcbc2161815b68db42327dc01148453704c6
Diffstat (limited to 'core/jni/android_hardware_Camera.cpp')
-rw-r--r-- | core/jni/android_hardware_Camera.cpp | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/core/jni/android_hardware_Camera.cpp b/core/jni/android_hardware_Camera.cpp index 0c66b86..36b4b45 100644 --- a/core/jni/android_hardware_Camera.cpp +++ b/core/jni/android_hardware_Camera.cpp @@ -457,9 +457,9 @@ static void android_hardware_Camera_getCameraInfo(JNIEnv *env, jobject thiz, // connect to camera service static void android_hardware_Camera_native_setup(JNIEnv *env, jobject thiz, - jobject weak_this, jint cameraId) + jobject weak_this, jint cameraId, jboolean force, jboolean keep) { - sp<Camera> camera = Camera::connect(cameraId); + sp<Camera> camera = Camera::connect(cameraId, force, keep); if (camera == NULL) { jniThrowRuntimeException(env, "Fail to connect to camera service"); @@ -700,7 +700,12 @@ static jstring android_hardware_Camera_getParameters(JNIEnv *env, jobject thiz) sp<Camera> camera = get_native_camera(env, thiz, NULL); if (camera == 0) return 0; - return env->NewStringUTF(camera->getParameters().string()); + String8 params8 = camera->getParameters(); + if (params8.isEmpty()) { + jniThrowRuntimeException(env, "getParameters failed (empty parameters)"); + return 0; + } + return env->NewStringUTF(params8.string()); } static void android_hardware_Camera_reconnect(JNIEnv *env, jobject thiz) @@ -816,6 +821,15 @@ static void android_hardware_Camera_enableFocusMoveCallback(JNIEnv *env, jobject } } +static bool android_hardware_Camera_isReleased(JNIEnv *env, jobject thiz) +{ + ALOGV("isReleased"); + sp<Camera> camera = get_native_camera(env, thiz, NULL); + if (camera == 0) return true; + + return (camera->sendCommand(CAMERA_CMD_PING, 0, 0) != NO_ERROR); +} + //------------------------------------------------- static JNINativeMethod camMethods[] = { @@ -826,7 +840,7 @@ static JNINativeMethod camMethods[] = { "(ILandroid/hardware/Camera$CameraInfo;)V", (void*)android_hardware_Camera_getCameraInfo }, { "native_setup", - "(Ljava/lang/Object;I)V", + "(Ljava/lang/Object;IZZ)V", (void*)android_hardware_Camera_native_setup }, { "native_release", "()V", @@ -894,6 +908,9 @@ static JNINativeMethod camMethods[] = { { "enableFocusMoveCallback", "(I)V", (void *)android_hardware_Camera_enableFocusMoveCallback}, + { "isReleased", + "()Z", + (void *)android_hardware_Camera_isReleased}, }; struct field { |