EARHORNMUSIC UPnP · Android TV · Phones · Android Auto · GNU/Linux
Release 0.5.0

themes.xml

<?xml version="1.0" encoding="utf-8"?>
<!--
  Android 12+ system splash screen overrides.

  Without these, Android 12+ wraps the launcher icon in a circular white
  background ("BIG WHITE CIRCLE WITH A LITTLE BADGE ICON INSIDE"). That's
  the platform default — it's NOT something the app "asks for" — it just
  happens to every app that targets API 31+ and ships a static-PNG launcher
  icon (as ours does).

  These overrides do three things:
    1. windowSplashScreenBackground — the background canvas behind the icon.
       Set to the app's own dark surface color (#17130F) so the splash matches
       what's about to load instead of flashing white first.
    2. windowSplashScreenIconBackgroundColor — the inner circle that Android
       draws BEHIND the icon if the icon doesn't fill the canvas. Same dark
       color → effectively invisible, no "white circle around the badge."
    3. windowSplashScreenAnimatedIcon — what icon to show. We use the
       earhorn_badge drawable directly (rather than the launcher mipmap) so
       the system shows the full circular brand mark with no system-applied
       cropping.

  Lives in values-v31 because these attrs only exist on API 31+. On older
  Android versions the platform falls back to drawing windowBackground
  (set in the base Theme.Earhorn) — which is already the dark surface,
  so older devices have always shown a solid dark splash.
-->
<resources>
    <style name="Theme.Earhorn" parent="android:Theme.Material.NoActionBar">
        <item name="android:windowBackground">@color/surface_base</item>
        <item name="android:windowNoTitle">true</item>

        <!-- Match the dark app surface, no white circle. -->
        <item name="android:windowSplashScreenBackground">@color/surface_base</item>
        <item name="android:windowSplashScreenIconBackgroundColor">@color/surface_base</item>

        <!-- Use the brand badge directly. The system still applies its own
             icon-mask treatment but with a matching dark background it just
             reads as the badge floating on the app's surface color. -->
        <item name="android:windowSplashScreenAnimatedIcon">@drawable/splash_badge</item>
    </style>
</resources>