Added C++ connections to the media session.
This commit is contained in:
parent
ed5c83b756
commit
6e3b360978
@ -7,7 +7,7 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="org.kde.kasts"
|
||||
android:versionName="0.0.1"
|
||||
android:versionCode="1628285196"
|
||||
android:versionCode="1628950419"
|
||||
android:installLocation="auto">
|
||||
|
||||
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
|
||||
|
@ -36,8 +36,11 @@ public class KastsActivity extends QtActivity
|
||||
|
||||
class MediaData {
|
||||
public String title;
|
||||
public long length;
|
||||
public String author;
|
||||
public String album;
|
||||
public long position;
|
||||
public long duration;
|
||||
public float playbackSpeed;
|
||||
// add more variables here
|
||||
}
|
||||
|
||||
@ -62,7 +65,7 @@ public class KastsActivity extends QtActivity
|
||||
//TODO Image
|
||||
mSession.setMetadata(metadata.build());
|
||||
|
||||
mPBuilder.setState(PlaybackStateCompat.STATE_PLAYING, 100000, 1.0f);
|
||||
mPBuilder.setState(PlaybackStateCompat.STATE_PLAYING, 100000, 1.0f); //TODO:Logically we should remove this statement??
|
||||
|
||||
Intent iPlay = new Intent(this, MediaSessionCallback.class);
|
||||
iPlay.setAction("ACTION_PLAY");
|
||||
@ -145,13 +148,6 @@ public class KastsActivity extends QtActivity
|
||||
mSession.release();
|
||||
}
|
||||
|
||||
public static void setSessionState(int state)
|
||||
{
|
||||
//TODO: set state in mediadata
|
||||
activity.updateNotification();
|
||||
|
||||
}
|
||||
|
||||
private class MediaSessionCallback extends MediaSessionCompat.Callback {
|
||||
private Context mContext;
|
||||
|
||||
@ -191,4 +187,49 @@ public class KastsActivity extends QtActivity
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* JNI METHODS
|
||||
*/
|
||||
|
||||
public static void setSessionState(int state)
|
||||
{
|
||||
//TODO: set state in mediadata
|
||||
switch(state)
|
||||
{
|
||||
case 0:
|
||||
mPBuilder.setState(PlaybackStateCompat.STATE_PLAYING, mediaData.position, mediaData.playbackSpeed);
|
||||
case 1:
|
||||
mPBuilder.setState(PlaybackStateCompat.STATE_PAUSED, mediaData.position, mediaData.playbackSpeed);
|
||||
case 2:
|
||||
mPBuilder.setState(PlaybackStateCompat.STATE_STOPPED, mediaData.position, mediaData.playbackSpeed);
|
||||
}
|
||||
activity.updateNotification();
|
||||
}
|
||||
|
||||
public static void setMetadata(String title, String author, String album, long position, long duration, float rate)
|
||||
{
|
||||
mediaData.title = title;
|
||||
mediaData.author = author;
|
||||
mediaData.album = album;
|
||||
mediaData.position = position;
|
||||
mediaData.duration = duration;
|
||||
mediaData.playbackSpeed = rate;
|
||||
|
||||
activity.updateNotification();
|
||||
}
|
||||
|
||||
public static void setPlaybackSpeed(int rate)
|
||||
{
|
||||
mediaData.playbackSpeed = rate;
|
||||
}
|
||||
|
||||
public static void setDuration(int duration)
|
||||
{
|
||||
mediaData.duration = duration;
|
||||
}
|
||||
|
||||
public static void setPosition(int position)
|
||||
{
|
||||
mediaData.position = position;
|
||||
}
|
||||
}
|
||||
|
@ -79,6 +79,7 @@ AudioManager::AudioManager(QObject *parent)
|
||||
|
||||
connect(this, &AudioManager::logError, &ErrorLogModel::instance(), &ErrorLogModel::monitorErrorMessages);
|
||||
|
||||
// MediaSessionClient object.
|
||||
new MediaSessionClient(this);
|
||||
|
||||
// Check if an entry was playing when the program was shut down and restore it
|
||||
|
@ -7,40 +7,122 @@
|
||||
#include "mediasessionclient.h"
|
||||
#include "audiomanager.h"
|
||||
|
||||
#include <QtAndroid>
|
||||
#include <QDebug>
|
||||
|
||||
MediaSessionClient::MediaSessionClient(AudioManager *audioPlayer, QObject *parent)
|
||||
: QObject(parent)
|
||||
, m_audioPlayer(audioPlayer)
|
||||
{
|
||||
connect(m_audioPlayer, &AudioManager::playbackStateChanged, this, &MediaSessionClient::setState);
|
||||
connect(m_audioPlayer, &AudioManager::playbackStateChanged, this, &MediaSessionClient::setSessionPlaybackState);
|
||||
// Sets the current playback state.
|
||||
connect(m_audioPlayer, &AudioManager::entryChanged, this, &MediaSessionClient::setSessionMetadata);
|
||||
// Updates the android session's metadata.
|
||||
connect(m_audioPlayer, &AudioManager::playbackRateChanged, this, &MediaSessionClient::setSessionRate);
|
||||
// Sets the rate of the media playback.
|
||||
connect(m_audioPlayer, &AudioManager::durationChanged, this, &MediaSessionClient::setSessionDuration);
|
||||
// Sets the playback duration metadata.
|
||||
connect(m_audioPlayer, &AudioManager::positionChanged, this, &MediaSessionClient::setSessionPosition);
|
||||
// Sets the playback position metadata.
|
||||
connect(m_audioPlayer, &AudioManager::playing, this, &MediaSessionClient::setPlaying);
|
||||
// Sets the playback to playing.
|
||||
connect(m_audioPlayer, &AudioManager::paused, this, &MediaSessionClient::setPaused);
|
||||
// Sets the playback to paused.
|
||||
connect(m_audioPlayer, &AudioManager::stopped, this, &MediaSessionClient::setStopped);
|
||||
// Sets the playback to stopped.
|
||||
}
|
||||
|
||||
void MediaSessionClient::setState()
|
||||
void MediaSessionClient::setSessionPlaybackState()
|
||||
{
|
||||
qDebug() << m_audioPlayer->playbackState();
|
||||
qDebug() << "MediaSessionClient::setSessionPlaybackState called with state value = " << m_audioPlayer->playbackState();
|
||||
int status = -1;
|
||||
switch(m_audioPlayer->playbackState()) {
|
||||
case QMediaPlayer::StoppedState :
|
||||
QAndroidJniObject::callStaticMethod<void>
|
||||
("org/kde/kasts/KastsActivity"
|
||||
, "setSessionState"
|
||||
, "(I)V"
|
||||
, 2);
|
||||
break;
|
||||
case QMediaPlayer::PausedState :
|
||||
QAndroidJniObject::callStaticMethod<void>
|
||||
("org/kde/kasts/KastsActivity"
|
||||
, "setSessionState"
|
||||
, "(I)V"
|
||||
, 1);
|
||||
break;
|
||||
case QMediaPlayer::PlayingState :
|
||||
QAndroidJniObject::callStaticMethod<void>
|
||||
("org/kde/kasts/KastsActivity"
|
||||
, "setSessionState"
|
||||
, "(I)V"
|
||||
, 0);
|
||||
status = 0;
|
||||
break;
|
||||
case QMediaPlayer::PausedState :
|
||||
status = 1;
|
||||
break;
|
||||
case QMediaPlayer::StoppedState :
|
||||
status = 2;
|
||||
break;
|
||||
}
|
||||
QAndroidJniObject::callStaticMethod<void>("org/kde/kasts/KastsActivity", "setSessionState", "(I)V", status);
|
||||
}
|
||||
|
||||
void MediaSessionClient::setSessionMetadata()
|
||||
{
|
||||
/*
|
||||
* Sets the media session's metadata. This will be triggered every time there is state change ie. next, previous, etc.
|
||||
*/
|
||||
Entry *entry = m_audioPlayer->entry();
|
||||
|
||||
QString authorString = QStringLiteral("");
|
||||
if (entry->authors().count() > 0) {
|
||||
for (auto &author : entry->authors()) {
|
||||
authorString.append(QStringLiteral(", "));
|
||||
authorString.append(author->name());
|
||||
}
|
||||
}
|
||||
QAndroidJniObject title = QAndroidJniObject::fromString(entry->title());
|
||||
// Title string
|
||||
QAndroidJniObject author = QAndroidJniObject::fromString(authorString);
|
||||
// Author string
|
||||
QAndroidJniObject album = QAndroidJniObject::fromString(QStringLiteral("Album"));
|
||||
// Author string
|
||||
qint64 duration = qint64(m_audioPlayer->duration()) * 1000;
|
||||
// Playback duration
|
||||
qint64 position = qint64(m_audioPlayer->position()) * 1000;
|
||||
// Playback position
|
||||
int rate = m_audioPlayer->playbackRate();
|
||||
// Playback rate
|
||||
|
||||
QAndroidJniObject::callStaticMethod<void>("org/kde/kasts/KastsActivity", "setMetadata","(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;J;J;F)V",title.object<jstring>(), author.object<jstring>(), album.object<jstring>(), position, duration, rate);
|
||||
}
|
||||
|
||||
void MediaSessionClient::setSessionRate()
|
||||
{
|
||||
/*
|
||||
* Sets the media session's rate metadata.
|
||||
*/
|
||||
int rate = m_audioPlayer->playbackRate();
|
||||
QAndroidJniObject::callStaticMethod<void>("org/kde/kasts/KastsActivity", "setPlaybackSpeed", "(I)V", rate);
|
||||
}
|
||||
|
||||
void MediaSessionClient::setSessionDuration()
|
||||
{
|
||||
/*
|
||||
* Sets the media session's playback duration.
|
||||
*/
|
||||
qint64 duration = qint64(m_audioPlayer->duration()) * 1000;
|
||||
QAndroidJniObject::callStaticMethod<void>("org/kde/kasts/KastsActivity", "setDuration", "(I)V", duration);
|
||||
}
|
||||
|
||||
void MediaSessionClient::setSessionPosition()
|
||||
{
|
||||
/*
|
||||
* Sets the media session's current playback position.
|
||||
*/
|
||||
qint64 position = qint64(m_audioPlayer->position()) * 1000;
|
||||
QAndroidJniObject::callStaticMethod<void>("org/kde/kasts/KastsActivity", "setPosition", "(I)V", position);
|
||||
}
|
||||
|
||||
void MediaSessionClient::setPlaying()
|
||||
{
|
||||
/*
|
||||
* Sets the media session's current playback state to playing.
|
||||
*/
|
||||
}
|
||||
|
||||
void MediaSessionClient::setPaused()
|
||||
{
|
||||
/*
|
||||
* Sets the media session's current playback state to paused.
|
||||
*/
|
||||
}
|
||||
|
||||
void MediaSessionClient::setStopped()
|
||||
{
|
||||
/*
|
||||
* Sets the media session's current playback state to stopped.
|
||||
*/
|
||||
}
|
||||
|
@ -7,8 +7,10 @@
|
||||
#pragma once
|
||||
|
||||
#include <QObject>
|
||||
#include <QtAndroid>
|
||||
|
||||
class AudioManager;
|
||||
class Entry;
|
||||
|
||||
class MediaSessionClient : public QObject
|
||||
{
|
||||
@ -16,7 +18,14 @@ public:
|
||||
explicit MediaSessionClient(AudioManager *audioPlayer, QObject *parent = nullptr);
|
||||
|
||||
private Q_SLOTS:
|
||||
void setState();
|
||||
void setSessionPlaybackState();
|
||||
void setSessionMetadata();
|
||||
void setSessionRate();
|
||||
void setSessionDuration();
|
||||
void setSessionPosition();
|
||||
void setPlaying();
|
||||
void setPaused();
|
||||
void setStopped();
|
||||
|
||||
private:
|
||||
AudioManager *m_audioPlayer = nullptr;
|
||||
|
Loading…
x
Reference in New Issue
Block a user