From 27f6f4ef6ccec72c6ba3263061b4061be9477e94 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Sun, 28 May 2017 21:54:56 +0200 Subject: [PATCH] use autovalue for ParcelableKeyRing --- .../keyimport/ImportKeysListEntry.java | 2 +- .../keychain/keyimport/ParcelableKeyRing.java | 79 ++++++------------- .../processing/ImportKeysListCloudLoader.java | 2 +- .../keychain/operations/ImportOperation.java | 28 +++---- .../provider/KeyWritableRepository.java | 4 +- .../service/KeyserverSyncAdapterService.java | 5 +- ...reateSecurityTokenImportResetFragment.java | 2 +- .../keychain/ui/DecryptFragment.java | 2 +- .../keychain/ui/DecryptListFragment.java | 2 +- .../keychain/ui/ImportKeysProxyActivity.java | 4 +- .../keychain/ui/KeyListFragment.java | 2 +- .../keychain/ui/SafeSlingerActivity.java | 2 +- .../ui/adapter/ImportKeysAdapter.java | 2 +- .../keychain/ui/keyview/ViewKeyActivity.java | 2 +- .../keychain/util/EmailKeyHelper.java | 2 +- 15 files changed, 52 insertions(+), 88 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java index 1d02dbed8..1ddd87678 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java @@ -302,7 +302,7 @@ public class ImportKeysListEntry implements Serializable, Parcelable { try { byte[] encoded = ring.getEncoded(); - mParcelableKeyRing = new ParcelableKeyRing(encoded); + mParcelableKeyRing = ParcelableKeyRing.createFromEncodedBytes(encoded); } catch (IOException ignored) { } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ParcelableKeyRing.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ParcelableKeyRing.java index 7b3f6e501..5e0b1c8bb 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ParcelableKeyRing.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ParcelableKeyRing.java @@ -18,73 +18,38 @@ package org.sufficientlysecure.keychain.keyimport; -import android.os.Parcel; + import android.os.Parcelable; +import android.support.annotation.Nullable; + +import com.google.auto.value.AutoValue; + /** * This class is a parcelable representation of either a keyring as raw data, * or a (unique) reference to one as a fingerprint, keyid, or keybase name. */ -public class ParcelableKeyRing implements Parcelable { - - public final byte[] mBytes; +@AutoValue +public abstract class ParcelableKeyRing implements Parcelable { + @Nullable + public abstract byte[] getBytes(); // dual role! - public final byte[] mExpectedFingerprint; - public final String mKeyIdHex; - public final String mKeybaseName; - public final String mFbUsername; + @Nullable + public abstract byte[] getExpectedFingerprint(); + @Nullable + public abstract String getKeyIdHex(); + @Nullable + public abstract String getKeybaseName(); + @Nullable + public abstract String getFbUsername(); - public ParcelableKeyRing(byte[] bytes) { - this(bytes, null, null, null, null); + public static ParcelableKeyRing createFromEncodedBytes(byte[] bytes) { + return new AutoValue_ParcelableKeyRing(bytes, null, null, null, null); } - public ParcelableKeyRing(byte[] expectedFingerprint, String keyIdHex, String keybaseName, - String fbUsername) { - - this(null, expectedFingerprint, keyIdHex, keybaseName, fbUsername); + public static ParcelableKeyRing createFromReference( + byte[] expectedFingerprint, String keyIdHex, String keybaseName, String fbUsername) { + return new AutoValue_ParcelableKeyRing(null, expectedFingerprint, keyIdHex, keybaseName, fbUsername); } - - public ParcelableKeyRing(byte[] bytes, byte[] expectedFingerprint, String keyIdHex, - String keybaseName, String fbUsername) { - - this.mBytes = bytes; - this.mExpectedFingerprint = expectedFingerprint; - this.mKeyIdHex = keyIdHex; - this.mKeybaseName = keybaseName; - this.mFbUsername = fbUsername; - } - - private ParcelableKeyRing(Parcel source) { - mBytes = source.createByteArray(); - - mExpectedFingerprint = source.createByteArray(); - mKeyIdHex = source.readString(); - mKeybaseName = source.readString(); - mFbUsername = source.readString(); - } - - public void writeToParcel(Parcel dest, int flags) { - dest.writeByteArray(mBytes); - - dest.writeByteArray(mExpectedFingerprint); - dest.writeString(mKeyIdHex); - dest.writeString(mKeybaseName); - dest.writeString(mFbUsername); - } - - public static final Creator CREATOR = new Creator() { - public ParcelableKeyRing createFromParcel(final Parcel source) { - return new ParcelableKeyRing(source); - } - - public ParcelableKeyRing[] newArray(final int size) { - return new ParcelableKeyRing[size]; - } - }; - - public int describeContents() { - return 0; - } - } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/processing/ImportKeysListCloudLoader.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/processing/ImportKeysListCloudLoader.java index b236f0355..ce879e90f 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/processing/ImportKeysListCloudLoader.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/processing/ImportKeysListCloudLoader.java @@ -84,7 +84,7 @@ public class ImportKeysListCloudLoader // Now we have all the data needed to build the parcelable key ring for this key for (ImportKeysListEntry e : mEntryList) { - e.setParcelableKeyRing(new ParcelableKeyRing(e.getFingerprint(), e.getKeyIdHex(), + e.setParcelableKeyRing(ParcelableKeyRing.createFromReference(e.getFingerprint(), e.getKeyIdHex(), e.getKeybaseName(), e.getFbUsername())); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java index 2ebcd1e6d..3b37fdea9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/operations/ImportOperation.java @@ -178,8 +178,8 @@ public class ImportOperation extends BaseReadWriteOperation UncachedKeyRing key = null; // If there is already byte data, use that - if (entry.mBytes != null) { - key = UncachedKeyRing.decodeFromData(entry.mBytes); + if (entry.getBytes() != null) { + key = UncachedKeyRing.decodeFromData(entry.getBytes()); } else { try { key = fetchKeyFromInternet(hkpKeyserver, proxy, log, entry, key); @@ -216,7 +216,7 @@ public class ImportOperation extends BaseReadWriteOperation if (key.isSecret()) { result = mKeyWritableRepository.saveSecretKeyRing(key, canKeyRings, skipSave); } else { - result = mKeyWritableRepository.savePublicKeyRing(key, entry.mExpectedFingerprint, canKeyRings, skipSave); + result = mKeyWritableRepository.savePublicKeyRing(key, entry.getExpectedFingerprint(), canKeyRings, skipSave); } } if (!result.success()) { @@ -325,7 +325,7 @@ public class ImportOperation extends BaseReadWriteOperation QueryNotFoundException queryNotFoundException = null; boolean canFetchFromKeyservers = - hkpKeyserver != null && (entry.mKeyIdHex != null || entry.mExpectedFingerprint != null); + hkpKeyserver != null && (entry.getKeyIdHex() != null || entry.getExpectedFingerprint()!= null); if (canFetchFromKeyservers) { UncachedKeyRing keyserverKey = null; try { @@ -339,7 +339,7 @@ public class ImportOperation extends BaseReadWriteOperation } } - boolean hasKeybaseName = entry.mKeybaseName != null; + boolean hasKeybaseName = entry.getKeybaseName() != null; if (hasKeybaseName) { UncachedKeyRing keybaseKey = fetchKeyFromKeybase(proxy, log, entry); if (keybaseKey != null) { @@ -347,7 +347,7 @@ public class ImportOperation extends BaseReadWriteOperation } } - boolean hasFacebookName = entry.mFbUsername != null; + boolean hasFacebookName = entry.getFbUsername() != null; if (hasFacebookName) { UncachedKeyRing facebookKey = fetchKeyFromFacebook(proxy, log, entry); if (facebookKey != null) { @@ -370,14 +370,14 @@ public class ImportOperation extends BaseReadWriteOperation log.add(LogType.MSG_IMPORT_KEYSERVER, 1, hkpKeyserver); // Download by fingerprint, or keyId - whichever is available - if (entry.mExpectedFingerprint != null) { - String fingerprintHex = KeyFormattingUtils.convertFingerprintToHex(entry.mExpectedFingerprint); + if (entry.getExpectedFingerprint() != null) { + String fingerprintHex = KeyFormattingUtils.convertFingerprintToHex(entry.getExpectedFingerprint()); log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER, 2, "0x" + fingerprintHex.substring(24)); data = hkpKeyserver.get("0x" + fingerprintHex, proxy).getBytes(); } else { - log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER, 2, entry.mKeyIdHex); - data = hkpKeyserver.get(entry.mKeyIdHex, proxy).getBytes(); + log.add(LogType.MSG_IMPORT_FETCH_KEYSERVER, 2, entry.getKeyIdHex()); + data = hkpKeyserver.get(entry.getKeyIdHex(), proxy).getBytes(); } UncachedKeyRing keyserverKey = UncachedKeyRing.decodeFromData(data); if (keyserverKey != null) { @@ -403,8 +403,8 @@ public class ImportOperation extends BaseReadWriteOperation } try { - log.add(LogType.MSG_IMPORT_FETCH_KEYBASE, 2, entry.mKeybaseName); - byte[] data = keybaseServer.get(entry.mKeybaseName, proxy).getBytes(); + log.add(LogType.MSG_IMPORT_FETCH_KEYBASE, 2, entry.getKeybaseName()); + byte[] data = keybaseServer.get(entry.getKeybaseName(), proxy).getBytes(); UncachedKeyRing keybaseKey = UncachedKeyRing.decodeFromData(data); if (keybaseKey != null) { @@ -429,8 +429,8 @@ public class ImportOperation extends BaseReadWriteOperation } try { - log.add(LogType.MSG_IMPORT_FETCH_FACEBOOK, 2, entry.mFbUsername); - byte[] data = facebookServer.get(entry.mFbUsername, proxy).getBytes(); + log.add(LogType.MSG_IMPORT_FETCH_FACEBOOK, 2, entry.getFbUsername()); + byte[] data = facebookServer.get(entry.getFbUsername(), proxy).getBytes(); UncachedKeyRing facebookKey = UncachedKeyRing.decodeFromData(data); if (facebookKey != null) { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyWritableRepository.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyWritableRepository.java index 43640d36b..9755611d9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyWritableRepository.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeyWritableRepository.java @@ -1054,7 +1054,7 @@ public class KeyWritableRepository extends KeyRepository { if (cursor.isAfterLast()) { return false; } - ring = new ParcelableKeyRing(cursor.getBlob(0)); + ring = ParcelableKeyRing.createFromEncodedBytes(cursor.getBlob(0)); cursor.moveToNext(); return true; } @@ -1116,7 +1116,7 @@ public class KeyWritableRepository extends KeyRepository { if (cursor.isAfterLast()) { return false; } - ring = new ParcelableKeyRing(cursor.getBlob(0)); + ring = ParcelableKeyRing.createFromEncodedBytes(cursor.getBlob(0)); cursor.moveToNext(); return true; } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeyserverSyncAdapterService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeyserverSyncAdapterService.java index cdde34e87..d424e3eae 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeyserverSyncAdapterService.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/KeyserverSyncAdapterService.java @@ -366,8 +366,7 @@ public class KeyserverSyncAdapterService extends Service { first = false; } - Log.d(Constants.TAG, "Updating key with fingerprint " + keyRing.mExpectedFingerprint + - " with a wait time of " + waitTime + "s"); + Log.d(Constants.TAG, "Updating key with a wait time of " + waitTime + "s"); try { Thread.sleep(waitTime * 1000); } catch (InterruptedException e) { @@ -465,7 +464,7 @@ public class KeyserverSyncAdapterService extends Service { byte[] fingerprint = keyCursor.getBlob(INDEX_FINGERPRINT); String hexKeyId = KeyFormattingUtils.convertKeyIdToHex(keyId); // we aren't updating from keybase as of now - keyList.add(new ParcelableKeyRing(fingerprint, hexKeyId, null, null)); + keyList.add(ParcelableKeyRing.createFromReference(fingerprint, hexKeyId, null, null)); } keyCursor.close(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportResetFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportResetFragment.java index d9b5ef62b..1a7e0f987 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportResetFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/CreateSecurityTokenImportResetFragment.java @@ -215,7 +215,7 @@ public class CreateSecurityTokenImportResetFragment public void importKey() { ArrayList keyList = new ArrayList<>(); - keyList.add(new ParcelableKeyRing(mTokenFingerprint, null, null, null)); + keyList.add(ParcelableKeyRing.createFromReference(mTokenFingerprint, null, null, null)); mKeyList = keyList; mKeyserver = Preferences.getPreferences(getActivity()).getPreferredKeyserver(); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java index 766432f56..29b3cb132 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFragment.java @@ -146,7 +146,7 @@ public abstract class DecryptFragment extends Fragment implements LoaderManager. keyserver = Preferences.getPreferences(getActivity()).getPreferredKeyserver(); { - ParcelableKeyRing keyEntry = new ParcelableKeyRing(null, + ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromReference(null, KeyFormattingUtils.convertKeyIdToHex(unknownKeyId), null, null); ArrayList selectedEntries = new ArrayList<>(); selectedEntries.add(keyEntry); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java index 84b49ca3f..da54a0f69 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptListFragment.java @@ -766,7 +766,7 @@ public class DecryptListFragment keyserver = Preferences.getPreferences(getActivity()).getPreferredKeyserver(); { - ParcelableKeyRing keyEntry = new ParcelableKeyRing(null, + ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromReference(null, KeyFormattingUtils.convertKeyIdToHex(unknownKeyId), null, null); ArrayList selectedEntries = new ArrayList<>(); selectedEntries.add(keyEntry); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java index bbce27a21..f3f6edb11 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ImportKeysProxyActivity.java @@ -191,7 +191,7 @@ public class ImportKeysProxyActivity extends FragmentActivity } public void importKeys(byte[] keyringData) { - ParcelableKeyRing keyEntry = new ParcelableKeyRing(keyringData); + ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromEncodedBytes(keyringData); ArrayList selectedEntries = new ArrayList<>(); selectedEntries.add(keyEntry); @@ -199,7 +199,7 @@ public class ImportKeysProxyActivity extends FragmentActivity } public void importKeysFromFingerprint(byte[] fingerprint) { - ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null, null); + ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromReference(fingerprint, null, null, null); ArrayList selectedEntries = new ArrayList<>(); selectedEntries.add(keyEntry); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java index d60f8da32..065460265 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java @@ -503,7 +503,7 @@ public class KeyListFragment extends RecyclerFragment try { while (cursor.moveToNext()) { byte[] fingerprint = cursor.getBlob(0); //fingerprint column is 0 - ParcelableKeyRing keyEntry = new ParcelableKeyRing(fingerprint, null, null, null); + ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromReference(fingerprint, null, null, null); keyList.add(keyEntry); } mKeyList = keyList; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java index e5272ec02..49d291e0b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/SafeSlingerActivity.java @@ -172,7 +172,7 @@ public class SafeSlingerActivity extends BaseActivity do { d = extras.getByteArray(ExchangeConfig.extra.MEMBER_DATA + i); if (d != null) { - list.add(new ParcelableKeyRing(d)); + list.add(ParcelableKeyRing.createFromEncodedBytes(d)); i++; } } while (d != null); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java index fad01fa16..871763e60 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/ImportKeysAdapter.java @@ -222,7 +222,7 @@ public class ImportKeysAdapter extends RecyclerView.Adapter entries = new ArrayList<>(); entries.add(keyEntry); mKeyList = entries; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/EmailKeyHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/EmailKeyHelper.java index 348138a8d..9949e9ddf 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/EmailKeyHelper.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/EmailKeyHelper.java @@ -57,7 +57,7 @@ public class EmailKeyHelper { // Put them in a list and import ArrayList keys = new ArrayList<>(entries.size()); for (ImportKeysListEntry entry : entries) { - keys.add(new ParcelableKeyRing(entry.getFingerprint(), entry.getKeyIdHex(), null, null)); + keys.add(ParcelableKeyRing.createFromReference(entry.getFingerprint(), entry.getKeyIdHex(), null, null)); } mKeyList = keys; mKeyserver = keyserver;