feat(splash+icon): фон иконки-градиент под тему + темо-зависимый сплэш

- Подложка adaptive-иконки: градиент под акцент темы + радиальное свечение + мягкая
  тень от логотипа (ic_bg_<тема>, было плоским цветом). Иконку-лого не трогал.
- Сплэш под выбранную тему: системный сплэш Android 12+ нельзя перекрасить под выбор
  пользователя (alias-тема на ColorOS игнорится), поэтому системный = просто тёмный
  (splash_transparent), а красивый сплэш рисуем сами на Compose (SplashOverlay):
  3D-лого + акцентное свечение + тень + анимация, цвет берём из текущей темы.
- Тему на старте читаем синхронно из SharedPreferences (мгновенно, без блокировки кадра).
- Ускорен холодный старт до первого кадра 1.48с→1.11с: сплэш рисуется на первом
  дешёвом кадре, тяжёлый контент (ViewModels/плеер) композится под ним; старт
  PlayerService уведён с критического пути. Остаток — оверхед debug-сборки.
This commit is contained in:
nk
2026-06-07 16:57:01 +03:00
parent 01729e0a52
commit d63c1d4187
40 changed files with 293 additions and 29 deletions

View File

@@ -42,42 +42,50 @@
Переключается в рантайме (LauncherIconManager) при смене темы. -->
<activity-alias android:name=".MainAliasForest" android:enabled="true" android:exported="true"
android:targetActivity=".MainActivity" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher_forest" android:roundIcon="@mipmap/ic_launcher_forest_round">
android:icon="@mipmap/ic_launcher_forest" android:roundIcon="@mipmap/ic_launcher_forest_round"
android:theme="@style/Theme.Radiola.Splash.Forest">
<intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter>
</activity-alias>
<activity-alias android:name=".MainAliasOcean" android:enabled="false" android:exported="true"
android:targetActivity=".MainActivity" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher_ocean" android:roundIcon="@mipmap/ic_launcher_ocean_round">
android:icon="@mipmap/ic_launcher_ocean" android:roundIcon="@mipmap/ic_launcher_ocean_round"
android:theme="@style/Theme.Radiola.Splash.Ocean">
<intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter>
</activity-alias>
<activity-alias android:name=".MainAliasSunset" android:enabled="false" android:exported="true"
android:targetActivity=".MainActivity" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher_sunset" android:roundIcon="@mipmap/ic_launcher_sunset_round">
android:icon="@mipmap/ic_launcher_sunset" android:roundIcon="@mipmap/ic_launcher_sunset_round"
android:theme="@style/Theme.Radiola.Splash.Sunset">
<intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter>
</activity-alias>
<activity-alias android:name=".MainAliasAmethyst" android:enabled="false" android:exported="true"
android:targetActivity=".MainActivity" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher_amethyst" android:roundIcon="@mipmap/ic_launcher_amethyst_round">
android:icon="@mipmap/ic_launcher_amethyst" android:roundIcon="@mipmap/ic_launcher_amethyst_round"
android:theme="@style/Theme.Radiola.Splash.Amethyst">
<intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter>
</activity-alias>
<activity-alias android:name=".MainAliasNeon" android:enabled="false" android:exported="true"
android:targetActivity=".MainActivity" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher_neon" android:roundIcon="@mipmap/ic_launcher_neon_round">
android:icon="@mipmap/ic_launcher_neon" android:roundIcon="@mipmap/ic_launcher_neon_round"
android:theme="@style/Theme.Radiola.Splash.Neon">
<intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter>
</activity-alias>
<activity-alias android:name=".MainAliasAmber" android:enabled="false" android:exported="true"
android:targetActivity=".MainActivity" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher_amber" android:roundIcon="@mipmap/ic_launcher_amber_round">
android:icon="@mipmap/ic_launcher_amber" android:roundIcon="@mipmap/ic_launcher_amber_round"
android:theme="@style/Theme.Radiola.Splash.Amber">
<intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter>
</activity-alias>
<activity-alias android:name=".MainAliasIce" android:enabled="false" android:exported="true"
android:targetActivity=".MainActivity" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher_ice" android:roundIcon="@mipmap/ic_launcher_ice_round">
android:icon="@mipmap/ic_launcher_ice" android:roundIcon="@mipmap/ic_launcher_ice_round"
android:theme="@style/Theme.Radiola.Splash.Ice">
<intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter>
</activity-alias>
<activity-alias android:name=".MainAliasRose" android:enabled="false" android:exported="true"
android:targetActivity=".MainActivity" android:label="@string/app_name"
android:icon="@mipmap/ic_launcher_rose" android:roundIcon="@mipmap/ic_launcher_rose_round">
android:icon="@mipmap/ic_launcher_rose" android:roundIcon="@mipmap/ic_launcher_rose_round"
android:theme="@style/Theme.Radiola.Splash.Rose">
<intent-filter><action android:name="android.intent.action.MAIN"/><category android:name="android.intent.category.LAUNCHER"/></intent-filter>
</activity-alias>