From 08c0efb03a4e648e6a5fc5de13bc9678d384e106 Mon Sep 17 00:00:00 2001 From: Michelle Ho Date: Thu, 5 Jan 2023 10:32:23 +0000 Subject: [PATCH] Camera: Fix missing onPhysicalCameraUnavailable When onCameraAvailable invoked for a logical multi-camera, all of the physical cameras of a logical multi-camera are default available (i.e., no onPhysicalCameraAvailable would be called). So if some specific physical cameras are unavailable, onPhysicalCameraUnavailable should be invoked after onCameraAvailable. Bug: 262979670 Test: atest CameraManagerTest Change-Id: I6ee199ba30fa6f8c44c65d1e1d173fe6fd9ec3fe --- core/java/android/hardware/camera2/CameraManager.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index be99f0fefee7e..f25d56554fc47 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -2313,6 +2313,15 @@ public final class CameraManager { final AvailabilityCallback callback = mCallbackMap.keyAt(i); postSingleUpdate(callback, executor, id, null /*physicalId*/, status); + + // Send the NOT_PRESENT state for unavailable physical cameras + if (isAvailable(status) && mUnavailablePhysicalDevices.containsKey(id)) { + ArrayList unavailableIds = mUnavailablePhysicalDevices.get(id); + for (String unavailableId : unavailableIds) { + postSingleUpdate(callback, executor, id, unavailableId, + ICameraServiceListener.STATUS_NOT_PRESENT); + } + } } } // onStatusChangedLocked