From 5d2c81d715cf1fd9ff23a8d1aa43fcfb58f7d099 Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Thu, 5 Mar 2015 13:13:43 +0100 Subject: make linked identity list homogeneous --- .../keychain/pgp/linked/LinkedCookieResource.java | 4 - .../keychain/pgp/linked/LinkedIdentity.java | 18 ++++ .../keychain/pgp/linked/LinkedResource.java | 17 ++- .../keychain/pgp/linked/RawLinkedIdentity.java | 16 +++ .../keychain/pgp/linked/resources/DnsResource.java | 17 +++ .../pgp/linked/resources/GenericHttpsResource.java | 17 +++ .../pgp/linked/resources/TwitterResource.java | 20 ++++ .../pgp/linked/resources/UnknownResource.java | 21 ---- .../keychain/ui/ViewKeyFragment.java | 7 +- .../keychain/ui/adapter/LinkedIdsAdapter.java | 119 ++++++++------------- .../src/main/res/layout/linked_id_item.xml | 63 +++++++++++ .../src/main/res/layout/linked_id_item_dns.xml | 63 ----------- .../src/main/res/layout/linked_id_item_unknown.xml | 4 +- 13 files changed, 215 insertions(+), 171 deletions(-) delete mode 100644 OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/UnknownResource.java create mode 100644 OpenKeychain/src/main/res/layout/linked_id_item.xml delete mode 100644 OpenKeychain/src/main/res/layout/linked_id_item_dns.xml (limited to 'OpenKeychain/src') diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedCookieResource.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedCookieResource.java index b21f482b7..4b01d8135 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedCookieResource.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedCookieResource.java @@ -6,18 +6,14 @@ import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.operations.results.LinkedVerifyResult; import org.sufficientlysecure.keychain.operations.results.OperationResult.LogType; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; -import org.sufficientlysecure.keychain.pgp.linked.resources.GenericHttpsResource; -import org.sufficientlysecure.keychain.pgp.linked.resources.UnknownResource; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; import org.sufficientlysecure.keychain.util.Log; import java.net.URI; import java.util.HashMap; -import java.util.HashSet; import java.util.Map.Entry; import java.util.Set; import java.util.regex.Matcher; -import java.util.regex.Pattern; public abstract class LinkedCookieResource extends LinkedResource { diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedIdentity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedIdentity.java index f06a23681..35813b8b3 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedIdentity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedIdentity.java @@ -3,6 +3,7 @@ package org.sufficientlysecure.keychain.pgp.linked; import org.spongycastle.bcpg.UserAttributeSubpacket; import org.spongycastle.util.Strings; import org.sufficientlysecure.keychain.Constants; +import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.pgp.WrappedUserAttribute; import org.sufficientlysecure.keychain.util.Log; @@ -11,6 +12,10 @@ import java.net.URI; import java.nio.ByteBuffer; import java.util.Arrays; +import android.content.Context; +import android.support.annotation.DrawableRes; + + public class LinkedIdentity extends RawLinkedIdentity { public final LinkedResource mResource; @@ -72,4 +77,17 @@ public class LinkedIdentity extends RawLinkedIdentity { return new RawLinkedIdentity(nonce, res.toUri()); } + + public @DrawableRes int getDisplayIcon() { + return mResource.getDisplayIcon(); + } + + public String getDisplayTitle(Context context) { + return mResource.getDisplayTitle(context); + } + + public String getDisplayComment(Context context) { + return mResource.getDisplayComment(context); + } + } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedResource.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedResource.java index 59ffbfc45..28f40f0d7 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedResource.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/LinkedResource.java @@ -3,7 +3,7 @@ package org.sufficientlysecure.keychain.pgp.linked; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.pgp.linked.resources.DnsResource; import org.sufficientlysecure.keychain.pgp.linked.resources.GenericHttpsResource; -import org.sufficientlysecure.keychain.pgp.linked.resources.UnknownResource; +import org.sufficientlysecure.keychain.pgp.linked.resources.TwitterResource; import org.sufficientlysecure.keychain.util.Log; import java.net.URI; @@ -12,6 +12,9 @@ import java.util.HashSet; import java.util.Set; import java.util.regex.Pattern; +import android.content.Context; +import android.support.annotation.DrawableRes; + public abstract class LinkedResource { protected final URI mSubUri; @@ -58,8 +61,8 @@ public abstract class LinkedResource { String[] pieces = specific.split("@", 2); URI subUri = URI.create(pieces[1]); - Set flags = new HashSet(); - HashMap params = new HashMap(); + Set flags = new HashSet<>(); + HashMap params = new HashMap<>(); if (!pieces[0].isEmpty()) { String[] rawParams = pieces[0].split(";"); for (String param : rawParams) { @@ -90,9 +93,17 @@ public abstract class LinkedResource { if (res != null) { return res; } + res = TwitterResource.create(flags, params, subUri); + if (res != null) { + return res; + } return null; } + public abstract @DrawableRes int getDisplayIcon(); + public abstract String getDisplayTitle(Context context); + public abstract String getDisplayComment(Context context); + } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/RawLinkedIdentity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/RawLinkedIdentity.java index bfde3c3b9..0de55ac38 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/RawLinkedIdentity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/RawLinkedIdentity.java @@ -1,11 +1,15 @@ package org.sufficientlysecure.keychain.pgp.linked; import org.spongycastle.util.Strings; +import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.pgp.WrappedUserAttribute; import java.net.URI; import java.nio.ByteBuffer; +import android.content.Context; +import android.support.annotation.DrawableRes; + /** The RawLinkedIdentity contains raw parsed data from a Linked Identity subpacket. */ public class RawLinkedIdentity { @@ -42,4 +46,16 @@ public class RawLinkedIdentity { return 1234567; } + public @DrawableRes int getDisplayIcon() { + return R.drawable.ic_warning_grey_24dp; + } + + public String getDisplayTitle(Context context) { + return "unknown"; + } + + public String getDisplayComment(Context context) { + return null; + } + } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/DnsResource.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/DnsResource.java index d5b8a0345..8f16aa24d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/DnsResource.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/DnsResource.java @@ -1,7 +1,9 @@ package org.sufficientlysecure.keychain.pgp.linked.resources; import android.content.Context; +import android.support.annotation.DrawableRes; +import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.pgp.linked.LinkedCookieResource; import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils; @@ -100,4 +102,19 @@ public class DnsResource extends LinkedCookieResource { protected Matcher matchResource(OperationLog log, int indent, String res) { return magicPattern.matcher(res); } + + @Override + public @DrawableRes int getDisplayIcon() { + return R.drawable.dns; + } + + @Override + public String getDisplayTitle(Context context) { + return "dns"; + } + + @Override + public String getDisplayComment(Context context) { + return null; + } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/GenericHttpsResource.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/GenericHttpsResource.java index ba94bae75..7d4a38fe4 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/GenericHttpsResource.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/GenericHttpsResource.java @@ -1,6 +1,7 @@ package org.sufficientlysecure.keychain.pgp.linked.resources; import android.content.Context; +import android.support.annotation.DrawableRes; import com.textuality.keybase.lib.Search; @@ -100,4 +101,20 @@ public class GenericHttpsResource extends LinkedCookieResource { return new GenericHttpsResource(flags, params, uri); } + @Override + public @DrawableRes + int getDisplayIcon() { + return R.drawable.ssl_lock; + } + + @Override + public String getDisplayTitle(Context context) { + return "https"; + } + + @Override + public String getDisplayComment(Context context) { + return null; + } + } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/TwitterResource.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/TwitterResource.java index f6ec4f97a..3553ce740 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/TwitterResource.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/TwitterResource.java @@ -1,6 +1,7 @@ package org.sufficientlysecure.keychain.pgp.linked.resources; import android.content.Context; +import android.support.annotation.DrawableRes; import android.util.Base64; import com.textuality.keybase.lib.JWalk; @@ -16,6 +17,7 @@ import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.params.BasicHttpParams; import org.json.JSONException; import org.json.JSONObject; +import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; import org.sufficientlysecure.keychain.pgp.linked.LinkedCookieResource; @@ -121,4 +123,22 @@ public class TwitterResource extends LinkedCookieResource { return getTwitterStream("Valodim"); } + @Override + public @DrawableRes int getDisplayIcon() { + return R.drawable.twitter; + } + + @Override + public String getDisplayTitle(Context context) { + return "twitter"; + } + + @Override + public String getDisplayComment(Context context) { + return null; + } + + public static LinkedCookieResource create(Set flags, HashMap params, URI subUri) { + return null; + } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/UnknownResource.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/UnknownResource.java deleted file mode 100644 index f29ab5b39..000000000 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/pgp/linked/resources/UnknownResource.java +++ /dev/null @@ -1,21 +0,0 @@ -package org.sufficientlysecure.keychain.pgp.linked.resources; - -import org.sufficientlysecure.keychain.operations.results.OperationResult.OperationLog; -import org.sufficientlysecure.keychain.pgp.linked.LinkedCookieResource; - -import java.net.URI; -import java.util.HashMap; -import java.util.Set; - -public class UnknownResource extends LinkedCookieResource { - - public UnknownResource(Set flags, HashMap params, URI uri) { - super(flags, params, uri); - } - - @Override - protected String fetchResource(OperationLog log, int indent) { - return null; - } - -} diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java index 20386b372..302bd6be4 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java @@ -89,8 +89,6 @@ public class ViewKeyFragment extends LoaderFragment implements mLinkedIdsCard = (CardView) view.findViewById(R.id.card_linked_ids); mLinkedIds = (ListView) view.findViewById(R.id.view_key_linked_ids); - mLinkedIdsAdapter = new LinkedIdsAdapter(getActivity(), null, 0); - mLinkedIds.setAdapter(mLinkedIdsAdapter); mUserIds.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override @@ -171,7 +169,6 @@ public class ViewKeyFragment extends LoaderFragment implements Log.i(Constants.TAG, "mDataUri: " + mDataUri); getLoaderManager().initLoader(LOADER_ID_UNIFIED, null, this); - getLoaderManager().initLoader(LOADER_ID_LINKED_IDS, null, this); } public Loader onCreateLoader(int id, Bundle args) { @@ -211,6 +208,10 @@ public class ViewKeyFragment extends LoaderFragment implements mUserIds.setAdapter(mUserIdsAdapter); getLoaderManager().initLoader(LOADER_ID_USER_IDS, null, this); + mLinkedIdsAdapter = new LinkedIdsAdapter(getActivity(), null, 0, !mIsSecret); + mLinkedIds.setAdapter(mLinkedIdsAdapter); + getLoaderManager().initLoader(LOADER_ID_LINKED_IDS, null, this); + break; } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/LinkedIdsAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/LinkedIdsAdapter.java index 329b95ebc..031972918 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/LinkedIdsAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/LinkedIdsAdapter.java @@ -34,9 +34,7 @@ import android.widget.TextView; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.pgp.linked.LinkedIdentity; -import org.sufficientlysecure.keychain.pgp.linked.LinkedResource; import org.sufficientlysecure.keychain.pgp.linked.RawLinkedIdentity; -import org.sufficientlysecure.keychain.pgp.linked.resources.DnsResource; import org.sufficientlysecure.keychain.provider.KeychainContract.Certs; import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets; import org.sufficientlysecure.keychain.ui.linked.LinkedIdViewFragment; @@ -48,59 +46,45 @@ import java.util.WeakHashMap; public class LinkedIdsAdapter extends UserAttributesAdapter { + private final boolean mShowCertification; protected LayoutInflater mInflater; WeakHashMap mLinkedIdentityCache = new WeakHashMap<>(); - public LinkedIdsAdapter(Context context, Cursor c, int flags) { + public LinkedIdsAdapter(Context context, Cursor c, int flags, boolean showCertification) { super(context, c, flags); mInflater = LayoutInflater.from(context); + mShowCertification = showCertification; } @Override public void bindView(View view, Context context, Cursor cursor) { - RawLinkedIdentity id = getItem(cursor.getPosition()); ViewHolder holder = (ViewHolder) view.getTag(); - int isVerified = cursor.getInt(INDEX_VERIFIED); - switch (isVerified) { - case Certs.VERIFIED_SECRET: - KeyFormattingUtils.setStatusImage(mContext, holder.vVerified, - null, State.VERIFIED, KeyFormattingUtils.DEFAULT_COLOR); - break; - case Certs.VERIFIED_SELF: - KeyFormattingUtils.setStatusImage(mContext, holder.vVerified, - null, State.UNVERIFIED, KeyFormattingUtils.DEFAULT_COLOR); - break; - default: - KeyFormattingUtils.setStatusImage(mContext, holder.vVerified, - null, State.INVALID, KeyFormattingUtils.DEFAULT_COLOR); - break; - } - - if (holder instanceof ViewHolderNonRaw) { - ((ViewHolderNonRaw) holder).setData(mContext, (LinkedIdentity) id); - } - - } - - @Override - public int getItemViewType(int position) { - RawLinkedIdentity id = getItem(position); - - if (id instanceof LinkedIdentity) { - LinkedResource res = ((LinkedIdentity) id).mResource; - if (res instanceof DnsResource) { - return 1; + if (mShowCertification) { + holder.vVerified.setVisibility(View.VISIBLE); + int isVerified = cursor.getInt(INDEX_VERIFIED); + switch (isVerified) { + case Certs.VERIFIED_SECRET: + KeyFormattingUtils.setStatusImage(mContext, holder.vVerified, + null, State.VERIFIED, KeyFormattingUtils.DEFAULT_COLOR); + break; + case Certs.VERIFIED_SELF: + KeyFormattingUtils.setStatusImage(mContext, holder.vVerified, + null, State.UNVERIFIED, KeyFormattingUtils.DEFAULT_COLOR); + break; + default: + KeyFormattingUtils.setStatusImage(mContext, holder.vVerified, + null, State.INVALID, KeyFormattingUtils.DEFAULT_COLOR); + break; } + } else { + holder.vVerified.setVisibility(View.GONE); } - return 0; - } + RawLinkedIdentity id = getItem(cursor.getPosition()); + holder.setData(mContext, id); - @Override - public int getViewTypeCount() { - return 2; } @Override @@ -126,23 +110,10 @@ public class LinkedIdsAdapter extends UserAttributesAdapter { @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { - int type = getItemViewType(cursor.getPosition()); - switch(type) { - case 0: { - View v = mInflater.inflate(R.layout.linked_id_item_unknown, null); - ViewHolder holder = new ViewHolder(v); - v.setTag(holder); - return v; - } - case 1: { - View v = mInflater.inflate(R.layout.linked_id_item_dns, null); - ViewHolder holder = new ViewHolderDns(v); - v.setTag(holder); - return v; - } - default: - throw new AssertionError("all cases must be covered in LinkedIdsAdapter.newView!"); - } + View v = mInflater.inflate(R.layout.linked_id_item, null); + ViewHolder holder = new ViewHolder(v); + v.setTag(holder); + return v; } // don't show revoked user ids, irrelevant for average users @@ -162,35 +133,32 @@ public class LinkedIdsAdapter extends UserAttributesAdapter { static class ViewHolder { ImageView vVerified; + ImageView vIcon; + TextView vTitle; + TextView vComment; ViewHolder(View view) { vVerified = (ImageView) view.findViewById(R.id.user_id_item_certified); - } - } - - static abstract class ViewHolderNonRaw extends ViewHolder { - ViewHolderNonRaw(View view) { - super(view); + vIcon = (ImageView) view.findViewById(R.id.linked_id_type_icon); + vTitle = (TextView) view.findViewById(R.id.linked_id_title); + vComment = (TextView) view.findViewById(R.id.linked_id_comment); } - abstract void setData(Context context, LinkedIdentity id); - } + void setData(Context context, RawLinkedIdentity id) { - static class ViewHolderDns extends ViewHolderNonRaw { - TextView vFqdn; + vTitle.setText(id.getDisplayTitle(context)); - ViewHolderDns(View view) { - super(view); + String comment = id.getDisplayComment(context); + if (comment != null) { + vComment.setVisibility(View.VISIBLE); + vComment.setText(comment); + } else { + vComment.setVisibility(View.GONE); + } - vFqdn = (TextView) view.findViewById(R.id.linked_id_dns_fqdn); - } + vIcon.setImageResource(id.getDisplayIcon()); - @Override - void setData(Context context, LinkedIdentity id) { - DnsResource res = (DnsResource) id.mResource; - vFqdn.setText(res.getFqdn()); } - } @Override @@ -198,4 +166,5 @@ public class LinkedIdsAdapter extends UserAttributesAdapter { mLinkedIdentityCache.clear(); super.notifyDataSetChanged(); } + } diff --git a/OpenKeychain/src/main/res/layout/linked_id_item.xml b/OpenKeychain/src/main/res/layout/linked_id_item.xml new file mode 100644 index 000000000..52e7fceb5 --- /dev/null +++ b/OpenKeychain/src/main/res/layout/linked_id_item.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/OpenKeychain/src/main/res/layout/linked_id_item_dns.xml b/OpenKeychain/src/main/res/layout/linked_id_item_dns.xml deleted file mode 100644 index 449947b4b..000000000 --- a/OpenKeychain/src/main/res/layout/linked_id_item_dns.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/OpenKeychain/src/main/res/layout/linked_id_item_unknown.xml b/OpenKeychain/src/main/res/layout/linked_id_item_unknown.xml index 269365eef..d80b814ca 100644 --- a/OpenKeychain/src/main/res/layout/linked_id_item_unknown.xml +++ b/OpenKeychain/src/main/res/layout/linked_id_item_unknown.xml @@ -37,8 +37,8 @@ android:id="@+id/user_id_item_certified_layout" android:layout_width="22dp" android:layout_height="wrap_content" - android:layout_marginRight="8dp" - android:layout_marginEnd="8dp" + android:layout_marginRight="12dp" + android:layout_marginEnd="12dp" android:layout_gravity="center_vertical" android:orientation="vertical"> -- cgit v1.2.3