-optimizations !code/allocation/variable

# A resource is loaded with a relative path so the package of this class must be preserved.
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase

-renamesourcefileattribute SourceFile
-keepattributes Exceptions,InnerClasses,Signature,*Annotation*,EnclosingMethod
-keep class okhttp3.** { *; }
-keep interface okhttp3.** { *; }
-keep class sun.misc.Unsafe { *; }
-keep class org.junit.** { *; }
-keep class junit.** { *; }

# Services and Content providers need to be discoverable
-keep public class * extends com.penthera.virtuososdk.database.impl.provider.VirtuosoSDKContentProvider
-keep public class com.penthera.virtuososdk.service.VirtuosoService
-keep class com.penthera.virtuososdk.service.VirtuosoService$** { *; }
-keep public class * extends com.penthera.virtuososdk.service.VirtuosoForegroundServiceHandler
-keep public class * extends com.penthera.virtuososdk.service.VirtuosoServiceStarter
-keep public class com.penthera.virtuososdk.service.VirtuosoClientHTTPService
-keep public class * extends com.penthera.virtuososdk.client.subscriptions.SubscriptionsService
-keep class com.penthera.virtuososdk.interfaces.toolkit.ServiceImpl { *; }

# Broadcast receivers for internal messaging need to be discoverable through reflection
-keep class com.penthera.virtuososdk.service.BroadcastReceiverMessageHandler { *; }
-keep class com.penthera.virtuososdk.service.BroadcastReceiverMessageHandler$** { *; }
-keep class com.penthera.virtuososdk.interfaces.toolkit.VirtuosoContentBox$** { *; }

-keepclassmembers class com.penthera.virtuososdk.service.BroadcastReceiverMessageHandler { *; }
-keepclassmembernames class com.penthera.virtuososdk.service.BroadcastReceiverMessageHandler { *; }

# License managers must be discoverable via reflection
-keep public class * extends com.penthera.virtuososdk.client.drm.LicenseManager
-keepnames public class com.penthera.virtuososdk.client.drm.castlabs.CastLabsLicenseManager

# Uses reflection
-keep class com.penthera.virtuososdk.utility.SerializableHttpCookie { *; }

# Uses parcelling
-keepnames class com.penthera.virtuososdk.interfaces.toolkit.VirtuosoSegmentedFile$*
-keepnames class com.penthera.virtuososdk.client.**

-keep class com.penthera.virtuososdk.client.subscriptions.ADMService {
    public *;
    protected *;
}

# Preserve all .class method names.
-keepclassmembernames class com.penthera.virtuososdk.** {
    java.lang.Class class$(java.lang.String);
    java.lang.Class class$(java.lang.String, boolean);
}

# Explicitly preserve all serialization members.
-keepclassmembers class * implements java.io.Serializable {
    static final long serialVersionUID;
    private static final java.io.ObjectStreamField[] serialPersistentFields;
    private void writeObject(java.io.ObjectOutputStream);
    private void readObject(java.io.ObjectInputStream);
    java.lang.Object writeReplace();
    java.lang.Object readResolve();
}

-keepnames class com.penthera.virtuososdk.** implements android.os.Parcelable
-keepnames class com.penthera.virtuososdk.** implements java.io.Serializable

# Explicitly preserve all parcellables members, passed via bundles
-keepclassmembers class * implements android.os.Parcelable {
    static ** CREATOR;
}

# Preserve the special static methods that are required in all enumeration classes.
-keepclassmembers,allowoptimization enum com.penthera.virtuososdk.** {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
