From 3015a68a7261258456c6df1380f71d7eafaa4a0b Mon Sep 17 00:00:00 2001 From: Vincent Breitmoser Date: Sat, 4 Mar 2017 12:47:14 +0100 Subject: [PATCH] show trust id activity button only if available --- .../keychain/ui/adapter/TrustIdsAdapter.java | 39 ++++++++++++++----- .../src/main/res/layout/key_list_item.xml | 1 - .../res/layout/view_key_trust_id_item.xml | 2 + 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/TrustIdsAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/TrustIdsAdapter.java index f5560ac15..5b25538c6 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/TrustIdsAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/TrustIdsAdapter.java @@ -19,6 +19,7 @@ package org.sufficientlysecure.keychain.ui.adapter; import java.util.HashMap; +import java.util.List; import android.app.Activity; import android.content.ActivityNotFoundException; @@ -26,6 +27,7 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.database.Cursor; import android.graphics.drawable.Drawable; import android.net.Uri; @@ -74,26 +76,43 @@ public class TrustIdsAdapter extends CursorAdapter { Drawable drawable = getDrawableForPackageName(packageName); vTrustId.setText(trustId); vAppIcon.setImageDrawable(drawable); - vActionIcon.setOnClickListener(new OnClickListener() { - @Override - public void onClick(View view) { - launchTrustIdActivity(packageName, trustId, context); - } - }); + + if (isTrustIdActivityAvailable(packageName, trustId, context)) { + vActionIcon.setVisibility(View.VISIBLE); + vActionIcon.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View view) { + launchTrustIdActivity(packageName, trustId, context); + } + }); + } else { + vActionIcon.setVisibility(View.GONE); + } } private void launchTrustIdActivity(String packageName, String trustId, Context context) { try { - Intent intent = new Intent(); - intent.setAction(packageName + ".TRUST_ID_ACTION"); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.putExtra(OpenPgpApi.EXTRA_TRUST_IDENTITY, trustId); + Intent intent = createTrustIdActivityIntent(packageName, trustId); context.startActivity(intent); } catch (ActivityNotFoundException e) { // can't help it } } + private Intent createTrustIdActivityIntent(String packageName, String trustId) { + Intent intent = new Intent(); + intent.setAction(packageName + ".TRUST_ID_ACTION"); + intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); + intent.putExtra(OpenPgpApi.EXTRA_TRUST_IDENTITY, trustId); + return intent; + } + + private boolean isTrustIdActivityAvailable(String packageName, String trustId, Context context) { + Intent intent = createTrustIdActivityIntent(packageName, trustId); + List resolveInfos = context.getPackageManager().queryIntentActivities(intent, 0); + return resolveInfos != null && !resolveInfos.isEmpty(); + } + private Drawable getDrawableForPackageName(String packageName) { if (appIconCache.containsKey(packageName)) { return appIconCache.get(packageName); diff --git a/OpenKeychain/src/main/res/layout/key_list_item.xml b/OpenKeychain/src/main/res/layout/key_list_item.xml index a49a42f9d..d106a29e5 100644 --- a/OpenKeychain/src/main/res/layout/key_list_item.xml +++ b/OpenKeychain/src/main/res/layout/key_list_item.xml @@ -2,7 +2,6 @@