Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
f7cfb43
feat: course home pager and pager indicator with navigation
PavloNetrebchuk Jul 24, 2025
5ac6548
feat: course completion pager tab
PavloNetrebchuk Sep 2, 2025
7d6610f
feat: move HomeNavigationRow to bottom bar
PavloNetrebchuk Sep 3, 2025
8625632
feat: course home pages videos card
PavloNetrebchuk Sep 3, 2025
d1ed4bf
feat: course home pages assignment card
PavloNetrebchuk Sep 3, 2025
87da809
feat: course home pages grades card
PavloNetrebchuk Sep 4, 2025
2ce9ceb
feat: added empty states
PavloNetrebchuk Sep 4, 2025
11657ff
feat: CaughtUpMessage
PavloNetrebchuk Sep 4, 2025
c9f3cbe
feat: A11y
PavloNetrebchuk Sep 4, 2025
36e49ac
feat: detekt fixes
PavloNetrebchuk Sep 4, 2025
05fc280
feat: changes according demo feedback
PavloNetrebchuk Sep 5, 2025
42eda19
feat: course home analytic
PavloNetrebchuk Sep 5, 2025
a408106
feat: CourseHomeViewModelTest
PavloNetrebchuk Sep 5, 2025
14b9923
fix: detekt fix and changes according PR review
PavloNetrebchuk Sep 8, 2025
5e1b11f
feat: performance improvements
PavloNetrebchuk Sep 16, 2025
71cc7de
feat: changes according PR feedback
PavloNetrebchuk Sep 22, 2025
762ffe2
feat: changes according PR feedback
PavloNetrebchuk Oct 7, 2025
86351b3
feat: video navigation
PavloNetrebchuk Sep 8, 2025
f31162d
feat: minor ui fixes
PavloNetrebchuk Sep 10, 2025
ac10f8c
feat: next prev buttons logic update for video view mode
PavloNetrebchuk Oct 6, 2025
abbb92f
Merge branch 'develop' into feat/video_navigation
PavloNetrebchuk Oct 7, 2025
165d9bd
fix: db error fix
PavloNetrebchuk Oct 8, 2025
5f23bf3
fix: button arrow fix
PavloNetrebchuk Oct 8, 2025
795c43e
fix: changes according designer review
PavloNetrebchuk Oct 22, 2025
a0bf106
fix: obfuscation fix
PavloNetrebchuk Oct 22, 2025
63fd961
fix: changes according code review feedback
PavloNetrebchuk Oct 22, 2025
02ab146
fix: update androidyoutubeplayer to fix error 15
IvanStepanok Oct 23, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
113 changes: 111 additions & 2 deletions app/proguard-rules.pro
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,10 @@
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# CRITICAL: Keep generic type information for TypeToken to work properly
-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations
-keepattributes *Annotation*

# For using GSON @Expose annotation
-keepattributes *Annotation*

Expand All @@ -23,8 +27,74 @@
}

# Retain generic signatures of TypeToken and its subclasses with R8 version 3.0 and higher.
-keep,allowobfuscation,allowshrinking class com.google.gson.reflect.TypeToken
-keep,allowobfuscation,allowshrinking class * extends com.google.gson.reflect.TypeToken
# CRITICAL: Do NOT allow obfuscation or shrinking of TypeToken - it needs to preserve generic type information
-keep class com.google.gson.reflect.TypeToken
-keep class * extends com.google.gson.reflect.TypeToken

# Keep TypeToken constructors and methods to preserve generic type information
-keepclassmembers class com.google.gson.reflect.TypeToken {
<init>(...);
<methods>;
}

# Keep all Gson reflection classes that handle generic types
-keep class com.google.gson.reflect.** { *; }

# CRITICAL: Keep Google Guava TypeToken and TypeCapture classes (used by Gson)
-keep class com.google.common.reflect.TypeToken { *; }
-keep class com.google.common.reflect.TypeCapture { *; }
-keep class com.google.common.reflect.TypeToken$* { *; }
-keep class com.google.common.reflect.TypeCapture$* { *; }

# Keep all anonymous subclasses of TypeToken (created by object : TypeToken<T>() {})
-keep class * extends com.google.common.reflect.TypeToken { *; }
-keep class * extends com.google.gson.reflect.TypeToken { *; }

# Keep Gson TypeAdapter classes used by Room TypeConverters
-keep class * extends com.google.gson.TypeAdapter
-keep class * implements com.google.gson.TypeAdapterFactory

# Keep Room TypeConverters that use Gson (important for complex types like List<SectionScoreDb>)
-keep @androidx.room.TypeConverter class * { *; }
-keepclassmembers class * {
@androidx.room.TypeConverter <methods>;
}

# Keep generic type information for Room entities with complex types
-keepclassmembers class org.openedx.**.data.model.room.** {
<fields>;
<init>(...);
* mapToDomain();
* mapToRoomEntity();
* mapToEntity();
}

# CRITICAL: Keep the CourseConverter and all its TypeToken usage
-keep class org.openedx.course.data.storage.CourseConverter { *; }
-keepclassmembers class org.openedx.course.data.storage.CourseConverter {
<init>(...);
<methods>;
}

# Keep anonymous TypeToken subclasses created in CourseConverter
-keep class org.openedx.course.data.storage.CourseConverter$* { *; }

# CRITICAL: Prevent obfuscation of CourseConverter methods that use TypeToken
-keepclassmembers,allowobfuscation class org.openedx.course.data.storage.CourseConverter {
@androidx.room.TypeConverter <methods>;
}

# Keep all TypeConverter classes that use Gson
-keep class org.openedx.discovery.data.converter.DiscoveryConverter { *; }

# Keep the specific TypeToken usage patterns in TypeConverters
-keepclassmembers class org.openedx.**.data.storage.** {
@androidx.room.TypeConverter <methods>;
}

-keepclassmembers class org.openedx.**.data.converter.** {
@androidx.room.TypeConverter <methods>;
}
##---------------End: proguard configuration for Gson ----------

-keepclassmembers class * extends java.lang.Enum {
Expand All @@ -33,6 +103,45 @@
public static ** valueOf(java.lang.String);
}

##---------------Begin: proguard configuration for Kotlin Coroutines ----------
# Keep all coroutine-related classes and methods
-keep class kotlinx.coroutines.** { *; }
-keep class kotlin.coroutines.** { *; }
-keep class kotlin.coroutines.intrinsics.** { *; }

# Keep suspend functions and coroutine builders
-keepclassmembers class * {
kotlin.coroutines.Continuation *(...);
}

# Keep coroutine context and related classes
-keep class kotlinx.coroutines.CoroutineContext$* { *; }

# Keep Flow and StateFlow classes
-keep class kotlinx.coroutines.flow.** { *; }

# Keep coroutine dispatchers
-keep class kotlinx.coroutines.Dispatchers { *; }
-keep class kotlinx.coroutines.Dispatchers$* { *; }

# Keep coroutine scope and job classes
-keep class kotlinx.coroutines.CoroutineScope { *; }
-keep class kotlinx.coroutines.Job { *; }
-keep class kotlinx.coroutines.Job$* { *; }

# Keep coroutine intrinsics that are causing the error
-keep class kotlin.coroutines.intrinsics.IntrinsicsKt { *; }
-keep class kotlin.coroutines.intrinsics.IntrinsicsKt$* { *; }

# Keep suspend function markers
-keepclassmembers class * {
@kotlin.coroutines.RestrictsSuspension <methods>;
}

# Keep coroutine-related annotations
-keep @kotlin.coroutines.RestrictsSuspension class * { *; }
##---------------End: proguard configuration for Kotlin Coroutines ----------

-dontwarn org.bouncycastle.jsse.BCSSLParameters
-dontwarn org.bouncycastle.jsse.BCSSLSocket
-dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider
Expand Down
Loading
Loading