diff --git a/android/AndroidManifest.xml b/android/AndroidManifest.xml index 4dde538f..6b8960b4 100644 --- a/android/AndroidManifest.xml +++ b/android/AndroidManifest.xml @@ -7,7 +7,7 @@ diff --git a/android/src/org/kde/kasts/MediaService.java b/android/src/org/kde/kasts/MediaService.java index 840c6005..69a8169c 100644 --- a/android/src/org/kde/kasts/MediaService.java +++ b/android/src/org/kde/kasts/MediaService.java @@ -18,7 +18,33 @@ import android.util.Log; public class MediaService extends Service { public static final String TAG = "MediaService"; + private MediaSessionCompat mSession; + private PlaybackStateCompat.Builder mPBuilder; + + public void setSessionState(int state) + { + switch(state) { + case 0: { + mPBuilder.setActions(PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_STOP); + mPBuilder.setState(PlaybackStateCompat.STATE_PLAYING, + 0, 1.0f); + mSession.setPlaybackState(mPBuilder.build()); + } + case 1: { + mPBuilder.setActions(PlaybackStateCompat.ACTION_PLAY | PlaybackStateCompat.ACTION_STOP); + mPBuilder.setState(PlaybackStateCompat.STATE_PAUSED, + 0, 1.0f); + mSession.setPlaybackState(mPBuilder.build()); + } + case 2: { + mPBuilder.setActions(PlaybackStateCompat.ACTION_PAUSE | PlaybackStateCompat.ACTION_STOP); + mPBuilder.setState(PlaybackStateCompat.STATE_STOPPED, + 0, 1.0f); + mSession.setPlaybackState(mPBuilder.build()); + } + } + } private class MediaSessionCallback extends MediaSessionCompat.Callback { private Context mContext; @@ -66,6 +92,7 @@ public class MediaService extends Service { MediaSessionCompat.FLAG_HANDLES_QUEUE_COMMANDS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS); mSession.setCallback(new MediaSessionCallback(this)); + mPBuilder = new PlaybackStateCompat.Builder(); } @Override diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index b948d47d..9327573f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -30,6 +30,7 @@ set(SRCS_base models/downloadmodel.cpp models/errorlogmodel.cpp models/podcastsearchmodel.cpp + mediasessionclient.cpp mpris2/mpris2.cpp powermanagementinterface.cpp resources.qrc diff --git a/src/audiomanager.cpp b/src/audiomanager.cpp index 1790c6a2..32d0a73f 100644 --- a/src/audiomanager.cpp +++ b/src/audiomanager.cpp @@ -23,6 +23,7 @@ #include "models/errorlogmodel.h" #include "powermanagementinterface.h" #include "settingsmanager.h" +#include "mediasessionclient.h" static const double MAX_RATE = 1.0; static const double MIN_RATE = 2.5; @@ -78,6 +79,8 @@ AudioManager::AudioManager(QObject *parent) connect(this, &AudioManager::logError, &ErrorLogModel::instance(), &ErrorLogModel::monitorErrorMessages); + MediaSessionClient mClient(this); + // Check if an entry was playing when the program was shut down and restore it if (DataManager::instance().lastPlayingEntry() != QStringLiteral("none")) { setEntry(DataManager::instance().getEntry(DataManager::instance().lastPlayingEntry())); diff --git a/src/mediasessionclient.cpp b/src/mediasessionclient.cpp index 3cdabbaa..db7e889c 100644 --- a/src/mediasessionclient.cpp +++ b/src/mediasessionclient.cpp @@ -8,9 +8,36 @@ #include "audiomanager.h" #include +#include -MediaSessionClient::MediaSessionClient(QObject *parent) +MediaSessionClient::MediaSessionClient(AudioManager *audioPlayer, QObject *parent) : QObject(parent) + , m_audioPlayer(audioPlayer) { - //connections to be added here. + connect(m_audioPlayer, &AudioManager::playbackStateChanged, this, &MediaSessionClient::setState); +} + +void MediaSessionClient::setState() +{ + QDebug() << m_audioPlayer->playbackState(); + switch(m_audioPlayer->playbackState()) { + case QMediaPlayer::StoppedState : + QAndroidJniObject::callStaticMethod + ("org/kde/kasts/MediaService" + , "setSessionState" + , "(I)I" + , 2); + case QMediaPlayer::PausedState : + QAndroidJniObject::callStaticMethod + ("org/kde/kasts/MediaService" + , "setSessionState" + , "(I)I" + , 1); + case QMediaPlayer::PlayingState : + QAndroidJniObject::callStaticMethod + ("org/kde/kasts/MediaService" + , "setSessionState" + , "(I)I" + , 0); + } } diff --git a/src/mediasessionclient.h b/src/mediasessionclient.h index 023e7421..f3dba394 100644 --- a/src/mediasessionclient.h +++ b/src/mediasessionclient.h @@ -6,8 +6,18 @@ #pragma once -class MediaSessionClient +#include + +class AudioManager; + +class MediaSessionClient : public QObject { public: - explicit MediaSessionClient(QObject *parent = nullptr); + explicit MediaSessionClient(AudioManager *audioPlayer, QObject *parent = nullptr); + +private Q_SLOTS: + void setState(); + +private: + AudioManager *m_audioPlayer = nullptr; };