From efa651284e013319e742b4e7a8af8b32996d5176 Mon Sep 17 00:00:00 2001 From: Andrea Torlaschi Date: Thu, 4 Aug 2016 15:29:33 +0200 Subject: [PATCH] ImportKeys: Use data binding for extra informations about the key and refactoring --- .../ui/adapter/ImportKeysAdapter.java | 3 - .../ImportKeysBindings.java} | 45 ++--------- .../ui/bindings/ImportKeysBindingsUtils.java | 32 ++++++++ .../ui/bindings/ImportKeysExtraBindings.java | 79 +++++++++++++++++++ .../keychain/ui/widget/ImportUserIdsView.java | 69 ---------------- .../main/res/layout/import_keys_list_item.xml | 18 ++--- .../layout/import_keys_list_item_extra.xml | 36 +++++++++ 7 files changed, 159 insertions(+), 123 deletions(-) rename OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/{adapter/ImportKeysAdapterBinding.java => bindings/ImportKeysBindings.java} (56%) create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/bindings/ImportKeysBindingsUtils.java create mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/bindings/ImportKeysExtraBindings.java delete mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/ImportUserIdsView.java create mode 100644 OpenKeychain/src/main/res/layout/import_keys_list_item_extra.xml 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 3a07404ac..999ec61ed 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 @@ -166,9 +166,6 @@ public class ImportKeysAdapter extends RecyclerView.Adapter highlighterCache = new LruCache<>(1); - - private static Highlighter getHighlighter(Context context, String query) { - Highlighter highlighter = highlighterCache.get(query); - if (highlighter == null) { - highlighter = new Highlighter(context, query); - highlighterCache.put(query, highlighter); - } - - return highlighter; - } - } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/bindings/ImportKeysBindingsUtils.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/bindings/ImportKeysBindingsUtils.java new file mode 100644 index 000000000..7ee8089f3 --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/bindings/ImportKeysBindingsUtils.java @@ -0,0 +1,32 @@ +package org.sufficientlysecure.keychain.ui.bindings; + +import android.content.Context; + +import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.ui.util.FormattingUtils; +import org.sufficientlysecure.keychain.ui.util.Highlighter; +import org.sufficientlysecure.keychain.util.LruCache; + +public class ImportKeysBindingsUtils { + + private static LruCache highlighterCache = new LruCache<>(1); + + public static Highlighter getHighlighter(Context context, String query) { + Highlighter highlighter = highlighterCache.get(query); + if (highlighter == null) { + highlighter = new Highlighter(context, query); + highlighterCache.put(query, highlighter); + } + + return highlighter; + } + + public static int getColor(Context context, boolean revokedOrExpired) { + if (revokedOrExpired) { + return context.getResources().getColor(R.color.key_flag_gray); + } else { + return FormattingUtils.getColorFromAttr(context, R.attr.colorText); + } + } + +} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/bindings/ImportKeysExtraBindings.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/bindings/ImportKeysExtraBindings.java new file mode 100644 index 000000000..feb4c6bab --- /dev/null +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/bindings/ImportKeysExtraBindings.java @@ -0,0 +1,79 @@ +package org.sufficientlysecure.keychain.ui.bindings; + +import android.content.Context; +import android.databinding.BindingAdapter; +import android.view.LayoutInflater; +import android.widget.LinearLayout; +import android.widget.TextView; + +import org.sufficientlysecure.keychain.R; +import org.sufficientlysecure.keychain.ui.util.FormattingUtils; +import org.sufficientlysecure.keychain.ui.util.Highlighter; +import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Map; + +public class ImportKeysExtraBindings { + + @BindingAdapter({"app:keyId", "app:keyRevokedOrExpired"}) + public static void setKeyId(TextView textView, String keyId, boolean revokedOrExpired) { + Context context = textView.getContext(); + + if (keyId == null) + keyId = ""; + + textView.setText(KeyFormattingUtils.beautifyKeyIdWithPrefix(keyId)); + textView.setTextColor(ImportKeysBindingsUtils.getColor(context, revokedOrExpired)); + } + + @BindingAdapter({"app:keyUserIds", "app:keyRevokedOrExpired", "app:query"}) + public static void setUserIds(LinearLayout linearLayout, ArrayList userIds, + boolean revokedOrExpired, String query) { + + linearLayout.removeAllViews(); + + if (userIds != null) { + Context context = linearLayout.getContext(); + Highlighter highlighter = ImportKeysBindingsUtils.getHighlighter(context, query); + + ArrayList>> uIds = userIds; + for (Map.Entry> pair : uIds) { + String name = pair.getKey(); + HashSet emails = pair.getValue(); + + LayoutInflater inflater = LayoutInflater.from(context); + + TextView uidView = (TextView) inflater.inflate( + R.layout.import_keys_list_entry_user_id, null); + uidView.setText(highlighter.highlight(name)); + uidView.setPadding(0, 0, FormattingUtils.dpToPx(context, 8), 0); + + if (revokedOrExpired) { + uidView.setTextColor(context.getResources().getColor(R.color.key_flag_gray)); + } else { + uidView.setTextColor(FormattingUtils.getColorFromAttr(context, R.attr.colorText)); + } + linearLayout.addView(uidView); + + for (String email : emails) { + TextView emailView = (TextView) inflater.inflate( + R.layout.import_keys_list_entry_user_id, null); + emailView.setPadding( + FormattingUtils.dpToPx(context, 16), 0, + FormattingUtils.dpToPx(context, 8), 0); + emailView.setText(highlighter.highlight(email)); + + if (revokedOrExpired) { + emailView.setTextColor(context.getResources().getColor(R.color.key_flag_gray)); + } else { + emailView.setTextColor(FormattingUtils.getColorFromAttr(context, R.attr.colorText)); + } + linearLayout.addView(emailView); + } + } + } + } + +} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/ImportUserIdsView.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/ImportUserIdsView.java deleted file mode 100644 index e83f1986c..000000000 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/ImportUserIdsView.java +++ /dev/null @@ -1,69 +0,0 @@ -package org.sufficientlysecure.keychain.ui.widget; - -import android.content.Context; -import android.util.AttributeSet; -import android.view.LayoutInflater; -import android.widget.LinearLayout; -import android.widget.TextView; - -import org.sufficientlysecure.keychain.R; -import org.sufficientlysecure.keychain.keyimport.ImportKeysListEntry; -import org.sufficientlysecure.keychain.ui.util.FormattingUtils; -import org.sufficientlysecure.keychain.ui.util.Highlighter; - -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Map; - -public class ImportUserIdsView extends LinearLayout { - - public ImportUserIdsView(Context context, AttributeSet attrs) { - super(context, attrs); - - setOrientation(VERTICAL); - } - - public void setEntry(ImportKeysListEntry entry) { - removeAllViews(); - - Context context = getContext(); - Highlighter highlighter = new Highlighter(context, entry.getQuery()); - - // we want conventional gpg UserIDs first, then Keybase ”proofs” - ArrayList>> sortedIds = entry.getSortedUserIds(); - for (Map.Entry> pair : sortedIds) { - String cUserId = pair.getKey(); - HashSet cEmails = pair.getValue(); - - LayoutInflater inflater = LayoutInflater.from(context); - - 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(context, 8), 0); - - if (entry.isRevokedOrExpired()) { - uidView.setTextColor(context.getResources().getColor(R.color.key_flag_gray)); - } else { - uidView.setTextColor(FormattingUtils.getColorFromAttr(context, R.attr.colorText)); - } - addView(uidView); - - for (String email : cEmails) { - TextView emailView = (TextView) inflater.inflate( - R.layout.import_keys_list_entry_user_id, null); - emailView.setPadding( - FormattingUtils.dpToPx(context, 16), 0, - FormattingUtils.dpToPx(context, 8), 0); - emailView.setText(highlighter.highlight(email)); - - if (entry.isRevokedOrExpired()) { - emailView.setTextColor(context.getResources().getColor(R.color.key_flag_gray)); - } else { - emailView.setTextColor(FormattingUtils.getColorFromAttr(context, R.attr.colorText)); - } - addView(emailView); - } - } - } -} diff --git a/OpenKeychain/src/main/res/layout/import_keys_list_item.xml b/OpenKeychain/src/main/res/layout/import_keys_list_item.xml index ee2811218..654cb9fee 100644 --- a/OpenKeychain/src/main/res/layout/import_keys_list_item.xml +++ b/OpenKeychain/src/main/res/layout/import_keys_list_item.xml @@ -6,7 +6,6 @@ - @@ -67,13 +66,6 @@ app:keyUserEmail="@{entry.primaryUserId.email}" app:query="@{entry.query}" /> - - - + diff --git a/OpenKeychain/src/main/res/layout/import_keys_list_item_extra.xml b/OpenKeychain/src/main/res/layout/import_keys_list_item_extra.xml new file mode 100644 index 000000000..93c810701 --- /dev/null +++ b/OpenKeychain/src/main/res/layout/import_keys_list_item_extra.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file