aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org
diff options
context:
space:
mode:
authorVincent Breitmoser <valodim@mugenguild.com>2014-09-07 18:49:10 +0200
committerVincent Breitmoser <valodim@mugenguild.com>2014-09-07 18:49:29 +0200
commit0b091aa642f6b33f70628d112fa5d2b2afb23e2d (patch)
tree5e984193c2bb6dd34db890c5ab772138dccf8ae3 /OpenKeychain/src/main/java/org
parent857fc43873a24e22fb7b80d00e0086c138c70ca3 (diff)
downloadopen-keychain-0b091aa642f6b33f70628d112fa5d2b2afb23e2d.tar.gz
open-keychain-0b091aa642f6b33f70628d112fa5d2b2afb23e2d.tar.bz2
open-keychain-0b091aa642f6b33f70628d112fa5d2b2afb23e2d.zip
flag revoked, epired and unavailable keys in selection spinner
Diffstat (limited to 'OpenKeychain/src/main/java/org')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java2
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeySpinner.java28
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SignKeySpinner.java31
3 files changed, 56 insertions, 5 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java
index f6df4a3eb..ce6d48c58 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java
@@ -325,6 +325,7 @@ public class KeychainProvider extends ContentProvider {
+ " = " + Tables.KEYS + "." + Keys.MASTER_KEY_ID
+ " AND kS." + Keys.IS_REVOKED + " = 0"
+ " AND kS." + Keys.CAN_SIGN + " = 1"
+ + " AND kS." + Keys.HAS_SECRET + " > 1"
+ " AND ( kS." + Keys.EXPIRY + " IS NULL OR kS." + Keys.EXPIRY
+ " >= " + new Date().getTime() / 1000 + " )"
+ ")" : "")
@@ -334,6 +335,7 @@ public class KeychainProvider extends ContentProvider {
+ " = " + Tables.KEYS + "." + Keys.MASTER_KEY_ID
+ " AND kC." + Keys.IS_REVOKED + " = 0"
+ " AND kC." + Keys.CAN_CERTIFY + " = 1"
+ + " AND kC." + Keys.HAS_SECRET + " > 1"
+ " AND ( kC." + Keys.EXPIRY + " IS NULL OR kC." + Keys.EXPIRY
+ " >= " + new Date().getTime() / 1000 + " )"
+ ")" : "")
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeySpinner.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeySpinner.java
index 56e01d541..e7b148577 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeySpinner.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/KeySpinner.java
@@ -19,6 +19,7 @@ package org.sufficientlysecure.keychain.ui.widget;
import android.content.Context;
import android.database.Cursor;
+import android.graphics.Color;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.Loader;
@@ -139,9 +140,24 @@ public abstract class KeySpinner extends Spinner implements LoaderManager.Loader
@Override
public void bindView(View view, Context context, Cursor cursor) {
String[] userId = KeyRing.splitUserId(cursor.getString(mIndexUserId));
- ((TextView) view.findViewById(R.id.keyspinner_key_name)).setText(userId[2] == null ? userId[0] : (userId[0] + " (" + userId[2] + ")"));
+ TextView vKeyName = ((TextView) view.findViewById(R.id.keyspinner_key_name));
+ TextView vKeyStatus = ((TextView) view.findViewById(R.id.keyspinner_key_status));
+ vKeyName.setText(userId[2] == null ? userId[0] : (userId[0] + " (" + userId[2] + ")"));
((TextView) view.findViewById(R.id.keyspinner_key_email)).setText(userId[1]);
((TextView) view.findViewById(R.id.keyspinner_key_id)).setText(PgpKeyHelper.convertKeyIdToHex(cursor.getLong(mIndexKeyId)));
+ String status = getStatus(getContext(), cursor);
+ if (status == null) {
+ vKeyName.setTextColor(Color.BLACK);
+ vKeyStatus.setVisibility(View.GONE);
+ view.setClickable(false);
+ } else {
+ vKeyName.setTextColor(Color.GRAY);
+ vKeyStatus.setVisibility(View.VISIBLE);
+ vKeyStatus.setText(status);
+ // this is a HACK. the trick is, if the element itself is clickable, the
+ // click is not passed on to the view list
+ view.setClickable(true);
+ }
}
@Override
@@ -212,13 +228,19 @@ public abstract class KeySpinner extends Spinner implements LoaderManager.Loader
}
((TextView) v.findViewById(R.id.keyspinner_key_name)).setText(R.string.choice_none);
v.findViewById(R.id.keyspinner_key_email).setVisibility(View.GONE);
- v.findViewById(R.id.keyspinner_key_id).setVisibility(View.GONE);
+ v.findViewById(R.id.keyspinner_key_row).setVisibility(View.GONE);
} else {
v = inner.getView(position - 1, convertView, parent);
v.findViewById(R.id.keyspinner_key_email).setVisibility(View.VISIBLE);
- v.findViewById(R.id.keyspinner_key_id).setVisibility(View.VISIBLE);
+ v.findViewById(R.id.keyspinner_key_row).setVisibility(View.VISIBLE);
}
return v;
}
}
+
+ /** Return a string which should be the disabled status of the key, or null if the key is enabled. */
+ String getStatus(Context context, Cursor cursor) {
+ return null;
+ }
+
}
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SignKeySpinner.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SignKeySpinner.java
index d0517d464..648fcd4eb 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SignKeySpinner.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/widget/SignKeySpinner.java
@@ -24,6 +24,8 @@ import android.os.Bundle;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.util.AttributeSet;
+
+import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.provider.KeychainContract;
public class SignKeySpinner extends KeySpinner {
@@ -51,16 +53,41 @@ public class SignKeySpinner extends KeySpinner {
KeychainContract.KeyRings.MASTER_KEY_ID,
KeychainContract.KeyRings.KEY_ID,
KeychainContract.KeyRings.USER_ID,
+ KeychainContract.KeyRings.IS_REVOKED,
KeychainContract.KeyRings.IS_EXPIRED,
KeychainContract.KeyRings.HAS_SIGN,
KeychainContract.KeyRings.HAS_ANY_SECRET
};
- String where = KeychainContract.KeyRings.HAS_ANY_SECRET + " = 1 AND " + KeychainContract.KeyRings.HAS_SIGN + " NOT NULL AND "
- + KeychainContract.KeyRings.IS_REVOKED + " = 0 AND " + KeychainContract.KeyRings.IS_EXPIRED + " = 0";
+ String where = KeychainContract.KeyRings.HAS_ANY_SECRET + " = 1";
// Now create and return a CursorLoader that will take care of
// creating a Cursor for the data being displayed.
return new CursorLoader(getContext(), baseUri, projection, where, null, null);
}
+
+ private int mIndexHasSign, mIndexIsRevoked, mIndexIsExpired;
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
+ super.onLoadFinished(loader, cursor);
+ mIndexHasSign = cursor.getColumnIndex(KeychainContract.KeyRings.HAS_SIGN);
+ mIndexIsRevoked = cursor.getColumnIndex(KeychainContract.KeyRings.IS_REVOKED);
+ mIndexIsExpired = cursor.getColumnIndex(KeychainContract.KeyRings.IS_EXPIRED);
+ }
+
+ @Override
+ String getStatus(Context context, Cursor cursor) {
+ if (cursor.getInt(mIndexIsRevoked) != 0) {
+ return context.getString(R.string.revoked);
+ }
+ if (cursor.getInt(mIndexHasSign) == 0) {
+ return context.getString(R.string.key_unavailable);
+ }
+ if (cursor.getInt(mIndexIsExpired) != 0) {
+ return context.getString(R.string.expired);
+ }
+ return null;
+ }
+
}