From b6a1bc770cea52a9f12537d7ad6b70112cc91d5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Mon, 9 Sep 2013 14:03:58 +0200 Subject: [PATCH] Remove most of old API --- API.md | 33 +- OpenPGP-Keychain/AndroidManifest.xml | 153 +++------ OpenPGP-Keychain/res/values/strings.xml | 10 +- .../keychain/Constants.java | 9 +- .../keychain/provider/KeychainContract.java | 5 +- .../keychain/provider/KeychainProvider.java | 35 +- .../provider/KeychainProviderExternal.java | 32 -- .../provider/KeychainProviderInternal.java | 30 -- .../keychain/provider/ProviderHelper.java | 4 +- .../keychain/service/IKeychainApiService.aidl | 144 -------- .../keychain/service/KeychainApiService.java | 324 ------------------ .../handler/IKeychainDecryptHandler.aidl | 27 -- .../handler/IKeychainEncryptHandler.aidl | 28 -- .../IKeychainGetDecryptionKeyIdHandler.aidl | 25 -- .../service/handler/IKeychainSignHandler.aidl | 28 -- .../handler/IKeychainVerifyHandler.aidl | 26 -- .../keychain/ui/DecryptActivity.java | 113 +++--- .../keychain/ui/EditKeyActivity.java | 26 +- .../keychain/ui/EncryptActivity.java | 144 ++++---- .../keychain/ui/ImportKeysActivity.java | 43 +-- .../keychain/ui/KeyListActivity.java | 2 +- .../keychain/ui/KeyListPublicActivity.java | 6 +- .../keychain/ui/KeyServerQueryActivity.java | 4 +- .../keychain/ui/SelectPublicKeyActivity.java | 8 +- .../keychain/ui/SelectSecretKeyActivity.java | 6 +- .../keychain/ui/ShareActivity.java | 3 +- .../keychain/ui/ShareNfcBeamActivity.java | 2 +- 27 files changed, 241 insertions(+), 1029 deletions(-) delete mode 100644 OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProviderExternal.java delete mode 100644 OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProviderInternal.java delete mode 100644 OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/IKeychainApiService.aidl delete mode 100644 OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/KeychainApiService.java delete mode 100644 OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainDecryptHandler.aidl delete mode 100644 OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainEncryptHandler.aidl delete mode 100644 OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainGetDecryptionKeyIdHandler.aidl delete mode 100644 OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainSignHandler.aidl delete mode 100644 OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainVerifyHandler.aidl diff --git a/API.md b/API.md index 80c270840..efe8e7f31 100644 --- a/API.md +++ b/API.md @@ -2,33 +2,30 @@ ## Basic goals -* Intents without permissions should only work based on user interaction (e.g. click a button in a dialog) - -Android primitives to exchange data: Intent, Intent with return values, Send (also an Intent), Content Provider, AIDL +* Intents invoked by apps that are not registered by Keychain's App API must require user interaction (e.g. click a button in a dialog to actually encrypt!) ## Without Permissions ### Intents +These Intents require user interaction! + All Intents start with ``org.sufficientlysecure.keychain.action.`` * ``android.intent.action.VIEW`` connected to .gpg and .asc files: Import Key and Decrypt * ``android.intent.action.SEND connected to all mime types (text/plain and every binary data like files and images): Encrypt and Decrypt -* ``IMPORT`` -* ``IMPORT_FROM_FILE`` -* ``IMPORT_FROM_QR_CODE`` -* ``IMPORT_FROM_NFC`` -* ``SHARE_KEYRING`` -* ``SHARE_KEYRING_WITH_QR_CODE`` -* ``SHARE_KEYRING_WITH_NFC`` -* ``EDIT_KEYRING`` -* ``SELECT_PUBLIC_KEYRINGS`` -* ``SELECT_SECRET_KEYRING`` -* ``ENCRYPT`` + + +* ``KEY_IMPORT`` with extra "keyring_bytes" or Uri in data with file schema +* ``KEY_IMPORT_FROM_QR_CODE`` without extras + + +* ``ENCRYPT`` TODO: explain extras (see source) * ``ENCRYPT_FILE`` -* ``DECRYPT`` + +* ``DECRYPT`` TODO: explain extras (see source) * ``DECRYPT_FILE`` TODO: -- remove IMPORT, SHARE intents, simplify ENCRYPT and DECRYPT intents (include _FILE derivates like done in SEND based on file type) -- EDIT_KEYRING and CREATE_KEYRING, should be available via for registered apps -- new intent REGISTER_APP? \ No newline at end of file +- new intent REGISTER_APP? + +## App API diff --git a/OpenPGP-Keychain/AndroidManifest.xml b/OpenPGP-Keychain/AndroidManifest.xml index af27cc4a9..e81de7807 100644 --- a/OpenPGP-Keychain/AndroidManifest.xml +++ b/OpenPGP-Keychain/AndroidManifest.xml @@ -67,28 +67,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + - - - - + + + + + + + + - - - - - - - - - - - - - - - - - + + + - + + + + - - - - - - - + + + - + + + + - + - - - - - @@ -227,15 +187,11 @@ android:uiOptions="splitActionBarWhenNarrow" android:windowSoftInputMode="stateHidden" > - + - - - - @@ -321,9 +277,9 @@ android:label="@string/title_importKeys" android:uiOptions="splitActionBarWhenNarrow" > - + - + @@ -331,9 +287,8 @@ - - - + + @@ -386,11 +341,6 @@ android:label="@string/title_shareByNfc" android:launchMode="singleTop" android:uiOptions="splitActionBarWhenNarrow" > - - - - - @@ -402,12 +352,6 @@ - - - - - - - - - - - - - - - - + @@ -452,18 +387,11 @@ - - - - - - - - + @@ -476,6 +404,7 @@ android:name="org.sufficientlysecure.keychain.remote_api.CryptoServiceActivity" android:exported="false" android:label="@string/app_name" + android:launchMode="singleTop" android:process=":crypto" > diff --git a/OpenPGP-Keychain/res/values/strings.xml b/OpenPGP-Keychain/res/values/strings.xml index 526901835..71fde4ce3 100644 --- a/OpenPGP-Keychain/res/values/strings.xml +++ b/OpenPGP-Keychain/res/values/strings.xml @@ -306,14 +306,6 @@ querying… querying %s… - - OpenPGP Keychain - Permissions to use OpenPGP - Encrypt/Sign/Decrypt/Create keys without user interaction, Read key details of public and secret keys (The keys themselves can NOT be read.) - Encrypt/Sign/Decrypt/Create keys (by using Intents or Remote Service) without user interaction. Read key details of public and secret keys stored in OpenPGP, such as key ID and user IDs. The keys themselves can NOT be read. - Import/Export actual public and secret keys - Import and export actual private and public keys directly without user interaction. - Encrypt Decrypt @@ -335,7 +327,7 @@ slow very slow - + diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/Constants.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/Constants.java index 96da4b052..846180c0c 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/Constants.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/Constants.java @@ -20,7 +20,7 @@ import android.os.Environment; public final class Constants { - public static final boolean DEBUG = true; + public static final boolean DEBUG = BuildConfig.DEBUG; public static final String TAG = "Keychain"; @@ -29,14 +29,11 @@ public final class Constants { // as defined in http://tools.ietf.org/html/rfc3156, section 7 public static final String NFC_MIME = "application/pgp-keys"; - public static final String PERMISSION_ACCESS_KEY_DATABASE = PACKAGE_NAME - + ".permission.ACCESS_KEY_DATABASE"; - public static final String PERMISSION_ACCESS_API = PACKAGE_NAME + ".permission.ACCESS_API"; - public static final String INTENT_PREFIX = PACKAGE_NAME + ".action."; public static final class path { - public static final String APP_DIR = Environment.getExternalStorageDirectory() + "/OpenPGP-Keychain"; + public static final String APP_DIR = Environment.getExternalStorageDirectory() + + "/OpenPGP-Keychain"; } public static final class pref { diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainContract.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainContract.java index 82dcfe15f..ea4ca377c 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainContract.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainContract.java @@ -66,11 +66,10 @@ public class KeychainContract { public static final int SECRET = 1; } - public static final String CONTENT_AUTHORITY_EXTERNAL = Constants.PACKAGE_NAME; - public static final String CONTENT_AUTHORITY_INTERNAL = Constants.PACKAGE_NAME + ".internal"; + public static final String CONTENT_AUTHORITY = Constants.PACKAGE_NAME + ".provider"; private static final Uri BASE_CONTENT_URI_INTERNAL = Uri.parse("content://" - + CONTENT_AUTHORITY_INTERNAL); + + CONTENT_AUTHORITY); public static final String BASE_KEY_RINGS = "key_rings"; public static final String BASE_DATA = "data"; diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProvider.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProvider.java index edb82e632..70fb11e47 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProvider.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProvider.java @@ -34,7 +34,6 @@ import org.sufficientlysecure.keychain.util.Log; import android.content.ContentProvider; import android.content.ContentValues; -import android.content.Intent; import android.content.UriMatcher; import android.database.Cursor; import android.database.DatabaseUtils; @@ -46,11 +45,11 @@ import android.provider.BaseColumns; import android.text.TextUtils; public class KeychainProvider extends ContentProvider { - public static final String ACTION_BROADCAST_DATABASE_CHANGE = Constants.PACKAGE_NAME - + ".action.DATABASE_CHANGE"; - - public static final String EXTRA_BROADCAST_KEY_TYPE = "keyType"; - public static final String EXTRA_BROADCAST_CONTENT_ITEM_TYPE = "contentItemType"; + // public static final String ACTION_BROADCAST_DATABASE_CHANGE = Constants.PACKAGE_NAME + // + ".action.DATABASE_CHANGE"; + // + // public static final String EXTRA_BROADCAST_KEY_TYPE = "key_type"; + // public static final String EXTRA_BROADCAST_CONTENT_ITEM_TYPE = "contentItemType"; private static final int PUBLIC_KEY_RING = 101; private static final int PUBLIC_KEY_RING_BY_ROW_ID = 102; @@ -84,22 +83,16 @@ public class KeychainProvider extends ContentProvider { // private static final int DATA_STREAM = 401; - protected boolean mInternalProvider; protected UriMatcher mUriMatcher; /** * Build and return a {@link UriMatcher} that catches all {@link Uri} variations supported by * this {@link ContentProvider}. */ - protected UriMatcher buildUriMatcher(boolean internalProvider) { + protected UriMatcher buildUriMatcher() { final UriMatcher matcher = new UriMatcher(UriMatcher.NO_MATCH); - String authority; - if (internalProvider) { - authority = KeychainContract.CONTENT_AUTHORITY_INTERNAL; - } else { - authority = KeychainContract.CONTENT_AUTHORITY_EXTERNAL; - } + String authority = KeychainContract.CONTENT_AUTHORITY; /** * public key rings @@ -250,7 +243,7 @@ public class KeychainProvider extends ContentProvider { /** {@inheritDoc} */ @Override public boolean onCreate() { - mUriMatcher = buildUriMatcher(mInternalProvider); + mUriMatcher = buildUriMatcher(); mApgDatabase = new KeychainDatabase(getContext()); return true; } @@ -359,11 +352,8 @@ public class KeychainProvider extends ContentProvider { projectionMap.put(BaseColumns._ID, Tables.KEY_RINGS + "." + BaseColumns._ID); projectionMap.put(KeyRingsColumns.MASTER_KEY_ID, Tables.KEY_RINGS + "." + KeyRingsColumns.MASTER_KEY_ID); - // only give out keyRing blob when we are using the internal content provider - if (mInternalProvider) { - projectionMap.put(KeyRingsColumns.KEY_RING_DATA, Tables.KEY_RINGS + "." - + KeyRingsColumns.KEY_RING_DATA); - } + projectionMap.put(KeyRingsColumns.KEY_RING_DATA, Tables.KEY_RINGS + "." + + KeyRingsColumns.KEY_RING_DATA); projectionMap.put(UserIdsColumns.USER_ID, Tables.USER_IDS + "." + UserIdsColumns.USER_ID); return projectionMap; @@ -389,10 +379,7 @@ public class KeychainProvider extends ContentProvider { projectionMap.put(KeysColumns.CREATION, KeysColumns.CREATION); projectionMap.put(KeysColumns.EXPIRY, KeysColumns.EXPIRY); projectionMap.put(KeysColumns.KEY_RING_ROW_ID, KeysColumns.KEY_RING_ROW_ID); - // only give out keyRing blob when we are using the internal content provider - if (mInternalProvider) { - projectionMap.put(KeysColumns.KEY_DATA, KeysColumns.KEY_DATA); - } + projectionMap.put(KeysColumns.KEY_DATA, KeysColumns.KEY_DATA); projectionMap.put(KeysColumns.RANK, KeysColumns.RANK); return projectionMap; diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProviderExternal.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProviderExternal.java deleted file mode 100644 index b84f0ce46..000000000 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProviderExternal.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2012-2013 Dominik Schürmann - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.sufficientlysecure.keychain.provider; - -/** - * The same content provider as ApgProviderInternal except that it does not give out keyRing and key - * blob data when querying. - * - * This provider is exported with a readPermission in AndroidManifest.xml - */ -public class KeychainProviderExternal extends KeychainProvider { - - public KeychainProviderExternal() { - mInternalProvider = false; - } - -} diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProviderInternal.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProviderInternal.java deleted file mode 100644 index 8554695a4..000000000 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/KeychainProviderInternal.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (C) 2012-2013 Dominik Schürmann - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.sufficientlysecure.keychain.provider; - -/** - * This provider is NOT exported in AndroidManifest.xml as it also return the actual secret keys - * from the database - */ -public class KeychainProviderInternal extends KeychainProvider { - - public KeychainProviderInternal() { - mInternalProvider = true; - } - -} \ No newline at end of file diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/ProviderHelper.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/ProviderHelper.java index 7f7e81e8c..4e9a81908 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/ProviderHelper.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/ProviderHelper.java @@ -239,7 +239,7 @@ public class ProviderHelper { } try { - context.getContentResolver().applyBatch(KeychainContract.CONTENT_AUTHORITY_INTERNAL, + context.getContentResolver().applyBatch(KeychainContract.CONTENT_AUTHORITY, operations); } catch (RemoteException e) { Log.e(Constants.TAG, "applyBatch failed!", e); @@ -296,7 +296,7 @@ public class ProviderHelper { } try { - context.getContentResolver().applyBatch(KeychainContract.CONTENT_AUTHORITY_INTERNAL, + context.getContentResolver().applyBatch(KeychainContract.CONTENT_AUTHORITY, operations); } catch (RemoteException e) { Log.e(Constants.TAG, "applyBatch failed!", e); diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/IKeychainApiService.aidl b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/IKeychainApiService.aidl deleted file mode 100644 index 575f6e1d2..000000000 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/IKeychainApiService.aidl +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2012 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.sufficientlysecure.keychain.service; - -import org.sufficientlysecure.keychain.service.handler.IKeychainEncryptHandler; -import org.sufficientlysecure.keychain.service.handler.IKeychainDecryptHandler; -import org.sufficientlysecure.keychain.service.handler.IKeychainGetDecryptionKeyIdHandler; - -/** - * All methods are oneway, which means they are asynchronous and non-blocking. - * Results are returned into given Handler, which has to be implemented on client side. - */ -interface IKeychainApiService { - - /** - * Encrypt - * - * Either inputBytes or inputUri is given, the other should be null. - * - * @param inputBytes - * Byte array you want to encrypt - * @param inputUri - * Blob in ContentProvider you want to encrypt - * @param useAsciiArmor - * Convert bytes to ascii armored text to guard against encoding problems - * @param compression - * Compression: 0x21070001: none, 1: Zip, 2: Zlib, 3: BZip2 - * @param encryptionKeyIds - * Ids of public keys used for encryption - * @param symmetricEncryptionAlgorithm - * 7: AES-128, 8: AES-192, 9: AES-256, 4: Blowfish, 10: Twofish, 3: CAST5, - * 6: DES, 2: Triple DES, 1: IDEA - * @param handler - * Results are returned to this Handler after successful encryption - */ - oneway void encryptAsymmetric(in byte[] inputBytes, in String inputUri, in boolean useAsciiArmor, - in int compression, in long[] encryptionKeyIds, in int symmetricEncryptionAlgorithm, - in IKeychainEncryptHandler handler); - - /** - * Same as encryptAsymmetric but using a passphrase for symmetric encryption - * - * @param encryptionPassphrase - * Passphrase for direct symmetric encryption using symmetricEncryptionAlgorithm - */ - oneway void encryptSymmetric(in byte[] inputBytes, in String inputUri, in boolean useAsciiArmor, - in int compression, in String encryptionPassphrase, in int symmetricEncryptionAlgorithm, - in IKeychainEncryptHandler handler); - - /** - * Encrypt and sign - * - * Either inputBytes or inputUri is given, the other should be null. - * - * @param inputBytes - * Byte array you want to encrypt - * @param inputUri - * Blob in ContentProvider you want to encrypt - * @param useAsciiArmor - * Convert bytes to ascii armored text to guard against encoding problems - * @param compression - * Compression: 0x21070001: none, 1: Zip, 2: Zlib, 3: BZip2 - * @param encryptionKeyIds - * Ids of public keys used for encryption - * @param symmetricEncryptionAlgorithm - * 7: AES-128, 8: AES-192, 9: AES-256, 4: Blowfish, 10: Twofish, 3: CAST5, - * 6: DES, 2: Triple DES, 1: IDEA - * @param signatureKeyId - * Key id of key to sign with - * @param signatureHashAlgorithm - * 1: MD5, 3: RIPEMD-160, 2: SHA-1, 11: SHA-224, 8: SHA-256, 9: SHA-384, - * 10: SHA-512 - * @param signatureForceV3 - * Force V3 signatures - * @param signaturePassphrase - * Passphrase to unlock signature key - * @param handler - * Results are returned to this Handler after successful encryption and signing - */ - oneway void encryptAndSignAsymmetric(in byte[] inputBytes, in String inputUri, - in boolean useAsciiArmor, in int compression, in long[] encryptionKeyIds, - in int symmetricEncryptionAlgorithm, in long signatureKeyId, in int signatureHashAlgorithm, - in boolean signatureForceV3, in String signaturePassphrase, - in IKeychainEncryptHandler handler); - - /** - * Same as encryptAndSignAsymmetric but using a passphrase for symmetric encryption - * - * @param encryptionPassphrase - * Passphrase for direct symmetric encryption using symmetricEncryptionAlgorithm - */ - oneway void encryptAndSignSymmetric(in byte[] inputBytes, in String inputUri, - in boolean useAsciiArmor, in int compression, in String encryptionPassphrase, - in int symmetricEncryptionAlgorithm, in long signatureKeyId, in int signatureHashAlgorithm, - in boolean signatureForceV3, in String signaturePassphrase, - in IKeychainEncryptHandler handler); - - /** - * Decrypts and verifies given input bytes. If no signature is present this method - * will only decrypt. - * - * @param inputBytes - * Byte array you want to decrypt and verify - * @param inputUri - * Blob in ContentProvider you want to decrypt and verify - * @param keyPassphrase - * Passphrase to unlock secret key for decryption. - * @param handler - * Handler where to return results to after successful encryption - */ - oneway void decryptAndVerifyAsymmetric(in byte[] inputBytes, in String inputUri, - in String keyPassphrase, in IKeychainDecryptHandler handler); - - /** - * Same as decryptAndVerifyAsymmetric but for symmetric decryption. - * - * @param encryptionPassphrase - * Passphrase to decrypt - */ - oneway void decryptAndVerifySymmetric(in byte[] inputBytes, in String inputUri, - in String encryptionPassphrase, in IKeychainDecryptHandler handler); - - /** - * - */ - oneway void getDecryptionKeyId(in byte[] inputBytes, in String inputUri, - in IKeychainGetDecryptionKeyIdHandler handler); - - -} \ No newline at end of file diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/KeychainApiService.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/KeychainApiService.java deleted file mode 100644 index d7457f132..000000000 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/KeychainApiService.java +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright (C) 2012-2013 Dominik Schürmann - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ - -package org.sufficientlysecure.keychain.service; - -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.SignatureException; - -import org.spongycastle.openpgp.PGPException; -import org.sufficientlysecure.keychain.Constants; -import org.sufficientlysecure.keychain.Id; -import org.sufficientlysecure.keychain.helper.PgpMain; -import org.sufficientlysecure.keychain.helper.PgpMain.PgpGeneralException; -import org.sufficientlysecure.keychain.util.InputData; -import org.sufficientlysecure.keychain.util.Log; -import org.sufficientlysecure.keychain.R; -import org.sufficientlysecure.keychain.service.IKeychainApiService; -import org.sufficientlysecure.keychain.service.handler.IKeychainDecryptHandler; -import org.sufficientlysecure.keychain.service.handler.IKeychainEncryptHandler; -import org.sufficientlysecure.keychain.service.handler.IKeychainGetDecryptionKeyIdHandler; - -import android.app.Service; -import android.content.Context; -import android.content.Intent; -import android.os.Bundle; -import android.os.IBinder; -import android.os.RemoteException; - -public class KeychainApiService extends Service { - Context mContext; - - @Override - public void onCreate() { - super.onCreate(); - mContext = this; - Log.d(Constants.TAG, "KeychainApiService, onCreate()"); - } - - @Override - public void onDestroy() { - super.onDestroy(); - Log.d(Constants.TAG, "KeychainApiService, onDestroy()"); - } - - @Override - public IBinder onBind(Intent intent) { - return mBinder; - } - - // private static void writeToOutputStream(InputStream is, OutputStream os) throws IOException { - // byte[] buffer = new byte[8]; - // int len = 0; - // while ((len = is.read(buffer)) != -1) { - // os.write(buffer, 0, len); - // } - // } - - private synchronized void encryptAndSignSafe(byte[] inputBytes, String inputUri, - boolean useAsciiArmor, int compression, long[] encryptionKeyIds, - String encryptionPassphrase, int symmetricEncryptionAlgorithm, long signatureKeyId, - int signatureHashAlgorithm, boolean signatureForceV3, String signaturePassphrase, - IKeychainEncryptHandler handler) throws RemoteException { - - try { - // TODO use inputUri - - // InputStream inStream = null; - // if (isBlob) { - // ContentResolver cr = getContentResolver(); - // try { - // inStream = cr.openInputStream(Uri.parse(pArgs.getString(arg.BLOB.name()))); - // } catch (Exception e) { - // Log.e(TAG, "... exception on opening blob", e); - // } - // } else { - // inStream = new ByteArrayInputStream(pArgs.getString(arg.MESSAGE.name()).getBytes()); - // } - // InputData in = new InputData(inStream, 0); // XXX Size second param? - - // build InputData and write into OutputStream - InputStream inputStream = new ByteArrayInputStream(inputBytes); - long inputLength = inputBytes.length; - InputData input = new InputData(inputStream, inputLength); - - OutputStream output = new ByteArrayOutputStream(); -// -// PgpMain.encryptAndSign(mContext, null, input, output, useAsciiArmor, compression, -// encryptionKeyIds, encryptionPassphrase, symmetricEncryptionAlgorithm, -// signatureKeyId, signatureHashAlgorithm, signatureForceV3, signaturePassphrase); -// -// output.close(); - - // if (isBlob) { - // ContentResolver cr = getContentResolver(); - // try { - // OutputStream outStream = cr.openOutputStream(Uri.parse(pArgs.getString(arg.BLOB - // .name()))); - // writeToOutputStream(new ByteArrayInputStream(out.toString().getBytes()), outStream); - // outStream.close(); - // } catch (Exception e) { - // Log.e(TAG, "... exception on writing blob", e); - // } - // } else { - // pReturn.putString(ret.RESULT.name(), out.toString()); - // } - - byte[] outputBytes = ((ByteArrayOutputStream) output).toByteArray(); - - // return over handler on client side - handler.onSuccess(outputBytes, null); - } catch (Exception e) { - Log.e(Constants.TAG, "KeychainService, Exception!", e); - - try { - handler.onException(getExceptionId(e), e.getMessage()); - } catch (Exception t) { - Log.e(Constants.TAG, "Error returning exception to client", t); - } - } - } - - private synchronized void decryptAndVerifySafe(byte[] inputBytes, String inputUri, - String passphrase, boolean assumeSymmetric, IKeychainDecryptHandler handler) - throws RemoteException { - - try { - // build InputData and write into OutputStream - InputStream inputStream = new ByteArrayInputStream(inputBytes); - long inputLength = inputBytes.length; - InputData inputData = new InputData(inputStream, inputLength); - - OutputStream outputStream = new ByteArrayOutputStream(); - - Bundle outputBundle = PgpMain.decryptAndVerify(mContext, null, inputData, outputStream, - passphrase, assumeSymmetric); - - outputStream.close(); - - byte[] outputBytes = ((ByteArrayOutputStream) outputStream).toByteArray(); - - // get signature informations from bundle - boolean signature = outputBundle.getBoolean(KeychainIntentService.RESULT_SIGNATURE); - long signatureKeyId = outputBundle - .getLong(KeychainIntentService.RESULT_SIGNATURE_KEY_ID); - String signatureUserId = outputBundle - .getString(KeychainIntentService.RESULT_SIGNATURE_USER_ID); - boolean signatureSuccess = outputBundle - .getBoolean(KeychainIntentService.RESULT_SIGNATURE_SUCCESS); - boolean signatureUnknown = outputBundle - .getBoolean(KeychainIntentService.RESULT_SIGNATURE_UNKNOWN); - - // return over handler on client side - handler.onSuccess(outputBytes, null, signature, signatureKeyId, signatureUserId, - signatureSuccess, signatureUnknown); - } catch (Exception e) { - Log.e(Constants.TAG, "KeychainService, Exception!", e); - - try { - handler.onException(getExceptionId(e), e.getMessage()); - } catch (Exception t) { - Log.e(Constants.TAG, "Error returning exception to client", t); - } - } - } - - private synchronized void getDecryptionKeySafe(byte[] inputBytes, String inputUri, - IKeychainGetDecryptionKeyIdHandler handler) { - - // TODO: implement inputUri - - try { - InputStream inputStream = new ByteArrayInputStream(inputBytes); - - long secretKeyId = Id.key.none; - boolean symmetric; - - try { - secretKeyId = PgpMain.getDecryptionKeyId(KeychainApiService.this, inputStream); - if (secretKeyId == Id.key.none) { - throw new PgpGeneralException(getString(R.string.error_noSecretKeyFound)); - } - symmetric = false; - } catch (PgpMain.NoAsymmetricEncryptionException e) { - secretKeyId = Id.key.symmetric; - if (!PgpMain.hasSymmetricEncryption(KeychainApiService.this, inputStream)) { - throw new PgpGeneralException(getString(R.string.error_noKnownEncryptionFound)); - } - symmetric = true; - } - - handler.onSuccess(secretKeyId, symmetric); - - } catch (Exception e) { - Log.e(Constants.TAG, "KeychainService, Exception!", e); - - try { - handler.onException(getExceptionId(e), e.getMessage()); - } catch (Exception t) { - Log.e(Constants.TAG, "Error returning exception to client", t); - } - } - } - - /** - * This is the implementation of the interface IKeychainService. All methods are oneway, meaning - * asynchronous and return to the client using IKeychainHandler. - * - * The real PGP code is located in PGPMain. - */ - private final IKeychainApiService.Stub mBinder = new IKeychainApiService.Stub() { - - @Override - public void encryptAsymmetric(byte[] inputBytes, String inputUri, boolean useAsciiArmor, - int compression, long[] encryptionKeyIds, int symmetricEncryptionAlgorithm, - IKeychainEncryptHandler handler) throws RemoteException { - - encryptAndSignSafe(inputBytes, inputUri, useAsciiArmor, compression, encryptionKeyIds, - null, symmetricEncryptionAlgorithm, Id.key.none, 0, false, null, handler); - } - - @Override - public void encryptSymmetric(byte[] inputBytes, String inputUri, boolean useAsciiArmor, - int compression, String encryptionPassphrase, int symmetricEncryptionAlgorithm, - IKeychainEncryptHandler handler) throws RemoteException { - - encryptAndSignSafe(inputBytes, inputUri, useAsciiArmor, compression, null, - encryptionPassphrase, symmetricEncryptionAlgorithm, Id.key.none, 0, false, - null, handler); - } - - @Override - public void encryptAndSignAsymmetric(byte[] inputBytes, String inputUri, - boolean useAsciiArmor, int compression, long[] encryptionKeyIds, - int symmetricEncryptionAlgorithm, long signatureKeyId, int signatureHashAlgorithm, - boolean signatureForceV3, String signaturePassphrase, - IKeychainEncryptHandler handler) throws RemoteException { - - encryptAndSignSafe(inputBytes, inputUri, useAsciiArmor, compression, encryptionKeyIds, - null, symmetricEncryptionAlgorithm, signatureKeyId, signatureHashAlgorithm, - signatureForceV3, signaturePassphrase, handler); - } - - @Override - public void encryptAndSignSymmetric(byte[] inputBytes, String inputUri, - boolean useAsciiArmor, int compression, String encryptionPassphrase, - int symmetricEncryptionAlgorithm, long signatureKeyId, int signatureHashAlgorithm, - boolean signatureForceV3, String signaturePassphrase, - IKeychainEncryptHandler handler) throws RemoteException { - - encryptAndSignSafe(inputBytes, inputUri, useAsciiArmor, compression, null, - encryptionPassphrase, symmetricEncryptionAlgorithm, signatureKeyId, - signatureHashAlgorithm, signatureForceV3, signaturePassphrase, handler); - } - - @Override - public void decryptAndVerifyAsymmetric(byte[] inputBytes, String inputUri, - String keyPassphrase, IKeychainDecryptHandler handler) throws RemoteException { - - decryptAndVerifySafe(inputBytes, inputUri, keyPassphrase, false, handler); - } - - @Override - public void decryptAndVerifySymmetric(byte[] inputBytes, String inputUri, - String encryptionPassphrase, IKeychainDecryptHandler handler) - throws RemoteException { - - decryptAndVerifySafe(inputBytes, inputUri, encryptionPassphrase, true, handler); - } - - @Override - public void getDecryptionKeyId(byte[] inputBytes, String inputUri, - IKeychainGetDecryptionKeyIdHandler handler) throws RemoteException { - - getDecryptionKeySafe(inputBytes, inputUri, handler); - } - - }; - - /** - * As we can not throw an exception through Android RPC, we assign identifiers to the exception - * types. - * - * @param e - * @return - */ - private int getExceptionId(Exception e) { - if (e instanceof NoSuchProviderException) { - return 0; - } else if (e instanceof NoSuchAlgorithmException) { - return 1; - } else if (e instanceof SignatureException) { - return 2; - } else if (e instanceof IOException) { - return 3; - } else if (e instanceof PgpGeneralException) { - return 4; - } else if (e instanceof PGPException) { - return 5; - } else { - return -1; - } - } - -} diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainDecryptHandler.aidl b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainDecryptHandler.aidl deleted file mode 100644 index 31ead701d..000000000 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainDecryptHandler.aidl +++ /dev/null @@ -1,27 +0,0 @@ -/* - * Copyright (C) 2012 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.sufficientlysecure.keychain.service.handler; - -interface IKeychainDecryptHandler { - - oneway void onSuccess(in byte[] outputBytes, in String outputUri, in boolean signature, - in long signatureKeyId, in String signatureUserId, in boolean signatureSuccess, - in boolean signatureUnknown); - - - oneway void onException(in int exceptionNumber, in String message); -} \ No newline at end of file diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainEncryptHandler.aidl b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainEncryptHandler.aidl deleted file mode 100644 index 5b21a0613..000000000 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainEncryptHandler.aidl +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2012 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.sufficientlysecure.keychain.service.handler; - -interface IKeychainEncryptHandler { - /** - * Either output or streamUri is given. One of them is null - * - */ - oneway void onSuccess(in byte[] outputBytes, in String outputUri); - - - oneway void onException(in int exceptionNumber, in String message); -} \ No newline at end of file diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainGetDecryptionKeyIdHandler.aidl b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainGetDecryptionKeyIdHandler.aidl deleted file mode 100644 index 2fff74a92..000000000 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainGetDecryptionKeyIdHandler.aidl +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2012 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.sufficientlysecure.keychain.service.handler; - -interface IKeychainGetDecryptionKeyIdHandler { - - oneway void onSuccess(in long secretKeyId, in boolean symmetric); - - - oneway void onException(in int exceptionNumber, in String message); -} \ No newline at end of file diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainSignHandler.aidl b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainSignHandler.aidl deleted file mode 100644 index 69badab4c..000000000 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainSignHandler.aidl +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (C) 2012 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.sufficientlysecure.keychain.service.handler; - -interface IKeychainSignHandler { - /** - * Either output or streamUri is given. One of them is null - * - */ - oneway void onSuccess(in byte[] outputBytes, in String outputUri); - - - oneway void onException(in int exceptionNumber, in String message); -} \ No newline at end of file diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainVerifyHandler.aidl b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainVerifyHandler.aidl deleted file mode 100644 index aaa9a7f6a..000000000 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/service/handler/IKeychainVerifyHandler.aidl +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2012 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.sufficientlysecure.keychain.service.handler; - -interface IKeychainVerifyHandler { - - oneway void onSuccess(in boolean signature, in long signatureKeyId, - in String signatureUserId, in boolean signatureSuccess, in boolean signatureUnknown); - - - oneway void onException(in int exceptionNumber, in String message); -} \ No newline at end of file diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/DecryptActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/DecryptActivity.java index 359fe4959..61ea960d1 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/DecryptActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/DecryptActivity.java @@ -17,13 +17,21 @@ package org.sufficientlysecure.keychain.ui; +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.regex.Matcher; + import org.spongycastle.openpgp.PGPPublicKeyRing; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.Id; +import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.compatibility.ClipboardReflection; import org.sufficientlysecure.keychain.helper.ActionBarHelper; import org.sufficientlysecure.keychain.helper.FileHelper; -import org.sufficientlysecure.keychain.helper.OtherHelper; import org.sufficientlysecure.keychain.helper.PgpHelper; import org.sufficientlysecure.keychain.helper.PgpMain; import org.sufficientlysecure.keychain.provider.ProviderHelper; @@ -35,12 +43,8 @@ import org.sufficientlysecure.keychain.ui.dialog.FileDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.LookupUnknownKeyDialogFragment; import org.sufficientlysecure.keychain.ui.dialog.PassphraseDialogFragment; import org.sufficientlysecure.keychain.util.Log; -import org.sufficientlysecure.keychain.R; - -import com.actionbarsherlock.app.SherlockFragmentActivity; -import com.actionbarsherlock.view.Menu; -import com.actionbarsherlock.view.MenuItem; +import android.annotation.SuppressLint; import android.app.ProgressDialog; import android.content.Intent; import android.net.Uri; @@ -60,14 +64,11 @@ import android.widget.TextView; import android.widget.Toast; import android.widget.ViewFlipper; -import java.io.ByteArrayInputStream; -import java.io.File; -import java.io.FileInputStream; -import java.io.BufferedInputStream; -import java.io.FileNotFoundException; -import java.io.InputStream; -import java.util.regex.Matcher; +import com.actionbarsherlock.app.SherlockFragmentActivity; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuItem; +@SuppressLint("NewApi") public class DecryptActivity extends SherlockFragmentActivity { /* Intents */ @@ -75,16 +76,10 @@ public class DecryptActivity extends SherlockFragmentActivity { public static final String ACTION_DECRYPT = Constants.INTENT_PREFIX + "DECRYPT"; public static final String ACTION_DECRYPT_FILE = Constants.INTENT_PREFIX + "DECRYPT_FILE"; - // with permission - public static final String ACTION_DECRYPT_AND_RETURN = Constants.INTENT_PREFIX - + "DECRYPT_AND_RETURN"; - public static final String ACTION_DECRYPT_STREAM_AND_RETURN = Constants.INTENT_PREFIX - + "DECRYPT_STREAM_AND_RETURN"; - /* EXTRA keys for input */ public static final String EXTRA_TEXT = "text"; public static final String EXTRA_DATA = "data"; - public static final String EXTRA_REPLY_TO = "replyTo"; + public static final String EXTRA_REPLY_TO = "reply_to"; public static final String EXTRA_SUBJECT = "subject"; public static final String EXTRA_BINARY = "binary"; @@ -248,11 +243,6 @@ public class DecryptActivity extends SherlockFragmentActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - // check permissions for intent actions without user interaction - String[] restrictedActions = new String[] { ACTION_DECRYPT_AND_RETURN }; - OtherHelper.checkPackagePermissionForActions(this, this.getCallingPackage(), - Constants.PERMISSION_ACCESS_API, getIntent().getAction(), restrictedActions); - setContentView(R.layout.decrypt); // set actionbar without home button if called from another app @@ -456,38 +446,39 @@ public class DecryptActivity extends SherlockFragmentActivity { // end activity finish(); } - } else if (ACTION_DECRYPT_AND_RETURN.equals(action)) { - mReturnBinary = extras.getBoolean(EXTRA_BINARY, false); - - if (mContentUri == null) { - mDataBytes = extras.getByteArray(EXTRA_DATA); - String data = extras.getString(EXTRA_TEXT); - if (data != null) { - Matcher matcher = PgpMain.PGP_MESSAGE.matcher(data); - if (matcher.matches()) { - data = matcher.group(1); - // replace non breakable spaces - data = data.replaceAll("\\xa0", " "); - mMessage.setText(data); - } else { - matcher = PgpMain.PGP_SIGNED_MESSAGE.matcher(data); - if (matcher.matches()) { - data = matcher.group(1); - // replace non breakable spaces - data = data.replaceAll("\\xa0", " "); - mMessage.setText(data); - mDecryptString = getString(R.string.btn_verify); - - // build new action bar - invalidateOptionsMenu(); - } - } - } - } - mReturnResult = true; - } else if (ACTION_DECRYPT_STREAM_AND_RETURN.equals(action)) { - // TODO: Implement decrypt stream } + // } else if (ACTION_DECRYPT_AND_RETURN.equals(action)) { + // mReturnBinary = extras.getBoolean(EXTRA_BINARY, false); + // + // if (mContentUri == null) { + // mDataBytes = extras.getByteArray(EXTRA_DATA); + // String data = extras.getString(EXTRA_TEXT); + // if (data != null) { + // Matcher matcher = PgpMain.PGP_MESSAGE.matcher(data); + // if (matcher.matches()) { + // data = matcher.group(1); + // // replace non breakable spaces + // data = data.replaceAll("\\xa0", " "); + // mMessage.setText(data); + // } else { + // matcher = PgpMain.PGP_SIGNED_MESSAGE.matcher(data); + // if (matcher.matches()) { + // data = matcher.group(1); + // // replace non breakable spaces + // data = data.replaceAll("\\xa0", " "); + // mMessage.setText(data); + // mDecryptString = getString(R.string.btn_verify); + // + // // build new action bar + // invalidateOptionsMenu(); + // } + // } + // } + // } + // mReturnResult = true; + // } else if (ACTION_DECRYPT_STREAM_AND_RETURN.equals(action)) { + // // TODO: Implement decrypt stream + // } } private void guessOutputFilename() { @@ -662,7 +653,8 @@ public class DecryptActivity extends SherlockFragmentActivity { try { try { if (inStream.markSupported()) { - inStream.mark(200); //should probably set this to the max size of two pgpF objects, if it even needs to be anything other than 0. + inStream.mark(200); // should probably set this to the max size of two pgpF + // objects, if it even needs to be anything other than 0. } mSecretKeyId = PgpMain.getDecryptionKeyId(this, inStream); if (mSecretKeyId == Id.key.none) { @@ -781,7 +773,8 @@ public class DecryptActivity extends SherlockFragmentActivity { data.putByteArray(KeychainIntentService.DECRYPT_CIPHERTEXT_BYTES, mDataBytes); } else { String message = mMessage.getText().toString(); - data.putByteArray(KeychainIntentService.DECRYPT_CIPHERTEXT_BYTES, message.getBytes()); + data.putByteArray(KeychainIntentService.DECRYPT_CIPHERTEXT_BYTES, + message.getBytes()); } } @@ -877,7 +870,8 @@ public class DecryptActivity extends SherlockFragmentActivity { if (returnData.getBoolean(KeychainIntentService.RESULT_SIGNATURE_SUCCESS)) { mSignatureStatusImage.setImageResource(R.drawable.overlay_ok); - } else if (returnData.getBoolean(KeychainIntentService.RESULT_SIGNATURE_UNKNOWN)) { + } else if (returnData + .getBoolean(KeychainIntentService.RESULT_SIGNATURE_UNKNOWN)) { mSignatureStatusImage.setImageResource(R.drawable.overlay_error); Toast.makeText(DecryptActivity.this, R.string.unknownSignatureKeyTouchToLookUp, Toast.LENGTH_LONG) @@ -952,4 +946,3 @@ public class DecryptActivity extends SherlockFragmentActivity { } } - diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/EditKeyActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/EditKeyActivity.java index 4137a1b19..84b648c19 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/EditKeyActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/EditKeyActivity.java @@ -65,20 +65,20 @@ import com.actionbarsherlock.app.SherlockFragmentActivity; public class EditKeyActivity extends SherlockFragmentActivity { - // possible intent actions for this activity - public static final String ACTION_CREATE_KEY = Constants.INTENT_PREFIX + "CREATE_KEYRING"; - public static final String ACTION_EDIT_KEY = Constants.INTENT_PREFIX + "EDIT_KEYRING"; + // Actions for internal use only: + public static final String ACTION_CREATE_KEY = Constants.INTENT_PREFIX + "CREATE_KEY"; + public static final String ACTION_EDIT_KEY = Constants.INTENT_PREFIX + "EDIT_KEY"; // possible extra keys - public static final String EXTRA_USER_IDS = "userIds"; - public static final String EXTRA_NO_PASSPHRASE = "noPassphrase"; - public static final String EXTRA_GENERATE_DEFAULT_KEYS = "generateDefaultKeys"; - public static final String EXTRA_MASTER_KEY_ID = "masterKeyId"; - public static final String EXTRA_MASTER_CAN_SIGN = "masterCanSign"; + public static final String EXTRA_USER_IDS = "user_ids"; + public static final String EXTRA_NO_PASSPHRASE = "no_passphrase"; + public static final String EXTRA_GENERATE_DEFAULT_KEYS = "generate_default_keys"; + public static final String EXTRA_MASTER_KEY_ID = "master_key_id"; + public static final String EXTRA_MASTER_CAN_SIGN = "master_can_sign"; // results when saving key - public static final String RESULT_EXTRA_MASTER_KEY_ID = "masterKeyId"; - public static final String RESULT_EXTRA_USER_ID = "userId"; + public static final String RESULT_EXTRA_MASTER_KEY_ID = "master_key_id"; + public static final String RESULT_EXTRA_USER_ID = "user_id"; private ActionBar mActionBar; @@ -106,12 +106,6 @@ public class EditKeyActivity extends SherlockFragmentActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - // TODO: disabled, old API! - // check permissions for intent actions without user interaction - // String[] restrictedActions = new String[] { ACTION_CREATE_KEY }; - // OtherHelper.checkPackagePermissionForActions(this, this.getCallingPackage(), - // Constants.PERMISSION_ACCESS_API, getIntent().getAction(), restrictedActions); - // Inflate a "Done"/"Cancel" custom action bar view final LayoutInflater inflater = (LayoutInflater) getSupportActionBar().getThemedContext() .getSystemService(LAYOUT_INFLATER_SERVICE); diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/EncryptActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/EncryptActivity.java index c4f416b10..5961d3712 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/EncryptActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/EncryptActivity.java @@ -30,7 +30,6 @@ import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.compatibility.ClipboardReflection; import org.sufficientlysecure.keychain.helper.ActionBarHelper; import org.sufficientlysecure.keychain.helper.FileHelper; -import org.sufficientlysecure.keychain.helper.OtherHelper; import org.sufficientlysecure.keychain.helper.PgpHelper; import org.sufficientlysecure.keychain.helper.PgpMain; import org.sufficientlysecure.keychain.helper.Preferences; @@ -77,29 +76,20 @@ public class EncryptActivity extends SherlockFragmentActivity { public static final String ACTION_ENCRYPT = Constants.INTENT_PREFIX + "ENCRYPT"; public static final String ACTION_ENCRYPT_FILE = Constants.INTENT_PREFIX + "ENCRYPT_FILE"; - // with permission - public static final String ACTION_ENCRYPT_AND_RETURN = Constants.INTENT_PREFIX - + "ENCRYPT_AND_RETURN"; - public static final String ACTION_ENCRYPT_STREAM_AND_RETURN = Constants.INTENT_PREFIX - + "ENCRYPT_STREAM_AND_RETURN"; - public static final String ACTION_GENERATE_SIGNATURE_AND_RETURN = Constants.INTENT_PREFIX - + "GENERATE_SIGNATURE_AND_RETURN"; - /* EXTRA keys for input */ public static final String EXTRA_TEXT = "text"; public static final String EXTRA_DATA = "data"; - public static final String EXTRA_ASCII_ARMOUR = "asciiArmour"; - public static final String EXTRA_SEND_TO = "sendTo"; + public static final String EXTRA_ASCII_ARMOUR = "ascii_armor"; + public static final String EXTRA_SEND_TO = "send_to"; public static final String EXTRA_SUBJECT = "subject"; - public static final String EXTRA_SIGNATURE_KEY_ID = "signatureKeyId"; - public static final String EXTRA_ENCRYPTION_KEY_IDS = "encryptionKeyIds"; + public static final String EXTRA_SIGNATURE_KEY_ID = "signature_key_id"; + public static final String EXTRA_ENCRYPTION_KEY_IDS = "encryption_key_ids"; private String mSubject = null; private String mSendTo = null; private long mEncryptionKeyIds[] = null; - private boolean mEncryptImmediately = false; private EditText mMessage = null; private Button mSelectKeysButton = null; @@ -197,12 +187,6 @@ public class EncryptActivity extends SherlockFragmentActivity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - // check permissions for intent actions without user interaction - String[] restrictedActions = new String[] { ACTION_ENCRYPT_AND_RETURN, - ACTION_GENERATE_SIGNATURE_AND_RETURN, ACTION_ENCRYPT_STREAM_AND_RETURN }; - OtherHelper.checkPackagePermissionForActions(this, this.getCallingPackage(), - Constants.PERMISSION_ACCESS_API, getIntent().getAction(), restrictedActions); - setContentView(R.layout.encrypt); // set actionbar without home button if called from another app @@ -217,26 +201,26 @@ public class EncryptActivity extends SherlockFragmentActivity { updateSource(); updateMode(); - if (mEncryptImmediately) { - mSourcePrevious.setClickable(false); - mSourcePrevious.setEnabled(false); - mSourcePrevious.setVisibility(View.INVISIBLE); - - mSourceNext.setClickable(false); - mSourceNext.setEnabled(false); - mSourceNext.setVisibility(View.INVISIBLE); - - mSourceLabel.setClickable(false); - mSourceLabel.setEnabled(false); - } + // if (mEncryptImmediately) { + // mSourcePrevious.setClickable(false); + // mSourcePrevious.setEnabled(false); + // mSourcePrevious.setVisibility(View.INVISIBLE); + // + // mSourceNext.setClickable(false); + // mSourceNext.setEnabled(false); + // mSourceNext.setVisibility(View.INVISIBLE); + // + // mSourceLabel.setClickable(false); + // mSourceLabel.setEnabled(false); + // } updateActionBarButtons(); - if (mEncryptImmediately - && (mMessage.getText().length() > 0 || mData != null) - && ((mEncryptionKeyIds != null && mEncryptionKeyIds.length > 0) || mSecretKeyId != 0)) { - encryptClicked(); - } + // if (mEncryptImmediately + // && (mMessage.getText().length() > 0 || mData != null) + // && ((mEncryptionKeyIds != null && mEncryptionKeyIds.length > 0) || mSecretKeyId != 0)) { + // encryptClicked(); + // } } /** @@ -276,16 +260,16 @@ public class EncryptActivity extends SherlockFragmentActivity { } } - if (ACTION_ENCRYPT_AND_RETURN.equals(action) - || ACTION_GENERATE_SIGNATURE_AND_RETURN.equals(action)) { - mEncryptImmediately = true; - } - - if (ACTION_GENERATE_SIGNATURE_AND_RETURN.equals(action)) { - mGenerateSignature = true; - mOverrideAsciiArmour = true; - mAsciiArmorDemand = false; - } + // if (ACTION_ENCRYPT_AND_RETURN.equals(action) + // || ACTION_GENERATE_SIGNATURE_AND_RETURN.equals(action)) { + // mEncryptImmediately = true; + // } + // + // if (ACTION_GENERATE_SIGNATURE_AND_RETURN.equals(action)) { + // mGenerateSignature = true; + // mOverrideAsciiArmour = true; + // mAsciiArmorDemand = false; + // } if (extras.containsKey(EXTRA_ASCII_ARMOUR)) { mAsciiArmorDemand = extras.getBoolean(EXTRA_ASCII_ARMOUR, true); @@ -309,8 +293,9 @@ public class EncryptActivity extends SherlockFragmentActivity { /** * Main Actions */ - if (ACTION_ENCRYPT.equals(action) || ACTION_ENCRYPT_AND_RETURN.equals(action) - || ACTION_GENERATE_SIGNATURE_AND_RETURN.equals(action)) { + // if (ACTION_ENCRYPT.equals(action) || ACTION_ENCRYPT_AND_RETURN.equals(action) + // || ACTION_GENERATE_SIGNATURE_AND_RETURN.equals(action)) { + if (ACTION_ENCRYPT.equals(action)) { if (textData != null) { mMessage.setText(textData); } @@ -340,10 +325,10 @@ public class EncryptActivity extends SherlockFragmentActivity { // end activity finish(); } - } else if (ACTION_ENCRYPT_STREAM_AND_RETURN.equals(action)) { - // TODO: Set mStreamAndReturnUri that is used later to encrypt a stream! - - mStreamAndReturnUri = uri; + // } else if (ACTION_ENCRYPT_STREAM_AND_RETURN.equals(action)) { + // // TODO: Set mStreamAndReturnUri that is used later to encrypt a stream! + // + // mStreamAndReturnUri = uri; } } @@ -470,31 +455,31 @@ public class EncryptActivity extends SherlockFragmentActivity { mSourceLabel.setText(R.string.label_message); if (mMode.getCurrentView().getId() == R.id.modeSymmetric) { - if (mEncryptImmediately) { - setActionbarButtons(true, R.string.btn_encrypt, false, 0); - } else { - setActionbarButtons(true, R.string.btn_encryptAndEmail, true, - R.string.btn_encryptToClipboard); - } + // if (mEncryptImmediately) { + // setActionbarButtons(true, R.string.btn_encrypt, false, 0); + // } else { + setActionbarButtons(true, R.string.btn_encryptAndEmail, true, + R.string.btn_encryptToClipboard); + // } } else { if (mEncryptionKeyIds == null || mEncryptionKeyIds.length == 0) { if (mSecretKeyId == 0) { setActionbarButtons(false, 0, false, 0); } else { - if (mEncryptImmediately) { - setActionbarButtons(true, R.string.btn_sign, false, 0); - } else { - setActionbarButtons(true, R.string.btn_signAndEmail, true, - R.string.btn_signToClipboard); - } + // if (mEncryptImmediately) { + // setActionbarButtons(true, R.string.btn_sign, false, 0); + // } else { + setActionbarButtons(true, R.string.btn_signAndEmail, true, + R.string.btn_signToClipboard); + // } } } else { - if (mEncryptImmediately) { - setActionbarButtons(true, R.string.btn_encrypt, false, 0); - } else { - setActionbarButtons(true, R.string.btn_encryptAndEmail, true, - R.string.btn_encryptToClipboard); - } + // if (mEncryptImmediately) { + // setActionbarButtons(true, R.string.btn_encrypt, false, 0); + // } else { + setActionbarButtons(true, R.string.btn_encryptAndEmail, true, + R.string.btn_encryptToClipboard); + // } } } break; @@ -726,7 +711,8 @@ public class EncryptActivity extends SherlockFragmentActivity { data.putByteArray(KeychainIntentService.ENCRYPT_MESSAGE_BYTES, mData); } else { String message = mMessage.getText().toString(); - if (signOnly && !mEncryptImmediately) { + // if (signOnly && !mEncryptImmediately) { + if (signOnly) { fixBadCharactersForGmail(message); } data.putByteArray(KeychainIntentService.ENCRYPT_MESSAGE_BYTES, message.getBytes()); @@ -769,13 +755,13 @@ public class EncryptActivity extends SherlockFragmentActivity { break; case Id.target.email: - if (mEncryptImmediately) { - Intent intent = new Intent(); - intent.putExtras(data); - setResult(RESULT_OK, intent); - finish(); - return; - } + // if (mEncryptImmediately) { + // Intent intent = new Intent(); + // intent.putExtras(data); + // setResult(RESULT_OK, intent); + // finish(); + // return; + // } output = data.getString(KeychainIntentService.RESULT_ENCRYPTED_STRING); Log.d(Constants.TAG, "output: " + output); diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java index 65a46b7a5..db3c5736c 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ImportKeysActivity.java @@ -48,17 +48,20 @@ import com.google.zxing.integration.android.IntentIntegrator; import com.google.zxing.integration.android.IntentResult; public class ImportKeysActivity extends SherlockFragmentActivity { - public static final String ACTION_IMPORT = Constants.INTENT_PREFIX + "IMPORT"; - public static final String ACTION_IMPORT_FROM_FILE = Constants.INTENT_PREFIX - + "IMPORT_FROM_FILE"; - public static final String ACTION_IMPORT_FROM_QR_CODE = Constants.INTENT_PREFIX - + "IMPORT_FROM_QR_CODE"; - public static final String ACTION_IMPORT_FROM_NFC = Constants.INTENT_PREFIX + "IMPORT_FROM_NFC"; + public static final String ACTION_KEY_IMPORT = Constants.INTENT_PREFIX + "KEY_IMPORT"; + public static final String ACTION_KEY_IMPORT_FROM_QR_CODE = Constants.INTENT_PREFIX + + "KEY_IMPORT_FROM_QR_CODE"; + + // Actions for internal use only: + public static final String ACTION_KEY_IMPORT_FROM_FILE = Constants.INTENT_PREFIX + + "KEY_IMPORT_FROM_FILE"; + public static final String ACTION_KEY_IMPORT_FROM_NFC = Constants.INTENT_PREFIX + + "KEY_IMPORT_FROM_NFC"; // only used by IMPORT - public static final String EXTRA_TEXT = "text"; - public static final String EXTRA_KEYRING_BYTES = "keyringBytes"; + public static final String EXTRA_KEYRING_BYTES = "keyring_bytes"; + // TODO: import keys from server // public static final String EXTRA_KEY_ID = "keyId"; protected String mImportFilename; @@ -140,35 +143,32 @@ public class ImportKeysActivity extends SherlockFragmentActivity { * Android Standard Actions */ if (Intent.ACTION_VIEW.equals(action)) { - // Android's Action when opening file associated to APG (see AndroidManifest.xml) - // override action to delegate it to APGs ACTION_IMPORT - action = ACTION_IMPORT; + // Android's Action when opening file associated to Keychain (see AndroidManifest.xml) + // override action to delegate it to Keychains ACTION_IMPORT + action = ACTION_KEY_IMPORT; } /** * APG's own Actions */ - if (ACTION_IMPORT.equals(action)) { + if (ACTION_KEY_IMPORT.equals(action)) { if ("file".equals(intent.getScheme()) && intent.getDataString() != null) { mImportFilename = intent.getData().getPath(); mImportData = null; - } else if (extras.containsKey(EXTRA_TEXT)) { - mImportData = intent.getStringExtra(EXTRA_TEXT).getBytes(); - mImportFilename = null; } else if (extras.containsKey(EXTRA_KEYRING_BYTES)) { mImportData = intent.getByteArrayExtra(EXTRA_KEYRING_BYTES); mImportFilename = null; } loadKeyListFragment(); - } else if (ACTION_IMPORT_FROM_FILE.equals(action)) { + } else if (ACTION_KEY_IMPORT_FROM_FILE.equals(action)) { if ("file".equals(intent.getScheme()) && intent.getDataString() != null) { mImportFilename = intent.getData().getPath(); mImportData = null; } showImportFromFileDialog(); - } else if (ACTION_IMPORT_FROM_QR_CODE.equals(action)) { + } else if (ACTION_KEY_IMPORT_FROM_QR_CODE.equals(action)) { importFromQrCode(); - } else if (ACTION_IMPORT_FROM_NFC.equals(action)) { + } else if (ACTION_KEY_IMPORT_FROM_NFC.equals(action)) { importFromNfc(); } } @@ -213,7 +213,7 @@ public class ImportKeysActivity extends SherlockFragmentActivity { Bundle data = message.getData(); mImportFilename = data.getString(FileDialogFragment.MESSAGE_DATA_FILENAME); mDeleteAfterImport = data.getBoolean(FileDialogFragment.MESSAGE_DATA_CHECKED); - + Log.d(Constants.TAG, "mImportFilename: " + mImportFilename); Log.d(Constants.TAG, "mDeleteAfterImport: " + mDeleteAfterImport); @@ -325,7 +325,7 @@ public class ImportKeysActivity extends SherlockFragmentActivity { Bundle data = new Bundle(); // TODO: check for key type? - // data.putInt(ApgIntentService.IMPORT_KEY_TYPE, Id.type.secret_key); + // data.putInt(KeychainIntentService.IMPORT_KEY_TYPE, Id.type.secret_key); if (mImportData != null) { data.putInt(KeychainIntentService.TARGET, KeychainIntentService.TARGET_BYTES); @@ -349,7 +349,8 @@ public class ImportKeysActivity extends SherlockFragmentActivity { Bundle returnData = message.getData(); int added = returnData.getInt(KeychainIntentService.RESULT_IMPORT_ADDED); - int updated = returnData.getInt(KeychainIntentService.RESULT_IMPORT_UPDATED); + int updated = returnData + .getInt(KeychainIntentService.RESULT_IMPORT_UPDATED); int bad = returnData.getInt(KeychainIntentService.RESULT_IMPORT_BAD); String toastMessage; if (added > 0 && updated > 0) { diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListActivity.java index d96308a40..08b4f6131 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListActivity.java @@ -154,7 +154,7 @@ public class KeyListActivity extends SherlockFragmentActivity { case Id.menu.option.import_from_file: { Intent intentImportFromFile = new Intent(this, ImportKeysActivity.class); - intentImportFromFile.setAction(ImportKeysActivity.ACTION_IMPORT_FROM_FILE); + intentImportFromFile.setAction(ImportKeysActivity.ACTION_KEY_IMPORT_FROM_FILE); startActivityForResult(intentImportFromFile, 0); return true; } diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListPublicActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListPublicActivity.java index 6b6447cd3..a839fd057 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListPublicActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyListPublicActivity.java @@ -67,7 +67,7 @@ public class KeyListPublicActivity extends KeyListActivity { } case Id.menu.option.import_from_file: { Intent intentImportFromFile = new Intent(this, ImportKeysActivity.class); - intentImportFromFile.setAction(ImportKeysActivity.ACTION_IMPORT_FROM_FILE); + intentImportFromFile.setAction(ImportKeysActivity.ACTION_KEY_IMPORT_FROM_FILE); startActivityForResult(intentImportFromFile, 0); return true; @@ -75,7 +75,7 @@ public class KeyListPublicActivity extends KeyListActivity { case Id.menu.option.import_from_qr_code: { Intent intentImportFromFile = new Intent(this, ImportKeysActivity.class); - intentImportFromFile.setAction(ImportKeysActivity.ACTION_IMPORT_FROM_QR_CODE); + intentImportFromFile.setAction(ImportKeysActivity.ACTION_KEY_IMPORT_FROM_QR_CODE); startActivityForResult(intentImportFromFile, Id.request.import_from_qr_code); return true; @@ -83,7 +83,7 @@ public class KeyListPublicActivity extends KeyListActivity { case Id.menu.option.import_from_nfc: { Intent intentImportFromFile = new Intent(this, ImportKeysActivity.class); - intentImportFromFile.setAction(ImportKeysActivity.ACTION_IMPORT_FROM_NFC); + intentImportFromFile.setAction(ImportKeysActivity.ACTION_KEY_IMPORT_FROM_NFC); startActivityForResult(intentImportFromFile, 0); return true; diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyServerQueryActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyServerQueryActivity.java index b409698b0..a5145d3df 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyServerQueryActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/KeyServerQueryActivity.java @@ -227,8 +227,8 @@ public class KeyServerQueryActivity extends SherlockFragmentActivity { if (mKeyData != null) { Intent intent = new Intent(KeyServerQueryActivity.this, ImportKeysActivity.class); - intent.setAction(ImportKeysActivity.ACTION_IMPORT); - intent.putExtra(ImportKeysActivity.EXTRA_TEXT, mKeyData); + intent.setAction(ImportKeysActivity.ACTION_KEY_IMPORT); + intent.putExtra(ImportKeysActivity.EXTRA_KEYRING_BYTES, mKeyData.getBytes()); startActivity(intent); } } diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectPublicKeyActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectPublicKeyActivity.java index 509d6d7eb..97d64434e 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectPublicKeyActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectPublicKeyActivity.java @@ -29,14 +29,14 @@ import com.actionbarsherlock.app.SherlockFragmentActivity; public class SelectPublicKeyActivity extends SherlockFragmentActivity { - // Not used in sourcode, but listed in AndroidManifest! + // Actions for internal use only: public static final String ACTION_SELECT_PUBLIC_KEYS = Constants.INTENT_PREFIX + "SELECT_PUBLIC_KEYRINGS"; - public static final String EXTRA_SELECTED_MASTER_KEY_IDS = "masterKeyIds"; + public static final String EXTRA_SELECTED_MASTER_KEY_IDS = "master_key_ids"; - public static final String RESULT_EXTRA_MASTER_KEY_IDS = "masterKeyIds"; - public static final String RESULT_EXTRA_USER_IDS = "userIds"; + public static final String RESULT_EXTRA_MASTER_KEY_IDS = "master_key_ids"; + public static final String RESULT_EXTRA_USER_IDS = "user_ids"; SelectPublicKeyFragment mSelectFragment; diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectSecretKeyActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectSecretKeyActivity.java index 624495925..b0711ed31 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectSecretKeyActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/SelectSecretKeyActivity.java @@ -30,14 +30,14 @@ import android.os.Bundle; public class SelectSecretKeyActivity extends SherlockFragmentActivity { - // Not used in sourcode, but listed in AndroidManifest! + // Actions for internal use only: public static final String ACTION_SELECT_SECRET_KEY = Constants.INTENT_PREFIX + "SELECT_SECRET_KEYRING"; public static final String EXTRA_FILTER_CERTIFY = "filter_certify"; - public static final String RESULT_EXTRA_MASTER_KEY_ID = "masterKeyId"; - public static final String RESULT_EXTRA_USER_ID = "userId"; + public static final String RESULT_EXTRA_MASTER_KEY_ID = "master_key_id"; + public static final String RESULT_EXTRA_USER_ID = "user_id"; private boolean mFilterCertify = false; private SelectSecretKeyFragment mSelectFragment; diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareActivity.java index 210cc5a48..c6fb728bc 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareActivity.java @@ -30,11 +30,12 @@ import android.content.Intent; import android.os.Bundle; public class ShareActivity extends SherlockFragmentActivity { + // Actions for internal use only: public static final String ACTION_SHARE_KEYRING = Constants.INTENT_PREFIX + "SHARE_KEYRING"; public static final String ACTION_SHARE_KEYRING_WITH_QR_CODE = Constants.INTENT_PREFIX + "SHARE_KEYRING_WITH_QR_CODE"; - public static final String EXTRA_MASTER_KEY_ID = "masterKeyId"; + public static final String EXTRA_MASTER_KEY_ID = "master_key_id"; @Override public void onCreate(Bundle savedInstanceState) { diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareNfcBeamActivity.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareNfcBeamActivity.java index 474e0a9e4..692cef749 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareNfcBeamActivity.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/ShareNfcBeamActivity.java @@ -115,7 +115,7 @@ public class ShareNfcBeamActivity extends SherlockFragmentActivity implements byte[] receivedKeyringBytes = msg.getRecords()[0].getPayload(); Intent importIntent = new Intent(this, ImportKeysActivity.class); - importIntent.setAction(ImportKeysActivity.ACTION_IMPORT); + importIntent.setAction(ImportKeysActivity.ACTION_KEY_IMPORT); importIntent.putExtra(ImportKeysActivity.EXTRA_KEYRING_BYTES, receivedKeyringBytes); finish();