diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2f90dc154..6e3169189 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -53,12 +53,28 @@
+ android:configChanges="keyboardHidden|orientation|keyboard">
+
+
+
+
+
+
+
+
+ android:configChanges="keyboardHidden|orientation|keyboard">
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/org/thialfihar/android/apg/Apg.java b/src/org/thialfihar/android/apg/Apg.java
index 671bbfb8d..f234d6e04 100644
--- a/src/org/thialfihar/android/apg/Apg.java
+++ b/src/org/thialfihar/android/apg/Apg.java
@@ -101,6 +101,9 @@ public class Apg {
public static final String DECRYPT_FILE = "org.thialfihar.android.apg.intent.DECRYPT_FILE";
public static final String ENCRYPT_FILE = "org.thialfihar.android.apg.intent.ENCRYPT_FILE";
public static final String DECRYPT_AND_RETURN = "org.thialfihar.android.apg.intent.DECRYPT_AND_RETURN";
+ public static final String ENCRYPT_AND_RETURN = "org.thialfihar.android.apg.intent.ENCRYPT_AND_RETURN";
+ public static final String SELECT_PUBLIC_KEYS = "org.thialfihar.android.apg.intent.SELECT_PUBLIC_KEYS";
+ public static final String SELECT_SECRET_KEY = "org.thialfihar.android.apg.intent.SELECT_SECRET_KEY";
}
public static final String EXTRA_DATA = "data";
@@ -150,8 +153,8 @@ public class Apg {
Pattern.DOTALL);
public static Pattern PGP_SIGNED_MESSAGE =
- Pattern.compile(".*?(-----BEGIN PGP SIGNED MESSAGE-----.*?-----BEGIN PGP SIGNATURE-----.*?-----END PGP SIGNATURE-----).*",
- Pattern.DOTALL);
+ Pattern.compile(".*?(-----BEGIN PGP SIGNED MESSAGE-----.*?-----BEGIN PGP SIGNATURE-----.*?-----END PGP SIGNATURE-----).*",
+ Pattern.DOTALL);
private static HashMap mPassPhraseCache =
new HashMap();
@@ -1330,6 +1333,9 @@ public class Apg {
String passPhrase, ProgressDialogUpdater progress,
boolean assumeSymmetric)
throws IOException, GeneralException, PGPException, SignatureException {
+ if (passPhrase == null) {
+ passPhrase = "";
+ }
Bundle returnData = new Bundle();
InputStream in = PGPUtil.getDecoderStream(inStream);
PGPObjectFactory pgpF = new PGPObjectFactory(in);
diff --git a/src/org/thialfihar/android/apg/DecryptActivity.java b/src/org/thialfihar/android/apg/DecryptActivity.java
index 2be7de4b9..ab5ec08af 100644
--- a/src/org/thialfihar/android/apg/DecryptActivity.java
+++ b/src/org/thialfihar/android/apg/DecryptActivity.java
@@ -496,7 +496,6 @@ public class DecryptActivity extends BaseActivity {
if (mSignedOnly) {
data = Apg.verifyText(this, in, out, this);
} else {
- // TODO: check the pass phrase, may be null?
data = Apg.decrypt(this, in, out, size, Apg.getCachedPassPhrase(getSecretKeyId()),
this, mAssumeSymmetricEncryption);
}
diff --git a/src/org/thialfihar/android/apg/EncryptActivity.java b/src/org/thialfihar/android/apg/EncryptActivity.java
index b3abc2024..9106c1c83 100644
--- a/src/org/thialfihar/android/apg/EncryptActivity.java
+++ b/src/org/thialfihar/android/apg/EncryptActivity.java
@@ -62,6 +62,7 @@ import android.widget.Toast;
import android.widget.ViewFlipper;
public class EncryptActivity extends BaseActivity {
+ private Intent mIntent = null;
private String mSubject = null;
private String mSendTo = null;
@@ -265,11 +266,12 @@ public class EncryptActivity extends BaseActivity {
}
});
- Intent intent = getIntent();
- if (intent.getAction() != null &&
- (intent.getAction().equals(Apg.Intent.ENCRYPT) ||
- intent.getAction().equals(Apg.Intent.ENCRYPT_FILE))) {
- Bundle extras = intent.getExtras();
+ mIntent = getIntent();
+ if (mIntent.getAction() != null &&
+ (mIntent.getAction().equals(Apg.Intent.ENCRYPT) ||
+ mIntent.getAction().equals(Apg.Intent.ENCRYPT_FILE) ||
+ mIntent.getAction().equals(Apg.Intent.ENCRYPT_AND_RETURN))) {
+ Bundle extras = mIntent.getExtras();
if (extras == null) {
extras = new Bundle();
}
@@ -318,7 +320,8 @@ public class EncryptActivity extends BaseActivity {
}
}
- if (intent.getAction().equals(Apg.Intent.ENCRYPT)) {
+ if (mIntent.getAction().equals(Apg.Intent.ENCRYPT) ||
+ mIntent.getAction().equals(Apg.Intent.ENCRYPT_AND_RETURN)) {
if (data != null) {
mMessage.setText(data);
}
@@ -327,7 +330,7 @@ public class EncryptActivity extends BaseActivity {
while (mSource.getCurrentView().getId() != R.id.sourceMessage) {
mSource.showNext();
}
- } else if (intent.getAction().equals(Apg.Intent.ENCRYPT_FILE)) {
+ } else if (mIntent.getAction().equals(Apg.Intent.ENCRYPT_FILE)) {
mSource.setInAnimation(null);
mSource.setOutAnimation(null);
while (mSource.getCurrentView().getId() != R.id.sourceFile) {
@@ -339,6 +342,13 @@ public class EncryptActivity extends BaseActivity {
updateView();
updateSource();
updateMode();
+
+ if (mMessage.getText().length() > 0 &&
+ ((mEncryptionKeyIds != null &&
+ mEncryptionKeyIds.length > 0) ||
+ getSecretKeyId() > 0)) {
+ encryptClicked();
+ }
}
private void openFile() {
@@ -729,48 +739,56 @@ public class EncryptActivity extends BaseActivity {
Toast.makeText(EncryptActivity.this,
getString(R.string.errorMessage, error), Toast.LENGTH_SHORT).show();
return;
- } else {
- String message = Strings.fromUTF8ByteArray(data.getByteArray(Apg.EXTRA_ENCRYPTED_MESSAGE));
- switch (mEncryptTarget) {
- case Id.target.clipboard: {
- ClipboardManager clip = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
- clip.setText(message);
- Toast.makeText(this, R.string.encryptionToClipboardSuccessful,
- Toast.LENGTH_SHORT).show();
- break;
+ }
+ String message = Strings.fromUTF8ByteArray(data.getByteArray(Apg.EXTRA_ENCRYPTED_MESSAGE));
+ switch (mEncryptTarget) {
+ case Id.target.clipboard: {
+ ClipboardManager clip = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE);
+ clip.setText(message);
+ Toast.makeText(this, R.string.encryptionToClipboardSuccessful,
+ Toast.LENGTH_SHORT).show();
+ break;
+ }
+
+ case Id.target.email: {
+ if (mIntent.getAction() != null &&
+ mIntent.getAction().equals(Apg.Intent.ENCRYPT_AND_RETURN)) {
+ Intent intent = new Intent();
+ intent.putExtras(data);
+ setResult(RESULT_OK, intent);
+ finish();
+ return;
}
- case Id.target.email: {
- Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
- emailIntent.setType("text/plain; charset=utf-8");
- emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
- if (mSubject != null) {
- emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
- mSubject);
- }
- if (mSendTo != null) {
- emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
- new String[] { mSendTo });
- }
- EncryptActivity.this.
- startActivity(Intent.createChooser(emailIntent,
- getString(R.string.title_sendEmail)));
- break;
+ Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
+ emailIntent.setType("text/plain; charset=utf-8");
+ emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, message);
+ if (mSubject != null) {
+ emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT,
+ mSubject);
}
+ if (mSendTo != null) {
+ emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
+ new String[] { mSendTo });
+ }
+ EncryptActivity.this.
+ startActivity(Intent.createChooser(emailIntent,
+ getString(R.string.title_sendEmail)));
+ break;
+ }
- case Id.target.file: {
- Toast.makeText(this, R.string.encryptionSuccessful, Toast.LENGTH_SHORT).show();
- if (mDeleteAfter.isChecked()) {
- setDeleteFile(mInputFilename);
- showDialog(Id.dialog.delete_file);
- }
- break;
+ case Id.target.file: {
+ Toast.makeText(this, R.string.encryptionSuccessful, Toast.LENGTH_SHORT).show();
+ if (mDeleteAfter.isChecked()) {
+ setDeleteFile(mInputFilename);
+ showDialog(Id.dialog.delete_file);
}
+ break;
+ }
- default: {
- // shouldn't happen
- break;
- }
+ default: {
+ // shouldn't happen
+ break;
}
}
}