Merge "Camera: Advertise only unique API1 compatible devices" into oc-dev
diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp
index 65633db..b9d6843 100644
--- a/services/camera/libcameraservice/common/CameraProviderManager.cpp
+++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp
@@ -87,11 +87,7 @@
     int count = 0;
     for (auto& provider : mProviders) {
         if (kStandardProviderTypes.find(provider->getType()) != std::string::npos) {
-            for (auto& device : provider->mDevices) {
-                if (device->isAPI1Compatible()) {
-                    count++;
-                }
-            }
+            count += provider->mUniqueAPI1CompatibleCameraIds.size();
         }
     }
     return count;
@@ -113,10 +109,8 @@
     std::vector<std::string> deviceIds;
     for (auto& provider : mProviders) {
         if (kStandardProviderTypes.find(provider->getType()) != std::string::npos) {
-            for (auto& device : provider->mDevices) {
-                if (device->isAPI1Compatible()) {
-                    deviceIds.push_back(device->mId);
-                }
+            for (auto& id : provider->mUniqueAPI1CompatibleCameraIds) {
+                deviceIds.push_back(id);
             }
         }
     }
@@ -466,6 +460,7 @@
         mProviderName(providerName),
         mInterface(interface),
         mProviderTagid(generateVendorTagId(providerName)),
+        mUniqueDeviceCount(0),
         mManager(manager) {
     (void) mManager;
 }
@@ -539,6 +534,9 @@
 
     for (auto& device : mDevices) {
         mUniqueCameraIds.insert(device->mId);
+        if (device->isAPI1Compatible()) {
+            mUniqueAPI1CompatibleCameraIds.insert(device->mId);
+        }
     }
     mUniqueDeviceCount = mUniqueCameraIds.size();
 
diff --git a/services/camera/libcameraservice/common/CameraProviderManager.h b/services/camera/libcameraservice/common/CameraProviderManager.h
index 9ba7f91..e82282f 100644
--- a/services/camera/libcameraservice/common/CameraProviderManager.h
+++ b/services/camera/libcameraservice/common/CameraProviderManager.h
@@ -315,6 +315,7 @@
         std::vector<std::unique_ptr<DeviceInfo>> mDevices;
         std::set<std::string> mUniqueCameraIds;
         int mUniqueDeviceCount;
+        std::set<std::string> mUniqueAPI1CompatibleCameraIds;
 
         // HALv1-specific camera fields, including the actual device interface
         struct DeviceInfo1 : public DeviceInfo {