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') 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') 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') 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 --- .../org/openintents/openpgp/IOpenPgpService.aidl | 65 +----- .../openpgp/OpenPgpSignatureResult.java | 4 +- .../org/openintents/openpgp/util/OpenPgpApi.java | 222 ++++++++++++--------- .../openintents/openpgp/util/OpenPgpConstants.java | 54 ----- .../openpgp/util/OpenPgpListPreference.java | 3 +- .../org/openintents/openpgp/util/OpenPgpUtils.java | 2 +- .../openpgp/util/ParcelFileDescriptorUtil.java | 8 +- 7 files changed, 132 insertions(+), 226 deletions(-) delete mode 100644 OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpConstants.java (limited to 'OpenPGP-Keychain-API/libraries/keychain-api-library/src') diff --git a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/IOpenPgpService.aidl b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/IOpenPgpService.aidl index 578a7d4b5..7ee79d6ab 100644 --- a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/IOpenPgpService.aidl +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/IOpenPgpService.aidl @@ -18,68 +18,7 @@ package org.openintents.openpgp; interface IOpenPgpService { - /** - * General extras - * -------------- - * - * Bundle params: - * int api_version (required) - * boolean ascii_armor (request ascii armor for ouput) - * - * returned Bundle: - * int result_code (0, 1, or 2 (see OpenPgpConstants)) - * OpenPgpError error (if result_code == 0) - * Intent intent (if result_code == 2) - * - */ - - /** - * Sign only - * - * optional params: - * String passphrase (for key passphrase) - */ - Bundle sign(in Bundle params, in ParcelFileDescriptor input, in ParcelFileDescriptor output); - - /** - * Encrypt - * - * Bundle params: - * long[] key_ids - * or - * String[] user_ids (= emails of recipients) (if more than one key has this user_id, a PendingIntent is returned) - * - * optional params: - * String passphrase (for key passphrase) - */ - Bundle encrypt(in Bundle params, in ParcelFileDescriptor input, in ParcelFileDescriptor output); - - /** - * Sign and encrypt - * - * Bundle params: - * same as in encrypt() - */ - Bundle signAndEncrypt(in Bundle params, in ParcelFileDescriptor input, in ParcelFileDescriptor output); - - /** - * Decrypts and verifies given input bytes. This methods handles encrypted-only, signed-and-encrypted, - * and also signed-only input. - * - * returned Bundle: - * OpenPgpSignatureResult signature_result - */ - Bundle decryptAndVerify(in Bundle params, in ParcelFileDescriptor input, in ParcelFileDescriptor output); - - /** - * Retrieves key ids based on given user ids (=emails) - * - * Bundle params: - * String[] user_ids - * - * returned Bundle: - * long[] key_ids - */ - Bundle getKeyIds(in Bundle params); + // see OpenPgpApi for documentation + Intent execute(in Intent data, in ParcelFileDescriptor input, in ParcelFileDescriptor output); } \ No newline at end of file diff --git a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java index 16c79ca27..431d4be24 100644 --- a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java @@ -25,10 +25,8 @@ public class OpenPgpSignatureResult implements Parcelable { // successfully verified signature, with certified public key public static final int SIGNATURE_SUCCESS_CERTIFIED = 1; // no public key was found for this signature verification - // you can retrieve the key with - // getKeys(new String[] {String.valueOf(signatureResult.getKeyId)}, true, callback) public static final int SIGNATURE_UNKNOWN_PUB_KEY = 2; - // successfully verified signature, but with certified public key + // successfully verified signature, but with uncertified public key public static final int SIGNATURE_SUCCESS_UNCERTIFIED = 3; int status; diff --git a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpApi.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpApi.java index 41cbfec59..ed1a7540a 100644 --- a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpApi.java +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpApi.java @@ -17,9 +17,9 @@ package org.openintents.openpgp.util; import android.content.Context; +import android.content.Intent; import android.os.AsyncTask; import android.os.Build; -import android.os.Bundle; import android.os.ParcelFileDescriptor; import android.util.Log; @@ -31,104 +31,143 @@ import java.io.OutputStream; public class OpenPgpApi { + //TODO: fix this documentation + /** + * General extras + * -------------- + * + * Intent extras: + * int api_version (required) + * boolean ascii_armor (request ascii armor for ouput) + * + * returned Bundle: + * int result_code (0, 1, or 2 (see OpenPgpApi)) + * OpenPgpError error (if result_code == 0) + * Intent intent (if result_code == 2) + */ + + /** + * Sign only + * + * optional params: + * String passphrase (for key passphrase) + */ + + /** + * Encrypt + * + * Intent extras: + * long[] key_ids + * or + * String[] user_ids (= emails of recipients) (if more than one key has this user_id, a PendingIntent is returned) + * + * optional extras: + * String passphrase (for key passphrase) + */ + + /** + * Sign and encrypt + * + * Intent extras: + * same as in encrypt() + */ + + /** + * Decrypts and verifies given input bytes. This methods handles encrypted-only, signed-and-encrypted, + * and also signed-only input. + * + * returned Bundle: + * OpenPgpSignatureResult signature_result + */ + + /** + * Retrieves key ids based on given user ids (=emails) + * + * Intent extras: + * String[] user_ids + * + * returned Bundle: + * long[] key_ids + */ + + public static final String TAG = "OpenPgp API"; + + public static final int API_VERSION = 2; + public static final String SERVICE_INTENT = "org.openintents.openpgp.IOpenPgpService"; + + public static final String ACTION_SIGN = "org.openintents.openpgp.action.SIGN"; + public static final String ACTION_ENCRYPT = "org.openintents.openpgp.action.ENCRYPT"; + public static final String ACTION_SIGN_AND_ENCTYPT = "org.openintents.openpgp.action.SIGN_AND_ENCRYPT"; + public static final String ACTION_DECRYPT_VERIFY = "org.openintents.openpgp.action.DECRYPT_VERIFY"; + public static final String ACTION_DOWNLOAD_KEYS = "org.openintents.openpgp.action.DOWNLOAD_KEYS"; + public static final String ACTION_GET_KEY_IDS = "org.openintents.openpgp.action.GET_KEY_IDS"; + + /* Bundle params */ + public static final String EXTRA_API_VERSION = "api_version"; + + // SIGN, ENCRYPT, SIGN_ENCRYPT, DECRYPT_VERIFY + // request ASCII Armor for output + // OpenPGP Radix-64, 33 percent overhead compared to binary, see http://tools.ietf.org/html/rfc4880#page-53) + public static final String EXTRA_REQUEST_ASCII_ARMOR = "ascii_armor"; + + // ENCRYPT, SIGN_ENCRYPT + public static final String EXTRA_USER_IDS = "user_ids"; + public static final String EXTRA_KEY_IDS = "key_ids"; + // optional parameter: + public static final String EXTRA_PASSPHRASE = "passphrase"; + + /* Service Bundle returns */ + public static final String RESULT_CODE = "result_code"; + public static final String RESULT_SIGNATURE = "signature"; + public static final String RESULT_ERRORS = "error"; + public static final String RESULT_INTENT = "intent"; + + // get actual error object from RESULT_ERRORS + public static final int RESULT_CODE_ERROR = 0; + // success! + public static final int RESULT_CODE_SUCCESS = 1; + // executeServiceMethod intent and do it again with intent + public static final int RESULT_CODE_USER_INTERACTION_REQUIRED = 2; + + IOpenPgpService mService; Context mContext; - private static final int OPERATION_SIGN = 0; - private static final int OPERATION_ENCRYPT = 1; - private static final int OPERATION_SIGN_ENCRYPT = 2; - private static final int OPERATION_DECRYPT_VERIFY = 3; - private static final int OPERATION_GET_KEY_IDS = 4; - public OpenPgpApi(Context context, IOpenPgpService service) { this.mContext = context; this.mService = service; } - public Bundle sign(InputStream is, final OutputStream os) { - return executeApi(OPERATION_SIGN, new Bundle(), is, os); - } - - public Bundle sign(Bundle params, InputStream is, final OutputStream os) { - return executeApi(OPERATION_SIGN, params, is, os); - } - - public void sign(Bundle params, InputStream is, final OutputStream os, IOpenPgpCallback callback) { - executeApiAsync(OPERATION_SIGN, params, is, os, callback); - } - - public Bundle encrypt(InputStream is, final OutputStream os) { - return executeApi(OPERATION_ENCRYPT, new Bundle(), is, os); - } - - public Bundle encrypt(Bundle params, InputStream is, final OutputStream os) { - return executeApi(OPERATION_ENCRYPT, params, is, os); - } - - public void encrypt(Bundle params, InputStream is, final OutputStream os, IOpenPgpCallback callback) { - executeApiAsync(OPERATION_ENCRYPT, params, is, os, callback); - } - - public Bundle signAndEncrypt(InputStream is, final OutputStream os) { - return executeApi(OPERATION_SIGN_ENCRYPT, new Bundle(), is, os); - } - - public Bundle signAndEncrypt(Bundle params, InputStream is, final OutputStream os) { - return executeApi(OPERATION_SIGN_ENCRYPT, params, is, os); - } - - public void signAndEncrypt(Bundle params, InputStream is, final OutputStream os, IOpenPgpCallback callback) { - executeApiAsync(OPERATION_SIGN_ENCRYPT, params, is, os, callback); - } - - public Bundle decryptAndVerify(InputStream is, final OutputStream os) { - return executeApi(OPERATION_DECRYPT_VERIFY, new Bundle(), is, os); - } - - public Bundle decryptAndVerify(Bundle params, InputStream is, final OutputStream os) { - return executeApi(OPERATION_DECRYPT_VERIFY, params, is, os); - } - - public void decryptAndVerify(Bundle params, InputStream is, final OutputStream os, IOpenPgpCallback callback) { - executeApiAsync(OPERATION_DECRYPT_VERIFY, params, is, os, callback); - } - - public Bundle getKeyIds(Bundle params) { - return executeApi(OPERATION_GET_KEY_IDS, params, null, null); - } - public interface IOpenPgpCallback { - void onReturn(final Bundle result); + void onReturn(final Intent result); } - private class OpenPgpAsyncTask extends AsyncTask { - int operationId; - Bundle params; + private class OpenPgpAsyncTask extends AsyncTask { + Intent data; InputStream is; OutputStream os; IOpenPgpCallback callback; - private OpenPgpAsyncTask(int operationId, Bundle params, InputStream is, OutputStream os, IOpenPgpCallback callback) { - this.operationId = operationId; - this.params = params; + private OpenPgpAsyncTask(Intent data, InputStream is, OutputStream os, IOpenPgpCallback callback) { + this.data = data; this.is = is; this.os = os; this.callback = callback; } @Override - protected Bundle doInBackground(Void... unused) { - return executeApi(operationId, params, is, os); + protected Intent doInBackground(Void... unused) { + return executeApi(data, is, os); } - protected void onPostExecute(Bundle result) { + protected void onPostExecute(Intent result) { callback.onReturn(result); } } - private void executeApiAsync(int operationId, Bundle params, InputStream is, OutputStream os, IOpenPgpCallback callback) { - OpenPgpAsyncTask task = new OpenPgpAsyncTask(operationId, params, is, os, callback); + public void executeApiAsync(Intent data, InputStream is, OutputStream os, IOpenPgpCallback callback) { + OpenPgpAsyncTask task = new OpenPgpAsyncTask(data, is, os, callback); // don't serialize async tasks! // http://commonsware.com/blog/2012/04/20/asynctask-threading-regression-confirmed.html @@ -139,14 +178,14 @@ public class OpenPgpApi { } } - private Bundle executeApi(int operationId, Bundle params, InputStream is, OutputStream os) { + public Intent executeApi(Intent data, InputStream is, OutputStream os) { try { - params.putInt(OpenPgpConstants.PARAMS_API_VERSION, OpenPgpConstants.API_VERSION); + data.putExtra(EXTRA_API_VERSION, OpenPgpApi.API_VERSION); - Bundle result = null; + Intent result = null; - if (operationId == OPERATION_GET_KEY_IDS) { - result = mService.getKeyIds(params); + if (ACTION_GET_KEY_IDS.equals(data.getAction())) { + result = mService.execute(data, null, null); return result; } else { // send the input and output pfds @@ -155,7 +194,7 @@ public class OpenPgpApi { @Override public void onThreadFinished(Thread thread) { - Log.d(OpenPgpConstants.TAG, "Copy to service finished"); + Log.d(OpenPgpApi.TAG, "Copy to service finished"); } }); ParcelFileDescriptor output = ParcelFileDescriptorUtil.pipeTo(os, @@ -163,45 +202,30 @@ public class OpenPgpApi { @Override public void onThreadFinished(Thread thread) { - Log.d(OpenPgpConstants.TAG, "Service finished writing!"); + Log.d(OpenPgpApi.TAG, "Service finished writing!"); } }); - // blocks until result is ready - switch (operationId) { - case OPERATION_SIGN: - result = mService.sign(params, input, output); - break; - case OPERATION_ENCRYPT: - result = mService.encrypt(params, input, output); - break; - case OPERATION_SIGN_ENCRYPT: - result = mService.signAndEncrypt(params, input, output); - break; - case OPERATION_DECRYPT_VERIFY: - result = mService.decryptAndVerify(params, input, output); - break; - } + result = mService.execute(data, input, output); // close() is required to halt the TransferThread output.close(); // set class loader to current context to allow unparcelling // of OpenPgpError and OpenPgpSignatureResult // http://stackoverflow.com/a/3806769 - result.setClassLoader(mContext.getClassLoader()); + result.setExtrasClassLoader(mContext.getClassLoader()); return result; } } catch (Exception e) { - Log.e(OpenPgpConstants.TAG, "Exception", e); - Bundle result = new Bundle(); - result.putInt(OpenPgpConstants.RESULT_CODE, OpenPgpConstants.RESULT_CODE_ERROR); - result.putParcelable(OpenPgpConstants.RESULT_ERRORS, + Log.e(OpenPgpApi.TAG, "Exception", e); + Intent result = new Intent(); + result.putExtra(RESULT_CODE, RESULT_CODE_ERROR); + result.putExtra(RESULT_ERRORS, new OpenPgpError(OpenPgpError.CLIENT_SIDE_ERROR, e.getMessage())); return result; } } - } diff --git a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpConstants.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpConstants.java deleted file mode 100644 index 263b42aaa..000000000 --- a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpConstants.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * Copyright (C) 2014 Dominik Schürmann - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.openintents.openpgp.util; - -public class OpenPgpConstants { - - public static final String TAG = "OpenPgp API"; - - public static final int API_VERSION = 1; - public static final String SERVICE_INTENT = "org.openintents.openpgp.IOpenPgpService"; - - - /* Bundle params */ - public static final String PARAMS_API_VERSION = "api_version"; - // request ASCII Armor for output - // OpenPGP Radix-64, 33 percent overhead compared to binary, see http://tools.ietf.org/html/rfc4880#page-53) - public static final String PARAMS_REQUEST_ASCII_ARMOR = "ascii_armor"; - // (for encrypt method) - public static final String PARAMS_USER_IDS = "user_ids"; - public static final String PARAMS_KEY_IDS = "key_ids"; - // optional parameter: - public static final String PARAMS_PASSPHRASE = "passphrase"; - - /* Service Bundle returns */ - public static final String RESULT_CODE = "result_code"; - public static final String RESULT_SIGNATURE = "signature"; - public static final String RESULT_ERRORS = "error"; - public static final String RESULT_INTENT = "intent"; - - // get actual error object from RESULT_ERRORS - public static final int RESULT_CODE_ERROR = 0; - // success! - public static final int RESULT_CODE_SUCCESS = 1; - // executeServiceMethod intent and do it again with params from intent - public static final int RESULT_CODE_USER_INTERACTION_REQUIRED = 2; - - /* PendingIntent returns */ - public static final String PI_RESULT_PARAMS = "params"; - -} 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 diff --git a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpUtils.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpUtils.java index ffecaceba..67fe86291 100644 --- a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpUtils.java +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/OpenPgpUtils.java @@ -52,7 +52,7 @@ public class OpenPgpUtils { } public static boolean isAvailable(Context context) { - Intent intent = new Intent(OpenPgpConstants.SERVICE_INTENT); + Intent intent = new Intent(OpenPgpApi.SERVICE_INTENT); List resInfo = context.getPackageManager().queryIntentServices(intent, 0); if (!resInfo.isEmpty()) { return true; diff --git a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/ParcelFileDescriptorUtil.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/ParcelFileDescriptorUtil.java index 3569caf5b..58c62110d 100644 --- a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/ParcelFileDescriptorUtil.java +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/util/ParcelFileDescriptorUtil.java @@ -81,21 +81,21 @@ public class ParcelFileDescriptorUtil { } mOut.flush(); // just to be safe } catch (IOException e) { - //Log.e(OpenPgpConstants.TAG, "TransferThread" + getId() + ": writing failed", e); + //Log.e(OpenPgpApi.TAG, "TransferThread" + getId() + ": writing failed", e); } finally { try { mIn.close(); } catch (IOException e) { - //Log.e(OpenPgpConstants.TAG, "TransferThread" + getId(), e); + //Log.e(OpenPgpApi.TAG, "TransferThread" + getId(), e); } try { mOut.close(); } catch (IOException e) { - //Log.e(OpenPgpConstants.TAG, "TransferThread" + getId(), e); + //Log.e(OpenPgpApi.TAG, "TransferThread" + getId(), e); } } if (mListener != null) { - //Log.d(OpenPgpConstants.TAG, "TransferThread " + getId() + " finished!"); + //Log.d(OpenPgpApi.TAG, "TransferThread " + getId() + " finished!"); mListener.onThreadFinished(this); } } -- 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') 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 From 06f9134eb1c386446d56fe58fa49c35b7482ed86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Tue, 4 Mar 2014 20:53:44 +0100 Subject: Enforce private key for applications, verify signed-only texts without passphrase input, better internal decrypt and verify method --- .../openintents/openpgp/OpenPgpSignatureResult.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) (limited to 'OpenPGP-Keychain-API/libraries/keychain-api-library/src') diff --git a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java index 431d4be24..cb220cf6d 100644 --- a/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java +++ b/OpenPGP-Keychain-API/libraries/keychain-api-library/src/org/openintents/openpgp/OpenPgpSignatureResult.java @@ -38,24 +38,40 @@ public class OpenPgpSignatureResult implements Parcelable { return status; } + public void setStatus(int status) { + this.status = status; + } + public boolean isSignatureOnly() { return signatureOnly; } + public void setSignatureOnly(boolean signatureOnly) { + this.signatureOnly = signatureOnly; + } + public String getUserId() { return userId; } + public void setUserId(String userId) { + this.userId = userId; + } + public long getKeyId() { return keyId; } + public void setKeyId(long keyId) { + this.keyId = keyId; + } + public OpenPgpSignatureResult() { } public OpenPgpSignatureResult(int signatureStatus, String signatureUserId, - boolean signatureOnly, long keyId) { + boolean signatureOnly, long keyId) { this.status = signatureStatus; this.signatureOnly = signatureOnly; this.userId = signatureUserId; -- cgit v1.2.3