From 215664393c7c85f0125ac302d974ce162d7079cd Mon Sep 17 00:00:00 2001
From: Vladimir Stoiakin <VStoiakin@lavabit.com>
Date: Wed, 15 Apr 2020 15:08:09 +0300
Subject: [PATCH] api: implement getSupportedAudioManagers() in the library

Change-Id: Ia59a7af9bccbf2b56acce6fb7ca8c41fcb8cdae5
---
 bin/dbus/dbusconfigurationmanager.cpp      | 24 ++++-----------------
 src/client/configurationmanager.cpp        |  6 ++++++
 src/dring/configurationmanager_interface.h |  1 +
 src/media/audio/audiolayer.h               |  1 +
 src/preferences.cpp                        | 25 ++++++++++++++++++++++
 src/preferences.h                          |  2 ++
 6 files changed, 39 insertions(+), 20 deletions(-)

diff --git a/bin/dbus/dbusconfigurationmanager.cpp b/bin/dbus/dbusconfigurationmanager.cpp
index e2620acc4c..a8c511c184 100644
--- a/bin/dbus/dbusconfigurationmanager.cpp
+++ b/bin/dbus/dbusconfigurationmanager.cpp
@@ -18,16 +18,10 @@
  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
  */
 
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
 #include "dbusconfigurationmanager.h"
 #include "configurationmanager_interface.h"
 #include "datatransfer_interface.h"
 
-#include "media/audio/audiolayer.h"
-
 DBusConfigurationManager::DBusConfigurationManager(DBus::Connection& connection)
     : DBus::ObjectAdaptor(connection, "/cx/ring/Ring/ConfigurationManager")
 {}
@@ -403,20 +397,10 @@ DBusConfigurationManager::setAudioManager(const std::string& api) -> decltype(DR
     return DRing::setAudioManager(api);
 }
 
-std::vector<std::string>
-DBusConfigurationManager::getSupportedAudioManagers()
-{
-    return {
-#if HAVE_ALSA
-        ALSA_API_STR,
-#endif
-#if HAVE_PULSE
-        PULSEAUDIO_API_STR,
-#endif
-#if HAVE_JACK
-        JACK_API_STR,
-#endif
-    };
+auto
+DBusConfigurationManager::getSupportedAudioManagers() -> decltype(DRing::getSupportedAudioManagers())
+{
+    return DRing::getSupportedAudioManagers();
 }
 
 auto
diff --git a/src/client/configurationmanager.cpp b/src/client/configurationmanager.cpp
index 0aeb3479cf..7216dde8b2 100644
--- a/src/client/configurationmanager.cpp
+++ b/src/client/configurationmanager.cpp
@@ -780,6 +780,12 @@ setRingingTimeout(int32_t timeout)
     jami::Manager::instance().setRingingTimeout(timeout);
 }
 
+std::vector<std::string>
+getSupportedAudioManagers()
+{
+    return jami::AudioPreference::getSupportedAudioManagers();
+}
+
 bool
 setAudioManager(const std::string& api)
 {
diff --git a/src/dring/configurationmanager_interface.h b/src/dring/configurationmanager_interface.h
index 6674b77902..1a2000b9ef 100644
--- a/src/dring/configurationmanager_interface.h
+++ b/src/dring/configurationmanager_interface.h
@@ -123,6 +123,7 @@ DRING_PUBLIC void mutePlayback(bool mute);
 DRING_PUBLIC bool isRingtoneMuted();
 DRING_PUBLIC void muteRingtone(bool mute);
 
+DRING_PUBLIC std::vector<std::string> getSupportedAudioManagers();
 DRING_PUBLIC std::string getAudioManager();
 DRING_PUBLIC bool setAudioManager(const std::string& api);
 
diff --git a/src/media/audio/audiolayer.h b/src/media/audio/audiolayer.h
index 00b8525a03..da04018eb0 100644
--- a/src/media/audio/audiolayer.h
+++ b/src/media/audio/audiolayer.h
@@ -44,6 +44,7 @@ typedef struct SpeexEchoState_ SpeexEchoState;
  */
 
 // Define the audio api
+#define OPENSL_API_STR              "opensl"
 #define PULSEAUDIO_API_STR          "pulseaudio"
 #define ALSA_API_STR                "alsa"
 #define JACK_API_STR                "jack"
diff --git a/src/preferences.cpp b/src/preferences.cpp
index c778209951..2d53b68dd5 100644
--- a/src/preferences.cpp
+++ b/src/preferences.cpp
@@ -438,6 +438,31 @@ AudioPreference::createAudioLayer()
     return nullptr;
 }
 
+std::vector<std::string>
+AudioPreference::getSupportedAudioManagers()
+{
+    return {
+#if HAVE_OPENSL
+        OPENSL_API_STR,
+#endif
+#if HAVE_ALSA
+        ALSA_API_STR,
+#endif
+#if HAVE_PULSE
+        PULSEAUDIO_API_STR,
+#endif
+#if HAVE_JACK
+        JACK_API_STR,
+#endif
+#if HAVE_COREAUDIO
+        COREAUDIO_API_STR,
+#endif
+#if HAVE_PORTAUDIO
+        PORTAUDIO_API_STR,
+#endif
+    };
+}
+
 void AudioPreference::serialize(YAML::Emitter &out) const
 {
     out << YAML::Key << CONFIG_LABEL << YAML::Value << YAML::BeginMap;
diff --git a/src/preferences.h b/src/preferences.h
index a1dffdfcc7..f954d5f60a 100644
--- a/src/preferences.h
+++ b/src/preferences.h
@@ -238,6 +238,8 @@ class AudioPreference : public Serializable {
         AudioLayer *createAudioLayer();
         AudioLayer *switchAndCreateAudioLayer();
 
+        static std::vector<std::string> getSupportedAudioManagers();
+
         std::string getAudioApi() const {
             return audioApi_;
         }
-- 
GitLab