diff options
author | Thialfihar <thialfihar@gmail.com> | 2010-05-18 15:23:25 +0000 |
---|---|---|
committer | Thialfihar <thialfihar@gmail.com> | 2010-05-18 15:23:25 +0000 |
commit | ed2cb1e525778d62949958bbf108687c571e4ebe (patch) | |
tree | e27fd3f422580b22b2a7f34bb0d4d53edccaa680 /src/org/thialfihar/android/apg/EditKeyActivity.java | |
parent | 42f1720bb32b5404ae9b78c0b042b143b6f507af (diff) | |
parent | 5b5e15c88663acfc282d42ff51cdceff1d9d4084 (diff) | |
download | open-keychain-ed2cb1e525778d62949958bbf108687c571e4ebe.tar.gz open-keychain-ed2cb1e525778d62949958bbf108687c571e4ebe.tar.bz2 open-keychain-ed2cb1e525778d62949958bbf108687c571e4ebe.zip |
overdue merge of 0.9.x into trunk
Diffstat (limited to 'src/org/thialfihar/android/apg/EditKeyActivity.java')
-rw-r--r-- | src/org/thialfihar/android/apg/EditKeyActivity.java | 255 |
1 files changed, 70 insertions, 185 deletions
diff --git a/src/org/thialfihar/android/apg/EditKeyActivity.java b/src/org/thialfihar/android/apg/EditKeyActivity.java index b5b7045b7..b1e37e8a1 100644 --- a/src/org/thialfihar/android/apg/EditKeyActivity.java +++ b/src/org/thialfihar/android/apg/EditKeyActivity.java @@ -24,43 +24,28 @@ import java.util.Vector; import org.bouncycastle2.openpgp.PGPException; import org.bouncycastle2.openpgp.PGPSecretKey; import org.bouncycastle2.openpgp.PGPSecretKeyRing; +import org.thialfihar.android.apg.ui.widget.KeyEditor; import org.thialfihar.android.apg.ui.widget.SectionView; import org.thialfihar.android.apg.utils.IterableIterator; -import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; -import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; -import android.os.Handler; import android.os.Message; -import android.text.InputType; -import android.text.method.PasswordTransformationMethod; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; -import android.view.ViewGroup.LayoutParams; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; -public class EditKeyActivity extends Activity - implements OnClickListener, ProgressDialogUpdater, Runnable { - static final int OPTION_MENU_NEW_PASS_PHRASE = 1; - - static final int DIALOG_NEW_PASS_PHRASE = 1; - static final int DIALOG_PASS_PHRASES_DO_NOT_MATCH = 2; - static final int DIALOG_NO_PASS_PHRASE = 3; - static final int DIALOG_SAVING = 4; - - static final int MESSAGE_PROGRESS_UPDATE = 1; - static final int MESSAGE_DONE = 2; +public class EditKeyActivity extends BaseActivity implements OnClickListener { private PGPSecretKeyRing mKeyRing = null; @@ -70,56 +55,9 @@ public class EditKeyActivity extends Activity private Button mSaveButton; private Button mDiscardButton; - private ProgressDialog mProgressDialog = null; - private Thread mRunningThread = null; - + private String mCurrentPassPhrase = null; private String mNewPassPhrase = null; - private Handler mHandler = new Handler() { - @Override - public void handleMessage(Message msg) { - Bundle data = msg.getData(); - if (data != null) { - int type = data.getInt("type"); - switch (type) { - case 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 MESSAGE_DONE: { - removeDialog(DIALOG_SAVING); - mProgressDialog = null; - - String error = data.getString("error"); - if (error != null) { - Toast.makeText(EditKeyActivity.this, - "Error: " + data.getString("error"), - Toast.LENGTH_SHORT).show(); - } else { - Toast.makeText(EditKeyActivity.this, R.string.key_saved, - Toast.LENGTH_SHORT).show(); - setResult(RESULT_OK); - finish(); - } - break; - } - - default: { - break; - } - } - } - } - }; - @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -133,6 +71,7 @@ public class EditKeyActivity extends Activity if (intent.getExtras() != null) { keyId = intent.getExtras().getLong("keyId"); } + if (keyId != 0) { PGPSecretKey masterKey = null; mKeyRing = Apg.getSecretKeyRing(keyId); @@ -149,10 +88,6 @@ public class EditKeyActivity extends Activity } } - if (Apg.getPassPhrase() == null) { - Apg.setPassPhrase(""); - } - mSaveButton = (Button) findViewById(R.id.btn_save); mDiscardButton = (Button) findViewById(R.id.btn_discard); @@ -164,105 +99,95 @@ public class EditKeyActivity extends Activity LinearLayout container = (LinearLayout) findViewById(R.id.container); mUserIds = (SectionView) inflater.inflate(R.layout.edit_key_section, container, false); - mUserIds.setType(SectionView.TYPE_USER_ID); + mUserIds.setType(Id.type.user_id); mUserIds.setUserIds(userIds); container.addView(mUserIds); mKeys = (SectionView) inflater.inflate(R.layout.edit_key_section, container, false); - mKeys.setType(SectionView.TYPE_KEY); + mKeys.setType(Id.type.key); mKeys.setKeys(keys); container.addView(mKeys); + mCurrentPassPhrase = Apg.getEditPassPhrase(); + if (mCurrentPassPhrase == null) { + mCurrentPassPhrase = ""; + } + Toast.makeText(this, "Warning: Key editing is still kind of beta.", Toast.LENGTH_LONG).show(); } + public long getMasterKeyId() { + if (mKeys.getEditors().getChildCount() == 0) { + return 0; + } + return ((KeyEditor) mKeys.getEditors().getChildAt(0)).getValue().getKeyID(); + } + public boolean havePassPhrase() { - return (Apg.getPassPhrase() != null && !Apg.getPassPhrase().equals("")) || - (mNewPassPhrase != null && mNewPassPhrase.equals("")); + return (!mCurrentPassPhrase.equals("")) || + (mNewPassPhrase != null && !mNewPassPhrase.equals("")); } @Override public boolean onCreateOptionsMenu(Menu menu) { - menu.add(0, OPTION_MENU_NEW_PASS_PHRASE, 0, - (havePassPhrase() ? "Change Pass Phrase" : "Set Pass Phrase")) + menu.add(0, Id.menu.option.new_pass_phrase, 0, + (havePassPhrase() ? R.string.menu_changePassPhrase : R.string.menu_setPassPhrase)) .setIcon(android.R.drawable.ic_menu_add); + menu.add(0, Id.menu.option.preferences, 1, R.string.menu_preferences) + .setIcon(android.R.drawable.ic_menu_preferences); + menu.add(0, Id.menu.option.about, 2, R.string.menu_about) + .setIcon(android.R.drawable.ic_menu_info_details); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case OPTION_MENU_NEW_PASS_PHRASE: { - showDialog(DIALOG_NEW_PASS_PHRASE); + case Id.menu.option.new_pass_phrase: { + showDialog(Id.dialog.new_pass_phrase); return true; } default: { - break; + return super.onOptionsItemSelected(item); } } - return false; } @Override protected Dialog onCreateDialog(int id) { switch (id) { - case DIALOG_SAVING: { - mProgressDialog = new ProgressDialog(this); - mProgressDialog.setMessage("saving..."); - mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); - mProgressDialog.setCancelable(false); - return mProgressDialog; - } - - case DIALOG_NEW_PASS_PHRASE: { + case Id.dialog.new_pass_phrase: { AlertDialog.Builder alert = new AlertDialog.Builder(this); if (havePassPhrase()) { - alert.setTitle("Change Pass Phrase"); + alert.setTitle(R.string.title_changePassPhrase); } else { - alert.setTitle("Set Pass Phrase"); + alert.setTitle(R.string.title_setPassPhrase); } - alert.setMessage("Enter the pass phrase twice."); - - final EditText input1 = new EditText(this); - final EditText input2 = new EditText(this); - input1.setText(""); - input2.setText(""); - input1.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); - input2.setInputType(InputType.TYPE_TEXT_VARIATION_PASSWORD); - input1.setTransformationMethod(new PasswordTransformationMethod()); - input2.setTransformationMethod(new PasswordTransformationMethod()); - - // 5dip padding - int padding = (int) (10 * getResources().getDisplayMetrics().densityDpi / 160); - LinearLayout layout = new LinearLayout(this); - layout.setOrientation(LinearLayout.VERTICAL); - layout.setPadding(padding, 0, padding, 0); - layout.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, - LayoutParams.WRAP_CONTENT)); - input1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, - LayoutParams.WRAP_CONTENT)); - input2.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, - LayoutParams.WRAP_CONTENT)); - layout.addView(input1); - layout.addView(input2); - - alert.setView(layout); + alert.setMessage(R.string.enterPassPhraseTwice); + + LayoutInflater inflater = + (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + View view = inflater.inflate(R.layout.pass_phrase, null); + final EditText input1 = (EditText) view.findViewById(R.id.passPhrase); + final EditText input2 = (EditText) view.findViewById(R.id.passPhraseAgain); + + alert.setView(view); alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - removeDialog(DIALOG_NEW_PASS_PHRASE); + removeDialog(Id.dialog.new_pass_phrase); String passPhrase1 = "" + input1.getText(); String passPhrase2 = "" + input2.getText(); if (!passPhrase1.equals(passPhrase2)) { - showDialog(DIALOG_PASS_PHRASES_DO_NOT_MATCH); + showDialog(Id.dialog.pass_phrases_do_not_match); return; } if (passPhrase1.equals("")) { - showDialog(DIALOG_NO_PASS_PHRASE); + showDialog(Id.dialog.no_pass_phrase); return; } @@ -273,54 +198,17 @@ public class EditKeyActivity extends Activity alert.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { - removeDialog(DIALOG_NEW_PASS_PHRASE); - } - }); - - return alert.create(); - } - - case DIALOG_PASS_PHRASES_DO_NOT_MATCH: { - AlertDialog.Builder alert = new AlertDialog.Builder(this); - - alert.setIcon(android.R.drawable.ic_dialog_alert); - alert.setTitle("Error"); - alert.setMessage("The pass phrases didn't match."); - - alert.setPositiveButton(android.R.string.ok, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - removeDialog(DIALOG_PASS_PHRASES_DO_NOT_MATCH); - } - }); - alert.setCancelable(false); - - return alert.create(); - } - - case DIALOG_NO_PASS_PHRASE: { - AlertDialog.Builder alert = new AlertDialog.Builder(this); - - alert.setIcon(android.R.drawable.ic_dialog_alert); - alert.setTitle("Error"); - alert.setMessage("Empty pass phrases are not supported."); - - alert.setPositiveButton(android.R.string.ok, - new DialogInterface.OnClickListener() { - public void onClick(DialogInterface dialog, int id) { - removeDialog(DIALOG_NO_PASS_PHRASE); + removeDialog(Id.dialog.new_pass_phrase); } }); - alert.setCancelable(false); return alert.create(); } default: { - break; + return super.onCreateDialog(id); } } - return super.onCreateDialog(id); } @Override @@ -334,23 +222,22 @@ public class EditKeyActivity extends Activity } private void saveClicked() { - if ((Apg.getPassPhrase() == null || Apg.getPassPhrase().equals("")) && - (mNewPassPhrase == null || mNewPassPhrase.equals(""))) { - Toast.makeText(this, R.string.set_a_pass_phrase, Toast.LENGTH_SHORT).show(); + if (!havePassPhrase()) { + Toast.makeText(this, R.string.setAPassPhrase, Toast.LENGTH_SHORT).show(); return; } - showDialog(DIALOG_SAVING); - mRunningThread = new Thread(this); - mRunningThread.start(); + showDialog(Id.dialog.saving); + startThread(); } + @Override public void run() { String error = null; Bundle data = new Bundle(); Message msg = new Message(); try { - String oldPassPhrase = Apg.getPassPhrase(); + String oldPassPhrase = mCurrentPassPhrase; String newPassPhrase = mNewPassPhrase; if (newPassPhrase == null) { newPassPhrase = oldPassPhrase; @@ -368,34 +255,32 @@ public class EditKeyActivity extends Activity error = e.getMessage(); } - data.putInt("type", MESSAGE_DONE); + data.putInt("type", Id.message.done); if (error != null) { data.putString("error", error); } msg.setData(data); - mHandler.sendMessage(msg); + sendMessage(msg); } - public void setProgress(int progress, int max) { - Message msg = new Message(); - Bundle data = new Bundle(); - data.putInt("type", MESSAGE_PROGRESS_UPDATE); - data.putInt("progress", progress); - data.putInt("max", max); - msg.setData(data); - mHandler.sendMessage(msg); - } + @Override + public void doneCallback(Message msg) { + super.doneCallback(msg); - public void setProgress(String message, int progress, int max) { - Message msg = new Message(); - Bundle data = new Bundle(); - data.putInt("type", MESSAGE_PROGRESS_UPDATE); - data.putString("message", message); - data.putInt("progress", progress); - data.putInt("max", max); - msg.setData(data); - mHandler.sendMessage(msg); + Bundle data = msg.getData(); + removeDialog(Id.dialog.saving); + + String error = data.getString("error"); + if (error != null) { + Toast.makeText(EditKeyActivity.this, + getString(R.string.errorMessage, data.getString("error")), + Toast.LENGTH_SHORT).show(); + } else { + Toast.makeText(EditKeyActivity.this, R.string.keySaved, Toast.LENGTH_SHORT).show(); + setResult(RESULT_OK); + finish(); + } } }
\ No newline at end of file |