- 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
90 lines
2.5 KiB
Prolog
90 lines
2.5 KiB
Prolog
-keep public class * extends android.app.Activity
|
|
-keep public class * extends android.app.Service
|
|
-keep public class * extends android.content.BroadcastReceiver
|
|
-keep public class * extends androidx.lifecycle.ViewModel
|
|
|
|
-keep class com.horrortv.app.data.remote.omdb.dto.** { *; }
|
|
-keep class com.horrortv.app.domain.model.** { *; }
|
|
|
|
-keep class retrofit2.** { *; }
|
|
-keepclassmembernames class * {
|
|
@retrofit2.http.* <methods>;
|
|
}
|
|
|
|
-keep class okhttp3.** { *; }
|
|
-keep interface okhttp3.** { *; }
|
|
-dontwarn okhttp3.**
|
|
-dontwarn okio.**
|
|
|
|
-keep class com.google.gson.** { *; }
|
|
-keepclassmembers class * {
|
|
@com.google.gson.annotations.SerializedName <fields>;
|
|
}
|
|
|
|
-keep class dagger.** { *; }
|
|
-keep class * extends dagger.** { *; }
|
|
-keep class * implements dagger.** { *; }
|
|
-keep class * extends javax.inject.** { *; }
|
|
-keep class * implements javax.inject.** { *; }
|
|
-dontwarn dagger.**
|
|
|
|
-keep class io.coil.** { *; }
|
|
-keep class coil.** { *; }
|
|
|
|
-keepclassmembers class kotlinx.coroutines.** {
|
|
volatile <fields>;
|
|
}
|
|
-keepnames class kotlinx.coroutines.internal.MainDispatcherFactory {}
|
|
-keepnames class kotlinx.coroutines.CoroutineExceptionHandler {}
|
|
-keepclassmembernames class kotlinx.coroutines.** {
|
|
@kotlinx.coroutines.InternalCoroutinesApi <methods>;
|
|
}
|
|
|
|
-assumenosideeffects class android.util.Log {
|
|
public static boolean isLoggable(...);
|
|
public static int v(...);
|
|
public static int d(...);
|
|
public static int i(...);
|
|
}
|
|
|
|
-optimizationpasses 5
|
|
-dontusemixedcaseclassnames
|
|
-dontskipnonpubliclibraryclasses
|
|
-verbose
|
|
|
|
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*,!code/allocation/variable
|
|
|
|
-keepattributes *Annotation*
|
|
-keepattributes SourceFile,LineNumberTable
|
|
-keepattributes RuntimeVisibleAnnotations,RuntimeInvisibleAnnotations
|
|
-keepattributes RuntimeVisibleParameterAnnotations,RuntimeInvisibleParameterAnnotations
|
|
-keepattributes AnnotationDefault
|
|
|
|
-renamesourcefileattribute SourceFile
|
|
-keepattributes EnclosingMethod
|
|
|
|
-dontwarn javax.annotation.**
|
|
-dontwarn kotlin.Unit
|
|
-dontwarn retrofit2.Platform$Java8
|
|
-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);
|
|
} |