summaryrefslogtreecommitdiffstats
path: root/src/plugins/android/src/wrappers
diff options
context:
space:
mode:
authorVal Doroshchuk <valentyn.doroshchuk@qt.io>2019-02-06 15:35:04 +0100
committerVaL Doroshchuk <valentyn.doroshchuk@qt.io>2019-02-08 09:57:53 +0000
commit054a8f3b1f692d14687ce14fa8d143edc8f988f0 (patch)
treeba7238afa2e8a5467d89c2967e054940c053617a /src/plugins/android/src/wrappers
parent5fa4b2e448734da65ec24f2ce8234a4d3e4a832e (diff)
Android: Implement audio roles
Introduced custom and standard audio role controls using MediaPlayer.setAudioAttributes(AudioAttributes) which added in API level 21. Custom audio roles might contain a list of roles separated by comma. E.g "CONTENT_TYPE_MOVIE,USAGE_ALARM", which means content type is movie and usage is alarm. [ChangeLog][Platform Specific Changes][Android] Implemented audio roles. Task-number: QTBUG-73119 Change-Id: I281d1ce899d29f54d271516a1fca5f11c897fc90 Reviewed-by: Christian Strømme <christian.stromme@qt.io>
Diffstat (limited to 'src/plugins/android/src/wrappers')
-rw-r--r--src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp89
-rw-r--r--src/plugins/android/src/wrappers/jni/androidmediaplayer.h3
2 files changed, 92 insertions, 0 deletions
diff --git a/src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp b/src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp
index b81f98cbd..79685e16f 100644
--- a/src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp
+++ b/src/plugins/android/src/wrappers/jni/androidmediaplayer.cpp
@@ -223,6 +223,95 @@ void AndroidMediaPlayer::setDisplay(AndroidSurfaceTexture *surfaceTexture)
surfaceTexture ? surfaceTexture->surfaceHolder() : 0);
}
+void AndroidMediaPlayer::setAudioRole(QAudio::Role role)
+{
+ QString str;
+ switch (role) {
+ case QAudio::MusicRole:
+ str = QLatin1String("CONTENT_TYPE_MUSIC");
+ break;
+ case QAudio::VideoRole:
+ str = QLatin1String("CONTENT_TYPE_MOVIE");
+ break;
+ case QAudio::VoiceCommunicationRole:
+ str = QLatin1String("USAGE_VOICE_COMMUNICATION");
+ break;
+ case QAudio::AlarmRole:
+ str = QLatin1String("USAGE_ALARM");
+ break;
+ case QAudio::NotificationRole:
+ str = QLatin1String("USAGE_NOTIFICATION");
+ break;
+ case QAudio::RingtoneRole:
+ str = QLatin1String("USAGE_NOTIFICATION_RINGTONE");
+ break;
+ case QAudio::AccessibilityRole:
+ str = QLatin1String("USAGE_ASSISTANCE_ACCESSIBILITY");
+ break;
+ case QAudio::SonificationRole:
+ str = QLatin1String("CONTENT_TYPE_SONIFICATION");
+ break;
+ case QAudio::GameRole:
+ str = QLatin1String("USAGE_GAME");
+ break;
+ default:
+ break;
+ }
+
+ setCustomAudioRole(str);
+}
+
+void AndroidMediaPlayer::setCustomAudioRole(const QString &role)
+{
+ QStringList roles = role.split(",", QString::SkipEmptyParts);
+
+ int type = 0; // CONTENT_TYPE_UNKNOWN
+ int usage = 0; // USAGE_UNKNOWN
+ for (int i = 0; i < qMin(2, roles.size()); ++i) {
+ auto r = roles[i];
+ if (r == QLatin1String("CONTENT_TYPE_MOVIE"))
+ type = 3;
+ else if (r == QLatin1String("CONTENT_TYPE_MUSIC"))
+ type = 2;
+ else if (r == QLatin1String("CONTENT_TYPE_SONIFICATION"))
+ type = 4;
+ else if (r == QLatin1String("CONTENT_TYPE_SPEECH"))
+ type = 1;
+ else if (r == QLatin1String("USAGE_ALARM"))
+ usage = 4;
+ else if (r == QLatin1String("USAGE_ASSISTANCE_ACCESSIBILITY"))
+ usage = 11;
+ else if (r == QLatin1String("USAGE_ASSISTANCE_NAVIGATION_GUIDANCE"))
+ usage = 12;
+ else if (r == QLatin1String("USAGE_ASSISTANCE_SONIFICATION"))
+ usage = 13;
+ else if (r == QLatin1String("USAGE_ASSISTANT"))
+ usage = 16;
+ else if (r == QLatin1String("USAGE_GAME"))
+ usage = 14;
+ else if (r == QLatin1String("USAGE_MEDIA"))
+ usage = 1;
+ else if (r == QLatin1String("USAGE_NOTIFICATION"))
+ usage = 5;
+ else if (r == QLatin1String("USAGE_NOTIFICATION_COMMUNICATION_DELAYED"))
+ usage = 9;
+ else if (r == QLatin1String("USAGE_NOTIFICATION_COMMUNICATION_INSTANT"))
+ usage = 8;
+ else if (r == QLatin1String("USAGE_NOTIFICATION_COMMUNICATION_REQUEST"))
+ usage = 7;
+ else if (r == QLatin1String("USAGE_NOTIFICATION_EVENT"))
+ usage = 10;
+ else if (r == QLatin1String("USAGE_NOTIFICATION_RINGTONE"))
+ usage = 6;
+ else if (r == QLatin1String("USAGE_VOICE_COMMUNICATION"))
+ usage = 2;
+ else if (r == QLatin1String("USAGE_VOICE_COMMUNICATION_SIGNALLING"))
+ usage = 3;
+ }
+
+ mMediaPlayer.callMethod<void>("setAudioAttributes", "(II)V", jint(type), jint(usage));
+}
+
static void onErrorNative(JNIEnv *env, jobject thiz, jint what, jint extra, jlong id)
{
Q_UNUSED(env);
diff --git a/src/plugins/android/src/wrappers/jni/androidmediaplayer.h b/src/plugins/android/src/wrappers/jni/androidmediaplayer.h
index a7284bb0c..14cbf49bc 100644
--- a/src/plugins/android/src/wrappers/jni/androidmediaplayer.h
+++ b/src/plugins/android/src/wrappers/jni/androidmediaplayer.h
@@ -42,6 +42,7 @@
#include <QObject>
#include <QtCore/private/qjni_p.h>
+#include <QAudio>
QT_BEGIN_NAMESPACE
@@ -116,6 +117,8 @@ public:
void setVolume(int volume);
bool setPlaybackRate(qreal rate);
void setDisplay(AndroidSurfaceTexture *surfaceTexture);
+ void setAudioRole(QAudio::Role role);
+ void setCustomAudioRole(const QString &role);
static bool initJNI(JNIEnv *env);