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"
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
package="org.kde.kasts"
|
package="org.kde.kasts"
|
||||||
android:versionName="0.0.1"
|
android:versionName="0.0.1"
|
||||||
android:versionCode="1628285196"
|
android:versionCode="1628950419"
|
||||||
android:installLocation="auto">
|
android:installLocation="auto">
|
||||||
|
|
||||||
<supports-screens android:largeScreens="true" android:normalScreens="true" android:anyDensity="true" android:smallScreens="true"/>
|
<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 {
|
class MediaData {
|
||||||
public String title;
|
public String title;
|
||||||
public long length;
|
public String author;
|
||||||
|
public String album;
|
||||||
public long position;
|
public long position;
|
||||||
|
public long duration;
|
||||||
|
public float playbackSpeed;
|
||||||
// add more variables here
|
// add more variables here
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +65,7 @@ public class KastsActivity extends QtActivity
|
|||||||
//TODO Image
|
//TODO Image
|
||||||
mSession.setMetadata(metadata.build());
|
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);
|
Intent iPlay = new Intent(this, MediaSessionCallback.class);
|
||||||
iPlay.setAction("ACTION_PLAY");
|
iPlay.setAction("ACTION_PLAY");
|
||||||
@ -145,13 +148,6 @@ public class KastsActivity extends QtActivity
|
|||||||
mSession.release();
|
mSession.release();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void setSessionState(int state)
|
|
||||||
{
|
|
||||||
//TODO: set state in mediadata
|
|
||||||
activity.updateNotification();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private class MediaSessionCallback extends MediaSessionCompat.Callback {
|
private class MediaSessionCallback extends MediaSessionCompat.Callback {
|
||||||
private Context mContext;
|
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);
|
connect(this, &AudioManager::logError, &ErrorLogModel::instance(), &ErrorLogModel::monitorErrorMessages);
|
||||||
|
|
||||||
|
// MediaSessionClient object.
|
||||||
new MediaSessionClient(this);
|
new MediaSessionClient(this);
|
||||||
|
|
||||||
// Check if an entry was playing when the program was shut down and restore it
|
// Check if an entry was playing when the program was shut down and restore it
|
||||||
|
@ -7,40 +7,122 @@
|
|||||||
#include "mediasessionclient.h"
|
#include "mediasessionclient.h"
|
||||||
#include "audiomanager.h"
|
#include "audiomanager.h"
|
||||||
|
|
||||||
#include <QtAndroid>
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
|
|
||||||
MediaSessionClient::MediaSessionClient(AudioManager *audioPlayer, QObject *parent)
|
MediaSessionClient::MediaSessionClient(AudioManager *audioPlayer, QObject *parent)
|
||||||
: QObject(parent)
|
: QObject(parent)
|
||||||
, m_audioPlayer(audioPlayer)
|
, 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()) {
|
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 :
|
case QMediaPlayer::PlayingState :
|
||||||
QAndroidJniObject::callStaticMethod<void>
|
status = 0;
|
||||||
("org/kde/kasts/KastsActivity"
|
break;
|
||||||
, "setSessionState"
|
case QMediaPlayer::PausedState :
|
||||||
, "(I)V"
|
status = 1;
|
||||||
, 0);
|
break;
|
||||||
|
case QMediaPlayer::StoppedState :
|
||||||
|
status = 2;
|
||||||
break;
|
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
|
#pragma once
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QtAndroid>
|
||||||
|
|
||||||
class AudioManager;
|
class AudioManager;
|
||||||
|
class Entry;
|
||||||
|
|
||||||
class MediaSessionClient : public QObject
|
class MediaSessionClient : public QObject
|
||||||
{
|
{
|
||||||
@ -16,7 +18,14 @@ public:
|
|||||||
explicit MediaSessionClient(AudioManager *audioPlayer, QObject *parent = nullptr);
|
explicit MediaSessionClient(AudioManager *audioPlayer, QObject *parent = nullptr);
|
||||||
|
|
||||||
private Q_SLOTS:
|
private Q_SLOTS:
|
||||||
void setState();
|
void setSessionPlaybackState();
|
||||||
|
void setSessionMetadata();
|
||||||
|
void setSessionRate();
|
||||||
|
void setSessionDuration();
|
||||||
|
void setSessionPosition();
|
||||||
|
void setPlaying();
|
||||||
|
void setPaused();
|
||||||
|
void setStopped();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AudioManager *m_audioPlayer = nullptr;
|
AudioManager *m_audioPlayer = nullptr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user