From 55f067b0633a177c2d441a7c79115dd44d7c4a8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Sch=C3=BCrmann?= Date: Thu, 3 Jul 2014 15:05:43 +0200 Subject: Work on edit --- .../keychain/service/SaveKeyringParcel.java | 14 ++++---- .../keychain/ui/EditKeyFragment.java | 30 +++++++++++++--- .../keychain/ui/adapter/UserIdsAdapter.java | 22 ++++++------ .../keychain/ui/adapter/UserIdsAddedAdapter.java | 40 +++++++++++----------- .../ui/dialog/CreateKeyDialogFragment.java | 8 ++--- .../res/layout/edit_key_user_id_added_item.xml | 1 - .../src/main/res/layout/view_key_userids_item.xml | 7 ---- OpenKeychain/src/main/res/values/strings.xml | 7 ++-- 8 files changed, 69 insertions(+), 60 deletions(-) diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java index 1ad19cdd0..c48cf4b3b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/SaveKeyringParcel.java @@ -55,10 +55,10 @@ public class SaveKeyringParcel implements Parcelable { // performance gain for using Parcelable here would probably be negligible, // use Serializable instead. public static class SubkeyAdd implements Serializable { - public final int mAlgorithm; - public final int mKeysize; - public final int mFlags; - public final Long mExpiry; + public int mAlgorithm; + public int mKeysize; + public int mFlags; + public Long mExpiry; public SubkeyAdd(int algorithm, int keysize, int flags, Long expiry) { mAlgorithm = algorithm; mKeysize = keysize; @@ -68,9 +68,9 @@ public class SaveKeyringParcel implements Parcelable { } public static class SubkeyChange implements Serializable { - public final long mKeyId; - public final Integer mFlags; - public final Long mExpiry; + public long mKeyId; + public Integer mFlags; + public Long mExpiry; public SubkeyChange(long keyId, Integer flags, Long expiry) { mKeyId = keyId; mFlags = flags; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java index b00049ac7..97e4ffca9 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java @@ -37,6 +37,7 @@ import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; +import org.spongycastle.bcpg.sig.KeyFlags; import org.sufficientlysecure.keychain.Constants; import org.sufficientlysecure.keychain.R; import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround; @@ -50,6 +51,7 @@ import org.sufficientlysecure.keychain.service.OperationResults; import org.sufficientlysecure.keychain.service.PassphraseCacheService; import org.sufficientlysecure.keychain.service.SaveKeyringParcel; import org.sufficientlysecure.keychain.ui.adapter.SubkeysAdapter; +import org.sufficientlysecure.keychain.ui.adapter.SubkeysAddedAdapter; import org.sufficientlysecure.keychain.ui.adapter.UserIdsAdapter; import org.sufficientlysecure.keychain.ui.adapter.UserIdsAddedAdapter; import org.sufficientlysecure.keychain.ui.dialog.EditUserIdDialogFragment; @@ -67,17 +69,22 @@ public class EditKeyFragment extends LoaderFragment implements private ListView mUserIdsList; private ListView mSubkeysList; private ListView mUserIdsAddedList; - private ListView mKeysAddedList; + private ListView mSubkeysAddedList; private View mChangePassphrase; private View mAddUserId; - private View mAddKey; + private View mAddSubkey; private static final int LOADER_ID_USER_IDS = 0; private static final int LOADER_ID_SUBKEYS = 1; + // cursor adapter private UserIdsAdapter mUserIdsAdapter; private SubkeysAdapter mSubkeysAdapter; + + // array adapter private UserIdsAddedAdapter mUserIdsAddedAdapter; + private SubkeysAddedAdapter mSubkeysAddedAdapter; + private ArrayList mUserIdsAddedData; private Uri mDataUri; @@ -106,10 +113,10 @@ public class EditKeyFragment extends LoaderFragment implements mUserIdsList = (ListView) view.findViewById(R.id.edit_key_user_ids); mSubkeysList = (ListView) view.findViewById(R.id.edit_key_keys); mUserIdsAddedList = (ListView) view.findViewById(R.id.edit_key_user_ids_added); - mKeysAddedList = (ListView) view.findViewById(R.id.edit_key_keys_added); + mSubkeysAddedList = (ListView) view.findViewById(R.id.edit_key_keys_added); mChangePassphrase = view.findViewById(R.id.edit_key_action_change_passphrase); mAddUserId = view.findViewById(R.id.edit_key_action_add_user_id); - mAddKey = view.findViewById(R.id.edit_key_action_add_key); + mAddSubkey = view.findViewById(R.id.edit_key_action_add_key); return root; } @@ -180,6 +187,13 @@ public class EditKeyFragment extends LoaderFragment implements } }); + mAddSubkey.setOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + addSubkey(); + } + }); + mUserIdsAdapter = new UserIdsAdapter(getActivity(), null, 0, mSaveKeyringParcel); mUserIdsList.setAdapter(mUserIdsAdapter); @@ -199,6 +213,9 @@ public class EditKeyFragment extends LoaderFragment implements mSubkeysAdapter = new SubkeysAdapter(getActivity(), null, 0); mSubkeysList.setAdapter(mSubkeysAdapter); + mSubkeysAddedAdapter = new SubkeysAddedAdapter(getActivity(), mSaveKeyringParcel.addSubKeys); + mSubkeysAddedList.setAdapter(mSubkeysAddedAdapter); + // Prepare the loaders. Either re-connect with an existing ones, // or start new ones. getLoaderManager().initLoader(LOADER_ID_USER_IDS, null, this); @@ -327,6 +344,11 @@ public class EditKeyFragment extends LoaderFragment implements mUserIdsAddedAdapter.add(new UserIdsAddedAdapter.UserIdModel()); } + private void addSubkey() { + // default values + mSubkeysAddedAdapter.add(new SaveKeyringParcel.SubkeyAdd(Constants.choice.algorithm.rsa, 4096, KeyFlags.SIGN_DATA, null)); + } + private void save() { String passphrase = PassphraseCacheService.getCachedPassphrase(getActivity(), mSaveKeyringParcel.mMasterKeyId); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAdapter.java index 47f17357a..d729648e5 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAdapter.java @@ -107,7 +107,6 @@ public class UserIdsAdapter extends CursorAdapter implements AdapterView.OnItemC TextView vAddress = (TextView) view.findViewById(R.id.address); TextView vComment = (TextView) view.findViewById(R.id.comment); ImageView vVerified = (ImageView) view.findViewById(R.id.certified); - ImageView vHasChanges = (ImageView) view.findViewById(R.id.has_changes); ImageView vEditImage = (ImageView) view.findViewById(R.id.edit_image); String userId = cursor.getString(INDEX_USER_ID); @@ -135,27 +134,23 @@ public class UserIdsAdapter extends CursorAdapter implements AdapterView.OnItemC // for edit key if (mSaveKeyringParcel != null) { - boolean changeUserId = (mSaveKeyringParcel.changePrimaryUserId != null + boolean changeAnyPrimaryUserId = (mSaveKeyringParcel.changePrimaryUserId != null); + boolean changeThisPrimaryUserId = (mSaveKeyringParcel.changePrimaryUserId != null && mSaveKeyringParcel.changePrimaryUserId.equals(userId)); - boolean revoke = (mSaveKeyringParcel.revokeUserIds.contains(userId)); + boolean revokeThisUserId = (mSaveKeyringParcel.revokeUserIds.contains(userId)); - if (changeUserId) { - isPrimary = !isPrimary; + if (changeAnyPrimaryUserId) { + // change all user ids, only this one should be primary + isPrimary = changeThisPrimaryUserId; } - if (revoke) { + if (revokeThisUserId) { if (!isRevoked) { isRevoked = true; } } - if (changeUserId || revoke) { - vHasChanges.setVisibility(View.VISIBLE); - } else { - vHasChanges.setVisibility(View.GONE); - } vEditImage.setVisibility(View.VISIBLE); } else { - vHasChanges.setVisibility(View.GONE); vEditImage.setVisibility(View.GONE); } @@ -166,11 +161,14 @@ public class UserIdsAdapter extends CursorAdapter implements AdapterView.OnItemC // disable and strike through text for revoked user ids vName.setEnabled(false); vAddress.setEnabled(false); + vComment.setEnabled(false); vName.setText(OtherHelper.strikeOutText(vName.getText())); vAddress.setText(OtherHelper.strikeOutText(vAddress.getText())); + vComment.setText(OtherHelper.strikeOutText(vComment.getText())); } else { vName.setEnabled(true); vAddress.setEnabled(true); + vComment.setEnabled(true); // verified: has been verified // isPrimary: show small star icon for primary user ids diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAddedAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAddedAdapter.java index 898e60e2d..3fe5574ee 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAddedAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAddedAdapter.java @@ -106,14 +106,14 @@ public class UserIdsAddedAdapter extends ArrayAdapter 0) { - Matcher emailMatcher = Patterns.EMAIL_ADDRESS.matcher(viewHolder.mModel.address); + if (holder.mModel.address.length() > 0) { + Matcher emailMatcher = Patterns.EMAIL_ADDRESS.matcher(holder.mModel.address); if (emailMatcher.matches()) { - viewHolder.vAddress.setCompoundDrawablesWithIntrinsicBounds(0, 0, + holder.vAddress.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.uid_mail_ok, 0); } else { - viewHolder.vAddress.setCompoundDrawablesWithIntrinsicBounds(0, 0, + holder.vAddress.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.uid_mail_bad, 0); } } else { // remove drawable if email is empty - viewHolder.vAddress.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); + holder.vAddress.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); } } }); - viewHolder.vName.addTextChangedListener(new TextWatcher() { + holder.vName.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @@ -156,11 +156,11 @@ public class UserIdsAddedAdapter extends ArrayAdapter - - Successfully exported %d keys. No keys exported. Note: only subkeys support ElGamal. - Note: generating RSA key with length 1024-bit and less is considered unsafe and it\'s disabled for generating new keys. Couldn\'t find key %08X. @@ -626,8 +625,8 @@ Modifying keyring %s Encoding exception! - Actual key fingerprint does not match expected! - No keyid. This is a programming error, please file a bug report! + Actual key fingerprint does not match the expected one! + No key ID. This is an internal error, please file a bug report! Internal error, integrity check failed! Revoked user ids cannot be primary! PGP internal exception! @@ -636,7 +635,7 @@ Modifying subkey %s Tried to operate on missing subkey %s! Generating new %1$s bit %2$s subkey - New subkey id: %s + New subkey ID: %s Expiry date cannot be in the past! Revoking subkey %s Keyring successfully modified -- cgit v1.2.3