aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DecryptFilesFragment.java168
1 files changed, 54 insertions, 114 deletions
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;
}