aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2015-11-02 21:59:31 +0100
committerDominik Schürmann <dominik@dominikschuermann.de>2015-12-27 14:59:50 +0100
commita041acab65b916e3727ec679edc0f5583847a96c (patch)
tree6926b5a352c1982dbcf08dce37b8d04341b90f9d
parent5b6bc24a0c87162609d1c2b60ac8c13144641680 (diff)
downloadopen-keychain-a041acab65b916e3727ec679edc0f5583847a96c.tar.gz
open-keychain-a041acab65b916e3727ec679edc0f5583847a96c.tar.bz2
open-keychain-a041acab65b916e3727ec679edc0f5583847a96c.zip
extend-uid: allow changes to user ids in edit mode
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/EditKeyFragment.java3
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java6
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvUserIdsFragment.java70
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserAttributesAdapter.java1
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsAdapter.java17
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/UserIdsSelectableAdapter.java4
-rw-r--r--OpenKeychain/src/main/res/values/strings.xml2
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>