aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DisplayTextActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DisplayTextActivity.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DisplayTextActivity.java130
1 files changed, 11 insertions, 119 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DisplayTextActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DisplayTextActivity.java
index 5c44e345e..aacb55a58 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DisplayTextActivity.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DisplayTextActivity.java
@@ -30,6 +30,7 @@ import org.sufficientlysecure.keychain.Constants;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.compatibility.ClipboardReflection;
import org.sufficientlysecure.keychain.intents.OpenKeychainIntents;
+import org.sufficientlysecure.keychain.operations.results.DecryptVerifyResult;
import org.sufficientlysecure.keychain.operations.results.OperationResult;
import org.sufficientlysecure.keychain.operations.results.SingletonResult;
import org.sufficientlysecure.keychain.pgp.PgpHelper;
@@ -43,11 +44,7 @@ public class DisplayTextActivity extends BaseActivity {
// TODO make this only display text (maybe we need only the fragment?)
/* Intents */
- public static final String ACTION_DECRYPT_TEXT = OpenKeychainIntents.DECRYPT_TEXT;
- public static final String EXTRA_TEXT = OpenKeychainIntents.DECRYPT_EXTRA_TEXT;
-
- // intern
- public static final String ACTION_DECRYPT_FROM_CLIPBOARD = Constants.INTENT_PREFIX + "DECRYPT_TEXT_FROM_CLIPBOARD";
+ public static final String EXTRA_METADATA = OpenKeychainIntents.DECRYPT_EXTRA_METADATA;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -71,73 +68,6 @@ public class DisplayTextActivity extends BaseActivity {
}
/**
- * Fixing broken PGP MESSAGE Strings coming from GMail/AOSP Mail
- */
- private String fixPgpMessage(String message) {
- // windows newline -> unix newline
- message = message.replaceAll("\r\n", "\n");
- // Mac OS before X newline -> unix newline
- message = message.replaceAll("\r", "\n");
-
- // remove whitespaces before newline
- message = message.replaceAll(" +\n", "\n");
- // only two consecutive newlines are allowed
- message = message.replaceAll("\n\n+", "\n\n");
-
- // replace non breakable spaces
- message = message.replaceAll("\\xa0", " ");
-
- return message;
- }
-
- /**
- * Fixing broken PGP SIGNED MESSAGE Strings coming from GMail/AOSP Mail
- */
- private String fixPgpCleartextSignature(CharSequence input) {
- if (!TextUtils.isEmpty(input)) {
- String text = input.toString();
-
- // windows newline -> unix newline
- text = text.replaceAll("\r\n", "\n");
- // Mac OS before X newline -> unix newline
- text = text.replaceAll("\r", "\n");
-
- return text;
- } else {
- return null;
- }
- }
-
- private String getPgpContent(CharSequence input) {
- // only decrypt if clipboard content is available and a pgp message or cleartext signature
- if (!TextUtils.isEmpty(input)) {
- Log.dEscaped(Constants.TAG, "input: " + input);
-
- Matcher matcher = PgpHelper.PGP_MESSAGE.matcher(input);
- if (matcher.matches()) {
- String text = matcher.group(1);
- text = fixPgpMessage(text);
-
- Log.dEscaped(Constants.TAG, "input fixed: " + text);
- return text;
- } else {
- matcher = PgpHelper.PGP_CLEARTEXT_SIGNATURE.matcher(input);
- if (matcher.matches()) {
- String text = matcher.group(1);
- text = fixPgpCleartextSignature(text);
-
- Log.dEscaped(Constants.TAG, "input fixed: " + text);
- return text;
- } else {
- return null;
- }
- }
- } else {
- return null;
- }
- }
-
- /**
* Handles all actions with this intent
*/
private void handleActions(Bundle savedInstanceState, Intent intent) {
@@ -153,53 +83,15 @@ public class DisplayTextActivity extends BaseActivity {
return;
}
- if (Intent.ACTION_SEND.equals(action) && type != null) {
- Log.d(Constants.TAG, "ACTION_SEND");
- Log.logDebugBundle(extras, "SEND extras");
-
- // When sending to Keychain Decrypt via share menu
- if ("text/plain".equals(type)) {
- String sharedText = extras.getString(Intent.EXTRA_TEXT);
- sharedText = getPgpContent(sharedText);
-
- if (sharedText != null) {
- loadFragment(sharedText);
- } else {
- Log.e(Constants.TAG, "EXTRA_TEXT does not contain PGP content!");
- Toast.makeText(this, R.string.error_invalid_data, Toast.LENGTH_LONG).show();
- finish();
- }
- } else {
- Log.e(Constants.TAG, "ACTION_SEND received non-plaintext, this should not happen in this activity!");
- Toast.makeText(this, R.string.error_invalid_data, Toast.LENGTH_LONG).show();
- finish();
- }
- } else if (ACTION_DECRYPT_TEXT.equals(action)) {
- Log.d(Constants.TAG, "ACTION_DECRYPT_TEXT");
-
- String extraText = extras.getString(EXTRA_TEXT);
- extraText = getPgpContent(extraText);
+ Log.d(Constants.TAG, "ACTION_DECRYPT_TEXT");
- if (extraText != null) {
- loadFragment(extraText);
- } else {
- Log.e(Constants.TAG, "EXTRA_TEXT does not contain PGP content!");
- Toast.makeText(this, R.string.error_invalid_data, Toast.LENGTH_LONG).show();
- finish();
- }
- } else if (ACTION_DECRYPT_FROM_CLIPBOARD.equals(action)) {
- Log.d(Constants.TAG, "ACTION_DECRYPT_FROM_CLIPBOARD");
+ DecryptVerifyResult result = extras.getParcelable(EXTRA_METADATA);
+ String plaintext = extras.getString(Intent.EXTRA_TEXT);
- CharSequence clipboardText = ClipboardReflection.getClipboardText(this);
- String text = getPgpContent(clipboardText);
-
- if (text != null) {
- loadFragment(text);
- } else {
- returnInvalidResult();
- }
- } else if (ACTION_DECRYPT_TEXT.equals(action)) {
- Log.e(Constants.TAG, "Include the extra 'text' in your Intent!");
+ if (plaintext != null) {
+ loadFragment(plaintext, result);
+ } else {
+ Log.e(Constants.TAG, "EXTRA_TEXT does not contain PGP content!");
Toast.makeText(this, R.string.error_invalid_data, Toast.LENGTH_LONG).show();
finish();
}
@@ -214,9 +106,9 @@ public class DisplayTextActivity extends BaseActivity {
finish();
}
- private void loadFragment(String ciphertext) {
+ private void loadFragment(String plaintext, DecryptVerifyResult result) {
// Create an instance of the fragment
- Fragment frag = DisplayTextFragment.newInstance(ciphertext);
+ Fragment frag = DisplayTextFragment.newInstance(plaintext, result);
// Add the fragment to the 'fragment_container' FrameLayout
// NOTE: We use commitAllowingStateLoss() to prevent weird crashes!