Camera VTS: Improve test for torch callback

Test below sequence:
- ICameraProvider::setCallback
- setTorchMode(on)
- verify torch mode on callback is received
- ICameraProvider::setCallback
- verify torch mode on callback is received again

This makes sure if torch is on, a new callback registration will trigger
a flash-on callback.

Test: atest VtsAidlHalCameraProvider_TargetTest
Bug: 247038031
Change-Id: I6cea64fcd08fd68fda78b3c0efb7763b7de6edbc
diff --git a/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp b/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp
index 70ab7a0..3fef089 100644
--- a/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp
+++ b/camera/provider/aidl/vts/VtsAidlHalCameraProvider_TargetTest.cpp
@@ -386,6 +386,22 @@
                 mTorchStatus = TorchModeStatus::NOT_AVAILABLE;
             }
 
+            // register a new callback; make sure it receives the
+            // flash-on callback.
+            std::shared_ptr<TorchProviderCb> cb2 = ndk::SharedRefBase::make<TorchProviderCb>(this);
+            ret = mProvider->setCallback(cb2);
+            ASSERT_TRUE(ret.isOk());
+            ASSERT_NE(cb2, nullptr);
+            {
+                std::unique_lock<std::mutex> l(mTorchLock);
+                while (TorchModeStatus::NOT_AVAILABLE == mTorchStatus) {
+                    auto timeout = std::chrono::system_clock::now() +
+                                   std::chrono::seconds(kTorchTimeoutSec);
+                    ASSERT_NE(std::cv_status::timeout, mTorchCond.wait_until(l, timeout));
+                }
+                ASSERT_EQ(TorchModeStatus::AVAILABLE_ON, mTorchStatus);
+            }
+
             ret = device->setTorchMode(false);
             ASSERT_TRUE(ret.isOk());
             {