From 5f8d7fa67b6a08af68d848657dd7ab4211fd6285 Mon Sep 17 00:00:00 2001 From: Andrea Torlaschi Date: Fri, 29 Jul 2016 23:59:06 +0200 Subject: [PATCH] ImportKeys: Show user ids from downloaded key --- .../keyimport/ImportKeysListEntry.java | 9 + .../ui/adapter/ImportKeysAdapter.java | 163 ++++++++++-------- 2 files changed, 101 insertions(+), 71 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 dd8094e42..4aa8998f1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/keyimport/ImportKeysListEntry.java @@ -333,4 +333,13 @@ public class ImportKeysListEntry implements Serializable, Parcelable { } } + public ArrayList getKeybaseUserIds() { + ArrayList keybaseUserIds = new ArrayList<>(); + for (String s : mUserIds) { + if (s.contains(":")) + keybaseUserIds.add(s); + } + return keybaseUserIds; + } + } 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 bb6cd135a..7340bb0db 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 @@ -56,6 +56,7 @@ import org.sufficientlysecure.keychain.util.ParcelableFileCache; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -69,7 +70,10 @@ public class ImportKeysAdapter extends RecyclerView.Adapter mData; - private boolean[] mDownloaded; + + private HashMap mDownloadedKeyRings; + private boolean mCurrentAnimated = true; + private int mCurrent; public ImportKeysAdapter(FragmentActivity activity, ImportKeysListener listener, boolean mNonInteractive) { this.mActivity = activity; @@ -83,13 +87,13 @@ public class ImportKeysAdapter extends RecyclerView.Adapter data) { this.mData = data; - this.mDownloaded = new boolean[data.size()]; + this.mDownloadedKeyRings = new HashMap<>(); notifyDataSetChanged(); } public void clearData() { mData = null; - mDownloaded = null; + mDownloadedKeyRings = null; notifyDataSetChanged(); } @@ -164,6 +168,8 @@ public class ImportKeysAdapter extends RecyclerView.Adapter realUserIdsPlusKeybase = entry.getKeybaseUserIds(); + CanonicalizedKeyRing keyRing = mDownloadedKeyRings.get(position); + realUserIdsPlusKeybase.addAll(keyRing.getUnorderedUserIds()); + entry.setUserIds(realUserIdsPlusKeybase); - // we want conventional gpg UserIDs first, then Keybase ”proofs” - HashMap> mergedUserIds = entry.getMergedUserIds(); - ArrayList>> sortedIds = new ArrayList>>(mergedUserIds.entrySet()); - Collections.sort(sortedIds, new java.util.Comparator>>() { - @Override - public int compare(Map.Entry> entry1, Map.Entry> entry2) { - - // sort keybase UserIds after non-Keybase - boolean e1IsKeybase = entry1.getKey().contains(":"); - boolean e2IsKeybase = entry2.getKey().contains(":"); - if (e1IsKeybase != e2IsKeybase) { - return (e1IsKeybase) ? 1 : -1; + HashMap> mergedUserIds = entry.getMergedUserIds(); + ArrayList>> sortedIds = new ArrayList<>(mergedUserIds.entrySet()); + Collections.sort(sortedIds, new Comparator>>() { + @Override + public int compare(Map.Entry> entry1, Map.Entry> entry2) { + // sort keybase UserIds after non-Keybase + boolean e1IsKeybase = entry1.getKey().contains(":"); + boolean e2IsKeybase = entry2.getKey().contains(":"); + if (e1IsKeybase != e2IsKeybase) { + return (e1IsKeybase) ? 1 : -1; + } + return entry1.getKey().compareTo(entry2.getKey()); } - return entry1.getKey().compareTo(entry2.getKey()); - } - }); + }); - for (Map.Entry> pair : sortedIds) { - String cUserId = pair.getKey(); - HashSet cEmails = pair.getValue(); + for (Map.Entry> pair : sortedIds) { + String cUserId = pair.getKey(); + HashSet cEmails = pair.getValue(); - LayoutInflater inflater = LayoutInflater.from(mActivity); + LayoutInflater inflater = LayoutInflater.from(mActivity); - TextView uidView = (TextView) inflater.inflate( - R.layout.import_keys_list_entry_user_id, null); - uidView.setText(highlighter.highlight(cUserId)); - uidView.setPadding(0, 0, FormattingUtils.dpToPx(mActivity, 8), 0); - - if (entry.isRevoked() || entry.isExpired()) { - uidView.setTextColor(mActivity.getResources().getColor(R.color.key_flag_gray)); - } else { - uidView.setTextColor(FormattingUtils.getColorFromAttr(mActivity, R.attr.colorText)); - } - - b.userIdsList.addView(uidView); - - for (String email : cEmails) { - TextView emailView = (TextView) inflater.inflate( + TextView uidView = (TextView) inflater.inflate( R.layout.import_keys_list_entry_user_id, null); - emailView.setPadding( - FormattingUtils.dpToPx(mActivity, 16), 0, - FormattingUtils.dpToPx(mActivity, 8), 0); - emailView.setText(highlighter.highlight(email)); + uidView.setText(highlighter.highlight(cUserId)); + uidView.setPadding(0, 0, FormattingUtils.dpToPx(mActivity, 8), 0); if (entry.isRevoked() || entry.isExpired()) { - emailView.setTextColor(mActivity.getResources().getColor(R.color.key_flag_gray)); + uidView.setTextColor(mActivity.getResources().getColor(R.color.key_flag_gray)); } else { - emailView.setTextColor(FormattingUtils.getColorFromAttr(mActivity, R.attr.colorText)); + uidView.setTextColor(FormattingUtils.getColorFromAttr(mActivity, R.attr.colorText)); } - b.userIdsList.addView(emailView); + b.userIdsList.addView(uidView); + + for (String email : cEmails) { + TextView emailView = (TextView) inflater.inflate( + R.layout.import_keys_list_entry_user_id, null); + emailView.setPadding( + FormattingUtils.dpToPx(mActivity, 16), 0, + FormattingUtils.dpToPx(mActivity, 8), 0); + emailView.setText(highlighter.highlight(email)); + + if (entry.isRevoked() || entry.isExpired()) { + emailView.setTextColor(mActivity.getResources().getColor(R.color.key_flag_gray)); + } else { + emailView.setTextColor(FormattingUtils.getColorFromAttr(mActivity, R.attr.colorText)); + } + + b.userIdsList.addView(emailView); + } } } } @@ -268,7 +279,15 @@ public class ImportKeysAdapter extends RecyclerView.Adapter keysList = null; String keyserver = null; @@ -296,15 +313,18 @@ public class ImportKeysAdapter extends RecyclerView.Adapter keys = new ArrayList<>(); - keys.add(keyRing); - - keysList = keys; + keysList = new ArrayList<>(); + keysList.add(keyRing); keyserver = ((CloudLoaderState) mLoaderState).mCloudPrefs.keyserver; } - ImportKeyringParcel keyringParcel = new ImportKeyringParcel(keysList, keyserver, skipSave); - return keyringParcel; + return new ImportKeyringParcel(keysList, keyserver, skipSave); + } + + public void removeKey() { + mCurrentAnimated = false; + mDownloadedKeyRings.remove(mCurrent); + notifyItemChanged(mCurrent); } @Override @@ -313,12 +333,13 @@ public class ImportKeysAdapter extends RecyclerView.Adapter canKeyRings = result.mCanonicalizedKeyRings; - int retrievedNumber = canKeyRings.size(); - - if (retrievedNumber == 1) { + if (canKeyRings.size() == 1) { CanonicalizedKeyRing keyRing = canKeyRings.get(0); Log.e(Constants.TAG, "Key ID: " + keyRing.getMasterKeyId() + "| isRev: " + keyRing.isRevoked() + "| isExp: " + keyRing.isExpired()); + mCurrentAnimated = false; + mDownloadedKeyRings.put(mCurrent, keyRing); + notifyItemChanged(mCurrent); } else { throw new RuntimeException("getKey retrieved more than one key."); }