From 44232afe944ecb1dad0492f30283b71f7be48bd2 Mon Sep 17 00:00:00 2001 From: mar-v-in Date: Wed, 26 Feb 2014 18:58:52 +0100 Subject: Show link to Market if no openpgp provider installed installed Issue #295 --- .../openpgp/util/OpenPgpListPreference.java | 52 ++++++++++++++++++++-- 1 file changed, 49 insertions(+), 3 deletions(-) (limited to 'OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java') diff --git a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java index 034186a3a..6a9d85b5f 100644 --- a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java @@ -23,6 +23,7 @@ import android.content.Intent; import android.content.pm.ResolveInfo; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.preference.DialogPreference; import android.util.AttributeSet; import android.view.View; @@ -30,17 +31,21 @@ import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListAdapter; import android.widget.TextView; +import org.sufficientlysecure.keychain.api.R; import java.util.ArrayList; import java.util.List; -import org.sufficientlysecure.keychain.api.R; - /** * Does not extend ListPreference, but is very similar to it! * http://grepcode.com/file_/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/android/preference/ListPreference.java/?v=source */ public class OpenPgpListPreference extends DialogPreference { + private static final String OPENKEYCHAIN_PACKAGE = "org.sufficientlysecure.keychain"; + private static final String MARKET_INTENT_URI_BASE = "market://details?id=%s"; + private static final Intent MARKET_INTENT = new Intent(Intent.ACTION_VIEW, Uri.parse( + String.format(MARKET_INTENT_URI_BASE, OPENKEYCHAIN_PACKAGE))); + private ArrayList mProviderList = new ArrayList(); private String mSelectedPackage; @@ -84,6 +89,26 @@ public class OpenPgpListPreference extends DialogPreference { } } + + // add install links if empty + if (mProviderList.isEmpty()) { + resInfo = getContext().getPackageManager().queryIntentActivities + (MARKET_INTENT, 0); + if (!resInfo.isEmpty()) { + for (ResolveInfo resolveInfo : resInfo) { + Intent marketIntent = new Intent(MARKET_INTENT); + intent.setPackage(resolveInfo.activityInfo.packageName); + Drawable icon = resolveInfo.activityInfo.loadIcon(getContext().getPackageManager()); + String marketName = String.valueOf(resolveInfo.activityInfo.applicationInfo + .loadLabel(getContext().getPackageManager())); + String simpleName = String.format(getContext().getString(R.string + .install_via), marketName); + mProviderList.add(new OpenPgpProviderEntry(OPENKEYCHAIN_PACKAGE, simpleName, + icon, marketIntent)); + } + } + } + // add "none"-entry mProviderList.add(0, new OpenPgpProviderEntry("", getContext().getString(R.string.openpgp_list_preference_none), @@ -114,7 +139,22 @@ public class OpenPgpListPreference extends DialogPreference { @Override public void onClick(DialogInterface dialog, int which) { - mSelectedPackage = mProviderList.get(which).packageName; + OpenPgpProviderEntry entry = mProviderList.get(which); + + if (entry.intent != null) { + /* + * Intents are called as activity + * + * Current approach is to assume the user installed the app. + * If he does not, the selected package is not valid. + * + * However applications should always consider this could happen, + * as the user might remove the currently used OpenPGP app. + */ + getContext().startActivity(entry.intent); + } + + mSelectedPackage = entry.packageName; /* * Clicking on an item simulates the positive button click, and dismisses @@ -190,6 +230,7 @@ public class OpenPgpListPreference extends DialogPreference { private String packageName; private String simpleName; private Drawable icon; + private Intent intent; public OpenPgpProviderEntry(String packageName, String simpleName, Drawable icon) { this.packageName = packageName; @@ -197,6 +238,11 @@ public class OpenPgpListPreference extends DialogPreference { this.icon = icon; } + public OpenPgpProviderEntry(String packageName, String simpleName, Drawable icon, Intent intent) { + this(packageName, simpleName, icon); + this.intent = intent; + } + @Override public String toString() { return simpleName; -- cgit v1.2.3 From b0ca33da40d80149dd9861694a910a52a3d20eb4 Mon Sep 17 00:00:00 2001 From: mar-v-in Date: Thu, 27 Feb 2014 10:55:52 +0100 Subject: Change resource name and remove unneeded if from 44232af --- .../openpgp/util/OpenPgpListPreference.java | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java') diff --git a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java index 6a9d85b5f..7aea8f9fa 100644 --- a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java @@ -94,18 +94,16 @@ public class OpenPgpListPreference extends DialogPreference { if (mProviderList.isEmpty()) { resInfo = getContext().getPackageManager().queryIntentActivities (MARKET_INTENT, 0); - if (!resInfo.isEmpty()) { - for (ResolveInfo resolveInfo : resInfo) { - Intent marketIntent = new Intent(MARKET_INTENT); - intent.setPackage(resolveInfo.activityInfo.packageName); - Drawable icon = resolveInfo.activityInfo.loadIcon(getContext().getPackageManager()); - String marketName = String.valueOf(resolveInfo.activityInfo.applicationInfo - .loadLabel(getContext().getPackageManager())); - String simpleName = String.format(getContext().getString(R.string - .install_via), marketName); - mProviderList.add(new OpenPgpProviderEntry(OPENKEYCHAIN_PACKAGE, simpleName, - icon, marketIntent)); - } + for (ResolveInfo resolveInfo : resInfo) { + Intent marketIntent = new Intent(MARKET_INTENT); + intent.setPackage(resolveInfo.activityInfo.packageName); + Drawable icon = resolveInfo.activityInfo.loadIcon(getContext().getPackageManager()); + String marketName = String.valueOf(resolveInfo.activityInfo.applicationInfo + .loadLabel(getContext().getPackageManager())); + String simpleName = String.format(getContext().getString(R.string + .openpgp_install_openkeychain_via), marketName); + mProviderList.add(new OpenPgpProviderEntry(OPENKEYCHAIN_PACKAGE, simpleName, + icon, marketIntent)); } } -- cgit v1.2.3 From a2544fb2b0aa4ee47ab4f1c6a62b81892d789331 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 27 Feb 2014 21:43:52 +0100 Subject: Fix binding of install intents to package --- .../src/org/openintents/openpgp/util/OpenPgpListPreference.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java') diff --git a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java index 7aea8f9fa..456bc96a9 100644 --- a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java @@ -96,7 +96,7 @@ public class OpenPgpListPreference extends DialogPreference { (MARKET_INTENT, 0); for (ResolveInfo resolveInfo : resInfo) { Intent marketIntent = new Intent(MARKET_INTENT); - intent.setPackage(resolveInfo.activityInfo.packageName); + marketIntent.setPackage(resolveInfo.activityInfo.packageName); Drawable icon = resolveInfo.activityInfo.loadIcon(getContext().getPackageManager()); String marketName = String.valueOf(resolveInfo.activityInfo.applicationInfo .loadLabel(getContext().getPackageManager())); -- cgit v1.2.3 From 4a13f70a88d64591eb878ea2a9ff70b062c7cc52 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sun, 2 Mar 2014 01:20:06 +0100 Subject: API changes --- .../src/org/openintents/openpgp/util/OpenPgpListPreference.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java') diff --git a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java index 456bc96a9..5920f7080 100644 --- a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java @@ -73,7 +73,7 @@ public class OpenPgpListPreference extends DialogPreference { // get providers mProviderList.clear(); - Intent intent = new Intent(OpenPgpConstants.SERVICE_INTENT); + Intent intent = new Intent(OpenPgpApi.SERVICE_INTENT); List resInfo = getContext().getPackageManager().queryIntentServices(intent, 0); if (!resInfo.isEmpty()) { for (ResolveInfo resolveInfo : resInfo) { @@ -89,7 +89,6 @@ public class OpenPgpListPreference extends DialogPreference { } } - // add install links if empty if (mProviderList.isEmpty()) { resInfo = getContext().getPackageManager().queryIntentActivities -- cgit v1.2.3 From 8c6017e8905af7744cb44636908abc67d4b989b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Sun, 2 Mar 2014 02:17:20 +0100 Subject: fixes for OpenPgpListPreference --- .../openpgp/util/OpenPgpListPreference.java | 51 +++++++++++++--------- 1 file changed, 30 insertions(+), 21 deletions(-) (limited to 'OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java') diff --git a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java index 5920f7080..ecc2b8ec1 100644 --- a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpListPreference.java @@ -46,7 +46,9 @@ public class OpenPgpListPreference extends DialogPreference { private static final Intent MARKET_INTENT = new Intent(Intent.ACTION_VIEW, Uri.parse( String.format(MARKET_INTENT_URI_BASE, OPENKEYCHAIN_PACKAGE))); - private ArrayList mProviderList = new ArrayList(); + private ArrayList mLegacyList = new ArrayList(); + private ArrayList mList = new ArrayList(); + private String mSelectedPackage; public OpenPgpListPreference(Context context, AttributeSet attrs) { @@ -64,15 +66,24 @@ public class OpenPgpListPreference extends DialogPreference { * @param simpleName * @param icon */ - public void addProvider(int position, String packageName, String simpleName, Drawable icon) { - mProviderList.add(position, new OpenPgpProviderEntry(packageName, simpleName, icon)); + public void addLegacyProvider(int position, String packageName, String simpleName, Drawable icon) { + mLegacyList.add(position, new OpenPgpProviderEntry(packageName, simpleName, icon)); } @Override protected void onPrepareDialogBuilder(Builder builder) { - - // get providers - mProviderList.clear(); + mList.clear(); + + // add "none"-entry + mList.add(0, new OpenPgpProviderEntry("", + getContext().getString(R.string.openpgp_list_preference_none), + getContext().getResources().getDrawable(R.drawable.ic_action_cancel_launchersize))); + + // add all additional (legacy) providers + mList.addAll(mLegacyList); + + // search for OpenPGP providers... + ArrayList providerList = new ArrayList(); Intent intent = new Intent(OpenPgpApi.SERVICE_INTENT); List resInfo = getContext().getPackageManager().queryIntentServices(intent, 0); if (!resInfo.isEmpty()) { @@ -85,12 +96,12 @@ public class OpenPgpListPreference extends DialogPreference { .getPackageManager())); Drawable icon = resolveInfo.serviceInfo.loadIcon(getContext().getPackageManager()); - mProviderList.add(new OpenPgpProviderEntry(packageName, simpleName, icon)); + providerList.add(new OpenPgpProviderEntry(packageName, simpleName, icon)); } } - // add install links if empty - if (mProviderList.isEmpty()) { + if (providerList.isEmpty()) { + // add install links if provider list is empty resInfo = getContext().getPackageManager().queryIntentActivities (MARKET_INTENT, 0); for (ResolveInfo resolveInfo : resInfo) { @@ -101,26 +112,24 @@ public class OpenPgpListPreference extends DialogPreference { .loadLabel(getContext().getPackageManager())); String simpleName = String.format(getContext().getString(R.string .openpgp_install_openkeychain_via), marketName); - mProviderList.add(new OpenPgpProviderEntry(OPENKEYCHAIN_PACKAGE, simpleName, + mList.add(new OpenPgpProviderEntry(OPENKEYCHAIN_PACKAGE, simpleName, icon, marketIntent)); } + } else { + // add provider + mList.addAll(providerList); } - // add "none"-entry - mProviderList.add(0, new OpenPgpProviderEntry("", - getContext().getString(R.string.openpgp_list_preference_none), - getContext().getResources().getDrawable(R.drawable.ic_action_cancel_launchersize))); - // Init ArrayAdapter with OpenPGP Providers ListAdapter adapter = new ArrayAdapter(getContext(), - android.R.layout.select_dialog_singlechoice, android.R.id.text1, mProviderList) { + android.R.layout.select_dialog_singlechoice, android.R.id.text1, mList) { public View getView(int position, View convertView, ViewGroup parent) { // User super class to create the View View v = super.getView(position, convertView, parent); TextView tv = (TextView) v.findViewById(android.R.id.text1); // Put the image on the TextView - tv.setCompoundDrawablesWithIntrinsicBounds(mProviderList.get(position).icon, null, + tv.setCompoundDrawablesWithIntrinsicBounds(mList.get(position).icon, null, null, null); // Add margin between image and text (support various screen densities) @@ -136,7 +145,7 @@ public class OpenPgpListPreference extends DialogPreference { @Override public void onClick(DialogInterface dialog, int which) { - OpenPgpProviderEntry entry = mProviderList.get(which); + OpenPgpProviderEntry entry = mList.get(which); if (entry.intent != null) { /* @@ -181,9 +190,9 @@ public class OpenPgpListPreference extends DialogPreference { } private int getIndexOfProviderList(String packageName) { - for (OpenPgpProviderEntry app : mProviderList) { + for (OpenPgpProviderEntry app : mList) { if (app.packageName.equals(packageName)) { - return mProviderList.indexOf(app); + return mList.indexOf(app); } } @@ -214,7 +223,7 @@ public class OpenPgpListPreference extends DialogPreference { } public String getEntryByValue(String packageName) { - for (OpenPgpProviderEntry app : mProviderList) { + for (OpenPgpProviderEntry app : mList) { if (app.packageName.equals(packageName)) { return app.simpleName; } -- cgit v1.2.3