diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index ea093a1fc2fe1..b7c5644df107a 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -109,8 +109,16 @@ public final class CameraManager { mHandlerThread.start(); mHandler = new Handler(mHandlerThread.getLooper()); mFoldStateListener = new FoldStateListener(context); - context.getSystemService(DeviceStateManager.class) - .registerCallback(new HandlerExecutor(mHandler), mFoldStateListener); + try { + context.getSystemService(DeviceStateManager.class) + .registerCallback(new HandlerExecutor(mHandler), 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; @@ -176,7 +184,9 @@ public final class CameraManager { synchronized (mLock) { DeviceStateListener listener = chars.getDeviceStateListener(); listener.onDeviceStateChanged(mFoldedDeviceState); - mDeviceStateListeners.add(new WeakReference<>(listener)); + if (mFoldStateListener != null) { + mDeviceStateListeners.add(new WeakReference<>(listener)); + } } }