Camera: Add initial offline client listener logic

Various camera notification callbacks need to be
propagated back to client.

Test: Camera CTS
Bug: 135142453

Change-Id: I11a1bc634e4c6f9540d1f7f9c20e4151fdcc5ec6
diff --git a/services/camera/libcameraservice/api2/CameraOfflineSessionClient.h b/services/camera/libcameraservice/api2/CameraOfflineSessionClient.h
index e92a05c..b0f000d 100644
--- a/services/camera/libcameraservice/api2/CameraOfflineSessionClient.h
+++ b/services/camera/libcameraservice/api2/CameraOfflineSessionClient.h
@@ -19,6 +19,8 @@
 
 #include <android/hardware/camera2/BnCameraOfflineSession.h>
 #include <android/hardware/camera2/ICameraDeviceCallbacks.h>
+#include "common/FrameProcessorBase.h"
+#include "common/CameraDeviceBase.h"
 #include "CameraService.h"
 #include "CompositeStream.h"
 
@@ -35,8 +37,9 @@
 // is created through ICameraDeviceUser::switchToOffline call.
 class CameraOfflineSessionClient :
         public CameraService::BasicClient,
-        public hardware::camera2::BnCameraOfflineSession
-        // public camera2::FrameProcessorBase::FilteredListener?
+        public hardware::camera2::BnCameraOfflineSession,
+        public camera2::FrameProcessorBase::FilteredListener,
+        public NotificationListener
 {
 public:
     CameraOfflineSessionClient(
@@ -58,42 +61,45 @@
 
     virtual ~CameraOfflineSessionClient() {}
 
-    virtual sp<IBinder> asBinderWrapper() override {
+    sp<IBinder> asBinderWrapper() override {
         return IInterface::asBinder(this);
     }
 
-    virtual binder::Status disconnect() override;
+    binder::Status disconnect() override;
 
-    virtual status_t dump(int /*fd*/, const Vector<String16>& /*args*/) override;
+    status_t dump(int /*fd*/, const Vector<String16>& /*args*/) override;
 
-    virtual status_t dumpClient(int /*fd*/, const Vector<String16>& /*args*/) override;
+    status_t dumpClient(int /*fd*/, const Vector<String16>& /*args*/) override;
 
-    virtual void notifyError(int32_t /*errorCode*/,
-            const CaptureResultExtras& /*resultExtras*/) override;
-
-    virtual status_t initialize(sp<CameraProviderManager> /*manager*/,
+    status_t initialize(sp<CameraProviderManager> /*manager*/,
             const String8& /*monitorTags*/) override;
 
     // permissions management
-    virtual status_t startCameraOps() override;
-    virtual status_t finishCameraOps() override;
+    status_t startCameraOps() override;
+    status_t finishCameraOps() override;
 
-    // TODO: Those will be introduced when we implement FilteredListener and the device
-    // callbacks respectively. Just adding for now.
-    void onResultAvailable(const CaptureResult& result);
-    void notifyShutter(const CaptureResultExtras& resultExtras, nsecs_t timestamp);
+    // FilteredResultListener API
+    void onResultAvailable(const CaptureResult& result) override;
+
+    // NotificationListener API
+    void notifyError(int32_t errorCode, const CaptureResultExtras& resultExtras) override;
+    void notifyShutter(const CaptureResultExtras& resultExtras, nsecs_t timestamp) override;
+    void notifyIdle() override;
+    void notifyAutoFocus(uint8_t newState, int triggerId) override;
+    void notifyAutoExposure(uint8_t newState, int triggerId) override;
+    void notifyAutoWhitebalance(uint8_t newState, int triggerId) override;
+    void notifyPrepared(int streamId) override;
+    void notifyRequestQueueEmpty() override;
+    void notifyRepeatingRequestError(long lastFrameNumber) override;
 
 private:
-
-    const sp<hardware::camera2::ICameraDeviceCallbacks>& getRemoteCallback() {
-        return mRemoteCallback;
-    }
+    mutable Mutex mBinderSerializationLock;
 
     sp<hardware::camera2::ICameraDeviceCallbacks> mRemoteCallback;
 
     sp<CameraOfflineSessionBase> mOfflineSession;
 
-    // Offline composite streams
+    // Offline composite stream map, output surface -> composite stream
     KeyedVector<sp<IBinder>, sp<CompositeStream>> mCompositeStreamMap;
 };