diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp index e69ce1f8b7..d45be62edf 100644 --- a/services/camera/libcameraservice/CameraService.cpp +++ b/services/camera/libcameraservice/CameraService.cpp @@ -209,6 +209,14 @@ void CameraService::pingCameraServiceProxy() { proxyBinder->pingForUserUpdate(); } +void CameraService::broadcastTorchModeStatus(const String8& cameraId, TorchModeStatus status) { + Mutex::Autolock lock(mStatusListenerLock); + + for (auto& i : mListenerList) { + i->onTorchStatusChanged(mapToInterface(status), String16{cameraId}); + } +} + CameraService::~CameraService() { VendorTagDescriptor::clearGlobalVendorTagDescriptor(); mUidPolicy->unregisterSelf(); @@ -247,6 +255,8 @@ void CameraService::addStates(const String8 id) { if (mFlashlight->hasFlashUnit(id)) { Mutex::Autolock al(mTorchStatusMutex); mTorchStatusMap.add(id, TorchModeStatus::AVAILABLE_OFF); + + broadcastTorchModeStatus(id, TorchModeStatus::AVAILABLE_OFF); } updateCameraNumAndIds(); @@ -399,12 +409,7 @@ void CameraService::onTorchStatusChangedLocked(const String8& cameraId, } } - { - Mutex::Autolock lock(mStatusListenerLock); - for (auto& i : mListenerList) { - i->onTorchStatusChanged(mapToInterface(newStatus), String16{cameraId}); - } - } + broadcastTorchModeStatus(cameraId, newStatus); } Status CameraService::getNumberOfCameras(int32_t type, int32_t* numCameras) { diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h index 80d9ef4b62..064863f983 100644 --- a/services/camera/libcameraservice/CameraService.h +++ b/services/camera/libcameraservice/CameraService.h @@ -857,6 +857,8 @@ private: static sp getCameraServiceProxy(); static void pingCameraServiceProxy(); + void broadcastTorchModeStatus(const String8& cameraId, + hardware::camera::common::V1_0::TorchModeStatus status); }; } // namespace android