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() {