diff options
Diffstat (limited to 'OpenPGP-Keychain-API')
3 files changed, 72 insertions, 3 deletions
| diff --git a/OpenPGP-Keychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpError.java b/OpenPGP-Keychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpError.java index 4dd2cc641..b894a4609 100644 --- a/OpenPGP-Keychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpError.java +++ b/OpenPGP-Keychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpError.java @@ -19,12 +19,22 @@ 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 OpenPgpError 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; + +    // possible values for errorId      public static final int CLIENT_SIDE_ERROR = -1; -      public static final int GENERIC_ERROR = 0;      public static final int INCOMPATIBLE_API_VERSIONS = 1; -      public static final int NO_OR_WRONG_PASSPHRASE = 2;      public static final int NO_USER_IDS = 3; @@ -65,15 +75,39 @@ public class OpenPgpError implements Parcelable {      }      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.writeInt(errorId);          dest.writeString(message); +        // 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<OpenPgpError> CREATOR = new Creator<OpenPgpError>() {          public OpenPgpError createFromParcel(final Parcel source) { +            int parcelableVersion = source.readInt(); +            int parcelableSize = source.readInt(); +            int startPosition = source.dataPosition(); +              OpenPgpError error = new OpenPgpError();              error.errorId = source.readInt();              error.message = source.readString(); + +            // skip over all fields added in future versions of this parcel +            source.setDataPosition(startPosition + parcelableSize); +              return error;          } diff --git a/OpenPGP-Keychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java b/OpenPGP-Keychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java index cb220cf6d..157dd1aad 100644 --- a/OpenPGP-Keychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java +++ b/OpenPGP-Keychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java @@ -19,7 +19,18 @@ 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 OpenPgpSignatureResult 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; +      // generic error on signature verification      public static final int SIGNATURE_ERROR = 0;      // successfully verified signature, with certified public key @@ -90,19 +101,43 @@ public class OpenPgpSignatureResult implements Parcelable {      }      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.writeInt(status);          dest.writeByte((byte) (signatureOnly ? 1 : 0));          dest.writeString(userId);          dest.writeLong(keyId); +        // 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<OpenPgpSignatureResult> CREATOR = new Creator<OpenPgpSignatureResult>() {          public OpenPgpSignatureResult createFromParcel(final Parcel source) { +            int parcelableVersion = source.readInt(); +            int parcelableSize = source.readInt(); +            int startPosition = source.dataPosition(); +              OpenPgpSignatureResult vr = new OpenPgpSignatureResult();              vr.status = source.readInt();              vr.signatureOnly = source.readByte() == 1;              vr.userId = source.readString();              vr.keyId = source.readLong(); + +            // skip over all fields added in future versions of this parcel +            source.setDataPosition(startPosition + parcelableSize); +              return vr;          } diff --git a/OpenPGP-Keychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpApi.java b/OpenPGP-Keychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpApi.java index c59590fec..465a12002 100644 --- a/OpenPGP-Keychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpApi.java +++ b/OpenPGP-Keychain-API/libraries/openpgp-api-library/src/org/openintents/openpgp/util/OpenPgpApi.java @@ -32,7 +32,7 @@ public class OpenPgpApi {      public static final String TAG = "OpenPgp API"; -    public static final int API_VERSION = 2; +    public static final int API_VERSION = 3;      public static final String SERVICE_INTENT = "org.openintents.openpgp.IOpenPgpService";      /** | 
