Repository navigation
UI REVAMP + NEW PING STABLIZATION TOGGLE
-
UI revamp — visual richness and motion pass
Richer accent palette: per-section gradient drawables for the hero card, launch, versions, mods, and content cards (card_*_gradient.xml), plus dark-theme variants in values-night/colors.xml, so screens feel visually distinct rather than re-skinned copies. Section headers gain a 3dp accent bar (section_accent_bar.xml).
Micro-interactions: DynamicAnim.applyPressScale now adds spring elevation feedback on press alongside the existing scale, and instance cards already use it recursively. Card glow/elevation is applied via applyGlowEffects (hero card) and gated by the glow toggle.
Live/animated elements: a subtly pulsing last-played hero card, a smooth ValueAnimator progress indicator for file imports (revealed on progress, hidden on completion/error), and animated stat counters (instances/mods pop-scale).
Toggle compliance: all motion honors isShowAnimations() (pulse is stopped/started in onResume based on the flag); glow/elevation honors isEnableGlowEffects(). Dark/light theming respected throughout. -
Playtime tracking on the last-played instance card
New PlaytimeManager persists per-instance accumulated playtime (SharedPreferences, 15s heartbeat, crash/interrupted-session cleanup in Application.init()).
Wired into MinecraftActivity.kt session lifecycle (start from EXTRA_STORAGE_PROFILE_ID, heartbeat, stop in onDestroy).
Displayed on the last-played hero card ("Xh Ym played") and per-instance in the instances list. Time accumulates across sessions and tracks real wall time (within one heartbeat interval). -
"Reduce Network Latency" toggle in Settings → Basic
Labeled honestly — a launcher can't control server distance/ISP routing.
LowLatencyNetworkManager:
TCP_NODELAY socket factory for the launcher's own connections (News + GitHub release updater). Note: the socket factory deliberately delegates to SocketFactory.getDefault() — the inherited abstract SocketFactory.createSocket() is not callable directly.
Background DNS prefetch of known endpoints (triggered when the toggle is enabled).
A game-session quiet zone: non-essential news/update polling is paused while a session runs (NewsRepository.refreshIfStale, GithubReleaseUpdater, LauncherNewsMessagingService).