diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/helper/PgpHelper.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/helper/PgpHelper.java index 9b8e4cb23..bb5f8eccd 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/helper/PgpHelper.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/helper/PgpHelper.java @@ -164,9 +164,7 @@ public class PgpHelper { for (int i = 0; i < signingKeys.size(); ++i) { PGPSecretKey key = signingKeys.get(i); if (key.isMasterKey()) { - if (!isSecretKeyPrivateEmpty(key)) { - masterKey = key; - } + masterKey = key; } else { usableKeys.add(key); } diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/ProviderHelper.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/ProviderHelper.java index 36049a64c..c23dcc559 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/ProviderHelper.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/provider/ProviderHelper.java @@ -370,11 +370,19 @@ public class ProviderHelper { private static ContentProviderOperation buildSecretKeyOperations(Context context, long keyRingRowId, PGPSecretKey key, int rank) throws IOException { ContentValues values = new ContentValues(); + + boolean has_private = true; + if (key.isMasterKey()) { + if (PgpHelper.isSecretKeyPrivateEmpty(key)) { + has_private = false; + } + } + values.put(Keys.KEY_ID, key.getKeyID()); values.put(Keys.IS_MASTER_KEY, key.isMasterKey()); values.put(Keys.ALGORITHM, key.getPublicKey().getAlgorithm()); values.put(Keys.KEY_SIZE, key.getPublicKey().getBitStrength()); - values.put(Keys.CAN_SIGN, PgpHelper.isSigningKey(key)); + values.put(Keys.CAN_SIGN, (PgpHelper.isSigningKey(key) && has_private)); values.put(Keys.CAN_ENCRYPT, PgpHelper.isEncryptionKey(key)); values.put(Keys.IS_REVOKED, key.getPublicKey().isRevoked()); values.put(Keys.CREATION, PgpHelper.getCreationDate(key).getTime() / 1000); diff --git a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/widget/KeyListAdapter.java b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/widget/KeyListAdapter.java index 61ca0e9d0..9b5941706 100644 --- a/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/widget/KeyListAdapter.java +++ b/OpenPGP-Keychain/src/org/sufficientlysecure/keychain/ui/widget/KeyListAdapter.java @@ -159,13 +159,8 @@ public class KeyListAdapter extends CursorTreeAdapter { } ImageView signIcon = (ImageView) view.findViewById(R.id.ic_signKey); - boolean privateEmpty = false; //Don't show signing icon for master keys without private keys - //TODO: does this need to be done for encrypting icon? Does anyone use master key for encrypt? - if (cursor.getInt(cursor.getColumnIndex(Keys.IS_MASTER_KEY)) == 1) { - privateEmpty = PgpHelper.isSecretKeyPrivateEmpty(context, - cursor.getLong(cursor.getColumnIndex(Keys.KEY_ID))); - } - if (privateEmpty || cursor.getInt(cursor.getColumnIndex(Keys.CAN_SIGN)) != 1) { + + if (cursor.getInt(cursor.getColumnIndex(Keys.CAN_SIGN)) != 1) { signIcon.setVisibility(View.GONE); } else { signIcon.setVisibility(View.VISIBLE);