diff --git a/kotlin-audio-example/src/main/java/com/example/kotlin_audio_example/MainActivity.kt b/kotlin-audio-example/src/main/java/com/example/kotlin_audio_example/MainActivity.kt index 7cf74eef..94dfc102 100644 --- a/kotlin-audio-example/src/main/java/com/example/kotlin_audio_example/MainActivity.kt +++ b/kotlin-audio-example/src/main/java/com/example/kotlin_audio_example/MainActivity.kt @@ -61,7 +61,8 @@ class MainActivity : ComponentActivity() { this, playerConfig = PlayerConfig( interceptPlayerActionsTriggeredExternally = true, handleAudioBecomingNoisy = true, - handleAudioFocus = true + handleAudioFocus = true, + // squareCropAlbumArt = true, ) ) player.add(tracks) @@ -173,6 +174,14 @@ class MainActivity : ComponentActivity() { companion object { val tracks = listOf( + DefaultAudioItem( + "https://rntp.dev/example/Longing.mp3", + MediaType.DEFAULT, + title = "Longing (wide album art)", + artwork = "https://i.ytimg.com/vi/qod7eBE0mTk/maxresdefault.jpg", + artist = "David Chavez", + duration = 143 * 1000, + ), DefaultAudioItem( "https://rntp.dev/example/Longing.mp3", MediaType.DEFAULT, diff --git a/kotlin-audio/build.gradle b/kotlin-audio/build.gradle index 463413be..499f0041 100644 --- a/kotlin-audio/build.gradle +++ b/kotlin-audio/build.gradle @@ -66,6 +66,9 @@ dependencies { // The instrumentation test companion libraries androidTestImplementation("de.mannodermaus.junit5:android-test-core:1.3.0") androidTestRuntimeOnly("de.mannodermaus.junit5:android-test-runner:1.3.0") + + // album art transformation + implementation 'jp.wasabeef.transformers:coil:1.0.6' } afterEvaluate { diff --git a/kotlin-audio/src/main/java/com/doublesymmetry/kotlinaudio/models/PlayerConfig.kt b/kotlin-audio/src/main/java/com/doublesymmetry/kotlinaudio/models/PlayerConfig.kt index 74cb654e..e8e8a75e 100644 --- a/kotlin-audio/src/main/java/com/doublesymmetry/kotlinaudio/models/PlayerConfig.kt +++ b/kotlin-audio/src/main/java/com/doublesymmetry/kotlinaudio/models/PlayerConfig.kt @@ -28,7 +28,10 @@ data class PlayerConfig( * The audio content type. */ val audioContentType: AudioContentType = AudioContentType.MUSIC, - + /** + * Whether to crop the album art to a square. + */ + val squareCropAlbumArt: Boolean = false, /** * The audio usage. */ diff --git a/kotlin-audio/src/main/java/com/doublesymmetry/kotlinaudio/notification/NotificationManager.kt b/kotlin-audio/src/main/java/com/doublesymmetry/kotlinaudio/notification/NotificationManager.kt index d8a83678..85da5d34 100644 --- a/kotlin-audio/src/main/java/com/doublesymmetry/kotlinaudio/notification/NotificationManager.kt +++ b/kotlin-audio/src/main/java/com/doublesymmetry/kotlinaudio/notification/NotificationManager.kt @@ -38,6 +38,7 @@ import com.google.android.exoplayer2.ui.PlayerNotificationManager.CustomActionRe import kotlinx.coroutines.MainScope import kotlinx.coroutines.delay import kotlinx.coroutines.launch +import jp.wasabeef.transformers.coil.CropSquareTransformation import okhttp3.Headers import okhttp3.Headers.Companion.toHeaders @@ -47,7 +48,8 @@ class NotificationManager internal constructor( private val mediaSession: MediaSessionCompat, private val mediaSessionConnector: MediaSessionConnector, val event: NotificationEventHolder, - val playerEventHolder: PlayerEventHolder + val playerEventHolder: PlayerEventHolder, + private val squareCropAlbumArt: Boolean, ) : PlayerNotificationManager.NotificationListener { private var pendingIntent: PendingIntent? = null private val descriptionAdapter = object : PlayerNotificationManager.MediaDescriptionAdapter { @@ -79,11 +81,14 @@ class NotificationManager internal constructor( val headers = getNetworkHeaders() val holder = player.currentMediaItem?.getAudioItemHolder() if (artwork != null && holder?.artworkBitmap == null) { - context.imageLoader.enqueue( - ImageRequest.Builder(context) + var imageRequest = ImageRequest.Builder(context) .data(artwork) .headers(headers) - .target { result -> + if (squareCropAlbumArt) { + imageRequest = imageRequest.transformations(CropSquareTransformation()) + } + context.imageLoader.enqueue( + imageRequest.target { result -> val resultBitmap = (result as BitmapDrawable).bitmap holder?.artworkBitmap = resultBitmap invalidate() diff --git a/kotlin-audio/src/main/java/com/doublesymmetry/kotlinaudio/players/BaseAudioPlayer.kt b/kotlin-audio/src/main/java/com/doublesymmetry/kotlinaudio/players/BaseAudioPlayer.kt index 3bc4f1cc..9c72a187 100644 --- a/kotlin-audio/src/main/java/com/doublesymmetry/kotlinaudio/players/BaseAudioPlayer.kt +++ b/kotlin-audio/src/main/java/com/doublesymmetry/kotlinaudio/players/BaseAudioPlayer.kt @@ -244,7 +244,8 @@ abstract class BaseAudioPlayer internal constructor( mediaSession, mediaSessionConnector, notificationEventHolder, - playerEventHolder + playerEventHolder, + playerConfig.squareCropAlbumArt ) exoPlayer.addListener(PlayerListener())