Updates build_whitelabel to regenerate album art for android auto app

This commit is contained in:
2026-07-20 18:20:42 -07:00
parent f069fcdbfb
commit 58ea55f359
164 changed files with 111 additions and 185 deletions
Regular → Executable
View File
View File
+1 -1
View File
@@ -8,7 +8,7 @@
<uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
<application
android:label="Fire FM"
android:label="KMountain Flower Radio"
android:name="${applicationName}"
android:icon="@mipmap/ic_launcher">
<activity
@@ -6,6 +6,8 @@ import android.app.NotificationManager
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.os.Handler
import android.os.Looper
import android.support.v4.media.MediaBrowserCompat
@@ -38,7 +40,7 @@ class KryzAutoMediaBrowserService : MediaBrowserServiceCompat() {
private const val TAG = "KryzAutoService"
private const val MEDIA_ID_ROOT = "kryz_root"
private const val MEDIA_ID_LIVE = "kryz_live_stream"
private const val STREAM_URL = "http://www.stream.org/stream"
private const val STREAM_URL = "https://libretime.westerntechnologies.duckdns.org/main"
private const val NOTIFICATION_CHANNEL_ID = "com.kryzgoflutter.auto.channel"
private const val NOTIFICATION_ID = 1001
}
@@ -51,6 +53,14 @@ class KryzAutoMediaBrowserService : MediaBrowserServiceCompat() {
private var pendingStopRequest: Boolean = false
private var reconnectScheduled: Boolean = false
/**
* Album-art bitmap loaded from the drawable resource.
* Embedded directly into MediaMetadata so Android Auto cannot serve a stale URI cache.
*/
private val albumArtBitmap: Bitmap by lazy {
BitmapFactory.decodeResource(resources, R.drawable.kryz_auto_art)
}
private val mediaControllerCallback = object : MediaControllerCompat.Callback() {
override fun onPlaybackStateChanged(state: PlaybackStateCompat?) {
applyPlaybackStateFromFlutter(state)
@@ -117,6 +127,20 @@ class KryzAutoMediaBrowserService : MediaBrowserServiceCompat() {
dispatchPlayCommand()
}
/**
* Build an android.resource Uri for the Auto album-art drawable.
* Uses R.drawable.kryz_auto_art so the resource shrinker sees the reference
* and keeps the image in release APKs.
*/
private fun getAutoArtUri(): Uri {
return Uri.Builder()
.scheme("android.resource")
.authority(packageName)
.appendPath(resources.getResourceTypeName(R.drawable.kryz_auto_art))
.appendPath(resources.getResourceEntryName(R.drawable.kryz_auto_art))
.build()
}
override fun onCreate() {
super.onCreate()
Log.d(TAG, "onCreate()")
@@ -163,7 +187,7 @@ class KryzAutoMediaBrowserService : MediaBrowserServiceCompat() {
) {
Log.d(TAG, "onLoadChildren($parentId)")
if (parentId == MEDIA_ID_ROOT) {
val iconUri = Uri.parse("android.resource://${packageName}/mipmap/ic_launcher")
val iconUri = getAutoArtUri()
val description = MediaDescriptionCompat.Builder()
.setMediaId(MEDIA_ID_LIVE)
.setTitle("KMTN Live Stream")
@@ -330,7 +354,7 @@ class KryzAutoMediaBrowserService : MediaBrowserServiceCompat() {
) {
if (!::mediaSession.isInitialized) return
val iconUri = Uri.parse("android.resource://${packageName}/drawable/kryz_auto_art")
val iconUri = getAutoArtUri()
mediaSession.setMetadata(
MediaMetadataCompat.Builder()
.putString(MediaMetadataCompat.METADATA_KEY_TITLE, title ?: "KMTN Live Stream")
@@ -338,8 +362,8 @@ class KryzAutoMediaBrowserService : MediaBrowserServiceCompat() {
.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, album ?: "Live")
.putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, MEDIA_ID_LIVE)
.putString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI, mediaUri ?: STREAM_URL)
.putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, iconUri.toString())
.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, iconUri.toString())
.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, albumArtBitmap)
.putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, albumArtBitmap)
.build()
)
}
@@ -428,15 +452,14 @@ class KryzAutoMediaBrowserService : MediaBrowserServiceCompat() {
}
private fun buildLiveStreamMetadata(): MediaMetadataCompat {
val iconUri = Uri.parse("android.resource://${packageName}/mipmap/ic_launcher")
return MediaMetadataCompat.Builder()
.putString(MediaMetadataCompat.METADATA_KEY_TITLE, "KMTN Live Stream")
.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, "KMountain Radio")
.putString(MediaMetadataCompat.METADATA_KEY_ALBUM, "Live")
.putString(MediaMetadataCompat.METADATA_KEY_MEDIA_ID, MEDIA_ID_LIVE)
.putString(MediaMetadataCompat.METADATA_KEY_MEDIA_URI, STREAM_URL)
.putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, iconUri.toString())
.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, iconUri.toString())
.putBitmap(MediaMetadataCompat.METADATA_KEY_ALBUM_ART, albumArtBitmap)
.putBitmap(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON, albumArtBitmap)
.build()
}
}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 811 KiB

View File
View File
BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 KiB

After

Width:  |  Height:  |  Size: 3.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.4 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File
+3 -3
View File
@@ -5,7 +5,7 @@
#E36A18 matches AppThemeBusinessObject.lightColors.primarySeed (brand orange).
-->
<resources>
<color name="kryz_primary">#000000</color>
<color name="kryz_primary_dark">#0d0d0d</color>
<color name="kryz_accent">#ff7a33</color>
<color name="kryz_primary">#1a3a5c</color>
<color name="kryz_primary_dark">#0e2440</color>
<color name="kryz_accent">#e87a2e</color>
</resources>
View File
View File
View File
View File