From 200258c7c33d8ecbe4a21b91ffbade67f17f1f0b Mon Sep 17 00:00:00 2001 From: Thomas Guillem Date: Mon, 23 Mar 2020 18:15:07 +0100 Subject: [PATCH] android: add AudioManager --- meson.build | 1 + src/android/AudioManager.cxx | 56 ++++++++++++++++++++++++++++++++++++ src/android/AudioManager.hxx | 42 +++++++++++++++++++++++++++ 3 files changed, 99 insertions(+) create mode 100644 src/android/AudioManager.cxx create mode 100644 src/android/AudioManager.hxx diff --git a/meson.build b/meson.build index 07f437627..c169384c7 100644 --- a/meson.build +++ b/meson.build @@ -290,6 +290,7 @@ if not is_android else sources += [ 'src/android/Context.cxx', + 'src/android/AudioManager.cxx', 'src/android/Environment.cxx', 'src/android/LogListener.cxx', ] diff --git a/src/android/AudioManager.cxx b/src/android/AudioManager.cxx new file mode 100644 index 000000000..5e3062250 --- /dev/null +++ b/src/android/AudioManager.cxx @@ -0,0 +1,56 @@ +/* + * Copyright 2003-2020 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#include "AudioManager.hxx" +#include "java/Class.hxx" +#include "java/Exception.hxx" +#include "java/File.hxx" + +#define STREAM_MUSIC 3 + +AudioManager::AudioManager(JNIEnv *env, jobject obj) noexcept + : Java::GlobalObject(env, obj) +{ + Java::Class cls(env, env->GetObjectClass(Get())); + jmethodID method = env->GetMethodID(cls, "getStreamMaxVolume", "(I)I"); + assert(method); + maxVolume = env->CallIntMethod(Get(), method, STREAM_MUSIC); + + getStreamVolumeMethod = env->GetMethodID(cls, "getStreamVolume", "(I)I"); + assert(getStreamVolumeMethod); + + setStreamVolumeMethod = env->GetMethodID(cls, "setStreamVolume", "(III)V"); + assert(setStreamVolumeMethod); +} + +int +AudioManager::GetVolume(JNIEnv *env) +{ + if (maxVolume == 0) + return 0; + return env->CallIntMethod(Get(), getStreamVolumeMethod, STREAM_MUSIC); +} + +void +AudioManager::SetVolume(JNIEnv *env, int volume) +{ + if (maxVolume == 0) + return; + env->CallVoidMethod(Get(), setStreamVolumeMethod, STREAM_MUSIC, volume, 0); +} diff --git a/src/android/AudioManager.hxx b/src/android/AudioManager.hxx new file mode 100644 index 000000000..d4de3deb3 --- /dev/null +++ b/src/android/AudioManager.hxx @@ -0,0 +1,42 @@ +/* + * Copyright 2003-2020 The Music Player Daemon Project + * http://www.musicpd.org + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPD_ANDROID_AUDIO_MANAGER_HXX +#define MPD_ANDROID_AUDIO_MANAGER_HXX + +#include "java/Object.hxx" + +class AudioManager : public Java::GlobalObject { + int maxVolume; + jmethodID getStreamVolumeMethod; + jmethodID setStreamVolumeMethod; + +public: + AudioManager(JNIEnv *env, jobject obj) noexcept; + + AudioManager(std::nullptr_t) noexcept { maxVolume = 0; } + + ~AudioManager() noexcept {} + + int GetMaxVolume() { return maxVolume; } + int GetVolume(JNIEnv *env); + void SetVolume(JNIEnv *env, int); +}; + +#endif