diff --git a/app/src/main/java/org/fdroid/fdroid/data/Apk.java b/app/src/main/java/org/fdroid/fdroid/data/Apk.java index 7561d2793..eb804fdd7 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/Apk.java +++ b/app/src/main/java/org/fdroid/fdroid/data/Apk.java @@ -4,6 +4,7 @@ import android.annotation.TargetApi; import android.content.ContentValues; import android.database.Cursor; import android.os.Build; +import android.os.Parcel; import android.os.Parcelable; import org.fdroid.fdroid.Utils; @@ -13,7 +14,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.HashSet; -public class Apk extends ValueObject implements Comparable { +public class Apk extends ValueObject implements Comparable,Parcelable { // Using only byte-range keeps it only 8-bits in the SQLite database public static final int SDK_VERSION_MAX_VALUE = Byte.MAX_VALUE; @@ -231,4 +232,74 @@ public class Apk extends ValueObject implements Comparable { return Integer.compare(versionCode, apk.versionCode); } + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(this.packageName); + dest.writeString(this.versionName); + dest.writeInt(this.versionCode); + dest.writeInt(this.size); + dest.writeLong(this.repo); + dest.writeString(this.hash); + dest.writeString(this.hashType); + dest.writeInt(this.minSdkVersion); + dest.writeInt(this.targetSdkVersion); + dest.writeInt(this.maxSdkVersion); + dest.writeLong(this.added != null ? this.added.getTime() : -1); + dest.writeStringArray(this.permissions); + dest.writeStringArray(this.features); + dest.writeStringArray(this.nativecode); + dest.writeString(this.sig); + dest.writeByte(this.compatible ? (byte) 1 : (byte) 0); + dest.writeString(this.apkName); + dest.writeSerializable(this.installedFile); + dest.writeString(this.srcname); + dest.writeInt(this.repoVersion); + dest.writeString(this.repoAddress); + dest.writeStringArray(this.incompatibleReasons); + dest.writeLong(this.appId); + } + + protected Apk(Parcel in) { + this.packageName = in.readString(); + this.versionName = in.readString(); + this.versionCode = in.readInt(); + this.size = in.readInt(); + this.repo = in.readLong(); + this.hash = in.readString(); + this.hashType = in.readString(); + this.minSdkVersion = in.readInt(); + this.targetSdkVersion = in.readInt(); + this.maxSdkVersion = in.readInt(); + long tmpAdded = in.readLong(); + this.added = tmpAdded == -1 ? null : new Date(tmpAdded); + this.permissions = in.createStringArray(); + this.features = in.createStringArray(); + this.nativecode = in.createStringArray(); + this.sig = in.readString(); + this.compatible = in.readByte() != 0; + this.apkName = in.readString(); + this.installedFile = (SanitizedFile) in.readSerializable(); + this.srcname = in.readString(); + this.repoVersion = in.readInt(); + this.repoAddress = in.readString(); + this.incompatibleReasons = in.createStringArray(); + this.appId = in.readLong(); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public Apk createFromParcel(Parcel source) { + return new Apk(source); + } + + @Override + public Apk[] newArray(int size) { + return new Apk[size]; + } + }; } diff --git a/app/src/main/java/org/fdroid/fdroid/data/App.java b/app/src/main/java/org/fdroid/fdroid/data/App.java index a071393b5..ec845e5b6 100644 --- a/app/src/main/java/org/fdroid/fdroid/data/App.java +++ b/app/src/main/java/org/fdroid/fdroid/data/App.java @@ -9,6 +9,7 @@ import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.content.res.XmlResourceParser; import android.database.Cursor; +import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; import android.util.Log; @@ -34,7 +35,7 @@ import java.util.regex.Pattern; import org.fdroid.fdroid.data.Schema.AppTable.Cols; -public class App extends ValueObject implements Comparable { +public class App extends ValueObject implements Comparable,Parcelable { private static final String TAG = "App"; @@ -560,4 +561,100 @@ public class App extends ValueObject implements Comparable { public long getId() { return id; } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeByte(this.compatible ? (byte) 1 : (byte) 0); + dest.writeString(this.packageName); + dest.writeString(this.name); + dest.writeString(this.summary); + dest.writeString(this.icon); + dest.writeString(this.description); + dest.writeString(this.license); + dest.writeString(this.author); + dest.writeString(this.email); + dest.writeString(this.webURL); + dest.writeString(this.trackerURL); + dest.writeString(this.sourceURL); + dest.writeString(this.changelogURL); + dest.writeString(this.donateURL); + dest.writeString(this.bitcoinAddr); + dest.writeString(this.litecoinAddr); + dest.writeString(this.flattrID); + dest.writeString(this.upstreamVersionName); + dest.writeInt(this.upstreamVersionCode); + dest.writeString(this.suggestedVersionName); + dest.writeInt(this.suggestedVersionCode); + dest.writeLong(this.added != null ? this.added.getTime() : -1); + dest.writeLong(this.lastUpdated != null ? this.lastUpdated.getTime() : -1); + dest.writeStringArray(this.categories); + dest.writeStringArray(this.antiFeatures); + dest.writeStringArray(this.requirements); + dest.writeByte(this.ignoreAllUpdates ? (byte) 1 : (byte) 0); + dest.writeInt(this.ignoreThisUpdate); + dest.writeString(this.iconUrl); + dest.writeString(this.iconUrlLarge); + dest.writeString(this.installedVersionName); + dest.writeInt(this.installedVersionCode); + dest.writeParcelable(this.installedApk, flags); + dest.writeString(this.installedSig); + dest.writeLong(this.id); + } + + protected App(Parcel in) { + this.compatible = in.readByte() != 0; + this.packageName = in.readString(); + this.name = in.readString(); + this.summary = in.readString(); + this.icon = in.readString(); + this.description = in.readString(); + this.license = in.readString(); + this.author = in.readString(); + this.email = in.readString(); + this.webURL = in.readString(); + this.trackerURL = in.readString(); + this.sourceURL = in.readString(); + this.changelogURL = in.readString(); + this.donateURL = in.readString(); + this.bitcoinAddr = in.readString(); + this.litecoinAddr = in.readString(); + this.flattrID = in.readString(); + this.upstreamVersionName = in.readString(); + this.upstreamVersionCode = in.readInt(); + this.suggestedVersionName = in.readString(); + this.suggestedVersionCode = in.readInt(); + long tmpAdded = in.readLong(); + this.added = tmpAdded == -1 ? null : new Date(tmpAdded); + long tmpLastUpdated = in.readLong(); + this.lastUpdated = tmpLastUpdated == -1 ? null : new Date(tmpLastUpdated); + this.categories = in.createStringArray(); + this.antiFeatures = in.createStringArray(); + this.requirements = in.createStringArray(); + this.ignoreAllUpdates = in.readByte() != 0; + this.ignoreThisUpdate = in.readInt(); + this.iconUrl = in.readString(); + this.iconUrlLarge = in.readString(); + this.installedVersionName = in.readString(); + this.installedVersionCode = in.readInt(); + this.installedApk = in.readParcelable(Apk.class.getClassLoader()); + this.installedSig = in.readString(); + this.id = in.readLong(); + } + + public static final Parcelable.Creator CREATOR = new Parcelable.Creator() { + @Override + public App createFromParcel(Parcel source) { + return new App(source); + } + + @Override + public App[] newArray(int size) { + return new App[size]; + } + }; }