aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysList.java15
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java18
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