feat: state-based D-pad navigation, seek mode, subtitle picker, 20-agent audit fixes

- Replace broken Compose focus system with state-based selectedButton approach
- Add seek mode (DPAD_UP to enter, LEFT/RIGHT to seek, CENTER/DOWN to apply)
- Make SubtitlePickerOverlay state-based (DPAD UP/DOWN navigate, CENTER select)
- Fix 25 P0 crashes from 20-agent audit (SSRF, CancellationException, DTO defaults)
- Fix UX issues: animations, padding, TvErrorDisplay, navigation, finishAffinity
- Fix pause button: remove clickable, onKeyEvent only, repeatCount guard
- Add subtitle extraction: OpenSubtitles EN/ES, HI filtering, dedup
- Fix override accumulation: clearOverridesOfType before setting new tracks
- Disable tunneling for subtitle compatibility
- Performance: AutoHideHolder, @Immutable models, contentType
- Fix SearchScreen focus visibility: animated scale, white border, dimming
- Fix PlayerButton invisible text: white on HorrorGray bg
- Fix isLoading stuck in Home/Detail/SearchViewModel
- Fix VideoExtractor CancellationException rethrow, IMDB_ID_PATTERN 7+ digits
This commit is contained in:
2026-04-27 16:05:53 -03:00
parent 828086ceb3
commit 38c5342e88
30 changed files with 1745 additions and 550 deletions

View File

@@ -40,9 +40,6 @@
@kotlinx.coroutines.InternalCoroutinesApi <methods>;
}
-keep class kotlin.** { *; }
-keep class * implements kotlin.** { *; }
-assumenosideeffects class android.util.Log {
public static boolean isLoggable(...);
public static int v(...);
@@ -69,4 +66,25 @@
-dontwarn javax.annotation.**
-dontwarn kotlin.Unit
-dontwarn retrofit2.Platform$Java8
-dontwarn kotlin.jvm.internal.Reflection
-dontwarn kotlin.jvm.internal.Reflection
# Compose
-keep class androidx.compose.runtime.CompositionLocal { *; }
-keepclassmembers class * {
@androidx.compose.runtime.Composable <methods>;
}
# Media3 ExoPlayer
-keep class androidx.media3.** { *; }
# Jsoup
-keep class org.jsoup.** { *; }
# Keep generic signature info for Retrofit+Gson
-keepattributes Signature
# Enums
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}