From 3008f2c51f00e4e948cb330ad6f74b1b4e734620 Mon Sep 17 00:00:00 2001 From: Thialfihar Date: Tue, 4 May 2010 15:56:55 +0000 Subject: [PATCH] added an option to delete files after encryption or decryption, also no longer delete the output file if either fails --- res/layout/decrypt_file.xml | 33 ++++++++++++-- res/layout/encrypt_file.xml | 23 ++++++++++ res/values/strings.xml | 3 +- .../thialfihar/android/apg/BaseActivity.java | 44 +++++++++++++++++++ .../android/apg/DecryptFileActivity.java | 14 ++++++ .../android/apg/EncryptFileActivity.java | 16 +++++-- src/org/thialfihar/android/apg/Id.java | 1 + .../thialfihar/android/apg/MainActivity.java | 1 + 8 files changed, 128 insertions(+), 7 deletions(-) diff --git a/res/layout/decrypt_file.xml b/res/layout/decrypt_file.xml index 7ea44b2f5..bfe662c30 100644 --- a/res/layout/decrypt_file.xml +++ b/res/layout/decrypt_file.xml @@ -24,9 +24,7 @@ + android:orientation="horizontal"> + + + + + + + + + + + + + + + + + + Algorithm ASCII Armour Public Key(s) - + Delete After Encryption + Delete After Decryption Encryption Algorithm Hash Algorithm diff --git a/src/org/thialfihar/android/apg/BaseActivity.java b/src/org/thialfihar/android/apg/BaseActivity.java index 01415734b..15a9b7156 100644 --- a/src/org/thialfihar/android/apg/BaseActivity.java +++ b/src/org/thialfihar/android/apg/BaseActivity.java @@ -16,6 +16,8 @@ package org.thialfihar.android.apg; +import java.io.File; + import org.bouncycastle2.bcpg.HashAlgorithmTags; import org.bouncycastle2.openpgp.PGPEncryptedData; @@ -29,6 +31,7 @@ import android.content.SharedPreferences; import android.os.Bundle; import android.os.Handler; import android.os.Message; +import android.widget.Toast; public class BaseActivity extends Activity implements Runnable, ProgressDialogUpdater, @@ -38,6 +41,7 @@ public class BaseActivity extends Activity private Thread mRunningThread = null; private long mSecretKeyId = 0; + private String mDeleteFile = null; protected static SharedPreferences mPreferences = null; private Handler mHandler = new Handler() { @@ -137,6 +141,38 @@ public class BaseActivity extends Activity return alert.create(); } + case Id.dialog.delete_file: { + AlertDialog.Builder alert = new AlertDialog.Builder(this); + + alert.setIcon(android.R.drawable.ic_dialog_alert); + alert.setTitle("Warning"); + alert.setMessage("Are you sure you want to delete\n" + getDeleteFile() + "?"); + + alert.setPositiveButton(android.R.string.ok, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + removeDialog(Id.dialog.delete_file); + File file = new File(getDeleteFile()); + String msg = ""; + if (file.delete()) { + msg = "Successfully deleted."; + } else { + msg = "Error: deleting '" + file + "' failed"; + } + Toast.makeText(BaseActivity.this, + msg, Toast.LENGTH_SHORT).show(); + } + }); + alert.setNegativeButton(android.R.string.cancel, + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + removeDialog(Id.dialog.delete_file); + } + }); + alert.setCancelable(true); + + return alert.create(); + } default: { break; @@ -295,4 +331,12 @@ public class BaseActivity extends Activity editor.putBoolean(Constants.pref.has_seen_change_log, value); editor.commit(); } + + protected void setDeleteFile(String deleteFile) { + mDeleteFile = deleteFile; + } + + protected String getDeleteFile() { + return mDeleteFile; + } } diff --git a/src/org/thialfihar/android/apg/DecryptFileActivity.java b/src/org/thialfihar/android/apg/DecryptFileActivity.java index e8c8397eb..a8a33d1e2 100644 --- a/src/org/thialfihar/android/apg/DecryptFileActivity.java +++ b/src/org/thialfihar/android/apg/DecryptFileActivity.java @@ -40,6 +40,7 @@ import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; +import android.widget.CheckBox; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; @@ -49,6 +50,7 @@ import android.widget.Toast; public class DecryptFileActivity extends BaseActivity { private EditText mFilename = null; + private CheckBox mDeleteAfter = null; private ImageButton mBrowse = null; private Button mDecryptButton = null; private LinearLayout mSignatureLayout = null; @@ -75,6 +77,8 @@ public class DecryptFileActivity extends BaseActivity { } }); + mDeleteAfter = (CheckBox) findViewById(R.id.delete_after_decryption); + mDecryptButton = (Button) findViewById(R.id.btn_decrypt); mDecryptButton.setOnClickListener(new OnClickListener() { @Override @@ -127,6 +131,12 @@ public class DecryptFileActivity extends BaseActivity { return; } + File file = new File(mInputFilename); + if (!file.exists() || !file.isFile()) { + Toast.makeText(this, "Error: file not found", Toast.LENGTH_SHORT).show(); + return; + } + try { InputStream in = new FileInputStream(mInputFilename); try { @@ -303,6 +313,10 @@ public class DecryptFileActivity extends BaseActivity { Toast.makeText(DecryptFileActivity.this, "Successfully decrypted.", Toast.LENGTH_SHORT).show(); + if (mDeleteAfter.isChecked()) { + setDeleteFile(mInputFilename); + showDialog(Id.dialog.delete_file); + } } mSignatureLayout.setVisibility(View.INVISIBLE); diff --git a/src/org/thialfihar/android/apg/EncryptFileActivity.java b/src/org/thialfihar/android/apg/EncryptFileActivity.java index 14b342d7e..dee9a3e39 100644 --- a/src/org/thialfihar/android/apg/EncryptFileActivity.java +++ b/src/org/thialfihar/android/apg/EncryptFileActivity.java @@ -58,6 +58,7 @@ import android.widget.RadioGroup.OnCheckedChangeListener; public class EncryptFileActivity extends BaseActivity { private EditText mFilename = null; + private CheckBox mDeleteAfter = null; private ImageButton mBrowse = null; private CheckBox mSign = null; private TextView mMainUserId = null; @@ -110,6 +111,8 @@ public class EncryptFileActivity extends BaseActivity { } }); + mDeleteAfter = (CheckBox) findViewById(R.id.delete_after_encryption); + mEncryptButton = (Button) findViewById(R.id.btn_encrypt); mSign = (CheckBox) findViewById(R.id.sign); mMainUserId = (TextView) findViewById(R.id.main_user_id); @@ -278,6 +281,12 @@ public class EncryptFileActivity extends BaseActivity { return; } + File file = new File(mInputFilename); + if (!file.exists() || !file.isFile()) { + Toast.makeText(this, "Error: file not found", Toast.LENGTH_SHORT).show(); + return; + } + // symmetric encryption if (mEncryptionMode.getCheckedRadioButtonId() == R.id.use_symmetric) { boolean gotPassPhrase = false; @@ -385,9 +394,6 @@ public class EncryptFileActivity extends BaseActivity { if (error != null) { data.putString("error", error); - // delete the file if an error occurred - File file = new File(mOutputFilename); - file.delete(); } msg.setData(data); @@ -505,6 +511,10 @@ public class EncryptFileActivity extends BaseActivity { Toast.makeText(EncryptFileActivity.this, "Successfully encrypted.", Toast.LENGTH_SHORT).show(); + if (mDeleteAfter.isChecked()) { + setDeleteFile(mInputFilename); + showDialog(Id.dialog.delete_file); + } } } } diff --git a/src/org/thialfihar/android/apg/Id.java b/src/org/thialfihar/android/apg/Id.java index 08fd4b805..7b0957050 100644 --- a/src/org/thialfihar/android/apg/Id.java +++ b/src/org/thialfihar/android/apg/Id.java @@ -70,6 +70,7 @@ public final class Id { public static final int about = 0x2107000f; public static final int change_log = 0x21070010; public static final int output_filename = 0x21070011; + public static final int delete_file = 0x21070012; } public static final class task { diff --git a/src/org/thialfihar/android/apg/MainActivity.java b/src/org/thialfihar/android/apg/MainActivity.java index 31035a5d9..3e15b45c9 100644 --- a/src/org/thialfihar/android/apg/MainActivity.java +++ b/src/org/thialfihar/android/apg/MainActivity.java @@ -221,6 +221,7 @@ public class MainActivity extends BaseActivity { SpannableString info = new SpannableString("Read the warnings!\n\n" + "Changes:\n" + + "* option to delete file after encryption/decryption\n" + "* fixed several crashes\n" + "* can encrypt large files\n" + "* better progress bar calculation\n" +