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 | 2fd2440d0175ca3e196b01b7541a9e0d4ed9a694 (patch) | |
tree | d87e4314688e65f4c53f04021c8452051d4b31eb /camera | |
parent | cbcd6e869dd41158076e742a31c1ee410fc0c713 (diff) | |
download | frameworks_av-2fd2440d0175ca3e196b01b7541a9e0d4ed9a694.zip frameworks_av-2fd2440d0175ca3e196b01b7541a9e0d4ed9a694.tar.gz frameworks_av-2fd2440d0175ca3e196b01b7541a9e0d4ed9a694.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 'camera')
-rw-r--r-- | camera/Camera.cpp | 4 | ||||
-rw-r--r-- | camera/ICameraService.cpp | 11 |
2 files changed, 10 insertions, 5 deletions
diff --git a/camera/Camera.cpp b/camera/Camera.cpp index d43cb0b..b81fe86 100644 --- a/camera/Camera.cpp +++ b/camera/Camera.cpp @@ -116,13 +116,13 @@ status_t Camera::getCameraInfo(int cameraId, return cs->getCameraInfo(cameraId, cameraInfo); } -sp<Camera> Camera::connect(int cameraId) +sp<Camera> Camera::connect(int cameraId, bool force, bool keep) { ALOGV("connect"); sp<Camera> c = new Camera(); const sp<ICameraService>& cs = getCameraService(); if (cs != 0) { - c->mCamera = cs->connect(c, cameraId); + c->mCamera = cs->connect(c, cameraId, force, keep); } if (c->mCamera != 0) { c->mCamera->asBinder()->linkToDeath(c); diff --git a/camera/ICameraService.cpp b/camera/ICameraService.cpp index 85f1a29..c74298a 100644 --- a/camera/ICameraService.cpp +++ b/camera/ICameraService.cpp @@ -56,12 +56,15 @@ public: } // connect to camera service - virtual sp<ICamera> connect(const sp<ICameraClient>& cameraClient, int cameraId) + virtual sp<ICamera> connect(const sp<ICameraClient>& cameraClient, int cameraId, + bool force, bool keep) { Parcel data, reply; data.writeInterfaceToken(ICameraService::getInterfaceDescriptor()); data.writeStrongBinder(cameraClient->asBinder()); data.writeInt32(cameraId); + data.writeInt32(force); + data.writeInt32(keep); remote()->transact(BnCameraService::CONNECT, data, &reply); return interface_cast<ICamera>(reply.readStrongBinder()); } @@ -93,7 +96,10 @@ status_t BnCameraService::onTransact( case CONNECT: { CHECK_INTERFACE(ICameraService, data, reply); sp<ICameraClient> cameraClient = interface_cast<ICameraClient>(data.readStrongBinder()); - sp<ICamera> camera = connect(cameraClient, data.readInt32()); + const int cameraId = data.readInt32(); + const int force = data.readInt32(); + const int keep = data.readInt32(); + sp<ICamera> camera = connect(cameraClient, cameraId, force, keep); reply->writeStrongBinder(camera->asBinder()); return NO_ERROR; } break; @@ -105,4 +111,3 @@ status_t BnCameraService::onTransact( // ---------------------------------------------------------------------------- }; // namespace android - |