diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index b411305c..afd659a7 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -36,6 +36,12 @@
+
+
+
+
+
+
diff --git a/app/src/main/java/com/futo/platformplayer/activities/MainActivity.kt b/app/src/main/java/com/futo/platformplayer/activities/MainActivity.kt
index a9bee418..371b4d1b 100644
--- a/app/src/main/java/com/futo/platformplayer/activities/MainActivity.kt
+++ b/app/src/main/java/com/futo/platformplayer/activities/MainActivity.kt
@@ -1,11 +1,13 @@
package com.futo.platformplayer.activities
import android.annotation.SuppressLint
+import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
import android.content.pm.PackageManager
import android.content.res.Configuration
+import android.media.AudioManager
import android.net.Uri
import android.os.Bundle
import android.os.StrictMode
@@ -72,6 +74,7 @@ import com.futo.platformplayer.fragment.mainactivity.topbar.SearchTopBarFragment
import com.futo.platformplayer.logging.Logger
import com.futo.platformplayer.models.ImportCache
import com.futo.platformplayer.models.UrlVideoWithTime
+import com.futo.platformplayer.receivers.MediaButtonReceiver
import com.futo.platformplayer.setNavigationBarColorAndIcons
import com.futo.platformplayer.states.StateApp
import com.futo.platformplayer.states.StateBackup
@@ -107,6 +110,7 @@ import java.util.LinkedList
import java.util.Queue
import java.util.concurrent.ConcurrentLinkedQueue
+
class MainActivity : AppCompatActivity, IWithResultLauncher {
//TODO: Move to dimensions
diff --git a/app/src/main/java/com/futo/platformplayer/receivers/MediaButtonReceiver.kt b/app/src/main/java/com/futo/platformplayer/receivers/MediaButtonReceiver.kt
new file mode 100644
index 00000000..a4981897
--- /dev/null
+++ b/app/src/main/java/com/futo/platformplayer/receivers/MediaButtonReceiver.kt
@@ -0,0 +1,35 @@
+package com.futo.platformplayer.receivers
+
+import android.content.BroadcastReceiver
+import android.content.Context
+import android.content.Intent
+import android.os.Build
+import android.view.KeyEvent
+import com.futo.platformplayer.logging.Logger
+
+
+class MediaButtonReceiver : BroadcastReceiver() {
+ override fun onReceive(context: Context?, intent: Intent?) {
+ val keyEvent: KeyEvent? = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ intent?.getParcelableExtra(Intent.EXTRA_KEY_EVENT, KeyEvent::class.java)
+ } else {
+ @Suppress("DEPRECATION")
+ (intent?.getParcelableExtra(Intent.EXTRA_KEY_EVENT))
+ }
+
+ Logger.i(TAG, "Received media button intent, keyCode: " + keyEvent?.keyCode)
+ if (keyEvent != null && keyEvent.action == KeyEvent.ACTION_DOWN) {
+ when (keyEvent.keyCode) {
+ KeyEvent.KEYCODE_MEDIA_PLAY -> MediaControlReceiver.onPlayReceived.emit()
+ KeyEvent.KEYCODE_MEDIA_PAUSE -> MediaControlReceiver.onPauseReceived.emit()
+ KeyEvent.KEYCODE_MEDIA_NEXT -> MediaControlReceiver.onNextReceived.emit()
+ KeyEvent.KEYCODE_MEDIA_PREVIOUS -> MediaControlReceiver.onPreviousReceived.emit()
+ KeyEvent.KEYCODE_MEDIA_STOP -> MediaControlReceiver.onCloseReceived.emit()
+ }
+ }
+ }
+
+ companion object {
+ private val TAG = "MediaButtonReceiver"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt b/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt
index c93df27c..512b3bd2 100644
--- a/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt
+++ b/app/src/main/java/com/futo/platformplayer/services/MediaPlaybackService.kt
@@ -23,6 +23,7 @@ import android.support.v4.media.MediaMetadataCompat
import android.support.v4.media.session.MediaSessionCompat
import android.support.v4.media.session.PlaybackStateCompat
import android.util.Log
+import android.view.KeyEvent
import androidx.core.app.NotificationCompat
import com.bumptech.glide.Glide
import com.bumptech.glide.request.target.CustomTarget
@@ -91,6 +92,7 @@ class MediaPlaybackService : Service() {
return START_STICKY;
}
+
fun setupNotificationRequirements() {
_audioManager = getSystemService(Context.AUDIO_SERVICE) as AudioManager;
_notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager;
@@ -101,6 +103,7 @@ class MediaPlaybackService : Service() {
_notificationManager!!.createNotificationChannel(_notificationChannel!!);
_mediaSession = MediaSessionCompat(this, "PlayerState");
+ _mediaSession?.isActive = true
_mediaSession?.setPlaybackState(PlaybackStateCompat.Builder()
.setState(PlaybackStateCompat.STATE_PLAYING, 0, 1f)
.build());
@@ -143,6 +146,12 @@ class MediaPlaybackService : Service() {
MediaControlReceiver.onNextReceived.emit();
}
});
+ _mediaSession?.setMediaButtonReceiver(PendingIntent.getBroadcast(
+ this@MediaPlaybackService,
+ 0,
+ Intent(Intent.ACTION_MEDIA_BUTTON).setClass(this@MediaPlaybackService, MediaControlReceiver::class.java),
+ PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
+ ))
}
override fun onCreate() {