diff options
author | Thialfihar <thialfihar@gmail.com> | 2010-07-09 20:55:17 +0000 |
---|---|---|
committer | Thialfihar <thialfihar@gmail.com> | 2010-07-09 20:55:17 +0000 |
commit | 2c47734f0fdb1dccfd41dec8cfad8d93f311ea52 (patch) | |
tree | 121b80ff878301455ac21c651c326e725fe5d992 /src/org/thialfihar/android/apg/DataDestination.java | |
parent | 3ac472125a7ad3b7b600c32129a50def3b8a1b8a (diff) | |
download | open-keychain-2c47734f0fdb1dccfd41dec8cfad8d93f311ea52.tar.gz open-keychain-2c47734f0fdb1dccfd41dec8cfad8d93f311ea52.tar.bz2 open-keychain-2c47734f0fdb1dccfd41dec8cfad8d93f311ea52.zip |
trying to add support for various source and destination modes for encryption and decryption (String, byte[], filename, content stream), also more Intent options added
Diffstat (limited to 'src/org/thialfihar/android/apg/DataDestination.java')
-rw-r--r-- | src/org/thialfihar/android/apg/DataDestination.java | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/src/org/thialfihar/android/apg/DataDestination.java b/src/org/thialfihar/android/apg/DataDestination.java new file mode 100644 index 000000000..28cacd7ae --- /dev/null +++ b/src/org/thialfihar/android/apg/DataDestination.java @@ -0,0 +1,79 @@ +package org.thialfihar.android.apg;
+
+import java.io.ByteArrayOutputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
+import org.thialfihar.android.apg.Apg.GeneralException;
+
+import android.content.Context;
+import android.os.Environment;
+
+public class DataDestination {
+ private String mStreamFilename;
+ private String mFilename;
+ private int mMode = Id.mode.undefined;
+
+ public DataDestination() {
+
+ }
+
+ public void setMode(int mode) {
+ mMode = mode;
+ }
+
+ public void setFilename(String filename) {
+ mFilename = filename;
+ }
+
+ public String getStreamFilename() {
+ return mStreamFilename;
+ }
+
+ protected OutputStream getOutputStream(Context context)
+ throws Apg.GeneralException, FileNotFoundException, IOException {
+ OutputStream out = null;
+ mStreamFilename = null;
+
+ switch (mMode) {
+ case Id.mode.stream: {
+ try {
+ while (true) {
+ mStreamFilename = Apg.generateRandomString(32);
+ if (mStreamFilename == null) {
+ throw new Apg.GeneralException("couldn't generate random file name");
+ }
+ context.openFileInput(mStreamFilename).close();
+ }
+ } catch (FileNotFoundException e) {
+ // found a name that isn't used yet
+ }
+ out = context.openFileOutput(mStreamFilename, Context.MODE_PRIVATE);
+ break;
+ }
+
+ case Id.mode.byte_array: {
+ out = new ByteArrayOutputStream();
+ break;
+ }
+
+ case Id.mode.file: {
+ if (mFilename.startsWith(Environment.getExternalStorageDirectory().getAbsolutePath())) {
+ if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+ throw new GeneralException(context.getString(R.string.error_externalStorageNotReady));
+ }
+ }
+ out = new FileOutputStream(mFilename);
+ break;
+ }
+
+ default: {
+ break;
+ }
+ }
+
+ return out;
+ }
+}
|