/*
 * Copyright (C) 2014 Dominik Schürmann <dominik@dominikschuermann.de>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package org.openintents.openpgp;

import android.os.Parcel;
import android.os.Parcelable;

/**
 * Parcelable versioning has been copied from Dashclock Widget
 * https://code.google.com/p/dashclock/source/browse/api/src/main/java/com/google/android/apps/dashclock/api/ExtensionData.java
 */
public class OpenPgpDecryptMetadata implements Parcelable {
    /**
     * Since there might be a case where new versions of the client using the library getting
     * old versions of the protocol (and thus old versions of this class), we need a versioning
     * system for the parcels sent between the clients and the providers.
     */
    public static final int PARCELABLE_VERSION = 1;

    String filename;
    long modificationTime;
    int format;
    long originalSize;

    public String getFilename() {
        return filename;
    }

    public long getModificationTime() {
        return modificationTime;
    }

    public long getOriginalSize() {
        return originalSize;
    }

    public int getFormat() {
        return format;
    }

    public OpenPgpDecryptMetadata() {
    }

    public OpenPgpDecryptMetadata(String filename, long modificationTime,
                                  int format, long originalSize) {
        this.filename = filename;
        this.modificationTime = modificationTime;
        this.format = format;
        this.originalSize = originalSize;
    }

    public OpenPgpDecryptMetadata(OpenPgpDecryptMetadata b) {
        this.filename = b.filename;
        this.modificationTime = b.modificationTime;
        this.format = b.format;
        this.originalSize = b.originalSize;
    }

    public int describeContents() {
        return 0;
    }

    public void writeToParcel(Parcel dest, int flags) {
        /**
         * NOTE: When adding fields in the process of updating this API, make sure to bump
         * {@link #PARCELABLE_VERSION}.
         */
        dest.writeInt(PARCELABLE_VERSION);
        // Inject a placeholder that will store the parcel size from this point on
        // (not including the size itself).
        int sizePosition = dest.dataPosition();
        dest.writeInt(0);
        int startPosition = dest.dataPosition();
        // version 1
        dest.writeString(filename);
        dest.writeLong(modificationTime);
        dest.writeInt(format);
        dest.writeLong(originalSize);
        // Go back and write the size
        int parcelableSize = dest.dataPosition() - startPosition;
        dest.setDataPosition(sizePosition);
        dest.writeInt(parcelableSize);
        dest.setDataPosition(startPosition + parcelableSize);
    }

    public static final Creator<OpenPgpDecryptMetadata> CREATOR = new Creator<OpenPgpDecryptMetadata>() {
        public OpenPgpDecryptMetadata createFromParcel(final Parcel source) {
            int parcelableVersion = source.readInt();
            int parcelableSize = source.readInt();
            int startPosition = source.dataPosition();

            OpenPgpDecryptMetadata vr = new OpenPgpDecryptMetadata();
            vr.filename = source.readString();
            vr.modificationTime = source.readLong();
            vr.format = source.readInt();
            vr.originalSize = source.readLong();

            // skip over all fields added in future versions of this parcel
            source.setDataPosition(startPosition + parcelableSize);

            return vr;
        }

        public OpenPgpDecryptMetadata[] newArray(final int size) {
            return new OpenPgpDecryptMetadata[size];
        }
    };

    @Override
    public String toString() {
        String out = new String();
        out += "\nfilename: " + filename;
        out += "\nmodificationTime: " + modificationTime;
        out += "\nformat: " + format;
        out += "\noriginalSize: " + originalSize;
        return out;
    }

}

@@ -1331,24 +1331,45 @@
 g filename;%0A
+    String mimeType;%0A
     long mod
@@ -1387,24 +1387,8 @@
 me;%0A
-    int format;%0A
     
@@ -1465,32 +1465,98 @@
 ilename;%0A    %7D%0A%0A
+    public String getMimeType() %7B%0A        return mimeType;%0A    %7D%0A%0A
     public long 
@@ -1695,67 +1695,8 @@
  %7D%0A%0A
-    public int getFormat() %7B%0A        return format;%0A    %7D%0A%0A
     
@@ -1786,16 +1786,33 @@
 ilename,
+ String mimeType,
  long mo
@@ -1864,20 +1864,8 @@
     
- int format,
  lon
@@ -1908,32 +1908,66 @@
 ame = filename;%0A
+        this.mimeType = mimeType;%0A
         this.mod
@@ -2004,38 +2004,8 @@
 me;%0A
-        this.format = format;%0A
     
@@ -2139,32 +2139,68 @@
 e = b.filename;%0A
+        this.mimeType = b.mimeType;%0A
         this.mod
@@ -2239,40 +2239,8 @@
 me;%0A
-        this.format = b.format;%0A
     
@@ -2904,24 +2904,60 @@
 (filename);%0A
+        dest.writeString(mimeType);%0A
         dest
@@ -2990,39 +2990,8 @@
 e);%0A
-        dest.writeInt(format);%0A
     
@@ -3734,32 +3734,79 @@
 e.readString();%0A
+            vr.mimeType = source.readString();%0A
             vr.m
@@ -3846,50 +3846,8 @@
 ();%0A
-            vr.format = source.readInt();%0A
     
@@ -4279,61 +4279,74 @@
 t = 
-new String();%0A        out += %22%5Cnfilename: %22 + filenam
+%22%5Cnfilename: %22 + filename;%0A        out += %22%5CnmimeType: %22 + mimeTyp
 e;%0A 
@@ -4406,46 +4406,8 @@
 me;%0A
-        out += %22%5Cnformat: %22 + format;%0A
     

Support mime type in metadata