Revert "libaudiohal@aidl: Make IHalAdapterVendorExtension mandatory"

Revert submission 2929484-fix-b-321651892-ihaladapter

Reason for revert: possible cause of b/323385784

Reverted changes: /q/submissionid:2929484-fix-b-321651892-ihaladapter

Change-Id: Ifaafeec27bee08648a3ced6d507b99454c317692
diff --git a/media/libaudiohal/impl/ConversionHelperAidl.cpp b/media/libaudiohal/impl/ConversionHelperAidl.cpp
index 7a32811..46abfda 100644
--- a/media/libaudiohal/impl/ConversionHelperAidl.cpp
+++ b/media/libaudiohal/impl/ConversionHelperAidl.cpp
@@ -37,6 +37,10 @@
     using ParameterScope = IHalAdapterVendorExtension::ParameterScope;
     if (parameterKeys.size() == 0) return OK;
     const String8 rawKeys = parameterKeys.keysToString();
+    if (vendorExt == nullptr) {
+        ALOGW("%s: unknown parameters, ignored: \"%s\"", __func__, rawKeys.c_str());
+        return OK;
+    }
 
     std::vector<std::string> parameterIds;
     RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(vendorExt->parseVendorParameterIds(
@@ -81,6 +85,10 @@
     using ParameterScope = IHalAdapterVendorExtension::ParameterScope;
     if (parameters.size() == 0) return OK;
     const String8 rawKeysAndValues = parameters.toString();
+    if (vendorExt == nullptr) {
+        ALOGW("%s: unknown parameters, ignored: \"%s\"", __func__, rawKeysAndValues.c_str());
+        return OK;
+    }
 
     std::vector<VendorParameter> syncParameters, asyncParameters;
     RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(vendorExt->parseVendorParameters(
diff --git a/media/libaudiohal/impl/DeviceHalAidl.cpp b/media/libaudiohal/impl/DeviceHalAidl.cpp
index fe44ecd..2af18cc 100644
--- a/media/libaudiohal/impl/DeviceHalAidl.cpp
+++ b/media/libaudiohal/impl/DeviceHalAidl.cpp
@@ -1024,11 +1024,15 @@
     (void)VALUE_OR_RETURN_STATUS(filterOutAndProcessParameter<String8>(
                     parameters, String8(AudioParameter::keyReconfigA2dp),
                     [&](const String8& value) -> status_t {
-                        std::vector<VendorParameter> result;
-                        RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
-                                mVendorExt->parseBluetoothA2dpReconfigureOffload(
-                                        std::string(value.c_str()), &result)));
-                        reconfigureOffload = std::move(result);
+                        if (mVendorExt != nullptr) {
+                            std::vector<VendorParameter> result;
+                            RETURN_STATUS_IF_ERROR(statusTFromBinderStatus(
+                                    mVendorExt->parseBluetoothA2dpReconfigureOffload(
+                                            std::string(value.c_str()), &result)));
+                            reconfigureOffload = std::move(result);
+                        } else {
+                            reconfigureOffload = std::vector<VendorParameter>();
+                        }
                         return OK;
                     }));
     if (mBluetoothA2dp != nullptr && a2dpEnabled.has_value()) {
diff --git a/media/libaudiohal/impl/DevicesFactoryHalAidl.cpp b/media/libaudiohal/impl/DevicesFactoryHalAidl.cpp
index 24df32d..3dbc14a 100644
--- a/media/libaudiohal/impl/DevicesFactoryHalAidl.cpp
+++ b/media/libaudiohal/impl/DevicesFactoryHalAidl.cpp
@@ -23,7 +23,6 @@
 //#define LOG_NDEBUG 0
 
 #include <aidl/android/hardware/audio/core/IModule.h>
-#include <aidl/android/media/audio/BnHalAdapterVendorExtension.h>
 #include <android/binder_manager.h>
 #include <media/AidlConversionNdkCpp.h>
 #include <media/AidlConversionUtil.h>
@@ -36,7 +35,6 @@
 using aidl::android::hardware::audio::core::IConfig;
 using aidl::android::hardware::audio::core::IModule;
 using aidl::android::hardware::audio::core::SurroundSoundConfig;
-using aidl::android::hardware::audio::core::VendorParameter;
 using aidl::android::media::audio::common::AudioHalEngineConfig;
 using aidl::android::media::audio::IHalAdapterVendorExtension;
 using android::detail::AudioHalVersionInfo;
@@ -64,86 +62,10 @@
     return cpp;
 }
 
-class HalAdapterVendorExtensionWrapper :
-            public ::aidl::android::media::audio::BnHalAdapterVendorExtension {
-  private:
-    ndk::ScopedAStatus parseVendorParameterIds(ParameterScope in_scope,
-                                               const std::string& in_rawKeys,
-                                               std::vector<std::string>* _aidl_return) override {
-        ndk::ScopedAStatus status;
-        while (true) {
-            status = get()->parseVendorParameterIds(in_scope, in_rawKeys, _aidl_return);
-            if (status.getStatus() != STATUS_DEAD_OBJECT) break;
-            mVendorExt.reset();
-        }
-        return status;
-    }
-
-    ndk::ScopedAStatus parseVendorParameters(
-            ParameterScope in_scope, const std::string& in_rawKeysAndValues,
-            std::vector<VendorParameter>* out_syncParameters,
-            std::vector<VendorParameter>* out_asyncParameters) override {
-        ndk::ScopedAStatus status;
-        while (true) {
-            status = get()->parseVendorParameters(in_scope, in_rawKeysAndValues,
-                    out_syncParameters, out_asyncParameters);
-            if (status.getStatus() != STATUS_DEAD_OBJECT) break;
-            mVendorExt.reset();
-        }
-        return status;
-    }
-
-    ndk::ScopedAStatus parseBluetoothA2dpReconfigureOffload(
-            const std::string& in_rawValue, std::vector<VendorParameter>* _aidl_return) override {
-        ndk::ScopedAStatus status;
-        while (true) {
-            status = get()->parseBluetoothA2dpReconfigureOffload(in_rawValue, _aidl_return);
-            if (status.getStatus() != STATUS_DEAD_OBJECT) break;
-            mVendorExt.reset();
-        }
-        return status;
-    }
-
-    ndk::ScopedAStatus parseBluetoothLeReconfigureOffload(const std::string& in_rawValue,
-            std::vector<VendorParameter>* _aidl_return) override {
-        ndk::ScopedAStatus status;
-        while (true) {
-            status = get()->parseBluetoothLeReconfigureOffload(in_rawValue, _aidl_return);
-            if (status.getStatus() != STATUS_DEAD_OBJECT) break;
-            mVendorExt.reset();
-        }
-        return status;
-    }
-
-    ndk::ScopedAStatus processVendorParameters(ParameterScope in_scope,
-                                               const std::vector<VendorParameter>& in_parameters,
-                                               std::string* _aidl_return) override {
-        ndk::ScopedAStatus status;
-        while (true) {
-            status = get()->processVendorParameters(in_scope, in_parameters, _aidl_return);
-            if (status.getStatus() != STATUS_DEAD_OBJECT) break;
-            mVendorExt.reset();
-        }
-        return status;
-    }
-
-    std::shared_ptr<IHalAdapterVendorExtension> get() {
-        if (!mVendorExt) {
-            auto serviceName = std::string(IHalAdapterVendorExtension::descriptor) + "/default";
-            mVendorExt = IHalAdapterVendorExtension::fromBinder(ndk::SpAIBinder(
-                            AServiceManager_waitForService(serviceName.c_str())));
-        }
-        return mVendorExt;
-    }
-
-    std::shared_ptr<::aidl::android::media::audio::IHalAdapterVendorExtension> mVendorExt;
-};
-
 }  // namespace
 
 DevicesFactoryHalAidl::DevicesFactoryHalAidl(std::shared_ptr<IConfig> config)
-        : mConfig(std::move(config)),
-          mVendorExt(ndk::SharedRefBase::make<HalAdapterVendorExtensionWrapper>()) {
+    : mConfig(std::move(config)) {
 }
 
 status_t DevicesFactoryHalAidl::getDeviceNames(std::vector<std::string> *names) {
@@ -188,7 +110,7 @@
         ALOGE("%s fromBinder %s failed", __func__, serviceName.c_str());
         return NO_INIT;
     }
-    *device = sp<DeviceHalAidl>::make(name, service, mVendorExt);
+    *device = sp<DeviceHalAidl>::make(name, service, getVendorExtension());
     return OK;
 }
 
@@ -227,6 +149,20 @@
     return OK;
 }
 
+std::shared_ptr<IHalAdapterVendorExtension> DevicesFactoryHalAidl::getVendorExtension() {
+    if (!mVendorExt.has_value()) {
+        auto serviceName = std::string(IHalAdapterVendorExtension::descriptor) + "/default";
+        if (AServiceManager_isDeclared(serviceName.c_str())) {
+            mVendorExt = std::shared_ptr<IHalAdapterVendorExtension>(
+                    IHalAdapterVendorExtension::fromBinder(ndk::SpAIBinder(
+                                    AServiceManager_waitForService(serviceName.c_str()))));
+        } else {
+            mVendorExt = nullptr;
+        }
+    }
+    return mVendorExt.value();
+}
+
 // Main entry-point to the shared library.
 extern "C" __attribute__((visibility("default"))) void* createIDevicesFactoryImpl() {
     auto serviceName = std::string(IConfig::descriptor) + "/default";
diff --git a/media/libaudiohal/impl/DevicesFactoryHalAidl.h b/media/libaudiohal/impl/DevicesFactoryHalAidl.h
index 2a3a9e7..17bfe43 100644
--- a/media/libaudiohal/impl/DevicesFactoryHalAidl.h
+++ b/media/libaudiohal/impl/DevicesFactoryHalAidl.h
@@ -45,7 +45,10 @@
 
   private:
     const std::shared_ptr<::aidl::android::hardware::audio::core::IConfig> mConfig;
-    const std::shared_ptr<::aidl::android::media::audio::IHalAdapterVendorExtension> mVendorExt;
+    std::optional<std::shared_ptr<::aidl::android::media::audio::IHalAdapterVendorExtension>>
+            mVendorExt;
+
+    std::shared_ptr<::aidl::android::media::audio::IHalAdapterVendorExtension> getVendorExtension();
 
     ~DevicesFactoryHalAidl() = default;
 };
diff --git a/media/libaudiohal/tests/CoreAudioHalAidl_test.cpp b/media/libaudiohal/tests/CoreAudioHalAidl_test.cpp
index 3541078..1204a3b 100644
--- a/media/libaudiohal/tests/CoreAudioHalAidl_test.cpp
+++ b/media/libaudiohal/tests/CoreAudioHalAidl_test.cpp
@@ -443,6 +443,21 @@
     EXPECT_EQ(ScreenRotation::DEG_0, mModule->getScreenRotation());
 }
 
+// Without a vendor extension, any unrecognized parameters must be ignored.
+TEST_F(DeviceHalAidlTest, VendorParameterIgnored) {
+    EXPECT_EQ(0UL, mModule->getAsyncParameters().size());
+    EXPECT_EQ(0UL, mModule->getSyncParameters().size());
+    EXPECT_EQ(OK, mDevice->setParameters(createParameterString("random_name", "random_value")));
+    EXPECT_EQ(0UL, mModule->getAsyncParameters().size());
+    EXPECT_EQ(0UL, mModule->getSyncParameters().size());
+
+    EXPECT_EQ(0UL, mModule->getRetrievedParameterIds().size());
+    String8 values;
+    EXPECT_EQ(OK, mDevice->getParameters(String8("random_name"), &values));
+    EXPECT_EQ(0UL, mModule->getRetrievedParameterIds().size());
+    EXPECT_EQ(0UL, values.length());
+}
+
 class DeviceHalAidlVendorParametersTest : public testing::Test {
   public:
     void SetUp() override {