add proguard rules for TypeToken

Daniel Gultsch created

Change summary

proguard-rules.pro                                          | 5 +++++
src/main/java/eu/siacs/conversations/entities/Reaction.java | 5 ++---
2 files changed, 7 insertions(+), 3 deletions(-)

Detailed changes

proguard-rules.pro 🔗

@@ -41,6 +41,11 @@
   !transient <fields>;
 }
 
+# Needed for proper GSON deserialization
+-keep class com.google.gson.reflect.TypeToken
+-keep class * extends com.google.gson.reflect.TypeToken
+-keep public class * implements java.lang.reflect.Type
+
 # Retrofit does reflection on generic parameters. InnerClasses is required to use Signature and
 # EnclosingMethod is required to use InnerClasses.
 -keepattributes Signature, InnerClasses, EnclosingMethod

src/main/java/eu/siacs/conversations/entities/Reaction.java 🔗

@@ -12,11 +12,11 @@ import com.google.common.collect.ImmutableSet;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Multimaps;
 import com.google.common.collect.Ordering;
-import com.google.common.reflect.TypeToken;
 import com.google.gson.Gson;
 import com.google.gson.GsonBuilder;
 import com.google.gson.JsonSyntaxException;
 import com.google.gson.TypeAdapter;
+import com.google.gson.reflect.TypeToken;
 import com.google.gson.stream.JsonReader;
 import com.google.gson.stream.JsonToken;
 import com.google.gson.stream.JsonWriter;
@@ -25,7 +25,6 @@ import eu.siacs.conversations.Config;
 import eu.siacs.conversations.xmpp.Jid;
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
@@ -80,7 +79,7 @@ public class Reaction {
         }
         try {
             return GSON.fromJson(asString, new TypeToken<List<Reaction>>() {}.getType());
-        } catch (final JsonSyntaxException e) {
+        } catch (final IllegalArgumentException | JsonSyntaxException e) {
             Log.e(Config.LOGTAG,"could not restore reactions", e);
             return Collections.emptyList();
         }