0.2.76 - Icon Packs

This commit is contained in:
ponzischeme89
2026-08-18 14:59:29 +12:00
parent 36d171e51b
commit 8c847c59b8
70 changed files with 5267 additions and 673 deletions
+44 -10
View File
@@ -12,6 +12,19 @@ plugins {
// the Jellyfin FFmpeg extension pins which line that can be.
val media3Version = "1.9.4"
// Lifecycle and Activity move as one AndroidX stack: activity-compose depends on the
// lifecycle artifacts, and lifecycle-runtime-compose depends on activity's ComponentActivity
// contract, so a split upgrade resolves to a mixture Gradle picked rather than one the
// libraries were tested as. Keep these two in step.
val lifecycleVersion = "2.11.0"
val activityVersion = "1.13.0"
// The icon packs a server-driven theme may name. One version across every pack: the
// receiver objects (Lucide, FontAwesome.Solid) come from shared base artifacts, so a split
// version resolves two copies of the same object and the extension properties stop
// matching their receiver.
val composeIconsVersion = "2.2.1"
// Set in gradle.properties (or ~/.gradle/gradle.properties, or -Pmemby.serverUrl=...).
// Blank means "no hardwired server": the setup screen asks the user for an address.
val embyServerUrl: String = (project.findProperty("memby.serverUrl") as String?).orEmpty().trim()
@@ -50,7 +63,7 @@ val projectNoticeText =
// A release workflow can derive the app version from its Git tag without editing the
// source tree. Local builds keep using the checked-in default.
val defaultVersionName = "0.2.75"
val defaultVersionName = "0.2.76"
val membyVersionName: String =
(project.findProperty("memby.versionName") as String?)
?.trim()
@@ -84,7 +97,11 @@ fun environmentSecret(key: String): String? {
android {
namespace = "com.ponzischeme89.memby"
compileSdk = 35
// Raised to 37 by the Lifecycle 2.11 / Activity 1.13 upgrade, which refuse to be
// consumed by a project compiled against anything older. This is a *compile* target
// only — targetSdk stays 35, so no new runtime behaviour is opted into and the
// televisions this ships to behave exactly as before.
compileSdk = 37
defaultConfig {
// Matches the Kotlin package. Changed from com.mattcohen.embyclientsname at
@@ -209,20 +226,27 @@ kotlin {
}
dependencies {
val composeBom = platform("androidx.compose:compose-bom:2024.12.01")
// Moved with the Lifecycle 2.11 / Activity 1.13 upgrade, which depend on Compose 1.11
// and so resolve past whatever this BOM says. Left at 2024.12.01 the BOM stopped being
// a floor OR a ceiling: Gradle picked ui 1.11.0 beside foundation 1.10.3, which is a
// Compose pair nobody published or tested together. The BOM's whole job is that the
// artifacts move as one set, so it has to keep up with what depends on them.
val composeBom = platform("androidx.compose:compose-bom:2026.06.01")
implementation(composeBom)
// Core / lifecycle / activity
implementation("androidx.core:core-ktx:1.15.0")
implementation("androidx.activity:activity-compose:1.9.3")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.8.7")
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:2.8.7")
implementation("androidx.lifecycle:lifecycle-runtime-compose:2.8.7")
implementation("androidx.work:work-runtime-ktx:2.10.0")
implementation("androidx.activity:activity-compose:$activityVersion")
implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion")
implementation("androidx.lifecycle:lifecycle-viewmodel-compose:$lifecycleVersion")
implementation("androidx.lifecycle:lifecycle-runtime-compose:$lifecycleVersion")
implementation("androidx.work:work-runtime-ktx:2.11.2")
// ProcessLifecycleOwner: lets the status poll stop while no Memby screen is on top,
// instead of hitting the gateway every ten seconds for as long as the process lives.
implementation("androidx.lifecycle:lifecycle-process:2.8.7")
implementation("androidx.savedstate:savedstate-ktx:1.2.1")
implementation("androidx.lifecycle:lifecycle-process:$lifecycleVersion")
// Pulled to 1.4.0 by lifecycle 2.11 regardless; declared at the resolved version so the
// build file states what actually ships.
implementation("androidx.savedstate:savedstate-ktx:1.4.0")
// Measurement only: JankStats is enabled by PerformanceMonitor for debug builds.
implementation("androidx.metrics:metrics-performance:1.0.0")
// Installs the baseline profile below. Without it the profile is only honoured on
@@ -238,6 +262,16 @@ dependencies {
implementation("androidx.compose.foundation:foundation")
implementation("androidx.compose.material:material-icons-extended")
// Server-driven icon packs. A theme names a pack (ui/theme/MembyIconPacks.kt) and the
// television paints its marks from it, so a household can be moved off Material's
// marks without an APK release — the same trade the palette makes.
//
// Pure Kotlin ImageVectors, one lazy val per icon, so R8 keeps only the ~70 slots the
// packs below actually name. No .so, no per-ABI multiplier: this is a size decision,
// but a small one, unlike the libmpv episode recorded further down this file.
implementation("com.composables:icons-lucide-cmp:$composeIconsVersion")
implementation("com.composables:icons-font-awesome-solid-cmp:$composeIconsVersion")
// Compose for TV
implementation("androidx.tv:tv-material:1.1.0")