From c7f00417517f947e642b750b031e4af793b8cd57 Mon Sep 17 00:00:00 2001 From: Thialfihar Date: Sun, 16 May 2010 13:35:16 +0000 Subject: [PATCH] give key editing its own pass phrase mechanism, as the new cache won't work there --- src/org/thialfihar/android/apg/Apg.java | 9 +++++++++ .../android/apg/EditKeyActivity.java | 14 ++++++++------ .../android/apg/SecretKeyListActivity.java | 18 ++++++++++++++++-- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/org/thialfihar/android/apg/Apg.java b/src/org/thialfihar/android/apg/Apg.java index 5071e3d01..0697618d4 100644 --- a/src/org/thialfihar/android/apg/Apg.java +++ b/src/org/thialfihar/android/apg/Apg.java @@ -158,6 +158,7 @@ public class Apg { private static HashMap mPassPhraseCache = new HashMap(); + private static String mEditPassPhrase = null; public static class GeneralException extends Exception { static final long serialVersionUID = 0xf812773342L; @@ -273,6 +274,14 @@ public class Apg { } } + public static void setEditPassPhrase(String passPhrase) { + mEditPassPhrase = passPhrase; + } + + public static String getEditPassPhrase() { + return mEditPassPhrase; + } + public static void setCachedPassPhrase(long keyId, String passPhrase) { mPassPhraseCache.put(keyId, new CachedPassPhrase(new Date().getTime(), passPhrase)); } diff --git a/src/org/thialfihar/android/apg/EditKeyActivity.java b/src/org/thialfihar/android/apg/EditKeyActivity.java index a1c74951e..b1e37e8a1 100644 --- a/src/org/thialfihar/android/apg/EditKeyActivity.java +++ b/src/org/thialfihar/android/apg/EditKeyActivity.java @@ -55,6 +55,7 @@ public class EditKeyActivity extends BaseActivity implements OnClickListener { private Button mSaveButton; private Button mDiscardButton; + private String mCurrentPassPhrase = null; private String mNewPassPhrase = null; @Override @@ -106,6 +107,11 @@ public class EditKeyActivity extends BaseActivity implements OnClickListener { 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(); } @@ -117,11 +123,7 @@ public class EditKeyActivity extends BaseActivity implements OnClickListener { } public boolean havePassPhrase() { - long keyId = getMasterKeyId(); - if (keyId == 0) { - return false; - } - return (Apg.getCachedPassPhrase(keyId) != null && !Apg.getCachedPassPhrase(keyId).equals("")) || + return (!mCurrentPassPhrase.equals("")) || (mNewPassPhrase != null && !mNewPassPhrase.equals("")); } @@ -235,7 +237,7 @@ public class EditKeyActivity extends BaseActivity implements OnClickListener { Message msg = new Message(); try { - String oldPassPhrase = Apg.getCachedPassPhrase(getMasterKeyId()); + String oldPassPhrase = mCurrentPassPhrase; String newPassPhrase = mNewPassPhrase; if (newPassPhrase == null) { newPassPhrase = oldPassPhrase; diff --git a/src/org/thialfihar/android/apg/SecretKeyListActivity.java b/src/org/thialfihar/android/apg/SecretKeyListActivity.java index 6272db9ce..a69fc5b9c 100644 --- a/src/org/thialfihar/android/apg/SecretKeyListActivity.java +++ b/src/org/thialfihar/android/apg/SecretKeyListActivity.java @@ -138,7 +138,7 @@ public class SecretKeyListActivity extends BaseActivity implements OnChildClickL switch (menuItem.getItemId()) { case Id.menu.edit: { mSelectedItem = groupPosition; - showDialog(Id.dialog.pass_phrase); + checkPassPhraseAndEdit(); return true; } @@ -164,7 +164,7 @@ public class SecretKeyListActivity extends BaseActivity implements OnChildClickL public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { mSelectedItem = groupPosition; - showDialog(Id.dialog.pass_phrase); + checkPassPhraseAndEdit(); return true; } @@ -269,13 +269,27 @@ public class SecretKeyListActivity extends BaseActivity implements OnChildClickL } } + public void checkPassPhraseAndEdit() { + PGPSecretKeyRing keyRing = Apg.getSecretKeyRings().get(mSelectedItem); + long keyId = keyRing.getSecretKey().getKeyID(); + String passPhrase = Apg.getCachedPassPhrase(keyId); + if (passPhrase == null) { + showDialog(Id.dialog.pass_phrase); + } else { + Apg.setEditPassPhrase(passPhrase); + editKey(); + } + } + @Override public void passPhraseCallback(long keyId, String passPhrase) { super.passPhraseCallback(keyId, passPhrase); + Apg.setEditPassPhrase(passPhrase); editKey(); } private void createKey() { + Apg.setEditPassPhrase(""); Intent intent = new Intent(this, EditKeyActivity.class); startActivityForResult(intent, Id.message.create_key); }