diff options
| -rw-r--r-- | core/java/android/hardware/camera2/CameraManager.java | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index 19719a88ab2e..fbc018444dc5 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -142,24 +142,18 @@ public final class CameraManager { PackageManager.PERMISSION_GRANTED; } - mHandlerThread = new HandlerThread(TAG); - mHandlerThread.start(); - mHandler = new Handler(mHandlerThread.getLooper()); mFoldStateListener = new FoldStateListener(context); try { - context.getSystemService(DeviceStateManager.class) - .registerCallback(new HandlerExecutor(mHandler), mFoldStateListener); + context.getSystemService(DeviceStateManager.class).registerCallback( + new HandlerExecutor(CameraManagerGlobal.get().getDeviceStateHandler()), + mFoldStateListener); } catch (IllegalStateException e) { Log.v(TAG, "Failed to register device state listener!"); Log.v(TAG, "Device state dependent characteristics updates will not be functional!"); - mHandlerThread.quitSafely(); - mHandler = null; mFoldStateListener = null; } } - private HandlerThread mHandlerThread; - private Handler mHandler; private FoldStateListener mFoldStateListener; /** @@ -1645,6 +1639,9 @@ public final class CameraManager { private ICameraService mCameraService; private boolean mHasOpenCloseListenerPermission = false; + private HandlerThread mDeviceStateHandlerThread; + private Handler mDeviceStateHandler; + // Singleton, don't allow construction private CameraManagerGlobal() { } @@ -1658,6 +1655,18 @@ public final class CameraManager { return gCameraManager; } + public Handler getDeviceStateHandler() { + synchronized(mLock) { + if (mDeviceStateHandlerThread == null) { + mDeviceStateHandlerThread = new HandlerThread(TAG); + mDeviceStateHandlerThread.start(); + mDeviceStateHandler = new Handler(mDeviceStateHandlerThread.getLooper()); + } + + return mDeviceStateHandler; + } + } + @Override public IBinder asBinder() { return this; |