Skip to content

feat: add loading screen customization (animation style, progress style background treatment#418

Open
EierKopZA wants to merge 1 commit into
ProdigyV21:mainfrom
EierKopZA:feat/loading-screen-customization
Open

feat: add loading screen customization (animation style, progress style background treatment#418
EierKopZA wants to merge 1 commit into
ProdigyV21:mainfrom
EierKopZA:feat/loading-screen-customization

Conversation

@EierKopZA

Copy link
Copy Markdown
Contributor

✨ Loading Screen Customization

Adds three new cycle settings to the Appearance section that give users full control over how the clearlogo loading screen looks during playback startup and mid-stream buffering.

Settings Added (Appearance section)

Setting Cycle Order Default
Loading Animation Heartbeat → Breathe → Glow → Static Heartbeat
Loading Progress Arc → Linear → Percentage → None Arc
Loading Background Dark → Backdrop Dark

Animation Styles

  1. Heartbeat — Two quick beats followed by a rest (1.5s cycle). The original behavior, preserved as default.
  2. Breathe — Slow, smooth scale from 1.0→1.1→1.0 (3s cycle). A calm, ambient pulse.
  3. Glow — Alpha transparency pulses from 0.55→1.0→0.55 (2s cycle). The logo size stays steady while it fades in and out like a glowing ember.
  4. Static — No animation at all. The logo renders at full size and opacity.

Progress Styles

  1. Arc — Accent-colored circular arc ring around the logo (existing visual, now respects the user's selected accent color).
  2. Linear — Accent-colored horizontal progress bar below the logo box, with percentage text beneath.
  3. Percentage — Just the percentage number text, no ring or bar overlay.
  4. None — No progress indicator at all. Clean logo-only look.

Background Treatment

  1. Dark — Solid black background. Clean, minimal, OLED-friendly.
  2. Backdrop — Show the content backdrop art behind the logo with a dark overlay (original behavior).

Technical Details

  • All progress arcs/bars and percentage text render in the user's selected accent color via LocalAccentColorOverride.current.
  • The PulsingLogo composable was rewritten to accept three new parameters (animationStyle, progressStyle, backgroundStyle) that flow from PlayerUiStatePlayerScreen.
  • Settings are persisted per-profile via DataStore string keys, matching the existing pattern used by cycleAccentColor().
  • The loading screen container conditionally shows/hides backdrop art based on loadingBackground ("Backdrop" shows art + overlay, "Dark" shows plain black).
  • Both the initial loading screen and mid-stream buffering overlay respect all three settings.
  • Row IDs 38/39/40 were used — no existing settings were shifted or renumbered. D-pad focus flows naturally: Smooth Scrolling → Loading Animation → Loading Progress → Loading Background.

Files Modified

  • SettingsViewModel.kt — Added 3 DataStore string keys, 3 state fields (loadingAnimationStyle, loadingProgressStyle, loadingBackground), 3 cycle functions
  • SettingsScreen.kt — Added 3 new settings rows to the Appearance section with proper focus wiring
  • strings.xml — Added 6 string resources for labels and descriptions
  • PlayerViewModel.kt — Added 3 fields to PlayerUiState + DataStore reads in init block
  • PlayerScreen.kt — Rewrote PulsingLogo composable (lines 3654→3761) with all animation/progress/background styles; updated loading screen container for backdrop toggle

Copilot AI review requested due to automatic review settings June 28, 2026 10:52

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds new per-profile Appearance settings to customize the player loading/buffering clearlogo presentation (animation style, progress indicator style, and background treatment), and threads these settings through settings UI → DataStore → player UI.

Changes:

  • Added three new cycle settings (loading animation, loading progress, loading background) persisted via DataStore and surfaced in the Appearance section.
  • Extended PlayerUiState and SettingsUiState to carry the new preferences and applied them in the loading/buffering UI.
  • Updated the loading screen UI to support multiple animation/progress styles and accent-colored indicators.

Reviewed changes

Copilot reviewed 5 out of 5 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
app/src/main/res/values/strings.xml Adds new strings for the three new loading customization rows (labels + descriptions).
app/src/main/kotlin/com/arflix/tv/ui/screens/settings/SettingsViewModel.kt Adds new DataStore keys/state fields and cycle functions for loading customization preferences.
app/src/main/kotlin/com/arflix/tv/ui/screens/settings/SettingsScreen.kt Adds three new Appearance rows and wires click handlers to cycle the new preferences.
app/src/main/kotlin/com/arflix/tv/ui/screens/player/PlayerViewModel.kt Reads new DataStore values into PlayerUiState for use by the player UI.
app/src/main/kotlin/com/arflix/tv/ui/screens/player/PlayerScreen.kt Updates loading/buffering overlays and rewrites PulsingLogo to support new animation/progress styles.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 2643 to +2647
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
if (uiState.backdropUrl != null) {
if (uiState.backdropUrl != null && uiState.loadingBackground == "Backdrop") {
Comment on lines 2676 to +2680
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
PulsingLogo(logoUrl = uiState.logoUrl, title = uiState.title)
PulsingLogo(
Comment on lines +3699 to +3703
"Glow" -> {
// Scale remains steady; alpha pulses instead
durationMillis = 1
1.0f at 0
1.0f at 1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants