diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java index 019c5568a..00578e289 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/CachedPublicKeyRing.java @@ -109,6 +109,40 @@ public class CachedPublicKeyRing extends KeyRing { return getPrimaryUserId(); } + public String getName() throws PgpKeyNotFoundException { + try { + Object data = mProviderHelper.getGenericData(mUri, + KeyRings.NAME, + ProviderHelper.FIELD_TYPE_STRING); + return (String) data; + } catch(ProviderHelper.NotFoundException e) { + throw new PgpKeyNotFoundException(e); + } + } + + public String getEmail() throws PgpKeyNotFoundException { + try { + Object data = mProviderHelper.getGenericData(mUri, + KeyRings.EMAIL, + ProviderHelper.FIELD_TYPE_STRING); + return (String) data; + } catch(ProviderHelper.NotFoundException e) { + throw new PgpKeyNotFoundException(e); + } + } + + + public String getComment() throws PgpKeyNotFoundException { + try { + Object data = mProviderHelper.getGenericData(mUri, + KeyRings.COMMENT, + ProviderHelper.FIELD_TYPE_STRING); + return (String) data; + } catch(ProviderHelper.NotFoundException e) { + throw new PgpKeyNotFoundException(e); + } + } + @Override public boolean isRevoked() throws PgpKeyNotFoundException { try { 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 8a5d09d7b..a5bf6758f 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/provider/KeychainProvider.java @@ -526,6 +526,9 @@ public class KeychainProvider extends ContentProvider { projectionMap.put(UserPackets.MASTER_KEY_ID, Tables.USER_PACKETS + "." + UserPackets.MASTER_KEY_ID); projectionMap.put(UserPackets.TYPE, Tables.USER_PACKETS + "." + UserPackets.TYPE); projectionMap.put(UserPackets.USER_ID, Tables.USER_PACKETS + "." + UserPackets.USER_ID); + projectionMap.put(UserPackets.NAME, Tables.USER_PACKETS + "." + UserPackets.NAME); + projectionMap.put(UserPackets.EMAIL, Tables.USER_PACKETS + "." + UserPackets.EMAIL); + projectionMap.put(UserPackets.COMMENT, Tables.USER_PACKETS + "." + UserPackets.COMMENT); projectionMap.put(UserPackets.ATTRIBUTE_DATA, Tables.USER_PACKETS + "." + UserPackets.ATTRIBUTE_DATA); projectionMap.put(UserPackets.RANK, Tables.USER_PACKETS + "." + UserPackets.RANK); projectionMap.put(UserPackets.IS_PRIMARY, Tables.USER_PACKETS + "." + UserPackets.IS_PRIMARY); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/adapter/SelectEncryptKeyAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/adapter/SelectEncryptKeyAdapter.java index 13b733fbc..cc3d25642 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/adapter/SelectEncryptKeyAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/remote/ui/adapter/SelectEncryptKeyAdapter.java @@ -181,14 +181,15 @@ public class SelectEncryptKeyAdapter extends KeyCursorAdapter onCreateLoader(int id, Bundle args) { @@ -309,15 +315,15 @@ public abstract class DecryptFragment extends Fragment implements LoaderManager. long signatureKeyId = mSignatureResult.getKeyId(); - String userId = data.getString(INDEX_USER_ID); - OpenPgpUtils.UserId userIdSplit = KeyRing.splitUserId(userId); - if (userIdSplit.name != null) { - mSignatureName.setText(userIdSplit.name); + String name = data.getString(INDEX_NAME); + String email = data.getString(INDEX_EMAIL); + if (name != null) { + mSignatureName.setText(name); } else { mSignatureName.setText(R.string.user_id_no_name); } - if (userIdSplit.email != null) { - mSignatureEmail.setText(userIdSplit.email); + if (email != null) { + mSignatureEmail.setText(email); } else { mSignatureEmail.setText(KeyFormattingUtils.beautifyKeyIdWithPrefix( mSignatureResult.getKeyId())); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DeleteKeyDialogActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DeleteKeyDialogActivity.java index b580ba790..1827fd4e4 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DeleteKeyDialogActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/DeleteKeyDialogActivity.java @@ -93,7 +93,7 @@ public class DeleteKeyDialogActivity extends FragmentActivity { try { HashMap data = new ProviderHelper(this).getUnifiedData( mMasterKeyIds[0], new String[]{ - KeychainContract.KeyRings.USER_ID, + KeychainContract.KeyRings.NAME, KeychainContract.KeyRings.IS_REVOKED }, new int[]{ ProviderHelper.FIELD_TYPE_STRING, @@ -102,11 +102,10 @@ public class DeleteKeyDialogActivity extends FragmentActivity { ); String name; - OpenPgpUtils.UserId mainUserId = KeyRing.splitUserId( - (String) data.get(KeychainContract.KeyRings.USER_ID)); - if (mainUserId.name != null) { - name = mainUserId.name; - } else { + + name = (String) data.get(KeychainContract.KeyRings.NAME); + + if (name == null) { name = getString(R.string.user_id_no_name); } @@ -274,7 +273,7 @@ public class DeleteKeyDialogActivity extends FragmentActivity { try { HashMap data = new ProviderHelper(activity).getUnifiedData( masterKeyId, new String[]{ - KeychainContract.KeyRings.USER_ID, + KeychainContract.KeyRings.NAME, KeychainContract.KeyRings.HAS_ANY_SECRET }, new int[]{ ProviderHelper.FIELD_TYPE_STRING, @@ -282,10 +281,9 @@ public class DeleteKeyDialogActivity extends FragmentActivity { } ); String name; - OpenPgpUtils.UserId mainUserId = KeyRing.splitUserId((String) data.get(KeychainContract.KeyRings.USER_ID)); - if (mainUserId.name != null) { - name = mainUserId.name; - } else { + + name = (String) data.get(KeychainContract.KeyRings.NAME); + if (name == null) { name = getString(R.string.user_id_no_name); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/MultiUserIdsFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/MultiUserIdsFragment.java index 3a6c5b298..5490f6b05 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/MultiUserIdsFragment.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/MultiUserIdsFragment.java @@ -59,7 +59,10 @@ public class MultiUserIdsFragment extends Fragment implements LoaderManager.Load KeychainContract.UserPackets.MASTER_KEY_ID, KeychainContract.UserPackets.USER_ID, KeychainContract.UserPackets.IS_PRIMARY, - KeychainContract.UserPackets.IS_REVOKED + KeychainContract.UserPackets.IS_REVOKED, + KeychainContract.UserPackets.NAME, + KeychainContract.UserPackets.EMAIL, + KeychainContract.UserPackets.COMMENT, }; private static final int INDEX_MASTER_KEY_ID = 1; private static final int INDEX_USER_ID = 2; @@ -67,6 +70,9 @@ public class MultiUserIdsFragment extends Fragment implements LoaderManager.Load private static final int INDEX_IS_PRIMARY = 3; @SuppressWarnings("unused") private static final int INDEX_IS_REVOKED = 4; + private static final int INDEX_NAME = 5; + private static final int INDEX_EMAIL = 6; + private static final int INDEX_COMMENT = 7; @Nullable @Override @@ -169,14 +175,14 @@ public class MultiUserIdsFragment extends Fragment implements LoaderManager.Load while (!data.isAfterLast()) { long masterKeyId = data.getLong(INDEX_MASTER_KEY_ID); String userId = data.getString(INDEX_USER_ID); - OpenPgpUtils.UserId pieces = KeyRing.splitUserId(userId); + String name = data.getString(INDEX_NAME); // Two cases: boolean grouped = masterKeyId == lastMasterKeyId; - boolean subGrouped = data.isFirst() || grouped && lastName.equals(pieces.name); + boolean subGrouped = data.isFirst() || grouped && lastName.equals(name); // Remember for next loop - lastName = pieces.name; + lastName = name; Log.d(Constants.TAG, Long.toString(masterKeyId, 16) + (grouped ? "grouped" : "not grouped")); diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java index a91ade9ff..c2f4c2a4b 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyActivity.java @@ -822,7 +822,10 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements KeychainContract.KeyRings.VERIFIED, KeychainContract.KeyRings.HAS_ANY_SECRET, KeychainContract.KeyRings.FINGERPRINT, - KeychainContract.KeyRings.HAS_ENCRYPT + KeychainContract.KeyRings.HAS_ENCRYPT, + KeyRings.NAME, + KeyRings.EMAIL, + KeyRings.COMMENT }; static final int INDEX_MASTER_KEY_ID = 1; @@ -833,6 +836,9 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements static final int INDEX_HAS_ANY_SECRET = 6; static final int INDEX_FINGERPRINT = 7; static final int INDEX_HAS_ENCRYPT = 8; + static final int INDEX_NAME = 9; + static final int INDEX_EMAIL = 10; + static final int INDEX_COMMENT = 11; @Override public Loader onCreateLoader(int id, Bundle args) { @@ -885,12 +891,10 @@ public class ViewKeyActivity extends BaseSecurityTokenActivity implements if (data.moveToFirst()) { // get name, email, and comment from USER_ID - OpenPgpUtils.UserId mainUserId = KeyRing.splitUserId(data.getString(INDEX_USER_ID)); - if (mainUserId.name != null) { - mCollapsingToolbarLayout.setTitle(mainUserId.name); - } else { - mCollapsingToolbarLayout.setTitle(getString(R.string.user_id_no_name)); - } + + String name = data.getString(INDEX_NAME); + + mCollapsingToolbarLayout.setTitle(name != null ? name : getString(R.string.user_id_no_name)); mMasterKeyId = data.getLong(INDEX_MASTER_KEY_ID); mFingerprint = data.getBlob(INDEX_FINGERPRINT); 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 110ecbe9e..faa8743da 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyAdvActivity.java @@ -179,6 +179,9 @@ public class ViewKeyAdvActivity extends BaseActivity implements KeychainContract.KeyRings.VERIFIED, KeychainContract.KeyRings.HAS_ANY_SECRET, KeychainContract.KeyRings.FINGERPRINT, + KeychainContract.KeyRings.NAME, + KeychainContract.KeyRings.EMAIL, + KeychainContract.KeyRings.COMMENT, }; static final int INDEX_MASTER_KEY_ID = 1; @@ -188,6 +191,9 @@ public class ViewKeyAdvActivity extends BaseActivity implements static final int INDEX_VERIFIED = 5; static final int INDEX_HAS_ANY_SECRET = 6; static final int INDEX_FINGERPRINT = 7; + static final int INDEX_NAME = 8; + static final int INDEX_EMAIL = 9; + static final int INDEX_COMMENT = 10; @Override public Loader onCreateLoader(int id, Bundle args) { @@ -214,9 +220,10 @@ public class ViewKeyAdvActivity extends BaseActivity implements case LOADER_ID_UNIFIED: { if (data.moveToFirst()) { // get name, email, and comment from USER_ID - OpenPgpUtils.UserId mainUserId = KeyRing.splitUserId(data.getString(INDEX_USER_ID)); - if (mainUserId.name != null) { - setTitle(mainUserId.name); + String name = data.getString(INDEX_NAME); + + if (name != null) { + setTitle(name); } else { setTitle(R.string.user_id_no_name); } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/CertSectionedListAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/CertSectionedListAdapter.java index 64ac2d80e..e0a4df9c1 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/CertSectionedListAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/CertSectionedListAdapter.java @@ -233,8 +233,19 @@ public class CertSectionedListAdapter extends SectionCursorAdapter 0; @@ -293,6 +305,9 @@ public class KeyAdapter extends CursorAdapter { CanonicalizedPublicKey key = ring.getPublicKey(); String userId = key.getPrimaryUserIdWithFallback(); mUserId = KeyRing.splitUserId(userId); + mName = mUserId.name; + mEmail = mUserId.email; + mComment = mUserId.comment; mUserIdFull = userId; mKeyId = ring.getMasterKeyId(); mHasDuplicate = false; @@ -309,10 +324,10 @@ public class KeyAdapter extends CursorAdapter { } public String getReadableName() { - if (mUserId.name != null) { - return mUserId.name; + if (mName != null) { + return mName; } else { - return mUserId.email; + return mEmail; } } } diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/KeySectionedListAdapter.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/KeySectionedListAdapter.java index d4286d59b..426f5751d 100644 --- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/KeySectionedListAdapter.java +++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/adapter/KeySectionedListAdapter.java @@ -380,14 +380,15 @@ public class KeySectionedListAdapter extends SectionCursorAdapter 0; boolean isVerified = cursor.getInt(INDEX_VERIFIED) > 0; @@ -523,7 +529,7 @@ public class ContactHelper { if (masterKeyId != -1) { deleteRawContactByMasterKeyId(masterKeyId); } - } else if (userIdSplit.name != null) { + } else if (name != null) { // get raw contact to this master key id long rawContactId = findRawContactId(masterKeyId); @@ -534,12 +540,12 @@ public class ContactHelper { Log.d(Constants.TAG, "Insert new raw contact with masterKeyId " + masterKeyId); insertContact(ops, masterKeyId); - writeContactKey(ops, rawContactId, masterKeyId, userIdSplit.name); + writeContactKey(ops, rawContactId, masterKeyId, name); } // We always update the display name (which is derived from primary user id) // and email addresses from user id - writeContactDisplayName(ops, rawContactId, userIdSplit.name); + writeContactDisplayName(ops, rawContactId, name); writeContactEmail(ops, rawContactId, masterKeyId); try { mContentResolver.applyBatch(ContactsContract.AUTHORITY, ops); @@ -579,9 +585,9 @@ public class ContactHelper { long masterKeyId = cursor.getLong(INDEX_MASTER_KEY_ID); boolean isExpired = cursor.getInt(INDEX_IS_EXPIRED) != 0; boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0; - OpenPgpUtils.UserId userIdSplit = KeyRing.splitUserId(cursor.getString(INDEX_USER_ID)); + String name = cursor.getString(INDEX_NAME); - if (!isExpired && !isRevoked && userIdSplit.name != null) { + if (!isExpired && !isRevoked && name != null) { // if expired or revoked will not be removed from keysToDelete or inserted // into main profile ("me" contact) boolean existsInMainProfile = keysToDelete.remove(masterKeyId); @@ -592,7 +598,7 @@ public class ContactHelper { ArrayList ops = new ArrayList<>(); insertMainProfileRawContact(ops, masterKeyId); - writeContactKey(ops, rawContactId, masterKeyId, userIdSplit.name); + writeContactKey(ops, rawContactId, masterKeyId, name); try { mContentResolver.applyBatch(ContactsContract.AUTHORITY, ops);