Updates build_whitelabel to regenerate album art for android auto app
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 811 KiB |
|
Before Width: | Height: | Size: 3.4 KiB After Width: | Height: | Size: 7.0 KiB |
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 3.6 KiB |
|
Before Width: | Height: | Size: 4.9 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 8.4 KiB After Width: | Height: | Size: 20 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 31 KiB |
@@ -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>
|
||||
|
||||