fix: polish pass — dark mode, notifications, icons, edge-to-edge

- Wrap SettingsScreen in Scaffold to fix invisible text in dark mode
- Fix notification showing raw ICY metadata instead of parsed track info
- Add proper white-on-transparent notification icon
- Create branded adaptive launcher icon (amber tower on BlueGray900)
- Add edge-to-edge support with proper window inset handling
- Add About section to Settings with version and app info
- Enable BuildConfig generation for version display

Made-with: Cursor
This commit is contained in:
cottongin
2026-03-10 21:18:48 -04:00
parent 5a59b3a86b
commit d381e80828
17 changed files with 468 additions and 30 deletions

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="#0D1B2A"
android:pathData="M0,0h108v108h-108z" />
</vector>

View File

@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<!-- Adaptive icon safe zone: 72dp centered in 108dp (18dp inset each side) -->
<!-- Tower mast -->
<path
android:fillColor="#FFC107"
android:pathData="M52,28h4v40h-4z" />
<!-- Tower base / tripod -->
<path
android:fillColor="#FFC107"
android:pathData="M42,72l12,-8l12,8z" />
<path
android:fillColor="#FFC107"
android:pathData="M44,72h20v3h-20z" />
<!-- Antenna tip -->
<path
android:fillColor="#FFD54F"
android:pathData="M54,28m-3,0a3,3 0,1 1,6 0a3,3 0,1 1,-6 0" />
<!-- Inner broadcast waves (left) -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFC107"
android:strokeWidth="2.5"
android:strokeLineCap="round"
android:pathData="M42,42a12,12 0,0 1,0 -14" />
<!-- Inner broadcast waves (right) -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFC107"
android:strokeWidth="2.5"
android:strokeLineCap="round"
android:pathData="M66,42a12,12 0,0 0,0 -14" />
<!-- Outer broadcast waves (left) -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFB300"
android:strokeWidth="2.5"
android:strokeLineCap="round"
android:pathData="M34,48a22,22 0,0 1,0 -26" />
<!-- Outer broadcast waves (right) -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFB300"
android:strokeWidth="2.5"
android:strokeLineCap="round"
android:pathData="M74,48a22,22 0,0 0,0 -26" />
</vector>

View File

@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<!-- Radio tower with broadcast waves -->
<!-- Tower body -->
<path
android:fillColor="#FFFFFF"
android:pathData="M11,2h2v16h-2z" />
<!-- Tower base -->
<path
android:fillColor="#FFFFFF"
android:pathData="M8,20l4,-4l4,4z" />
<!-- Left wave inner -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M7.5,7.5a5,5 0,0 1,0 -5" />
<!-- Right wave inner -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M16.5,7.5a5,5 0,0 0,0 -5" />
<!-- Left wave outer -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M4.5,9.5a9,9 0,0 1,0 -9" />
<!-- Right wave outer -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFFFFF"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M19.5,9.5a9,9 0,0 0,0 -9" />
</vector>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

View File

@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<!-- Background -->
<path
android:fillColor="#0D1B2A"
android:pathData="M0,0h48v48h-48z" />
<!-- Tower mast -->
<path
android:fillColor="#FFC107"
android:pathData="M22.5,10h3v22h-3z" />
<!-- Tower base -->
<path
android:fillColor="#FFC107"
android:pathData="M16,34l8,-5l8,5z" />
<path
android:fillColor="#FFC107"
android:pathData="M17,34h14v2h-14z" />
<!-- Antenna tip -->
<path
android:fillColor="#FFD54F"
android:pathData="M24,10m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0" />
<!-- Inner waves -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFC107"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M17,20a7,7 0,0 1,0 -8" />
<path
android:fillColor="#00000000"
android:strokeColor="#FFC107"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M31,20a7,7 0,0 0,0 -8" />
<!-- Outer waves -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFB300"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M12,24a13,13 0,0 1,0 -16" />
<path
android:fillColor="#00000000"
android:strokeColor="#FFB300"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M36,24a13,13 0,0 0,0 -16" />
</vector>

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<!-- Background -->
<path
android:fillColor="#0D1B2A"
android:pathData="M0,0h48v48h-48z" />
<!-- Tower mast -->
<path
android:fillColor="#FFC107"
android:pathData="M22.5,10h3v22h-3z" />
<!-- Tower base -->
<path
android:fillColor="#FFC107"
android:pathData="M16,34l8,-5l8,5z" />
<path
android:fillColor="#FFC107"
android:pathData="M17,34h14v2h-14z" />
<!-- Antenna tip -->
<path
android:fillColor="#FFD54F"
android:pathData="M24,10m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0" />
<!-- Inner waves -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFC107"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M17,20a7,7 0,0 1,0 -8" />
<path
android:fillColor="#00000000"
android:strokeColor="#FFC107"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M31,20a7,7 0,0 0,0 -8" />
<!-- Outer waves -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFB300"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M12,24a13,13 0,0 1,0 -16" />
<path
android:fillColor="#00000000"
android:strokeColor="#FFB300"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M36,24a13,13 0,0 0,0 -16" />
</vector>

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<!-- Background -->
<path
android:fillColor="#0D1B2A"
android:pathData="M0,0h48v48h-48z" />
<!-- Tower mast -->
<path
android:fillColor="#FFC107"
android:pathData="M22.5,10h3v22h-3z" />
<!-- Tower base -->
<path
android:fillColor="#FFC107"
android:pathData="M16,34l8,-5l8,5z" />
<path
android:fillColor="#FFC107"
android:pathData="M17,34h14v2h-14z" />
<!-- Antenna tip -->
<path
android:fillColor="#FFD54F"
android:pathData="M24,10m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0" />
<!-- Inner waves -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFC107"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M17,20a7,7 0,0 1,0 -8" />
<path
android:fillColor="#00000000"
android:strokeColor="#FFC107"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M31,20a7,7 0,0 0,0 -8" />
<!-- Outer waves -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFB300"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M12,24a13,13 0,0 1,0 -16" />
<path
android:fillColor="#00000000"
android:strokeColor="#FFB300"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M36,24a13,13 0,0 0,0 -16" />
</vector>

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<!-- Background -->
<path
android:fillColor="#0D1B2A"
android:pathData="M0,0h48v48h-48z" />
<!-- Tower mast -->
<path
android:fillColor="#FFC107"
android:pathData="M22.5,10h3v22h-3z" />
<!-- Tower base -->
<path
android:fillColor="#FFC107"
android:pathData="M16,34l8,-5l8,5z" />
<path
android:fillColor="#FFC107"
android:pathData="M17,34h14v2h-14z" />
<!-- Antenna tip -->
<path
android:fillColor="#FFD54F"
android:pathData="M24,10m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0" />
<!-- Inner waves -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFC107"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M17,20a7,7 0,0 1,0 -8" />
<path
android:fillColor="#00000000"
android:strokeColor="#FFC107"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M31,20a7,7 0,0 0,0 -8" />
<!-- Outer waves -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFB300"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M12,24a13,13 0,0 1,0 -16" />
<path
android:fillColor="#00000000"
android:strokeColor="#FFB300"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M36,24a13,13 0,0 0,0 -16" />
</vector>

View File

@@ -0,0 +1,52 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<!-- Background -->
<path
android:fillColor="#0D1B2A"
android:pathData="M0,0h48v48h-48z" />
<!-- Tower mast -->
<path
android:fillColor="#FFC107"
android:pathData="M22.5,10h3v22h-3z" />
<!-- Tower base -->
<path
android:fillColor="#FFC107"
android:pathData="M16,34l8,-5l8,5z" />
<path
android:fillColor="#FFC107"
android:pathData="M17,34h14v2h-14z" />
<!-- Antenna tip -->
<path
android:fillColor="#FFD54F"
android:pathData="M24,10m-2,0a2,2 0,1 1,4 0a2,2 0,1 1,-4 0" />
<!-- Inner waves -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFC107"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M17,20a7,7 0,0 1,0 -8" />
<path
android:fillColor="#00000000"
android:strokeColor="#FFC107"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M31,20a7,7 0,0 0,0 -8" />
<!-- Outer waves -->
<path
android:fillColor="#00000000"
android:strokeColor="#FFB300"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M12,24a13,13 0,0 1,0 -16" />
<path
android:fillColor="#00000000"
android:strokeColor="#FFB300"
android:strokeWidth="1.5"
android:strokeLineCap="round"
android:pathData="M36,24a13,13 0,0 0,0 -16" />
</vector>