camera: Delete supportsCameraApi binder call

HAL1 support was removed in Android S. So, all devices are required
to support HAL3 and therefore the camera2 API. Camera1 API is always
supported - until removed.

Bug: 391957505

Flag: EXEMPT; bug fix

Test: Camera CTS

Change-Id: I80fae67c27cf2c9bebb8415cbf52574f7196141e
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/camera/aidl/android/hardware/ICameraService.aidl b/camera/aidl/android/hardware/ICameraService.aidl
index 6431737..779c4a2 100644
--- a/camera/aidl/android/hardware/ICameraService.aidl
+++ b/camera/aidl/android/hardware/ICameraService.aidl
@@ -261,14 +261,6 @@
      */
     @utf8InCpp String getLegacyParameters(int cameraId);
 
-    /**
-     * apiVersion constants for supportsCameraApi
-     */
-    const int API_VERSION_1 = 1;
-    const int API_VERSION_2 = 2;
-
-    // Determines if a particular API version is supported directly for a cameraId.
-    boolean supportsCameraApi(@utf8InCpp String cameraId, int apiVersion);
     // Determines if a cameraId is a hidden physical camera of a logical multi-camera.
     boolean isHiddenPhysicalCamera(@utf8InCpp String cameraId);
     // Inject the external camera to replace the internal camera session.
diff --git a/camera/ndk/impl/ACameraManager.cpp b/camera/ndk/impl/ACameraManager.cpp
index acd7917..7e647e4 100644
--- a/camera/ndk/impl/ACameraManager.cpp
+++ b/camera/ndk/impl/ACameraManager.cpp
@@ -376,17 +376,12 @@
     const auto& [_, newlyRegistered] = mCallbacks.insert(cb);
     // Send initial callbacks if callback is newly registered
     if (newlyRegistered) {
-        for (auto& [key, statusAndHAL3Support] : mDeviceStatusMap) {
+        for (auto& [key, logicalAndPhysicalStatus] : mDeviceStatusMap) {
             if (!isCameraAccessible(deviceContext, key.deviceId)) {
                 continue;
             }
             const std::string& cameraId = key.cameraId;
-            int32_t status = statusAndHAL3Support.getStatus();
-            // Don't send initial callbacks for camera ids which don't support
-            // camera2
-            if (!statusAndHAL3Support.supportsHAL3) {
-                continue;
-            }
+            int32_t status = logicalAndPhysicalStatus.getStatus();
 
             // Camera available/unavailable callback
             sp<AMessage> msg = new AMessage(kWhatSendSingleCallback, mHandler);
@@ -400,7 +395,7 @@
 
             // Physical camera unavailable callback
             std::set<std::string> unavailablePhysicalCameras =
-                    statusAndHAL3Support.getUnavailablePhysicalIds();
+                    logicalAndPhysicalStatus.getUnavailablePhysicalIds();
             for (const auto& physicalCameraId : unavailablePhysicalCameras) {
                 sp<AMessage> msg = new AMessage(kWhatSendSinglePhysicalCameraCallback, mHandler);
                 ACameraManager_PhysicalCameraAvailabilityCallback cbFunc =
@@ -416,42 +411,23 @@
     }
 }
 
-bool CameraManagerGlobal::supportsCamera2ApiLocked(const std::string &cameraId) {
-    bool camera2Support = false;
-    auto cs = getCameraServiceLocked();
-    if (cs == nullptr) {
-        return false;
-    }
-    binder::Status serviceRet =
-        cs->supportsCameraApi(cameraId,
-                hardware::ICameraService::API_VERSION_2, &camera2Support);
-    if (!serviceRet.isOk()) {
-        ALOGE("%s: supportsCameraApi2Locked() call failed for cameraId  %s",
-                __FUNCTION__, cameraId.c_str());
-        return false;
-    }
-    return camera2Support;
-}
-
 void CameraManagerGlobal::getCameraIdList(const DeviceContext& context,
         std::vector<std::string>* cameraIds) {
     // Ensure that we have initialized/refreshed the list of available devices
     Mutex::Autolock _l(mLock);
     // Needed to make sure we're connected to cameraservice
     getCameraServiceLocked();
-    for (auto& [key, statusAndHAL3Support] : mDeviceStatusMap) {
+    for (auto& [key, logicalAndPhysicalStatus] : mDeviceStatusMap) {
         if (!isCameraAccessible(context, key.deviceId)) {
             continue;
         }
 
-        int32_t status = statusAndHAL3Support.getStatus();
+        int32_t status = logicalAndPhysicalStatus.getStatus();
         if (status == hardware::ICameraServiceListener::STATUS_NOT_PRESENT ||
                 status == hardware::ICameraServiceListener::STATUS_ENUMERATING) {
             continue;
         }
-        if (!statusAndHAL3Support.supportsHAL3) {
-            continue;
-        }
+
         cameraIds->push_back(key.cameraId);
     }
 }
@@ -649,28 +625,25 @@
         return;
     }
 
-    bool supportsHAL3 = supportsCamera2ApiLocked(cameraId);
     if (firstStatus) {
         mDeviceStatusMap.emplace(std::piecewise_construct, std::forward_as_tuple(key),
-                                 std::forward_as_tuple(status, supportsHAL3));
+                std::forward_as_tuple(status));
     } else {
         mDeviceStatusMap[key].updateStatus(status);
     }
     // Iterate through all registered callbacks
-    if (supportsHAL3) {
-        for (auto cb : mCallbacks) {
-            if (!isCameraAccessible(cb.mDeviceContext, deviceId)) {
-                continue;
-            }
-            sp<AMessage> msg = new AMessage(kWhatSendSingleCallback, mHandler);
-            ACameraManager_AvailabilityCallback cbFp = isStatusAvailable(status) ?
-                    cb.mAvailable : cb.mUnavailable;
-            msg->setPointer(kCallbackFpKey, (void *) cbFp);
-            msg->setPointer(kContextKey, cb.mContext);
-            msg->setString(kCameraIdKey, AString(cameraId.c_str()));
-            mPendingCallbackCnt++;
-            msg->post();
+    for (auto cb : mCallbacks) {
+        if (!isCameraAccessible(cb.mDeviceContext, deviceId)) {
+            continue;
         }
+        sp<AMessage> msg = new AMessage(kWhatSendSingleCallback, mHandler);
+        ACameraManager_AvailabilityCallback cbFp = isStatusAvailable(status) ?
+                cb.mAvailable : cb.mUnavailable;
+        msg->setPointer(kCallbackFpKey, (void *) cbFp);
+        msg->setPointer(kContextKey, cb.mContext);
+        msg->setString(kCameraIdKey, AString(cameraId.c_str()));
+        mPendingCallbackCnt++;
+        msg->post();
     }
     if (status == hardware::ICameraServiceListener::STATUS_NOT_PRESENT) {
         mDeviceStatusMap.erase(key);
@@ -705,8 +678,6 @@
         return;
     }
 
-    bool supportsHAL3 = supportsCamera2ApiLocked(cameraId);
-
     bool updated = false;
     if (status == hardware::ICameraServiceListener::STATUS_PRESENT) {
         updated = mDeviceStatusMap[key].removeUnavailablePhysicalId(physicalCameraId);
@@ -715,7 +686,7 @@
     }
 
     // Iterate through all registered callbacks
-    if (supportsHAL3 && updated) {
+    if (updated) {
         for (auto cb : mCallbacks) {
             if (!isCameraAccessible(cb.mDeviceContext, deviceId)) {
                 continue;
@@ -733,31 +704,31 @@
     }
 }
 
-int32_t CameraManagerGlobal::StatusAndHAL3Support::getStatus() {
+int32_t CameraManagerGlobal::Status::getStatus() {
     std::lock_guard<std::mutex> lock(mLock);
     return status;
 }
 
-void CameraManagerGlobal::StatusAndHAL3Support::updateStatus(int32_t newStatus) {
+void CameraManagerGlobal::Status::updateStatus(int32_t newStatus) {
     std::lock_guard<std::mutex> lock(mLock);
     status = newStatus;
 }
 
-bool CameraManagerGlobal::StatusAndHAL3Support::addUnavailablePhysicalId(
+bool CameraManagerGlobal::Status::addUnavailablePhysicalId(
         const std::string& physicalCameraId) {
     std::lock_guard<std::mutex> lock(mLock);
     auto result = unavailablePhysicalIds.insert(physicalCameraId);
     return result.second;
 }
 
-bool CameraManagerGlobal::StatusAndHAL3Support::removeUnavailablePhysicalId(
+bool CameraManagerGlobal::Status::removeUnavailablePhysicalId(
         const std::string& physicalCameraId) {
     std::lock_guard<std::mutex> lock(mLock);
     auto count = unavailablePhysicalIds.erase(physicalCameraId);
     return count > 0;
 }
 
-std::set<std::string> CameraManagerGlobal::StatusAndHAL3Support::getUnavailablePhysicalIds() {
+std::set<std::string> CameraManagerGlobal::Status::getUnavailablePhysicalIds() {
     std::lock_guard<std::mutex> lock(mLock);
     return unavailablePhysicalIds;
 }
diff --git a/camera/ndk/impl/ACameraManager.h b/camera/ndk/impl/ACameraManager.h
index fffe037..04f1ac4 100644
--- a/camera/ndk/impl/ACameraManager.h
+++ b/camera/ndk/impl/ACameraManager.h
@@ -260,18 +260,16 @@
     // Utils for status
     static bool validStatus(int32_t status);
     static bool isStatusAvailable(int32_t status);
-    bool supportsCamera2ApiLocked(const std::string &cameraId);
 
-    struct StatusAndHAL3Support {
+    struct Status {
       private:
         int32_t status = hardware::ICameraServiceListener::STATUS_NOT_PRESENT;
         mutable std::mutex mLock;
         std::set<std::string> unavailablePhysicalIds;
       public:
-        const bool supportsHAL3 = false;
-        StatusAndHAL3Support(int32_t st, bool HAL3support):
-                status(st), supportsHAL3(HAL3support) { };
-        StatusAndHAL3Support() = default;
+        Status(int32_t st):
+                status(st) { };
+        Status() = default;
 
         bool addUnavailablePhysicalId(const std::string& physicalCameraId);
         bool removeUnavailablePhysicalId(const std::string& physicalCameraId);
@@ -308,7 +306,7 @@
         }
     };
 
-    std::map<DeviceStatusMapKey, StatusAndHAL3Support> mDeviceStatusMap;
+    std::map<DeviceStatusMapKey, Status> mDeviceStatusMap;
 
     // For the singleton instance
     static Mutex sLock;
diff --git a/camera/tests/CameraBinderTests.cpp b/camera/tests/CameraBinderTests.cpp
index 7f99b70..b6b5492 100644
--- a/camera/tests/CameraBinderTests.cpp
+++ b/camera/tests/CameraBinderTests.cpp
@@ -389,15 +389,6 @@
 
     for (int32_t i = 0; i < numCameras; i++) {
         std::string cameraId = std::to_string(i);
-        bool isSupported = false;
-        res = service->supportsCameraApi(cameraId,
-                hardware::ICameraService::API_VERSION_2, &isSupported);
-        EXPECT_TRUE(res.isOk()) << res;
-
-        // We only care about binder calls for the Camera2 API.  Camera1 is deprecated.
-        if (!isSupported) {
-            continue;
-        }
 
         // Check metadata binder call
         CameraMetadata metadata;
diff --git a/camera/tests/CameraCharacteristicsPermission.cpp b/camera/tests/CameraCharacteristicsPermission.cpp
index 9204eb1..5056c3e 100644
--- a/camera/tests/CameraCharacteristicsPermission.cpp
+++ b/camera/tests/CameraCharacteristicsPermission.cpp
@@ -66,19 +66,12 @@
 TEST_F(CameraCharacteristicsPermission, TestCameraPermission) {
     for (int32_t cameraId = 0; cameraId < numCameras; cameraId++) {
         std::string cameraIdStr = std::to_string(cameraId);
-        bool isSupported = false;
-        auto rc = mCameraService->supportsCameraApi(cameraIdStr,
-                hardware::ICameraService::API_VERSION_2, &isSupported);
-        EXPECT_TRUE(rc.isOk());
-        if (!isSupported) {
-            continue;
-        }
 
         CameraMetadata metadata;
         std::vector<int32_t> tagsNeedingPermission;
         AttributionSourceState clientAttribution;
         clientAttribution.deviceId = kDefaultDeviceId;
-        rc = mCameraService->getCameraCharacteristics(cameraIdStr,
+        auto rc = mCameraService->getCameraCharacteristics(cameraIdStr,
                 /*targetSdkVersion*/__ANDROID_API_FUTURE__,
                 /*overrideToPortrait*/false, clientAttribution, /*devicePolicy*/0, &metadata);
         ASSERT_TRUE(rc.isOk());
diff --git a/camera/tests/CameraZSLTests.cpp b/camera/tests/CameraZSLTests.cpp
index b06f9b4..2a2fcc9 100644
--- a/camera/tests/CameraZSLTests.cpp
+++ b/camera/tests/CameraZSLTests.cpp
@@ -176,15 +176,6 @@
         sp<ICamera> cameraDevice;
 
         std::string cameraIdStr = std::to_string(cameraId);
-        bool isSupported = false;
-        rc = mCameraService->supportsCameraApi(cameraIdStr,
-                hardware::ICameraService::API_VERSION_1, &isSupported);
-        EXPECT_TRUE(rc.isOk());
-
-        // We only care about camera Camera1 ZSL support.
-        if (!isSupported) {
-            continue;
-        }
 
         CameraMetadata metadata;
         AttributionSourceState clientAttribution;
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
index d13e5db..bf4ed48 100644
--- a/services/camera/libcameraservice/CameraService.cpp
+++ b/services/camera/libcameraservice/CameraService.cpp
@@ -3595,71 +3595,6 @@
     return ret;
 }
 
-Status CameraService::supportsCameraApi(const std::string& cameraId, int apiVersion,
-        /*out*/ bool *isSupported) {
-    ATRACE_CALL();
-
-    ALOGV("%s: for camera ID = %s", __FUNCTION__, cameraId.c_str());
-
-    switch (apiVersion) {
-        case API_VERSION_1:
-        case API_VERSION_2:
-            break;
-        default:
-            std::string msg = fmt::sprintf("Unknown API version %d", apiVersion);
-            ALOGE("%s: %s", __FUNCTION__, msg.c_str());
-            return STATUS_ERROR(ERROR_ILLEGAL_ARGUMENT, msg.c_str());
-    }
-
-    int portraitRotation;
-    auto deviceVersionAndTransport =
-            getDeviceVersion(cameraId,
-                    /*rotationOverride*/hardware::ICameraService::ROTATION_OVERRIDE_NONE,
-                    &portraitRotation);
-    if (deviceVersionAndTransport.first == -1) {
-        std::string msg = fmt::sprintf("Unknown camera ID %s", cameraId.c_str());
-        ALOGE("%s: %s", __FUNCTION__, msg.c_str());
-        return STATUS_ERROR(ERROR_ILLEGAL_ARGUMENT, msg.c_str());
-    }
-    if (deviceVersionAndTransport.second == IPCTransport::HIDL) {
-        int deviceVersion = deviceVersionAndTransport.first;
-        switch (deviceVersion) {
-            case CAMERA_DEVICE_API_VERSION_1_0:
-            case CAMERA_DEVICE_API_VERSION_3_0:
-            case CAMERA_DEVICE_API_VERSION_3_1:
-                if (apiVersion == API_VERSION_2) {
-                    ALOGV("%s: Camera id %s uses HAL version %d <3.2, doesn't support api2 without "
-                            "shim", __FUNCTION__, cameraId.c_str(), deviceVersion);
-                    *isSupported = false;
-                } else { // if (apiVersion == API_VERSION_1) {
-                    ALOGV("%s: Camera id %s uses older HAL before 3.2, but api1 is always "
-                            "supported", __FUNCTION__, cameraId.c_str());
-                    *isSupported = true;
-                }
-                break;
-            case CAMERA_DEVICE_API_VERSION_3_2:
-            case CAMERA_DEVICE_API_VERSION_3_3:
-            case CAMERA_DEVICE_API_VERSION_3_4:
-            case CAMERA_DEVICE_API_VERSION_3_5:
-            case CAMERA_DEVICE_API_VERSION_3_6:
-            case CAMERA_DEVICE_API_VERSION_3_7:
-                ALOGV("%s: Camera id %s uses HAL3.2 or newer, supports api1/api2 directly",
-                        __FUNCTION__, cameraId.c_str());
-                *isSupported = true;
-                break;
-            default: {
-                std::string msg = fmt::sprintf("Unknown device version %x for device %s",
-                        deviceVersion, cameraId.c_str());
-                ALOGE("%s: %s", __FUNCTION__, msg.c_str());
-                return STATUS_ERROR(ERROR_INVALID_OPERATION, msg.c_str());
-            }
-        }
-    } else {
-        *isSupported = true;
-    }
-    return Status::ok();
-}
-
 Status CameraService::isHiddenPhysicalCamera(const std::string& cameraId,
         /*out*/ bool *isSupported) {
     ATRACE_CALL();
diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h
index c4d2d67..59d9647 100644
--- a/services/camera/libcameraservice/CameraService.h
+++ b/services/camera/libcameraservice/CameraService.h
@@ -225,12 +225,6 @@
 
     virtual binder::Status    notifyDisplayConfigurationChange();
 
-    // OK = supports api of that version, -EOPNOTSUPP = does not support
-    virtual binder::Status    supportsCameraApi(
-            const std::string& cameraId, int32_t apiVersion,
-            /*out*/
-            bool *isSupported);
-
     virtual binder::Status    isHiddenPhysicalCamera(
             const std::string& cameraId,
             /*out*/
diff --git a/services/camera/libcameraservice/aidl/AidlCameraService.cpp b/services/camera/libcameraservice/aidl/AidlCameraService.cpp
index 46e2280..9deb9ae 100644
--- a/services/camera/libcameraservice/aidl/AidlCameraService.cpp
+++ b/services/camera/libcameraservice/aidl/AidlCameraService.cpp
@@ -283,16 +283,6 @@
         return convertToAidl(serviceRet);
     }
 
-    cameraStatusAndIds->erase(std::remove_if(cameraStatusAndIds->begin(),
-                                             cameraStatusAndIds->end(),
-            [this](const hardware::CameraStatus& s) {
-                bool supportsHAL3 = false;
-                binder::Status sRet =
-                            mCameraService->supportsCameraApi(s.cameraId,
-                                    UICameraService::API_VERSION_2, &supportsHAL3);
-                return !sRet.isOk() || !supportsHAL3;
-            }), cameraStatusAndIds->end());
-
     return SStatus::NO_ERROR;
 }
 ndk::ScopedAStatus AidlCameraService::removeListener(
diff --git a/services/camera/libcameraservice/hidl/HidlCameraService.cpp b/services/camera/libcameraservice/hidl/HidlCameraService.cpp
index 9e66236..80f3463 100644
--- a/services/camera/libcameraservice/hidl/HidlCameraService.cpp
+++ b/services/camera/libcameraservice/hidl/HidlCameraService.cpp
@@ -254,15 +254,6 @@
         status = B2HStatus(serviceRet);
         return status;
     }
-    cameraStatusAndIds->erase(std::remove_if(cameraStatusAndIds->begin(), cameraStatusAndIds->end(),
-            [this](const hardware::CameraStatus& s) {
-                bool supportsHAL3 = false;
-                binder::Status sRet =
-                            mAidlICameraService->supportsCameraApi(s.cameraId,
-                                    hardware::ICameraService::API_VERSION_2, &supportsHAL3);
-                return !sRet.isOk() || !supportsHAL3;
-            }), cameraStatusAndIds->end());
-
     return HStatus::NO_ERROR;
 }
 
diff --git a/services/camera/libcameraservice/libcameraservice_fuzzer/camera_service_fuzzer.cpp b/services/camera/libcameraservice/libcameraservice_fuzzer/camera_service_fuzzer.cpp
index 4651a48..f3c5472 100644
--- a/services/camera/libcameraservice/libcameraservice_fuzzer/camera_service_fuzzer.cpp
+++ b/services/camera/libcameraservice/libcameraservice_fuzzer/camera_service_fuzzer.cpp
@@ -67,8 +67,6 @@
 const size_t kMaxArgs = 5;
 const int32_t kCamType[] = {hardware::ICameraService::CAMERA_TYPE_BACKWARD_COMPATIBLE,
                             hardware::ICameraService::CAMERA_TYPE_ALL};
-const int kCameraApiVersion[] = {android::CameraService::API_VERSION_1,
-                                 android::CameraService::API_VERSION_2};
 const uint8_t kSensorPixelModes[] = {ANDROID_SENSOR_PIXEL_MODE_DEFAULT,
         ANDROID_SENSOR_PIXEL_MODE_MAXIMUM_RESOLUTION};
 const int32_t kRequestTemplates[] = {
@@ -432,8 +430,6 @@
 void CameraFuzzer::getCameraInformation(int32_t cameraId) {
     std::string cameraIdStr = std::to_string(cameraId);
     bool isSupported = false;
-    mCameraService->supportsCameraApi(
-        cameraIdStr, kCameraApiVersion[mFuzzedDataProvider->ConsumeBool()], &isSupported);
     mCameraService->isHiddenPhysicalCamera(cameraIdStr, &isSupported);
 
     std::string parameters;