use autovalue for ParcelableKeyRing

This commit is contained in:
Vincent Breitmoser
2017-05-28 21:54:56 +02:00
parent 606c702762
commit 27f6f4ef6c
15 changed files with 52 additions and 88 deletions

View File

@@ -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) {
}
}

View File

@@ -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<ParcelableKeyRing> CREATOR = new Creator<ParcelableKeyRing>() {
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;
}
}

View File

@@ -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()));
}

View File

@@ -178,8 +178,8 @@ public class ImportOperation extends BaseReadWriteOperation<ImportKeyringParcel>
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<ImportKeyringParcel>
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<ImportKeyringParcel>
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<ImportKeyringParcel>
}
}
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<ImportKeyringParcel>
}
}
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<ImportKeyringParcel>
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<ImportKeyringParcel>
}
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<ImportKeyringParcel>
}
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) {

View File

@@ -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;
}

View File

@@ -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();

View File

@@ -215,7 +215,7 @@ public class CreateSecurityTokenImportResetFragment
public void importKey() {
ArrayList<ParcelableKeyRing> 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();

View File

@@ -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<ParcelableKeyRing> selectedEntries = new ArrayList<>();
selectedEntries.add(keyEntry);

View File

@@ -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<ParcelableKeyRing> selectedEntries = new ArrayList<>();
selectedEntries.add(keyEntry);

View File

@@ -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<ParcelableKeyRing> 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<ParcelableKeyRing> selectedEntries = new ArrayList<>();
selectedEntries.add(keyEntry);

View File

@@ -503,7 +503,7 @@ public class KeyListFragment extends RecyclerFragment<KeySectionedListAdapter>
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;

View File

@@ -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);

View File

@@ -222,7 +222,7 @@ public class ImportKeysAdapter extends RecyclerView.Adapter<ImportKeysAdapter.Vi
ParcelableHkpKeyserver keyserver = null;
ParcelableKeyRing keyRing = entry.getParcelableKeyRing();
if (keyRing.mBytes != null) {
if (keyRing.getBytes() != null) {
// instead of giving the entries by Intent extra, cache them into a
// file to prevent Java Binder problems on heavy imports
// read FileImportCache for more info.

View File

@@ -1163,7 +1163,7 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements
byte[] blob = keyRepository.getCachedPublicKeyRing(dataUri).getFingerprint();
ParcelableKeyRing keyEntry = new ParcelableKeyRing(blob, null, null, null);
ParcelableKeyRing keyEntry = ParcelableKeyRing.createFromReference(blob, null, null, null);
ArrayList<ParcelableKeyRing> entries = new ArrayList<>();
entries.add(keyEntry);
mKeyList = entries;

View File

@@ -57,7 +57,7 @@ public class EmailKeyHelper {
// Put them in a list and import
ArrayList<ParcelableKeyRing> 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;