mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-27 11:12:15 -05:00
Merge pull request #308 from mar-v-in/issue-295
Show link to Market if no openpgp provider installed installed
This commit is contained in:
commit
3ff7610d3b
@ -2,5 +2,6 @@
|
|||||||
<resources>
|
<resources>
|
||||||
|
|
||||||
<string name="openpgp_list_preference_none">None</string>
|
<string name="openpgp_list_preference_none">None</string>
|
||||||
|
<string name="openpgp_install_openkeychain_via">Install OpenKeychain via %s</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
@ -23,6 +23,7 @@ import android.content.Intent;
|
|||||||
import android.content.pm.ResolveInfo;
|
import android.content.pm.ResolveInfo;
|
||||||
import android.content.res.TypedArray;
|
import android.content.res.TypedArray;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
|
import android.net.Uri;
|
||||||
import android.preference.DialogPreference;
|
import android.preference.DialogPreference;
|
||||||
import android.util.AttributeSet;
|
import android.util.AttributeSet;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
@ -30,17 +31,21 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.ListAdapter;
|
import android.widget.ListAdapter;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import org.sufficientlysecure.keychain.api.R;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.sufficientlysecure.keychain.api.R;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Does not extend ListPreference, but is very similar to it!
|
* 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
|
* 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 {
|
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<OpenPgpProviderEntry> mProviderList = new ArrayList<OpenPgpProviderEntry>();
|
private ArrayList<OpenPgpProviderEntry> mProviderList = new ArrayList<OpenPgpProviderEntry>();
|
||||||
private String mSelectedPackage;
|
private String mSelectedPackage;
|
||||||
|
|
||||||
@ -84,6 +89,24 @@ public class OpenPgpListPreference extends DialogPreference {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// add install links if empty
|
||||||
|
if (mProviderList.isEmpty()) {
|
||||||
|
resInfo = getContext().getPackageManager().queryIntentActivities
|
||||||
|
(MARKET_INTENT, 0);
|
||||||
|
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));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// add "none"-entry
|
// add "none"-entry
|
||||||
mProviderList.add(0, new OpenPgpProviderEntry("",
|
mProviderList.add(0, new OpenPgpProviderEntry("",
|
||||||
getContext().getString(R.string.openpgp_list_preference_none),
|
getContext().getString(R.string.openpgp_list_preference_none),
|
||||||
@ -114,7 +137,22 @@ public class OpenPgpListPreference extends DialogPreference {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
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
|
* Clicking on an item simulates the positive button click, and dismisses
|
||||||
@ -190,6 +228,7 @@ public class OpenPgpListPreference extends DialogPreference {
|
|||||||
private String packageName;
|
private String packageName;
|
||||||
private String simpleName;
|
private String simpleName;
|
||||||
private Drawable icon;
|
private Drawable icon;
|
||||||
|
private Intent intent;
|
||||||
|
|
||||||
public OpenPgpProviderEntry(String packageName, String simpleName, Drawable icon) {
|
public OpenPgpProviderEntry(String packageName, String simpleName, Drawable icon) {
|
||||||
this.packageName = packageName;
|
this.packageName = packageName;
|
||||||
@ -197,6 +236,11 @@ public class OpenPgpListPreference extends DialogPreference {
|
|||||||
this.icon = icon;
|
this.icon = icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public OpenPgpProviderEntry(String packageName, String simpleName, Drawable icon, Intent intent) {
|
||||||
|
this(packageName, simpleName, icon);
|
||||||
|
this.intent = intent;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return simpleName;
|
return simpleName;
|
||||||
|
Loading…
Reference in New Issue
Block a user