added an option to delete files after encryption or decryption, also no longer delete the output file if either fails
This commit is contained in:
parent
f34fcaabf3
commit
3008f2c51f
|
@ -24,9 +24,7 @@
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal">
|
||||||
android:paddingLeft="5dip"
|
|
||||||
android:paddingRight="5dip">
|
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/label_filename"
|
android:id="@+id/label_filename"
|
||||||
|
@ -49,6 +47,35 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/label_delete_after_decryption"
|
||||||
|
android:text="@string/label_delete_after_decryption"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:paddingRight="10dip"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="0dip"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:id="@+id/delete_after_decryption"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
<View
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="1dip"
|
||||||
|
android:background="?android:attr/listDivider"
|
||||||
|
android:layout_marginBottom="5dip"/>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/layout_signature"
|
android:id="@+id/layout_signature"
|
||||||
android:orientation="horizontal"
|
android:orientation="horizontal"
|
||||||
|
|
|
@ -60,6 +60,29 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<LinearLayout
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:orientation="horizontal">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/label_delete_after_encryption"
|
||||||
|
android:text="@string/label_delete_after_encryption"
|
||||||
|
android:textAppearance="?android:attr/textAppearanceMedium"
|
||||||
|
android:layout_gravity="center_vertical"
|
||||||
|
android:paddingRight="10dip"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="0dip"
|
||||||
|
android:layout_weight="1"/>
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:id="@+id/delete_after_encryption"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_gravity="center_vertical"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
<View
|
<View
|
||||||
android:layout_width="fill_parent"
|
android:layout_width="fill_parent"
|
||||||
android:layout_height="1dip"
|
android:layout_height="1dip"
|
||||||
|
|
|
@ -65,7 +65,8 @@
|
||||||
<string name="label_algorithm">Algorithm</string>
|
<string name="label_algorithm">Algorithm</string>
|
||||||
<string name="label_ascii_armour">ASCII Armour</string>
|
<string name="label_ascii_armour">ASCII Armour</string>
|
||||||
<string name="label_select_public_keys">Public Key(s)</string>
|
<string name="label_select_public_keys">Public Key(s)</string>
|
||||||
|
<string name="label_delete_after_encryption">Delete After Encryption</string>
|
||||||
|
<string name="label_delete_after_decryption">Delete After Decryption</string>
|
||||||
<string name="label_encryption_algorithm">Encryption Algorithm</string>
|
<string name="label_encryption_algorithm">Encryption Algorithm</string>
|
||||||
<string name="label_hash_algorithm">Hash Algorithm</string>
|
<string name="label_hash_algorithm">Hash Algorithm</string>
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
package org.thialfihar.android.apg;
|
package org.thialfihar.android.apg;
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
|
|
||||||
import org.bouncycastle2.bcpg.HashAlgorithmTags;
|
import org.bouncycastle2.bcpg.HashAlgorithmTags;
|
||||||
import org.bouncycastle2.openpgp.PGPEncryptedData;
|
import org.bouncycastle2.openpgp.PGPEncryptedData;
|
||||||
|
|
||||||
|
@ -29,6 +31,7 @@ import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
public class BaseActivity extends Activity
|
public class BaseActivity extends Activity
|
||||||
implements Runnable, ProgressDialogUpdater,
|
implements Runnable, ProgressDialogUpdater,
|
||||||
|
@ -38,6 +41,7 @@ public class BaseActivity extends Activity
|
||||||
private Thread mRunningThread = null;
|
private Thread mRunningThread = null;
|
||||||
|
|
||||||
private long mSecretKeyId = 0;
|
private long mSecretKeyId = 0;
|
||||||
|
private String mDeleteFile = null;
|
||||||
protected static SharedPreferences mPreferences = null;
|
protected static SharedPreferences mPreferences = null;
|
||||||
|
|
||||||
private Handler mHandler = new Handler() {
|
private Handler mHandler = new Handler() {
|
||||||
|
@ -137,6 +141,38 @@ public class BaseActivity extends Activity
|
||||||
return alert.create();
|
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: {
|
default: {
|
||||||
break;
|
break;
|
||||||
|
@ -295,4 +331,12 @@ public class BaseActivity extends Activity
|
||||||
editor.putBoolean(Constants.pref.has_seen_change_log, value);
|
editor.putBoolean(Constants.pref.has_seen_change_log, value);
|
||||||
editor.commit();
|
editor.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void setDeleteFile(String deleteFile) {
|
||||||
|
mDeleteFile = deleteFile;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getDeleteFile() {
|
||||||
|
return mDeleteFile;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ import android.os.Message;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
|
import android.widget.CheckBox;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.ImageButton;
|
import android.widget.ImageButton;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
|
@ -49,6 +50,7 @@ import android.widget.Toast;
|
||||||
|
|
||||||
public class DecryptFileActivity extends BaseActivity {
|
public class DecryptFileActivity extends BaseActivity {
|
||||||
private EditText mFilename = null;
|
private EditText mFilename = null;
|
||||||
|
private CheckBox mDeleteAfter = null;
|
||||||
private ImageButton mBrowse = null;
|
private ImageButton mBrowse = null;
|
||||||
private Button mDecryptButton = null;
|
private Button mDecryptButton = null;
|
||||||
private LinearLayout mSignatureLayout = 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 = (Button) findViewById(R.id.btn_decrypt);
|
||||||
mDecryptButton.setOnClickListener(new OnClickListener() {
|
mDecryptButton.setOnClickListener(new OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -127,6 +131,12 @@ public class DecryptFileActivity extends BaseActivity {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
File file = new File(mInputFilename);
|
||||||
|
if (!file.exists() || !file.isFile()) {
|
||||||
|
Toast.makeText(this, "Error: file not found", Toast.LENGTH_SHORT).show();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
InputStream in = new FileInputStream(mInputFilename);
|
InputStream in = new FileInputStream(mInputFilename);
|
||||||
try {
|
try {
|
||||||
|
@ -303,6 +313,10 @@ public class DecryptFileActivity extends BaseActivity {
|
||||||
Toast.makeText(DecryptFileActivity.this,
|
Toast.makeText(DecryptFileActivity.this,
|
||||||
"Successfully decrypted.",
|
"Successfully decrypted.",
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
|
if (mDeleteAfter.isChecked()) {
|
||||||
|
setDeleteFile(mInputFilename);
|
||||||
|
showDialog(Id.dialog.delete_file);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
mSignatureLayout.setVisibility(View.INVISIBLE);
|
mSignatureLayout.setVisibility(View.INVISIBLE);
|
||||||
|
|
|
@ -58,6 +58,7 @@ import android.widget.RadioGroup.OnCheckedChangeListener;
|
||||||
|
|
||||||
public class EncryptFileActivity extends BaseActivity {
|
public class EncryptFileActivity extends BaseActivity {
|
||||||
private EditText mFilename = null;
|
private EditText mFilename = null;
|
||||||
|
private CheckBox mDeleteAfter = null;
|
||||||
private ImageButton mBrowse = null;
|
private ImageButton mBrowse = null;
|
||||||
private CheckBox mSign = null;
|
private CheckBox mSign = null;
|
||||||
private TextView mMainUserId = 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);
|
mEncryptButton = (Button) findViewById(R.id.btn_encrypt);
|
||||||
mSign = (CheckBox) findViewById(R.id.sign);
|
mSign = (CheckBox) findViewById(R.id.sign);
|
||||||
mMainUserId = (TextView) findViewById(R.id.main_user_id);
|
mMainUserId = (TextView) findViewById(R.id.main_user_id);
|
||||||
|
@ -278,6 +281,12 @@ public class EncryptFileActivity extends BaseActivity {
|
||||||
return;
|
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
|
// symmetric encryption
|
||||||
if (mEncryptionMode.getCheckedRadioButtonId() == R.id.use_symmetric) {
|
if (mEncryptionMode.getCheckedRadioButtonId() == R.id.use_symmetric) {
|
||||||
boolean gotPassPhrase = false;
|
boolean gotPassPhrase = false;
|
||||||
|
@ -385,9 +394,6 @@ public class EncryptFileActivity extends BaseActivity {
|
||||||
|
|
||||||
if (error != null) {
|
if (error != null) {
|
||||||
data.putString("error", error);
|
data.putString("error", error);
|
||||||
// delete the file if an error occurred
|
|
||||||
File file = new File(mOutputFilename);
|
|
||||||
file.delete();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
msg.setData(data);
|
msg.setData(data);
|
||||||
|
@ -505,6 +511,10 @@ public class EncryptFileActivity extends BaseActivity {
|
||||||
Toast.makeText(EncryptFileActivity.this,
|
Toast.makeText(EncryptFileActivity.this,
|
||||||
"Successfully encrypted.",
|
"Successfully encrypted.",
|
||||||
Toast.LENGTH_SHORT).show();
|
Toast.LENGTH_SHORT).show();
|
||||||
|
if (mDeleteAfter.isChecked()) {
|
||||||
|
setDeleteFile(mInputFilename);
|
||||||
|
showDialog(Id.dialog.delete_file);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -70,6 +70,7 @@ public final class Id {
|
||||||
public static final int about = 0x2107000f;
|
public static final int about = 0x2107000f;
|
||||||
public static final int change_log = 0x21070010;
|
public static final int change_log = 0x21070010;
|
||||||
public static final int output_filename = 0x21070011;
|
public static final int output_filename = 0x21070011;
|
||||||
|
public static final int delete_file = 0x21070012;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static final class task {
|
public static final class task {
|
||||||
|
|
|
@ -221,6 +221,7 @@ public class MainActivity extends BaseActivity {
|
||||||
SpannableString info =
|
SpannableString info =
|
||||||
new SpannableString("Read the warnings!\n\n" +
|
new SpannableString("Read the warnings!\n\n" +
|
||||||
"Changes:\n" +
|
"Changes:\n" +
|
||||||
|
"* option to delete file after encryption/decryption\n" +
|
||||||
"* fixed several crashes\n" +
|
"* fixed several crashes\n" +
|
||||||
"* can encrypt large files\n" +
|
"* can encrypt large files\n" +
|
||||||
"* better progress bar calculation\n" +
|
"* better progress bar calculation\n" +
|
||||||
|
|
Loading…
Reference in a new issue