aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2015-03-31 15:44:37 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2015-03-31 15:44:37 +0200
commitcc44ff1a8b3b51331023ef738ccd28bece32da40 (patch)
treeb3749d033f9dbc15dbe8d7f05e4c842c0623624d /OpenKeychain
parent6c706f8a90940bac1088a6c4bdd21e2df5089eca (diff)
downloadopen-keychain-cc44ff1a8b3b51331023ef738ccd28bece32da40.tar.gz
open-keychain-cc44ff1a8b3b51331023ef738ccd28bece32da40.tar.bz2
open-keychain-cc44ff1a8b3b51331023ef738ccd28bece32da40.zip
Prepare decrypt UI for input parcel
Diffstat (limited to 'OpenKeychain')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/input/CryptoInputParcel.java26
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java168
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextFragment.java14
3 files changed, 79 insertions, 129 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/input/CryptoInputParcel.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/input/CryptoInputParcel.java
index 21aacd1f0..3d1ccaca1 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/input/CryptoInputParcel.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/input/CryptoInputParcel.java
@@ -1,3 +1,20 @@
+/*
+ * Copyright (C) 2015 Dominik Schürmann <dominik@dominikschuermann.de>
+ *
+ * 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 <http://www.gnu.org/licenses/>.
+ */
+
package org.sufficientlysecure.keychain.service.input;
import java.nio.ByteBuffer;
@@ -11,9 +28,8 @@ import android.os.Parcelable;
import org.sufficientlysecure.keychain.util.Passphrase;
-
-/** This is a base class for the input of crypto operations.
- *
+/**
+ * This is a base class for the input of crypto operations.
*/
public class CryptoInputParcel implements Parcelable {
@@ -22,7 +38,7 @@ public class CryptoInputParcel implements Parcelable {
// this map contains both decrypted session keys and signed hashes to be
// used in the crypto operation described by this parcel.
- private HashMap<ByteBuffer,byte[]> mCryptoData = new HashMap<>();
+ private HashMap<ByteBuffer, byte[]> mCryptoData = new HashMap<>();
public CryptoInputParcel() {
mSignatureTime = new Date();
@@ -71,7 +87,7 @@ public class CryptoInputParcel implements Parcelable {
dest.writeParcelable(mPassphrase, 0);
dest.writeInt(mCryptoData.size());
- for (HashMap.Entry<ByteBuffer,byte[]> entry : mCryptoData.entrySet()) {
+ for (HashMap.Entry<ByteBuffer, byte[]> entry : mCryptoData.entrySet()) {
dest.writeByteArray(entry.getKey().array());
dest.writeByteArray(entry.getValue());
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java
index d1c005868..cd66902ba 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java
@@ -17,6 +17,7 @@
package org.sufficientlysecure.keychain.ui;
+import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
@@ -32,7 +33,6 @@ import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.TextView;
-import org.openintents.openpgp.util.OpenPgpApi;
import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult;
@@ -64,6 +64,8 @@ public class DecryptFilesFragment extends DecryptFragment {
private Uri mInputUri = null;
private Uri mOutputUri = null;
+ private String mCurrentCryptoOperation;
+
/**
* Creates new instance of this fragment
*/
@@ -145,7 +147,7 @@ public class DecryptFilesFragment extends DecryptFragment {
return;
}
-// decryptOriginalFilename();
+ startDecryptFilenames();
}
private String removeEncryptedAppend(String name) {
@@ -158,121 +160,45 @@ public class DecryptFilesFragment extends DecryptFragment {
}
private void askForOutputFilename(String originalFilename) {
- String targetName;
- if (!TextUtils.isEmpty(originalFilename)) {
- targetName = originalFilename;
- } else {
- targetName = removeEncryptedAppend(FileHelper.getFilename(getActivity(), mInputUri));
+ if (TextUtils.isEmpty(originalFilename)) {
+ originalFilename = removeEncryptedAppend(FileHelper.getFilename(getActivity(), mInputUri));
}
+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
File file = new File(mInputUri.getPath());
File parentDir = file.exists() ? file.getParentFile() : Constants.Path.APP_DIR;
- File targetFile = new File(parentDir, targetName);
+ File targetFile = new File(parentDir, originalFilename);
FileHelper.saveFile(this, getString(R.string.title_decrypt_to_file),
getString(R.string.specify_file_to_decrypt_to), targetFile, REQUEST_CODE_OUTPUT);
} else {
- FileHelper.saveDocument(this, "*/*", targetName, REQUEST_CODE_OUTPUT);
+ FileHelper.saveDocument(this, "*/*", originalFilename, REQUEST_CODE_OUTPUT);
}
}
+ private void startDecrypt() {
+ mCurrentCryptoOperation = KeychainIntentService.ACTION_DECRYPT_VERIFY;
+ cryptoOperation(new CryptoInputParcel());
+ }
- // TODO: also needs to use cryptoOperation!!! (switch between this and normal decrypt
-// private void decryptOriginalFilename() {
-// Log.d(Constants.TAG, "decryptOriginalFilename");
-//
-// Intent intent = new Intent(getActivity(), KeychainIntentService.class);
-//
-// // fill values for this action
-// Bundle data = new Bundle();
-// intent.setAction(KeychainIntentService.ACTION_DECRYPT_METADATA);
-//
-// // data
-// Log.d(Constants.TAG, "mInputUri=" + mInputUri + ", mOutputUri=" + mOutputUri);
-//
-// data.putInt(KeychainIntentService.SOURCE, IOType.URI.ordinal());
-// data.putParcelable(KeychainIntentService.ENCRYPT_DECRYPT_INPUT_URI, mInputUri);
-//
-// data.putInt(KeychainIntentService.TARGET, IOType.URI.ordinal());
-// data.putParcelable(KeychainIntentService.ENCRYPT_DECRYPT_OUTPUT_URI, mOutputUri);
-//
-// data.putParcelable(KeychainIntentService.DECRYPT_PASSPHRASE, mPassphrase);
-// data.putByteArray(KeychainIntentService.DECRYPT_NFC_DECRYPTED_SESSION_KEY, mNfcDecryptedSessionKey);
-//
-// intent.putExtra(KeychainIntentService.EXTRA_SERVICE_INTENT, data);
-//
-// // Message is received after decrypting is done in KeychainIntentService
-// ServiceProgressHandler saveHandler = new ServiceProgressHandler(
-// getActivity(),
-// getString(R.string.progress_decrypting),
-// ProgressDialog.STYLE_HORIZONTAL,
-// ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
-// public void handleMessage(Message message) {
-// // handle messages by standard KeychainIntentServiceHandler first
-// super.handleMessage(message);
-//
-// // handle pending messages
-// if (handlePendingMessage(message)) {
-// return;
-// }
-//
-// if (message.arg1 == MessageStatus.OKAY.ordinal()) {
-// // get returned data bundle
-// Bundle returnData = message.getData();
-//
-// DecryptVerifyResult pgpResult =
-// returnData.getParcelable(DecryptVerifyResult.EXTRA_RESULT);
-//
-// if (pgpResult.isPending()) {
-// if ((pgpResult.getResult() & DecryptVerifyResult.RESULT_PENDING_ASYM_PASSPHRASE) ==
-// DecryptVerifyResult.RESULT_PENDING_ASYM_PASSPHRASE) {
-// startPassphraseDialog(pgpResult.getKeyIdPassphraseNeeded());
-// } else if ((pgpResult.getResult() & DecryptVerifyResult.RESULT_PENDING_SYM_PASSPHRASE) ==
-// DecryptVerifyResult.RESULT_PENDING_SYM_PASSPHRASE) {
-// startPassphraseDialog(Constants.key.symmetric);
-// } else if ((pgpResult.getResult() & DecryptVerifyResult.RESULT_PENDING_NFC) ==
-// DecryptVerifyResult.RESULT_PENDING_NFC) {
-// startNfcDecrypt(pgpResult.getNfcSubKeyId(), pgpResult.getNfcPassphrase(), pgpResult.getNfcEncryptedSessionKey());
-// } else {
-// throw new RuntimeException("Unhandled pending result!");
-// }
-// } else if (pgpResult.success()) {
-// // go on...
-// askForOutputFilename(pgpResult.getDecryptMetadata().getFilename());
-// } else {
-// pgpResult.createNotify(getActivity()).show();
-// }
-// }
-// }
-// };
-//
-// // Create a new Messenger for the communication back
-// Messenger messenger = new Messenger(saveHandler);
-// intent.putExtra(KeychainIntentService.EXTRA_MESSENGER, messenger);
-//
-// // show progress dialog
-// saveHandler.showProgressDialog(getActivity());
-//
-// // start service with intent
-// getActivity().startService(intent);
-// }
-
- private void decryptStart() {
+ private void startDecryptFilenames() {
+ mCurrentCryptoOperation = KeychainIntentService.ACTION_DECRYPT_METADATA;
cryptoOperation(new CryptoInputParcel());
}
@Override
+ @SuppressLint("HandlerLeak")
protected void cryptoOperation(CryptoInputParcel cryptoInput) {
- Log.d(Constants.TAG, "decryptStart");
-
// Send all information needed to service to decrypt in other thread
Intent intent = new Intent(getActivity(), KeychainIntentService.class);
// fill values for this action
Bundle data = new Bundle();
-
- intent.setAction(KeychainIntentService.ACTION_DECRYPT_VERIFY);
+ // use current operation, either decrypt metadata or decrypt payload
+ intent.setAction(mCurrentCryptoOperation);
// data
+ data.putParcelable(KeychainIntentService.EXTRA_CRYPTO_INPUT, cryptoInput);
+
Log.d(Constants.TAG, "mInputUri=" + mInputUri + ", mOutputUri=" + mOutputUri);
data.putInt(KeychainIntentService.SOURCE, IOType.URI.ordinal());
@@ -281,8 +207,8 @@ public class DecryptFilesFragment extends DecryptFragment {
data.putInt(KeychainIntentService.TARGET, IOType.URI.ordinal());
data.putParcelable(KeychainIntentService.ENCRYPT_DECRYPT_OUTPUT_URI, mOutputUri);
- data.putParcelable(KeychainIntentService.DECRYPT_PASSPHRASE, mPassphrase);
- data.putByteArray(KeychainIntentService.DECRYPT_NFC_DECRYPTED_SESSION_KEY, mNfcDecryptedSessionKey);
+// data.putParcelable(KeychainIntentService.DECRYPT_PASSPHRASE, mPassphrase);
+// data.putByteArray(KeychainIntentService.DECRYPT_NFC_DECRYPTED_SESSION_KEY, mNfcDecryptedSessionKey);
intent.putExtra(KeychainIntentService.EXTRA_DATA, data);
@@ -292,6 +218,7 @@ public class DecryptFilesFragment extends DecryptFragment {
getString(R.string.progress_decrypting),
ProgressDialog.STYLE_HORIZONTAL,
ProgressDialogFragment.ServiceType.KEYCHAIN_INTENT) {
+ @Override
public void handleMessage(Message message) {
// handle messages by standard KeychainIntentServiceHandler first
super.handleMessage(message);
@@ -324,24 +251,37 @@ public class DecryptFilesFragment extends DecryptFragment {
if (pgpResult.success()) {
- // display signature result in activity
- onResult(pgpResult);
-
- if (mDeleteAfter.isChecked()) {
- // Create and show dialog to delete original file
- DeleteFileDialogFragment deleteFileDialog = DeleteFileDialogFragment.newInstance(mInputUri);
- deleteFileDialog.show(getActivity().getSupportFragmentManager(), "deleteDialog");
- setInputUri(null);
- }
-
- /*
- // A future open after decryption feature
- if () {
- Intent viewFile = new Intent(Intent.ACTION_VIEW);
- viewFile.setInputData(mOutputUri);
- startActivity(viewFile);
+ switch (mCurrentCryptoOperation) {
+ case KeychainIntentService.ACTION_DECRYPT_METADATA: {
+ askForOutputFilename(pgpResult.getDecryptMetadata().getFilename());
+ break;
+ }
+ case KeychainIntentService.ACTION_DECRYPT_VERIFY: {
+ // display signature result in activity
+ onResult(pgpResult);
+
+ if (mDeleteAfter.isChecked()) {
+ // Create and show dialog to delete original file
+ DeleteFileDialogFragment deleteFileDialog = DeleteFileDialogFragment.newInstance(mInputUri);
+ deleteFileDialog.show(getActivity().getSupportFragmentManager(), "deleteDialog");
+ setInputUri(null);
+ }
+
+ /*
+ // A future open after decryption feature
+ if () {
+ Intent viewFile = new Intent(Intent.ACTION_VIEW);
+ viewFile.setInputData(mOutputUri);
+ startActivity(viewFile);
+ }
+ */
+ break;
+ }
+ default: {
+ Log.e(Constants.TAG, "Bug: not supported operation!");
+ break;
+ }
}
- */
} else {
pgpResult.createNotify(getActivity()).show();
}
@@ -391,7 +331,7 @@ public class DecryptFilesFragment extends DecryptFragment {
// This happens after output file was selected, so start our operation
if (resultCode == Activity.RESULT_OK && data != null) {
mOutputUri = data.getData();
- decryptStart();
+ startDecrypt();
}
return;
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextFragment.java
index 523b24fd7..086830389 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptTextFragment.java
@@ -144,19 +144,12 @@ public class DecryptTextFragment extends DecryptFragment {
String ciphertext = getArguments().getString(ARG_CIPHERTEXT);
if (ciphertext != null) {
mCiphertext = ciphertext;
- decryptStart();
+ cryptoOperation(new CryptoInputParcel());
}
}
- private void decryptStart() {
- cryptoOperation(new CryptoInputParcel());
- }
-
@Override
protected void cryptoOperation(CryptoInputParcel cryptoInput) {
-
- Log.d(Constants.TAG, "decryptStart");
-
// Send all information needed to service to decrypt in other thread
Intent intent = new Intent(getActivity(), KeychainIntentService.class);
@@ -166,10 +159,11 @@ public class DecryptTextFragment extends DecryptFragment {
intent.setAction(KeychainIntentService.ACTION_DECRYPT_VERIFY);
// data
+ data.putParcelable(KeychainIntentService.EXTRA_CRYPTO_INPUT, cryptoInput);
data.putInt(KeychainIntentService.TARGET, IOType.BYTES.ordinal());
data.putByteArray(KeychainIntentService.DECRYPT_CIPHERTEXT_BYTES, mCiphertext.getBytes());
- data.putParcelable(KeychainIntentService.DECRYPT_PASSPHRASE, mPassphrase);
- data.putByteArray(KeychainIntentService.DECRYPT_NFC_DECRYPTED_SESSION_KEY, mNfcDecryptedSessionKey);
+// data.putParcelable(KeychainIntentService.DECRYPT_PASSPHRASE, mPassphrase);
+// data.putByteArray(KeychainIntentService.DECRYPT_NFC_DECRYPTED_SESSION_KEY, mNfcDecryptedSessionKey);
intent.putExtra(KeychainIntentService.EXTRA_DATA, data);