CSD: Load the ISoundDoseFactory dynamically

Also removed the default implementation of the ISoundDoseFactory which
only provides a dummy SoundDose object. It is better to fall back to the
framework MEL.

Test: manual, logs
Bug: 272260521
Change-Id: I3b49c9ae4af7c4eafaef46de3fc90aa05bd819c4
diff --git a/audio/aidl/sounddose/default/Android.bp b/audio/aidl/sounddose/default/Android.bp
deleted file mode 100644
index bd770fa..0000000
--- a/audio/aidl/sounddose/default/Android.bp
+++ /dev/null
@@ -1,46 +0,0 @@
-package {
-    // See: http://go/android-license-faq
-    // A large-scale-change added 'default_applicable_licenses' to import
-    // all of the 'license_kinds' from "hardware_interfaces_license"
-    // to get the below license kinds:
-    //   SPDX-license-identifier-Apache-2.0
-    default_applicable_licenses: ["hardware_interfaces_license"],
-}
-
-cc_defaults {
-    name: "aidlsounddoseservice_defaults",
-    vendor: true,
-    header_libs: [
-        "libsounddoseaidl_headers",
-    ],
-}
-
-cc_library {
-    name: "libsounddoseserviceexampleimpl",
-    defaults: [
-        "aidlsounddoseservice_defaults",
-        "latest_android_media_audio_common_types_ndk_shared",
-        "latest_android_hardware_audio_core_sounddose_ndk_shared",
-        "latest_android_hardware_audio_sounddose_ndk_shared",
-    ],
-    export_include_dirs: ["include"],
-    srcs: [
-        "SoundDoseFactory.cpp",
-    ],
-    shared_libs: [
-        "libaudioservicesounddoseimpl",
-        "libbase",
-        "libbinder_ndk",
-    ],
-
-    visibility: [
-        "//hardware/interfaces/audio/common/all-versions/default/service",
-    ],
-}
-
-cc_library_headers {
-    name: "libsounddoseaidl_headers",
-    export_include_dirs: ["include"],
-    vendor_available: true,
-    host_supported: true,
-}
diff --git a/audio/aidl/sounddose/default/SoundDoseFactory.cpp b/audio/aidl/sounddose/default/SoundDoseFactory.cpp
deleted file mode 100644
index 83a592b..0000000
--- a/audio/aidl/sounddose/default/SoundDoseFactory.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define LOG_TAG "AHAL_SoundDoseFactory"
-
-#include "SoundDoseFactory.h"
-
-#include <android-base/logging.h>
-#include <core-impl/SoundDose.h>
-
-namespace aidl::android::hardware::audio::sounddose {
-
-using ::aidl::android::hardware::audio::core::sounddose::SoundDose;
-
-ndk::ScopedAStatus SoundDoseFactory::getSoundDose(const std::string& in_module,
-                                                  std::shared_ptr<ISoundDose>* _aidl_return) {
-    auto soundDoseIt = mSoundDoseBinderMap.find(in_module);
-    if (soundDoseIt != mSoundDoseBinderMap.end()) {
-        *_aidl_return = ISoundDose::fromBinder(soundDoseIt->second);
-
-        LOG(DEBUG) << __func__
-                   << ": returning cached instance of ISoundDose: " << _aidl_return->get()
-                   << " for module " << in_module;
-        return ndk::ScopedAStatus::ok();
-    }
-
-    auto soundDose = ndk::SharedRefBase::make<SoundDose>();
-    mSoundDoseBinderMap[in_module] = soundDose->asBinder();
-    *_aidl_return = soundDose;
-
-    LOG(DEBUG) << __func__ << ": returning new instance of ISoundDose: " << _aidl_return->get()
-               << " for module " << in_module;
-    return ndk::ScopedAStatus::ok();
-}
-
-}  // namespace aidl::android::hardware::audio::sounddose
diff --git a/audio/aidl/sounddose/default/include/SoundDoseFactory.h b/audio/aidl/sounddose/default/include/SoundDoseFactory.h
deleted file mode 100644
index ced4291..0000000
--- a/audio/aidl/sounddose/default/include/SoundDoseFactory.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#pragma once
-
-#include <aidl/android/hardware/audio/core/sounddose/ISoundDose.h>
-#include <aidl/android/hardware/audio/sounddose/BnSoundDoseFactory.h>
-#include <android/binder_interface_utils.h>
-
-#include <unordered_map>
-
-namespace aidl::android::hardware::audio::sounddose {
-
-using ::aidl::android::hardware::audio::core::sounddose::ISoundDose;
-
-class SoundDoseFactory : public BnSoundDoseFactory {
-  public:
-    ndk::ScopedAStatus getSoundDose(const std::string& module,
-                                    std::shared_ptr<ISoundDose>* _aidl_return) override;
-
-  private:
-    std::unordered_map<std::string, ndk::SpAIBinder> mSoundDoseBinderMap;
-};
-
-}  // namespace aidl::android::hardware::audio::sounddose
diff --git a/audio/common/all-versions/default/service/Android.bp b/audio/common/all-versions/default/service/Android.bp
index 2fcfb23..d513062 100644
--- a/audio/common/all-versions/default/service/Android.bp
+++ b/audio/common/all-versions/default/service/Android.bp
@@ -38,13 +38,11 @@
     name: "android.hardware.audio.service",
 
     init_rc: ["android.hardware.audio.service.rc"],
-    vintf_fragments: ["android.hardware.audio.sounddose-aidl.xml"],
     relative_install_path: "hw",
     vendor: true,
 
     defaults: [
         "android_hardware_audio_config_defaults",
-        "latest_android_hardware_audio_sounddose_ndk_shared",
     ],
 
     srcs: ["service.cpp"],
@@ -56,7 +54,6 @@
     ],
 
     shared_libs: [
-        "//hardware/interfaces/audio/aidl/sounddose/default:libsounddoseserviceexampleimpl",
         "libcutils",
         "libbinder",
         "libbinder_ndk",
diff --git a/audio/common/all-versions/default/service/android.hardware.audio.sounddose-aidl.xml b/audio/common/all-versions/default/service/android.hardware.audio.sounddose-aidl.xml
deleted file mode 100644
index a297bfb..0000000
--- a/audio/common/all-versions/default/service/android.hardware.audio.sounddose-aidl.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-<manifest version="1.0" type="device">
-  <hal format="aidl">
-    <name>android.hardware.audio.sounddose</name>
-    <version>1</version>
-    <fqname>ISoundDoseFactory/default</fqname>
-  </hal>
-</manifest>
diff --git a/audio/common/all-versions/default/service/service.cpp b/audio/common/all-versions/default/service/service.cpp
index 7b5a932..1557a95 100644
--- a/audio/common/all-versions/default/service/service.cpp
+++ b/audio/common/all-versions/default/service/service.cpp
@@ -20,10 +20,6 @@
 #include <string>
 #include <vector>
 
-#include <SoundDoseFactory.h>
-#include <android-base/logging.h>
-#include <android/binder_ibinder_platform.h>
-#include <android/binder_manager.h>
 #include <android/binder_process.h>
 #include <binder/ProcessState.h>
 #include <cutils/properties.h>
@@ -37,8 +33,6 @@
 
 using InterfacesList = std::vector<std::string>;
 
-using aidl::android::hardware::audio::sounddose::SoundDoseFactory;
-
 /** Try to register the provided factories in the provided order.
  *  If any registers successfully, do not register any other and return true.
  *  If all fail, return false.
@@ -144,6 +138,10 @@
             "android.hardware.bluetooth.audio-impl",
             "createIBluetoothAudioProviderFactory",
         },
+        {
+            "android.hardware.audio.sounddose-vendor-impl",
+            "createISoundDoseFactory",
+        },
     };
     // clang-format on
 
@@ -171,13 +169,5 @@
         }
     }
 
-    // Register ISoundDoseFactory interface as a workaround for using the audio AIDL HAL
-    auto soundDoseDefault = ndk::SharedRefBase::make<SoundDoseFactory>();
-    const std::string soundDoseDefaultName =
-            std::string() + SoundDoseFactory::descriptor + "/default";
-    binder_status_t status = AServiceManager_addService(soundDoseDefault->asBinder().get(),
-                                                        soundDoseDefaultName.c_str());
-    CHECK_EQ(STATUS_OK, status);
-
     joinRpcThreadpool();
 }