From 47cae0f093f04765825debdf03f71e026e4a1f38 Mon Sep 17 00:00:00 2001 From: Emilian Peev Date: Mon, 11 Oct 2021 17:28:10 -0700 Subject: [PATCH] Camera: Handle ISE when device state manager is absent The device state manager doesn't seem to be present on all devices. Catch any ISEs and handle this corner case appropriately. Bug: 202597641 Test: atest CtsGraphicsTestCases:android.graphics.cts.CameraVulkanGpuTest#testCameraImportAndRendering -- --module-parameter instant_app Change-Id: I6e6c7266b268835f3138cbb22a6f2df606742300 --- .../android/hardware/camera2/CameraManager.java | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index 9bb901f8c5f75..d4a6093ca1291 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -110,8 +110,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; @@ -177,7 +185,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)); + } } }