Camera: Add default camera provider 2.4

Supports legacy camera HAL modules; also exports ICameraDevice
instances.

Test: compile
Bug: 30985004
Change-Id: I2b9624a412de95dd43979a5e6650b170010c577a
diff --git a/camera/common/1.0/default/CameraModule.cpp b/camera/common/1.0/default/CameraModule.cpp
index d8a424e..5d9ae4d 100644
--- a/camera/common/1.0/default/CameraModule.cpp
+++ b/camera/common/1.0/default/CameraModule.cpp
@@ -344,7 +344,7 @@
     return res;
 }
 
-bool CameraModule::isOpenLegacyDefined() {
+bool CameraModule::isOpenLegacyDefined() const {
     if (getModuleApiVersion() < CAMERA_MODULE_API_VERSION_2_3) {
         return false;
     }
@@ -376,7 +376,7 @@
     return res;
 }
 
-bool CameraModule::isVendorTagDefined() {
+bool CameraModule::isVendorTagDefined() const {
     return mModule->get_vendor_tag_ops != NULL;
 }
 
@@ -388,11 +388,25 @@
     }
 }
 
+bool CameraModule::isSetTorchModeSupported() const {
+    if (getModuleApiVersion() >= CAMERA_MODULE_API_VERSION_2_4) {
+        if (mModule->set_torch_mode == NULL) {
+            ALOGE("%s: Module 2.4 device must support set torch API!",
+                    __FUNCTION__);
+            return false;
+        }
+        return true;
+    }
+    return false;
+}
+
 int CameraModule::setTorchMode(const char* camera_id, bool enable) {
-    int res;
-    ATRACE_BEGIN("camera_module->set_torch_mode");
-    res = mModule->set_torch_mode(camera_id, enable);
-    ATRACE_END();
+    int res = INVALID_OPERATION;
+    if (mModule->set_torch_mode != NULL) {
+        ATRACE_BEGIN("camera_module->set_torch_mode");
+        res = mModule->set_torch_mode(camera_id, enable);
+        ATRACE_END();
+    }
     return res;
 }
 
@@ -409,19 +423,19 @@
     return -ENODEV;
 }
 
-uint16_t CameraModule::getModuleApiVersion() {
+uint16_t CameraModule::getModuleApiVersion() const {
     return mModule->common.module_api_version;
 }
 
-const char* CameraModule::getModuleName() {
+const char* CameraModule::getModuleName() const {
     return mModule->common.name;
 }
 
-uint16_t CameraModule::getHalApiVersion() {
+uint16_t CameraModule::getHalApiVersion() const {
     return mModule->common.hal_api_version;
 }
 
-const char* CameraModule::getModuleAuthor() {
+const char* CameraModule::getModuleAuthor() const {
     return mModule->common.author;
 }
 
diff --git a/camera/common/1.0/default/include/CameraModule.h b/camera/common/1.0/default/include/CameraModule.h
index 907c807..68d4f90 100644
--- a/camera/common/1.0/default/include/CameraModule.h
+++ b/camera/common/1.0/default/include/CameraModule.h
@@ -49,16 +49,17 @@
     int getDeviceVersion(int cameraId);
     int getNumberOfCameras(void);
     int open(const char* id, struct hw_device_t** device);
-    bool isOpenLegacyDefined();
+    bool isOpenLegacyDefined() const;
     int openLegacy(const char* id, uint32_t halVersion, struct hw_device_t** device);
     int setCallbacks(const camera_module_callbacks_t *callbacks);
-    bool isVendorTagDefined();
+    bool isVendorTagDefined() const;
     void getVendorTagOps(vendor_tag_ops_t* ops);
+    bool isSetTorchModeSupported() const;
     int setTorchMode(const char* camera_id, bool enable);
-    uint16_t getModuleApiVersion();
-    const char* getModuleName();
-    uint16_t getHalApiVersion();
-    const char* getModuleAuthor();
+    uint16_t getModuleApiVersion() const;
+    const char* getModuleName() const;
+    uint16_t getHalApiVersion() const;
+    const char* getModuleAuthor() const;
     // Only used by CameraModuleFixture native test. Do NOT use elsewhere.
     void *getDso();