From 5afb12da673b5bf2088a3d34ee2e39a36e006313 Mon Sep 17 00:00:00 2001 From: Braden Farmer Date: Tue, 11 Oct 2016 13:57:05 -0600 Subject: [PATCH] Protect against data loss from Serializable classes on app upgrade --- app/build.gradle | 2 +- app/mapping.txt | 71 ++++++++++++++++++++++ app/proguard-rules.pro | 7 +++ .../java/com/farmerbb/taskbar/util/Blacklist.java | 2 + .../farmerbb/taskbar/util/PinnedBlockedApps.java | 2 + .../farmerbb/taskbar/util/SavedWindowSizes.java | 2 + .../java/com/farmerbb/taskbar/util/TopApps.java | 2 + 7 files changed, 87 insertions(+), 1 deletion(-) create mode 100644 app/mapping.txt create mode 100644 app/proguard-rules.pro diff --git a/app/build.gradle b/app/build.gradle index 351f180c..981c4994 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,7 +26,7 @@ android { release { minifyEnabled true shrinkResources true - proguardFiles 'proguard-android.txt' + proguardFiles 'proguard-android.txt', 'proguard-rules.pro' } } diff --git a/app/mapping.txt b/app/mapping.txt new file mode 100644 index 00000000..ef5c0813 --- /dev/null +++ b/app/mapping.txt @@ -0,0 +1,71 @@ +com.farmerbb.taskbar.util.AppEntry -> com.farmerbb.taskbar.c.a: + java.lang.String packageName -> a + java.lang.String componentName -> b + java.lang.String label -> c + android.graphics.drawable.Drawable icon -> d + byte[] iconByteArray -> e + void (java.lang.String,java.lang.String,java.lang.String,android.graphics.drawable.Drawable,boolean) -> + java.lang.String getPackageName() -> a + java.lang.String getComponentName() -> b + java.lang.String getLabel() -> c + android.graphics.drawable.Drawable getIcon(android.content.Context) -> a +com.farmerbb.taskbar.util.Blacklist -> com.farmerbb.taskbar.c.b: + java.util.List blockedApps -> a + com.farmerbb.taskbar.util.Blacklist theInstance -> b + void () -> + java.util.List getBlockedApps() -> a + void addBlockedApp(android.content.Context,com.farmerbb.taskbar.util.BlacklistEntry) -> a + void removeBlockedApp(android.content.Context,java.lang.String) -> a + boolean isBlocked(java.lang.String) -> a + boolean save(android.content.Context) -> c + void clear(android.content.Context) -> a + com.farmerbb.taskbar.util.Blacklist getInstance(android.content.Context) -> b +com.farmerbb.taskbar.util.BlacklistEntry -> com.farmerbb.taskbar.c.c: + java.lang.String packageName -> a + java.lang.String label -> b + void (java.lang.String,java.lang.String) -> + java.lang.String getPackageName() -> a + java.lang.String getLabel() -> b +com.farmerbb.taskbar.util.PinnedBlockedApps -> com.farmerbb.taskbar.c.j: + java.util.List pinnedApps -> a + java.util.List blockedApps -> b + com.farmerbb.taskbar.util.PinnedBlockedApps theInstance -> c + void () -> + java.util.List getPinnedApps() -> a + java.util.List getBlockedApps() -> b + void addPinnedApp(android.content.Context,com.farmerbb.taskbar.util.AppEntry) -> a + void addBlockedApp(android.content.Context,com.farmerbb.taskbar.util.AppEntry) -> b + void removePinnedApp(android.content.Context,java.lang.String) -> a + void removeBlockedApp(android.content.Context,java.lang.String) -> b + boolean isPinned(java.lang.String) -> a + boolean isBlocked(java.lang.String) -> b + void clear(android.content.Context) -> a + boolean save(android.content.Context) -> c + com.farmerbb.taskbar.util.PinnedBlockedApps getInstance(android.content.Context) -> b +com.farmerbb.taskbar.util.SavedWindowSizes -> com.farmerbb.taskbar.c.k: + java.util.List savedApps -> a + com.farmerbb.taskbar.util.SavedWindowSizes theInstance -> b + void () -> + void setWindowSize(android.content.Context,java.lang.String,java.lang.String) -> a + java.lang.String getWindowSize(android.content.Context,java.lang.String) -> a + void clear(android.content.Context) -> a + boolean save(android.content.Context) -> c + com.farmerbb.taskbar.util.SavedWindowSizes getInstance(android.content.Context) -> b + java.util.List getSavedWindowSizes() -> a +com.farmerbb.taskbar.util.SavedWindowSizesEntry -> com.farmerbb.taskbar.c.l: + java.lang.String componentName -> a + java.lang.String windowSize -> b + void (java.lang.String,java.lang.String) -> + java.lang.String getComponentName() -> a + java.lang.String getWindowSize() -> b +com.farmerbb.taskbar.util.TopApps -> com.farmerbb.taskbar.c.m: + java.util.List topApps -> a + com.farmerbb.taskbar.util.TopApps theInstance -> b + void () -> + java.util.List getTopApps() -> a + void addTopApp(android.content.Context,com.farmerbb.taskbar.util.BlacklistEntry) -> a + void removeTopApp(android.content.Context,java.lang.String) -> a + boolean isTopApp(java.lang.String) -> a + boolean save(android.content.Context) -> c + void clear(android.content.Context) -> a + com.farmerbb.taskbar.util.TopApps getInstance(android.content.Context) -> b \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 00000000..4385e5f9 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,7 @@ +# Add project specific ProGuard rules here + +-applymapping mapping.txt + +-keepclassmembers class * implements java.io.Serializable { + static final long serialVersionUID; +} \ No newline at end of file diff --git a/app/src/main/java/com/farmerbb/taskbar/util/Blacklist.java b/app/src/main/java/com/farmerbb/taskbar/util/Blacklist.java index fcb0b2d2..0d7f8cb1 100644 --- a/app/src/main/java/com/farmerbb/taskbar/util/Blacklist.java +++ b/app/src/main/java/com/farmerbb/taskbar/util/Blacklist.java @@ -27,6 +27,8 @@ import java.util.ArrayList; import java.util.List; public class Blacklist implements Serializable { + static final long serialVersionUID = 9033765395690141037L; + private List blockedApps = new ArrayList<>(); private static Blacklist theInstance; diff --git a/app/src/main/java/com/farmerbb/taskbar/util/PinnedBlockedApps.java b/app/src/main/java/com/farmerbb/taskbar/util/PinnedBlockedApps.java index d07657da..9dbb155f 100644 --- a/app/src/main/java/com/farmerbb/taskbar/util/PinnedBlockedApps.java +++ b/app/src/main/java/com/farmerbb/taskbar/util/PinnedBlockedApps.java @@ -27,6 +27,8 @@ import java.util.ArrayList; import java.util.List; public class PinnedBlockedApps implements Serializable { + static final long serialVersionUID = 6649239269100390617L; + private List pinnedApps = new ArrayList<>(); private List blockedApps = new ArrayList<>(); diff --git a/app/src/main/java/com/farmerbb/taskbar/util/SavedWindowSizes.java b/app/src/main/java/com/farmerbb/taskbar/util/SavedWindowSizes.java index 5d66ff32..4e167d93 100644 --- a/app/src/main/java/com/farmerbb/taskbar/util/SavedWindowSizes.java +++ b/app/src/main/java/com/farmerbb/taskbar/util/SavedWindowSizes.java @@ -27,6 +27,8 @@ import java.util.ArrayList; import java.util.List; public class SavedWindowSizes implements Serializable { + static final long serialVersionUID = 7111185146180868281L; + private List savedApps = new ArrayList<>(); private static SavedWindowSizes theInstance; diff --git a/app/src/main/java/com/farmerbb/taskbar/util/TopApps.java b/app/src/main/java/com/farmerbb/taskbar/util/TopApps.java index 4f8ecad2..c7a0b16b 100644 --- a/app/src/main/java/com/farmerbb/taskbar/util/TopApps.java +++ b/app/src/main/java/com/farmerbb/taskbar/util/TopApps.java @@ -27,6 +27,8 @@ import java.util.ArrayList; import java.util.List; public class TopApps implements Serializable { + static final long serialVersionUID = 8541436853152666400L; + private List topApps = new ArrayList<>(); private static TopApps theInstance; -- 2.11.0