aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
diff options
context:
space:
mode:
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java49
1 files changed, 47 insertions, 2 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
index 0488d8235..94f898089 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/KeyListFragment.java
@@ -29,6 +29,8 @@ import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
+import android.database.MatrixCursor;
+import android.database.MergeCursor;
import android.graphics.Color;
import android.net.Uri;
import android.os.Build;
@@ -265,7 +267,6 @@ public class KeyListFragment extends LoaderFragment
static final String ORDER =
KeyRings.HAS_ANY_SECRET + " DESC, UPPER(" + KeyRings.USER_ID + ") ASC";
-
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// This is called when a new Loader needs to be created. This
@@ -298,6 +299,22 @@ public class KeyListFragment extends LoaderFragment
// Swap the new cursor in. (The framework will take care of closing the
// old cursor once we return.)
mAdapter.setSearchQuery(mQuery);
+
+ if (data != null && data.moveToFirst()) {
+ boolean isSecret = data.getInt(KeyListAdapter.INDEX_HAS_ANY_SECRET) != 0;
+ if (!isSecret) {
+ MatrixCursor headerCursor = new MatrixCursor(KeyListAdapter.PROJECTION);
+ Long[] row = new Long[KeyListAdapter.PROJECTION.length];
+ row[KeyListAdapter.INDEX_HAS_ANY_SECRET] = 1L;
+ row[KeyListAdapter.INDEX_MASTER_KEY_ID] = 0L;
+ headerCursor.addRow(row);
+
+ Cursor dataCursor = data;
+ data = new MergeCursor(new Cursor[] {
+ headerCursor, dataCursor
+ });
+ }
+ }
mAdapter.swapCursor(data);
mStickyList.setAdapter(mAdapter);
@@ -722,6 +739,29 @@ public class KeyListFragment extends LoaderFragment
return v;
}
+ @Override
+ public void bindView(View view, Context context, Cursor cursor) {
+ boolean isSecret = cursor.getInt(INDEX_HAS_ANY_SECRET) != 0;
+ long masterKeyId = cursor.getLong(INDEX_MASTER_KEY_ID);
+ if (isSecret && masterKeyId == 0L) {
+
+ // sort of a hack: if this item isn't enabled, we make it clickable
+ // to intercept its click events
+ view.setClickable(true);
+
+ KeyItemViewHolder h = (KeyItemViewHolder) view.getTag();
+ h.setDummy(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ createKey();
+ }
+ });
+ return;
+ }
+
+ super.bindView(view, context, cursor);
+ }
+
private class HeaderViewHolder {
TextView mText;
TextView mCount;
@@ -760,6 +800,10 @@ public class KeyListFragment extends LoaderFragment
if (mCursor.getInt(INDEX_HAS_ANY_SECRET) != 0) {
{ // set contact count
int num = mCursor.getCount();
+ // If this is a dummy secret key, subtract one
+ if (mCursor.getLong(INDEX_MASTER_KEY_ID) == 0L) {
+ num -= 1;
+ }
String contactsTotal = mContext.getResources().getQuantityString(R.plurals.n_keys, num, num);
holder.mCount.setText(contactsTotal);
holder.mCount.setVisibility(View.VISIBLE);
@@ -818,8 +862,9 @@ public class KeyListFragment extends LoaderFragment
public boolean isAnySecretSelected() {
for (int pos : mSelection.keySet()) {
- if (isSecretAvailable(pos))
+ if (isSecretAvailable(pos)) {
return true;
+ }
}
return false;
}