major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
/*
|
|
|
|
* Copyright (C) 2010 Thialfihar <thi@thialfihar.org>
|
|
|
|
*
|
|
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
|
|
* you may not use this file except in compliance with the License.
|
|
|
|
* You may obtain a copy of the License at
|
|
|
|
*
|
|
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
*
|
|
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
|
|
* See the License for the specific language governing permissions and
|
|
|
|
* limitations under the License.
|
|
|
|
*/
|
|
|
|
|
|
|
|
package org.thialfihar.android.apg;
|
|
|
|
|
2010-05-04 11:56:55 -04:00
|
|
|
import java.io.File;
|
|
|
|
|
2010-04-28 19:35:11 -04:00
|
|
|
import org.bouncycastle2.bcpg.HashAlgorithmTags;
|
|
|
|
import org.bouncycastle2.openpgp.PGPEncryptedData;
|
|
|
|
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
import android.app.Activity;
|
|
|
|
import android.app.AlertDialog;
|
|
|
|
import android.app.Dialog;
|
|
|
|
import android.app.ProgressDialog;
|
|
|
|
import android.content.DialogInterface;
|
|
|
|
import android.content.Intent;
|
2010-04-28 19:35:11 -04:00
|
|
|
import android.content.SharedPreferences;
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
import android.os.Bundle;
|
|
|
|
import android.os.Handler;
|
|
|
|
import android.os.Message;
|
2010-05-04 11:56:55 -04:00
|
|
|
import android.widget.Toast;
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
|
|
|
|
public class BaseActivity extends Activity
|
|
|
|
implements Runnable, ProgressDialogUpdater,
|
|
|
|
AskForSecretKeyPassPhrase.PassPhraseCallbackInterface {
|
|
|
|
|
|
|
|
private ProgressDialog mProgressDialog = null;
|
|
|
|
private Thread mRunningThread = null;
|
|
|
|
|
|
|
|
private long mSecretKeyId = 0;
|
2010-05-04 11:56:55 -04:00
|
|
|
private String mDeleteFile = null;
|
2010-04-28 19:35:11 -04:00
|
|
|
protected static SharedPreferences mPreferences = null;
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
|
|
|
|
private Handler mHandler = new Handler() {
|
|
|
|
@Override
|
|
|
|
public void handleMessage(Message msg) {
|
|
|
|
handlerCallback(msg);
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onCreate(Bundle savedInstanceState) {
|
|
|
|
super.onCreate(savedInstanceState);
|
|
|
|
|
2010-04-28 19:35:11 -04:00
|
|
|
if (mPreferences == null) {
|
|
|
|
mPreferences = getPreferences(MODE_PRIVATE);
|
|
|
|
}
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
Apg.initialize(this);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected Dialog onCreateDialog(int id) {
|
|
|
|
|
|
|
|
// in case it is a progress dialog
|
|
|
|
mProgressDialog = new ProgressDialog(this);
|
|
|
|
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
|
|
|
|
mProgressDialog.setCancelable(false);
|
|
|
|
switch (id) {
|
|
|
|
case Id.dialog.encrypting: {
|
2010-05-13 16:41:32 -04:00
|
|
|
mProgressDialog.setMessage(this.getString(R.string.progress_initializing));
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
return mProgressDialog;
|
|
|
|
}
|
|
|
|
|
|
|
|
case Id.dialog.decrypting: {
|
2010-05-13 16:41:32 -04:00
|
|
|
mProgressDialog.setMessage(this.getString(R.string.progress_initializing));
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
return mProgressDialog;
|
|
|
|
}
|
|
|
|
|
|
|
|
case Id.dialog.saving: {
|
2010-05-13 16:41:32 -04:00
|
|
|
mProgressDialog.setMessage(this.getString(R.string.progress_saving));
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
return mProgressDialog;
|
|
|
|
}
|
|
|
|
|
|
|
|
case Id.dialog.importing: {
|
2010-05-13 16:41:32 -04:00
|
|
|
mProgressDialog.setMessage(this.getString(R.string.progress_importing));
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
return mProgressDialog;
|
|
|
|
}
|
|
|
|
|
|
|
|
case Id.dialog.exporting: {
|
2010-05-13 16:41:32 -04:00
|
|
|
mProgressDialog.setMessage(this.getString(R.string.progress_exporting));
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
return mProgressDialog;
|
|
|
|
}
|
|
|
|
|
|
|
|
default: {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
mProgressDialog = null;
|
|
|
|
|
|
|
|
switch (id) {
|
|
|
|
case Id.dialog.pass_phrase: {
|
|
|
|
return AskForSecretKeyPassPhrase.createDialog(this, getSecretKeyId(), this);
|
|
|
|
}
|
|
|
|
|
|
|
|
case Id.dialog.pass_phrases_do_not_match: {
|
|
|
|
AlertDialog.Builder alert = new AlertDialog.Builder(this);
|
|
|
|
|
|
|
|
alert.setIcon(android.R.drawable.ic_dialog_alert);
|
2010-05-13 16:41:32 -04:00
|
|
|
alert.setTitle(R.string.error);
|
|
|
|
alert.setMessage(R.string.passPhrasesDoNotMatch);
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
|
|
|
|
alert.setPositiveButton(android.R.string.ok,
|
|
|
|
new DialogInterface.OnClickListener() {
|
|
|
|
public void onClick(DialogInterface dialog, int id) {
|
|
|
|
removeDialog(Id.dialog.pass_phrases_do_not_match);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
alert.setCancelable(false);
|
|
|
|
|
|
|
|
return alert.create();
|
|
|
|
}
|
|
|
|
|
|
|
|
case Id.dialog.no_pass_phrase: {
|
|
|
|
AlertDialog.Builder alert = new AlertDialog.Builder(this);
|
|
|
|
|
|
|
|
alert.setIcon(android.R.drawable.ic_dialog_alert);
|
2010-05-13 16:41:32 -04:00
|
|
|
alert.setTitle(R.string.error);
|
|
|
|
alert.setMessage(R.string.passPhraseMustNotBeEmpty);
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
|
|
|
|
alert.setPositiveButton(android.R.string.ok,
|
|
|
|
new DialogInterface.OnClickListener() {
|
|
|
|
public void onClick(DialogInterface dialog, int id) {
|
|
|
|
removeDialog(Id.dialog.no_pass_phrase);
|
|
|
|
}
|
|
|
|
});
|
|
|
|
alert.setCancelable(false);
|
|
|
|
|
|
|
|
return alert.create();
|
|
|
|
}
|
|
|
|
|
2010-05-04 11:56:55 -04:00
|
|
|
case Id.dialog.delete_file: {
|
|
|
|
AlertDialog.Builder alert = new AlertDialog.Builder(this);
|
|
|
|
|
|
|
|
alert.setIcon(android.R.drawable.ic_dialog_alert);
|
2010-05-13 16:41:32 -04:00
|
|
|
alert.setTitle(R.string.warning);
|
|
|
|
alert.setMessage(this.getString(R.string.fileDeleteConfirmation, getDeleteFile()));
|
2010-05-04 11:56:55 -04:00
|
|
|
|
|
|
|
alert.setPositiveButton(android.R.string.ok,
|
2010-05-13 16:41:32 -04:00
|
|
|
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 = BaseActivity.this.getString(
|
|
|
|
R.string.fileDeleteSuccessful);
|
|
|
|
} else {
|
|
|
|
msg = BaseActivity.this.getString(
|
|
|
|
R.string.errorMessage,
|
|
|
|
BaseActivity.this.getString(
|
|
|
|
R.string.error_fileDeleteFailed, file));
|
|
|
|
}
|
|
|
|
Toast.makeText(BaseActivity.this,
|
|
|
|
msg, Toast.LENGTH_SHORT).show();
|
|
|
|
}
|
|
|
|
});
|
2010-05-04 11:56:55 -04:00
|
|
|
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();
|
|
|
|
}
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
|
|
|
|
default: {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return super.onCreateDialog(id);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
|
|
switch (requestCode) {
|
2010-04-19 09:56:43 -04:00
|
|
|
case Id.request.secret_keys: {
|
|
|
|
if (resultCode == RESULT_OK) {
|
|
|
|
Bundle bundle = data.getExtras();
|
|
|
|
long newId = bundle.getLong("selectedKeyId");
|
|
|
|
if (getSecretKeyId() != newId) {
|
|
|
|
Apg.setPassPhrase(null);
|
|
|
|
}
|
|
|
|
setSecretKeyId(newId);
|
|
|
|
} else {
|
|
|
|
setSecretKeyId(0);
|
|
|
|
Apg.setPassPhrase(null);
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
default: {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
super.onActivityResult(requestCode, resultCode, data);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void setProgress(int progress, int max) {
|
|
|
|
Message msg = new Message();
|
|
|
|
Bundle data = new Bundle();
|
|
|
|
data.putInt("type", Id.message.progress_update);
|
|
|
|
data.putInt("progress", progress);
|
|
|
|
data.putInt("max", max);
|
|
|
|
msg.setData(data);
|
|
|
|
mHandler.sendMessage(msg);
|
|
|
|
}
|
|
|
|
|
|
|
|
@Override
|
|
|
|
public void setProgress(String message, int progress, int max) {
|
|
|
|
Message msg = new Message();
|
|
|
|
Bundle data = new Bundle();
|
|
|
|
data.putInt("type", Id.message.progress_update);
|
|
|
|
data.putString("message", message);
|
|
|
|
data.putInt("progress", progress);
|
|
|
|
data.putInt("max", max);
|
|
|
|
msg.setData(data);
|
|
|
|
mHandler.sendMessage(msg);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void handlerCallback(Message msg) {
|
|
|
|
Bundle data = msg.getData();
|
|
|
|
if (data == null) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
int type = data.getInt("type");
|
|
|
|
switch (type) {
|
|
|
|
case Id.message.progress_update: {
|
|
|
|
String message = data.getString("message");
|
|
|
|
if (mProgressDialog != null) {
|
|
|
|
if (message != null) {
|
|
|
|
mProgressDialog.setMessage(message);
|
|
|
|
}
|
|
|
|
mProgressDialog.setMax(data.getInt("max"));
|
|
|
|
mProgressDialog.setProgress(data.getInt("progress"));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
|
|
|
|
case Id.message.import_done: // intentionall no break
|
|
|
|
case Id.message.export_done: // intentionall no break
|
|
|
|
case Id.message.done: {
|
|
|
|
mProgressDialog = null;
|
|
|
|
doneCallback(msg);
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void doneCallback(Message msg) {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public void passPhraseCallback(String passPhrase) {
|
|
|
|
Apg.setPassPhrase(passPhrase);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void sendMessage(Message msg) {
|
|
|
|
mHandler.sendMessage(msg);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void startThread() {
|
|
|
|
mRunningThread = new Thread(this);
|
|
|
|
mRunningThread.start();
|
|
|
|
}
|
|
|
|
|
|
|
|
public void run() {
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setSecretKeyId(long id) {
|
|
|
|
mSecretKeyId = id;
|
|
|
|
}
|
|
|
|
|
|
|
|
public long getSecretKeyId() {
|
|
|
|
return mSecretKeyId;
|
|
|
|
}
|
2010-04-28 19:35:11 -04:00
|
|
|
|
|
|
|
public int getDefaultEncryptionAlgorithm() {
|
|
|
|
return mPreferences.getInt(Constants.pref.default_encryption_algorithm,
|
|
|
|
PGPEncryptedData.AES_256);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setDefaultEncryptionAlgorithm(int value) {
|
|
|
|
SharedPreferences.Editor editor = mPreferences.edit();
|
|
|
|
editor.putInt(Constants.pref.default_encryption_algorithm, value);
|
|
|
|
editor.commit();
|
|
|
|
}
|
|
|
|
|
|
|
|
public int getDefaultHashAlgorithm() {
|
|
|
|
return mPreferences.getInt(Constants.pref.default_hash_algorithm,
|
|
|
|
HashAlgorithmTags.SHA256);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setDefaultHashAlgorithm(int value) {
|
|
|
|
SharedPreferences.Editor editor = mPreferences.edit();
|
|
|
|
editor.putInt(Constants.pref.default_hash_algorithm, value);
|
|
|
|
editor.commit();
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean getDefaultAsciiArmour() {
|
|
|
|
return mPreferences.getBoolean(Constants.pref.default_ascii_armour, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setDefaultAsciiArmour(boolean value) {
|
|
|
|
SharedPreferences.Editor editor = mPreferences.edit();
|
|
|
|
editor.putBoolean(Constants.pref.default_ascii_armour, value);
|
|
|
|
editor.commit();
|
|
|
|
}
|
|
|
|
|
|
|
|
public boolean hasSeenChangeLog() {
|
|
|
|
return mPreferences.getBoolean(Constants.pref.has_seen_change_log, false);
|
|
|
|
}
|
|
|
|
|
|
|
|
public void setHasSeenChangeLog(boolean value) {
|
|
|
|
SharedPreferences.Editor editor = mPreferences.edit();
|
|
|
|
editor.putBoolean(Constants.pref.has_seen_change_log, value);
|
|
|
|
editor.commit();
|
|
|
|
}
|
2010-05-04 11:56:55 -04:00
|
|
|
|
|
|
|
protected void setDeleteFile(String deleteFile) {
|
|
|
|
mDeleteFile = deleteFile;
|
|
|
|
}
|
|
|
|
|
|
|
|
protected String getDeleteFile() {
|
|
|
|
return mDeleteFile;
|
|
|
|
}
|
major restructuring, moving dialog, message, menu, option menu, task, type IDs into Id in a similar structure as the generated R, also introducing a BaseActivity class that almost all activities derive from, which generates some common dialogs, handles the progress update, thread management, and thread communication
also adding first draft of encrypt file activity, not very functional yet
2010-04-18 22:12:13 -04:00
|
|
|
}
|