From b0b922fc6d1024c082f935ddc898933e3bb1a235 Mon Sep 17 00:00:00 2001
From: Janne Mareike Koschinski <mail@justjanne.de>
Date: Sat, 23 Nov 2024 16:11:14 +0100
Subject: [PATCH] fix: avatars not working as expected

---
 app/proguard-rules.pro                        | 51 ++++++++++++++++++-
 .../util/avatars/MatrixAvatarResponse.kt      |  2 +-
 2 files changed, 50 insertions(+), 3 deletions(-)

diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
index 3f3b15881..154ee706f 100644
--- a/app/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -35,6 +35,55 @@
     static ** INSTANCE;
 }
 
+# Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and
+# EnclosingMethod is required to use InnerClasses.
+-keepattributes Signature, InnerClasses, EnclosingMethod
+
+# Retrofit does reflection on method and parameter annotations.
+-keepattributes RuntimeVisibleAnnotations, RuntimeVisibleParameterAnnotations
+
+# Keep annotation default values (e.g., retrofit2.http.Field.encoded).
+-keepattributes AnnotationDefault
+
+# Retain service method parameters when optimizing.
+-keepclassmembers,allowshrinking,allowobfuscation interface * {
+    @retrofit2.http.* <methods>;
+}
+
+# Ignore annotation used for build tooling.
+-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
+
+# Ignore JSR 305 annotations for embedding nullability information.
+-dontwarn javax.annotation.**
+
+# Guarded by a NoClassDefFoundError try/catch and only used when on the classpath.
+-dontwarn kotlin.Unit
+
+# Top-level functions that can only be used by Kotlin.
+-dontwarn retrofit2.KotlinExtensions
+-dontwarn retrofit2.KotlinExtensions$*
+
+# With R8 full mode, it sees no subtypes of Retrofit interfaces since they are created with a Proxy
+# and replaces all potential values with null. Explicitly keeping the interfaces prevents this.
+-if interface * { @retrofit2.http.* <methods>; }
+-keep,allowobfuscation interface <1>
+
+# Keep inherited services.
+-if interface * { @retrofit2.http.* <methods>; }
+-keep,allowobfuscation interface * extends <1>
+
+# With R8 full mode generic signatures are stripped for classes that are not
+# kept. Suspend functions are wrapped in continuations where the type argument
+# is used.
+-keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation
+
+# R8 full mode strips generic signatures from return types if not kept.
+-if interface * { @retrofit2.http.* public *** *(...); }
+-keep,allowoptimization,allowshrinking,allowobfuscation class <3>
+
+# With R8 full mode generic signatures are stripped for classes that are not kept.
+-keep,allowobfuscation,allowshrinking class retrofit2.Response
+
 # remove unnecessary warnings
 # Android HTTP Libs
 -dontnote android.net.http.**
@@ -43,8 +92,6 @@
 -dontnote kotlin.**
 # Dagger
 -dontwarn com.google.errorprone.annotations.*
-# Retrofit
--dontwarn retrofit2.**
 # Annotation used by Retrofit on Java 8 VMs
 -dontwarn javax.annotation.Nullable
 -dontwarn javax.annotation.ParametersAreNonnullByDefault
diff --git a/app/src/main/java/de/kuschku/quasseldroid/util/avatars/MatrixAvatarResponse.kt b/app/src/main/java/de/kuschku/quasseldroid/util/avatars/MatrixAvatarResponse.kt
index badd4c342..fce94b5a6 100644
--- a/app/src/main/java/de/kuschku/quasseldroid/util/avatars/MatrixAvatarResponse.kt
+++ b/app/src/main/java/de/kuschku/quasseldroid/util/avatars/MatrixAvatarResponse.kt
@@ -25,6 +25,6 @@ import kotlinx.serialization.Serializable
 @Serializable
 data class MatrixAvatarResponse(
   @SerialName("avatar_url")
-  val avatarUrl: String?
+  val avatarUrl: String? = null
 )
 
-- 
GitLab