diff options
| author | Vincent Breitmoser <valodim@mugenguild.com> | 2015-11-02 21:59:31 +0100 | 
|---|---|---|
| committer | Dominik Schürmann <dominik@dominikschuermann.de> | 2015-12-27 14:59:50 +0100 | 
| commit | a041acab65b916e3727ec679edc0f5583847a96c (patch) | |
| tree | 6926b5a352c1982dbcf08dce37b8d04341b90f9d | |
| parent | 5b6bc24a0c87162609d1c2b60ac8c13144641680 (diff) | |
| download | open-keychain-a041acab65b916e3727ec679edc0f5583847a96c.tar.gz open-keychain-a041acab65b916e3727ec679edc0f5583847a96c.tar.bz2 open-keychain-a041acab65b916e3727ec679edc0f5583847a96c.zip | |
extend-uid: allow changes to user ids in edit mode
7 files changed, 87 insertions, 16 deletions
| 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 07b0a12d3..fa0edec48 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java @@ -223,7 +223,8 @@ public class EditKeyFragment extends QueueingCryptoOperationFragment<SaveKeyring          getLoaderManager().initLoader(LOADER_ID_USER_IDS, null, EditKeyFragment.this);          getLoaderManager().initLoader(LOADER_ID_SUBKEYS, null, EditKeyFragment.this); -        mUserIdsAdapter = new UserIdsAdapter(getActivity(), null, 0, mSaveKeyringParcel); +        mUserIdsAdapter = new UserIdsAdapter(getActivity(), null, 0); +        mUserIdsAdapter.setEditMode(mSaveKeyringParcel);          mUserIdsList.setAdapter(mUserIdsAdapter);          // TODO: SaveParcel from savedInstance?! diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java index dc66e52ed..a27bb3ad3 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java @@ -17,6 +17,7 @@  package org.sufficientlysecure.keychain.ui; +  import android.content.Intent;  import android.database.Cursor;  import android.net.Uri; @@ -26,15 +27,10 @@ import android.support.v4.app.LoaderManager;  import android.support.v4.content.CursorLoader;  import android.support.v4.content.Loader;  import android.support.v4.view.ViewPager; -import android.support.v7.view.ActionMode; -import android.support.v7.view.ActionMode.Callback; -import android.view.Menu; -import android.view.MenuItem;  import android.view.View;  import android.widget.Toast;  import com.astuetz.PagerSlidingTabStrip; -  import org.sufficientlysecure.keychain.Constants;  import org.sufficientlysecure.keychain.R;  import org.sufficientlysecure.keychain.operations.results.OperationResult; diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvUserIdsFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvUserIdsFragment.java index 2afb7d216..fdaf188ca 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvUserIdsFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvUserIdsFragment.java @@ -21,6 +21,9 @@ package org.sufficientlysecure.keychain.ui;  import android.database.Cursor;  import android.net.Uri;  import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.os.Messenger;  import android.support.v4.app.FragmentActivity;  import android.support.v4.app.LoaderManager;  import android.support.v4.content.CursorLoader; @@ -42,6 +45,7 @@ import org.sufficientlysecure.keychain.compatibility.DialogFragmentWorkaround;  import org.sufficientlysecure.keychain.provider.KeychainContract.UserPackets;  import org.sufficientlysecure.keychain.service.SaveKeyringParcel;  import org.sufficientlysecure.keychain.ui.adapter.UserIdsAdapter; +import org.sufficientlysecure.keychain.ui.dialog.EditUserIdDialogFragment;  import org.sufficientlysecure.keychain.ui.dialog.UserIdInfoDialogFragment;  import org.sufficientlysecure.keychain.util.Log; @@ -59,6 +63,7 @@ public class ViewKeyAdvUserIdsFragment extends LoaderFragment implements      private Uri mDataUri;      private boolean mHasSecret; +    private SaveKeyringParcel mEditModeSaveKeyringParcel;      @Override      public View onCreateView(LayoutInflater inflater, ViewGroup superContainer, Bundle savedInstanceState) { @@ -70,14 +75,71 @@ public class ViewKeyAdvUserIdsFragment extends LoaderFragment implements          mUserIds.setOnItemClickListener(new AdapterView.OnItemClickListener() {              @Override              public void onItemClick(AdapterView<?> parent, View view, int position, long id) { -                showUserIdInfo(position); +                showOrEditUserIdInfo(position);              }          });          return root;      } +    private void showOrEditUserIdInfo(final int position) { +        if (mEditModeSaveKeyringParcel != null) { +            editUserId(position); +        } else { +            showUserIdInfo(position); +        } +    } + +    private void editUserId(final int position) { +        final String userId = mUserIdsAdapter.getUserId(position); +        final boolean isRevoked = mUserIdsAdapter.getIsRevoked(position); +        final boolean isRevokedPending = mUserIdsAdapter.getIsRevokedPending(position); + +        Handler returnHandler = new Handler() { +            @Override +            public void handleMessage(Message message) { +                switch (message.what) { +                    case EditUserIdDialogFragment.MESSAGE_CHANGE_PRIMARY_USER_ID: +                        // toggle +                        if (mEditModeSaveKeyringParcel.mChangePrimaryUserId != null +                                && mEditModeSaveKeyringParcel.mChangePrimaryUserId.equals(userId)) { +                            mEditModeSaveKeyringParcel.mChangePrimaryUserId = null; +                        } else { +                            mEditModeSaveKeyringParcel.mChangePrimaryUserId = userId; +                        } +                        break; +                    case EditUserIdDialogFragment.MESSAGE_REVOKE: +                        // toggle +                        if (mEditModeSaveKeyringParcel.mRevokeUserIds.contains(userId)) { +                            mEditModeSaveKeyringParcel.mRevokeUserIds.remove(userId); +                        } else { +                            mEditModeSaveKeyringParcel.mRevokeUserIds.add(userId); +                            // not possible to revoke and change to primary user id +                            if (mEditModeSaveKeyringParcel.mChangePrimaryUserId != null +                                    && mEditModeSaveKeyringParcel.mChangePrimaryUserId.equals(userId)) { +                                mEditModeSaveKeyringParcel.mChangePrimaryUserId = null; +                            } +                        } +                        break; +                } +                getLoaderManager().getLoader(LOADER_ID_USER_IDS).forceLoad(); +            } +        }; + +        // Create a new Messenger for the communication back +        final Messenger messenger = new Messenger(returnHandler); + +        DialogFragmentWorkaround.INTERFACE.runnableRunDelayed(new Runnable() { +            public void run() { +                EditUserIdDialogFragment dialogFragment = +                        EditUserIdDialogFragment.newInstance(messenger, isRevoked, isRevokedPending); +                dialogFragment.show(getActivity().getSupportFragmentManager(), "editUserIdDialog"); +            } +        }); +    } +      private void showUserIdInfo(final int position) { +          final boolean isRevoked = mUserIdsAdapter.getIsRevoked(position);          final int isVerified = mUserIdsAdapter.getIsVerified(position); @@ -175,10 +237,11 @@ public class ViewKeyAdvUserIdsFragment extends LoaderFragment implements          activity.startActionMode(new Callback() {              @Override              public boolean onCreateActionMode(ActionMode mode, Menu menu) { -                mUserIdsAdapter.setEditMode(new SaveKeyringParcel(0L, new byte[0])); +                mEditModeSaveKeyringParcel = new SaveKeyringParcel(0L, new byte[0]); +                mUserIdsAdapter.setEditMode(mEditModeSaveKeyringParcel);                  getLoaderManager().restartLoader(LOADER_ID_USER_IDS, null, ViewKeyAdvUserIdsFragment.this); -                mode.setTitle("Edit User Ids"); +                mode.setTitle(R.string.title_edit_identities);                  mode.getMenuInflater().inflate(R.menu.action_edit_uids, menu);                  return true; @@ -197,6 +260,7 @@ public class ViewKeyAdvUserIdsFragment extends LoaderFragment implements              @Override              public void onDestroyActionMode(ActionMode mode) { +                mEditModeSaveKeyringParcel = null;                  mUserIdsAdapter.setEditMode(null);                  getLoaderManager().restartLoader(LOADER_ID_USER_IDS, null, ViewKeyAdvUserIdsFragment.this);              } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserAttributesAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserAttributesAdapter.java index e0abaf4b0..31f8513fa 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserAttributesAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserAttributesAdapter.java @@ -1,5 +1,6 @@  package org.sufficientlysecure.keychain.ui.adapter; +  import android.content.Context;  import android.database.Cursor;  import android.support.v4.widget.CursorAdapter; 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 d5a9f551d..7dee90b4e 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 @@ -23,6 +23,7 @@ import android.content.Context;  import android.database.Cursor;  import android.graphics.Typeface;  import android.net.Uri; +import android.support.annotation.Nullable;  import android.support.v4.content.CursorLoader;  import android.view.LayoutInflater;  import android.view.View; @@ -53,10 +54,6 @@ public class UserIdsAdapter extends UserAttributesAdapter {          mShowStatusImages = showStatusImages;      } -    public UserIdsAdapter(Context context, Cursor c, int flags, SaveKeyringParcel saveKeyringParcel) { -        this(context, c, flags, true, saveKeyringParcel); -    } -      public UserIdsAdapter(Context context, Cursor c, int flags) {          this(context, c, flags, true, null);      } @@ -171,7 +168,17 @@ public class UserIdsAdapter extends UserAttributesAdapter {          return isRevokedPending;      } -    public void setEditMode(SaveKeyringParcel saveKeyringParcel) { +    /** Set this adapter into edit mode. This mode displays additional info for +     * each item from a supplied SaveKeyringParcel reference. +     * +     * Note that it is up to the caller to reload the underlying cursor after +     * updating the SaveKeyringParcel! +     * +     * @see SaveKeyringParcel +     * +     * @param saveKeyringParcel The parcel to get info from, or null to leave edit mode. +     */ +    public void setEditMode(@Nullable SaveKeyringParcel saveKeyringParcel) {          mSaveKeyringParcel = saveKeyringParcel;      } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsSelectableAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsSelectableAdapter.java index 947d911c3..3cc2e2044 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsSelectableAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsSelectableAdapter.java @@ -18,8 +18,8 @@ public class UserIdsSelectableAdapter extends UserIdsAdapter implements AdapterV      private final ArrayList<Boolean> mCheckStates; -    public UserIdsSelectableAdapter(Context context, Cursor c, int flags, SaveKeyringParcel saveKeyringParcel) { -        super(context, c, flags, saveKeyringParcel); +    public UserIdsSelectableAdapter(Context context, Cursor c, int flags) { +        super(context, c, flags);          mCheckStates = new ArrayList<Boolean>();      } diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml index 33babe763..78d4e03ee 100644 --- a/OpenKeychain/src/main/res/values/strings.xml +++ b/OpenKeychain/src/main/res/values/strings.xml @@ -1705,5 +1705,7 @@      <string name="toast_no_text">"No text in shared data!"</string>      <string name="btn_search_for_query">"Search for\n'%s'"</string>      <string name="menu_uids_save">Save</string> +    <string name="menu_uids_save">"Save"</string> +    <string name="title_edit_identities">"Edit Identities"</string>  </resources> | 
