Ignore music metadata updates without artist

This commit is contained in:
MM20 2021-10-10 14:08:43 +02:00
parent dbc1444d7f
commit 004212f8c9
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389

View File

@ -6,7 +6,7 @@ import android.content.Intent
import android.graphics.Bitmap import android.graphics.Bitmap
import android.graphics.BitmapFactory import android.graphics.BitmapFactory
import android.media.AudioManager import android.media.AudioManager
import android.os.Bundle import android.net.Uri
import android.support.v4.media.session.MediaSessionCompat import android.support.v4.media.session.MediaSessionCompat
import android.util.Log import android.util.Log
import android.view.KeyEvent import android.view.KeyEvent
@ -17,11 +17,11 @@ import androidx.media2.common.MediaItem
import androidx.media2.common.MediaMetadata import androidx.media2.common.MediaMetadata
import androidx.media2.common.SessionPlayer import androidx.media2.common.SessionPlayer
import androidx.media2.session.MediaController import androidx.media2.session.MediaController
import androidx.media2.session.SessionCommand
import androidx.media2.session.SessionCommandGroup import androidx.media2.session.SessionCommandGroup
import androidx.media2.session.SessionResult import de.mm20.launcher2.ktx.asBitmap
import kotlinx.coroutines.* import kotlinx.coroutines.*
import java.io.File import java.io.File
import java.io.FileNotFoundException
import java.util.concurrent.Executors import java.util.concurrent.Executors
class MusicRepository(val context: Context) { class MusicRepository(val context: Context) {
@ -48,9 +48,9 @@ class MusicRepository(val context: Context) {
if (token.toString() == lastToken.toString()) return if (token.toString() == lastToken.toString()) return
mediaController?.close() mediaController?.close()
mediaController = MediaController.Builder(context) mediaController = MediaController.Builder(context)
.setSessionCompatToken(token) .setSessionCompatToken(token)
.setControllerCallback(Executors.newSingleThreadExecutor(), mediaSessionCallback) .setControllerCallback(Executors.newSingleThreadExecutor(), mediaSessionCallback)
.build() .build()
lastToken = token.toString() lastToken = token.toString()
} }
@ -63,7 +63,10 @@ class MusicRepository(val context: Context) {
} }
private val mediaSessionCallback = object : MediaController.ControllerCallback() { private val mediaSessionCallback = object : MediaController.ControllerCallback() {
override fun onConnected(controller: MediaController, allowedCommands: SessionCommandGroup) { override fun onConnected(
controller: MediaController,
allowedCommands: SessionCommandGroup
) {
super.onConnected(controller, allowedCommands) super.onConnected(controller, allowedCommands)
updateMetadata() updateMetadata()
updateState() updateState()
@ -79,7 +82,10 @@ class MusicRepository(val context: Context) {
updateState() updateState()
} }
override fun onPlaybackInfoChanged(controller: MediaController, info: MediaController.PlaybackInfo) { override fun onPlaybackInfoChanged(
controller: MediaController,
info: MediaController.PlaybackInfo
) {
super.onPlaybackInfoChanged(controller, info) super.onPlaybackInfoChanged(controller, info)
Log.d("MM20", "CurrentPosition" + controller.currentPosition.toString()) Log.d("MM20", "CurrentPosition" + controller.currentPosition.toString())
} }
@ -105,11 +111,12 @@ class MusicRepository(val context: Context) {
private fun updateMetadata() { private fun updateMetadata() {
val metadata = mediaController?.currentMediaItem?.metadata ?: return val metadata = mediaController?.currentMediaItem?.metadata ?: return
val title = metadata.getString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE) val title = metadata.getString(MediaMetadata.METADATA_KEY_DISPLAY_TITLE)
?: metadata.getString(MediaMetadata.METADATA_KEY_TITLE) ?: metadata.getString(MediaMetadata.METADATA_KEY_TITLE)
val artist = metadata.getString(MediaMetadata.METADATA_KEY_ARTIST) val artist = metadata.getString(MediaMetadata.METADATA_KEY_ARTIST)
?: metadata.getString(MediaMetadata.METADATA_KEY_COMPOSER) ?: metadata.getString(MediaMetadata.METADATA_KEY_COMPOSER)
?: metadata.getString(MediaMetadata.METADATA_KEY_AUTHOR) ?: metadata.getString(MediaMetadata.METADATA_KEY_AUTHOR)
?: metadata.getString(MediaMetadata.METADATA_KEY_WRITER) ?: metadata.getString(MediaMetadata.METADATA_KEY_WRITER)
?: return
val album = metadata.getString(MediaMetadata.METADATA_KEY_ALBUM) val album = metadata.getString(MediaMetadata.METADATA_KEY_ALBUM)
lastPlayer = mediaController?.connectedToken?.packageName ?: lastPlayer lastPlayer = mediaController?.connectedToken?.packageName ?: lastPlayer
@ -226,21 +233,28 @@ class MusicRepository(val context: Context) {
return it return it
} }
val intent = Intent(Intent.ACTION_MAIN) val intent = Intent(Intent.ACTION_MAIN)
.setPackage(lastPlayer) .setPackage(lastPlayer)
.addCategory(Intent.CATEGORY_APP_MUSIC) .addCategory(Intent.CATEGORY_APP_MUSIC)
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK) .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
return PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE) return PendingIntent.getActivity(
context,
0,
intent,
PendingIntent.FLAG_ONE_SHOT or PendingIntent.FLAG_IMMUTABLE
)
} }
fun openPlayerChooser(context: Context) { fun openPlayerChooser(context: Context) {
context.startActivity(Intent.createChooser( context.startActivity(
Intent.createChooser(
Intent(Intent.ACTION_MAIN) Intent(Intent.ACTION_MAIN)
.apply { .apply {
addCategory(Intent.CATEGORY_APP_MUSIC) addCategory(Intent.CATEGORY_APP_MUSIC)
flags = Intent.FLAG_ACTIVITY_NEW_TASK flags = Intent.FLAG_ACTIVITY_NEW_TASK
}, },
null) null
)
) )
} }