diff options
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport')
2 files changed, 22 insertions, 11 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysList.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysList.java index 02cb502d0..03439228b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysList.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysList.java @@ -70,6 +70,8 @@ public class ImportKeysList extends ArrayList<ImportKeysListEntry> { modified = true; } + // keep track if this key result is from a HKP keyserver + boolean incomingFromHkpServer = true; // we’re going to want to try to fetch the key from everywhere we found it, so remember // all the origins for (String origin : incoming.getOrigins()) { @@ -78,13 +80,24 @@ public class ImportKeysList extends ArrayList<ImportKeysListEntry> { // to work properly, Keybase-sourced entries need to pass along the extra if (KeybaseKeyserver.ORIGIN.equals(origin)) { existing.setExtraData(incoming.getExtraData()); + // one of the origins is not a HKP keyserver + incomingFromHkpServer = false; } } + ArrayList<String> incomingIDs = incoming.getUserIds(); ArrayList<String> existingIDs = existing.getUserIds(); for (String incomingID : incomingIDs) { if (!existingIDs.contains(incomingID)) { - existingIDs.add(incomingID); + // prepend HKP server results to the start of the list, + // so that the UI (for cloud key search, which is picking the first list item) + // shows the right main email address, as mail addresses returned by HKP servers + // are preferred over keybase.io IDs + if (incomingFromHkpServer) { + existingIDs.add(0, incomingID); + } else { + existingIDs.add(incomingID); + } modified = true; } } 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 7dac8b1e0..bb86d272f 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java @@ -307,24 +307,22 @@ public class ImportKeysListEntry implements Serializable, Parcelable { public void updateMergedUserIds() { mMergedUserIds = new HashMap<>(); for (String userId : mUserIds) { - String[] userIdSplit = KeyRing.splitUserId(userId); + KeyRing.UserId userIdSplit = KeyRing.splitUserId(userId); // TODO: comment field? - // name - if (userIdSplit[0] != null) { - // email - if (userIdSplit[1] != null) { - if (!mMergedUserIds.containsKey(userIdSplit[0])) { + if (userIdSplit.name != null) { + if (userIdSplit.email != null) { + if (!mMergedUserIds.containsKey(userIdSplit.name)) { HashSet<String> emails = new HashSet<>(); - emails.add(userIdSplit[1]); - mMergedUserIds.put(userIdSplit[0], emails); + emails.add(userIdSplit.email); + mMergedUserIds.put(userIdSplit.name, emails); } else { - mMergedUserIds.get(userIdSplit[0]).add(userIdSplit[1]); + mMergedUserIds.get(userIdSplit.name).add(userIdSplit.email); } } else { // name only - mMergedUserIds.put(userIdSplit[0], new HashSet<String>()); + mMergedUserIds.put(userIdSplit.name, new HashSet<String>()); } } else { // fallback |