From 5619fd0bba65aa512638aafe63be1ded23016b9e Mon Sep 17 00:00:00 2001
From: Thomas Guillem <thomas@gllm.fr>
Date: Mon, 23 Mar 2020 21:34:18 +0100
Subject: [PATCH] android: Context: add GetAudioManager

---
 src/android/Context.cxx | 21 +++++++++++++++++++++
 src/android/Context.hxx |  4 ++++
 2 files changed, 25 insertions(+)

diff --git a/src/android/Context.cxx b/src/android/Context.cxx
index f73026e94..59c630b13 100644
--- a/src/android/Context.cxx
+++ b/src/android/Context.cxx
@@ -20,8 +20,11 @@
 #include "Context.hxx"
 #include "java/Class.hxx"
 #include "java/File.hxx"
+#include "java/String.hxx"
 #include "fs/AllocatedPath.hxx"
 
+#include "AudioManager.hxx"
+
 AllocatedPath
 Context::GetCacheDir(JNIEnv *env) const noexcept
 {
@@ -40,3 +43,21 @@ Context::GetCacheDir(JNIEnv *env) const noexcept
 
 	return Java::File::ToAbsolutePath(env, file);
 }
+
+AudioManager *
+Context::GetAudioManager(JNIEnv *env) noexcept
+{
+	assert(env != nullptr);
+
+	Java::Class cls(env, env->GetObjectClass(Get()));
+	jmethodID method = env->GetMethodID(cls, "getSystemService",
+					    "(Ljava/lang/String;)Ljava/lang/Object;");
+	assert(method);
+
+	Java::String name(env, "audio");
+	jobject am = env->CallObjectMethod(Get(), method, name.Get());
+	if (Java::DiscardException(env) || am == nullptr)
+		return nullptr;
+
+    return new AudioManager(env, am);
+}
diff --git a/src/android/Context.hxx b/src/android/Context.hxx
index 8d65ae6e2..b8b1d994c 100644
--- a/src/android/Context.hxx
+++ b/src/android/Context.hxx
@@ -23,6 +23,7 @@
 #include "java/Object.hxx"
 
 class AllocatedPath;
+class AudioManager;
 
 class Context : public Java::GlobalObject {
 public:
@@ -31,6 +32,9 @@ public:
 
 	gcc_pure
 	AllocatedPath GetCacheDir(JNIEnv *env) const noexcept;
+
+	gcc_pure
+	AudioManager *GetAudioManager(JNIEnv *env) noexcept;
 };
 
 #endif