Merge "CameraManager: Ensure all public methods connect to camera service." into mnc-dev

This commit is contained in:
Eino-Ville Talvala
2015-06-04 20:13:39 +00:00
committed by Android (Google) Code Review

View File

@@ -802,12 +802,9 @@ public final class CameraManager {
*/ */
public ICameraService getCameraService() { public ICameraService getCameraService() {
synchronized(mLock) { synchronized(mLock) {
connectCameraServiceLocked();
if (mCameraService == null) { if (mCameraService == null) {
Log.i(TAG, "getCameraService: Reconnecting to camera service"); Log.e(TAG, "Camera service is unavailable");
connectCameraServiceLocked();
if (mCameraService == null) {
Log.e(TAG, "Camera service is unavailable");
}
} }
return mCameraService; return mCameraService;
} }
@@ -815,11 +812,16 @@ public final class CameraManager {
/** /**
* Connect to the camera service if it's available, and set up listeners. * Connect to the camera service if it's available, and set up listeners.
* If the service is already connected, do nothing.
* *
* <p>Sets mCameraService to a valid pointer or null if the connection does not succeed.</p> * <p>Sets mCameraService to a valid pointer or null if the connection does not succeed.</p>
*/ */
private void connectCameraServiceLocked() { private void connectCameraServiceLocked() {
mCameraService = null; // Only reconnect if necessary
if (mCameraService != null) return;
Log.i(TAG, "Connecting to camera service");
IBinder cameraServiceBinder = ServiceManager.getService(CAMERA_SERVICE_BINDER_NAME); IBinder cameraServiceBinder = ServiceManager.getService(CAMERA_SERVICE_BINDER_NAME);
if (cameraServiceBinder == null) { if (cameraServiceBinder == null) {
// Camera service is now down, leave mCameraService as null // Camera service is now down, leave mCameraService as null
@@ -1098,6 +1100,8 @@ public final class CameraManager {
*/ */
public void registerAvailabilityCallback(AvailabilityCallback callback, Handler handler) { public void registerAvailabilityCallback(AvailabilityCallback callback, Handler handler) {
synchronized (mLock) { synchronized (mLock) {
connectCameraServiceLocked();
Handler oldHandler = mCallbackMap.put(callback, handler); Handler oldHandler = mCallbackMap.put(callback, handler);
// For new callbacks, provide initial availability information // For new callbacks, provide initial availability information
if (oldHandler == null) { if (oldHandler == null) {
@@ -1120,6 +1124,8 @@ public final class CameraManager {
public void registerTorchCallback(TorchCallback callback, Handler handler) { public void registerTorchCallback(TorchCallback callback, Handler handler) {
synchronized(mLock) { synchronized(mLock) {
connectCameraServiceLocked();
Handler oldHandler = mTorchCallbackMap.put(callback, handler); Handler oldHandler = mTorchCallbackMap.put(callback, handler);
// For new callbacks, provide initial torch information // For new callbacks, provide initial torch information
if (oldHandler == null) { if (oldHandler == null) {