mirror of
https://github.com/moparisthebest/open-keychain
synced 2024-11-23 17:22:16 -05:00
Merge pull request #1134 from adithyaphilip/sync-confirmed-keys
Sync only confirmed keys and change
This commit is contained in:
commit
fb1701f09f
@ -20,6 +20,7 @@ import org.sufficientlysecure.keychain.provider.ProviderHelper;
|
|||||||
import org.sufficientlysecure.keychain.provider.ProviderHelper.NotFoundException;
|
import org.sufficientlysecure.keychain.provider.ProviderHelper.NotFoundException;
|
||||||
import org.sufficientlysecure.keychain.service.CertifyActionsParcel;
|
import org.sufficientlysecure.keychain.service.CertifyActionsParcel;
|
||||||
import org.sufficientlysecure.keychain.service.CertifyActionsParcel.CertifyAction;
|
import org.sufficientlysecure.keychain.service.CertifyActionsParcel.CertifyAction;
|
||||||
|
import org.sufficientlysecure.keychain.service.ContactSyncAdapterService;
|
||||||
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
import org.sufficientlysecure.keychain.ui.util.KeyFormattingUtils;
|
||||||
import org.sufficientlysecure.keychain.util.Log;
|
import org.sufficientlysecure.keychain.util.Log;
|
||||||
|
|
||||||
@ -191,6 +192,9 @@ public class CertifyOperation extends BaseOperation {
|
|||||||
}
|
}
|
||||||
|
|
||||||
log.add(LogType.MSG_CRT_SUCCESS, 0);
|
log.add(LogType.MSG_CRT_SUCCESS, 0);
|
||||||
|
//since only verified keys are synced to contacts, we need to initiate a sync now
|
||||||
|
ContactSyncAdapterService.requestSync();
|
||||||
|
|
||||||
return new CertifyResult(CertifyResult.RESULT_OK, log, certifyOk, certifyError, uploadOk, uploadError);
|
return new CertifyResult(CertifyResult.RESULT_OK, log, certifyOk, certifyError, uploadOk, uploadError);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -53,7 +53,7 @@ public class ViewKeyFragment extends LoaderFragment implements
|
|||||||
//private ListView mLinkedSystemContact;
|
//private ListView mLinkedSystemContact;
|
||||||
|
|
||||||
boolean mIsSecret = false;
|
boolean mIsSecret = false;
|
||||||
private String mName;
|
boolean mSystemContactLoaded = false;
|
||||||
|
|
||||||
LinearLayout mSystemContactLayout;
|
LinearLayout mSystemContactLayout;
|
||||||
ImageView mSystemContactPicture;
|
ImageView mSystemContactPicture;
|
||||||
@ -120,17 +120,17 @@ public class ViewKeyFragment extends LoaderFragment implements
|
|||||||
* Checks if a system contact exists for given masterKeyId, and if it does, sets name, picture
|
* Checks if a system contact exists for given masterKeyId, and if it does, sets name, picture
|
||||||
* and onClickListener for the linked system contact's layout
|
* and onClickListener for the linked system contact's layout
|
||||||
*
|
*
|
||||||
* @param name
|
|
||||||
* @param masterKeyId
|
* @param masterKeyId
|
||||||
*/
|
*/
|
||||||
private void loadLinkedSystemContact(String name, final long masterKeyId) {
|
private void loadLinkedSystemContact(final long masterKeyId) {
|
||||||
final Context context = mSystemContactName.getContext();
|
final Context context = mSystemContactName.getContext();
|
||||||
final ContentResolver resolver = context.getContentResolver();
|
final ContentResolver resolver = context.getContentResolver();
|
||||||
|
|
||||||
final long contactId = ContactHelper.findContactId(resolver, masterKeyId);
|
final long contactId = ContactHelper.findContactId(resolver, masterKeyId);
|
||||||
|
final String contactName = ContactHelper.getContactName(resolver, contactId);
|
||||||
|
|
||||||
if (contactId != -1) {//contact exists for given master key
|
if (contactName != null) {//contact name exists for given master key
|
||||||
mSystemContactName.setText(name);
|
mSystemContactName.setText(contactName);
|
||||||
|
|
||||||
Bitmap picture = ContactHelper.loadPhotoByMasterKeyId(resolver, masterKeyId, true);
|
Bitmap picture = ContactHelper.loadPhotoByMasterKeyId(resolver, masterKeyId, true);
|
||||||
if (picture != null) mSystemContactPicture.setImageBitmap(picture);
|
if (picture != null) mSystemContactPicture.setImageBitmap(picture);
|
||||||
@ -141,6 +141,7 @@ public class ViewKeyFragment extends LoaderFragment implements
|
|||||||
launchContactActivity(contactId, context);
|
launchContactActivity(contactId, context);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
mSystemContactLoaded = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -238,14 +239,14 @@ public class ViewKeyFragment extends LoaderFragment implements
|
|||||||
switch (loader.getId()) {
|
switch (loader.getId()) {
|
||||||
case LOADER_ID_UNIFIED: {
|
case LOADER_ID_UNIFIED: {
|
||||||
if (data.moveToFirst()) {
|
if (data.moveToFirst()) {
|
||||||
|
//TODO system to allow immediate refreshing of system contact on verification
|
||||||
|
if (!mSystemContactLoaded) {//ensure we load linked system contact only once
|
||||||
|
long masterKeyId = data.getLong(INDEX_MASTER_KEY_ID);
|
||||||
|
loadLinkedSystemContact(masterKeyId);
|
||||||
|
}
|
||||||
|
|
||||||
mIsSecret = data.getInt(INDEX_HAS_ANY_SECRET) != 0;
|
mIsSecret = data.getInt(INDEX_HAS_ANY_SECRET) != 0;
|
||||||
if (mName == null) {//to ensure we load the linked system contact only once
|
|
||||||
String[] mainUserId = KeyRing.splitUserId(data.getString(INDEX_USER_ID));
|
|
||||||
mName = mainUserId[0];
|
|
||||||
long masterKeyId = data.getLong(INDEX_MASTER_KEY_ID);
|
|
||||||
loadLinkedSystemContact(mName, masterKeyId);
|
|
||||||
}
|
|
||||||
// load user ids after we know if it's a secret key
|
// load user ids after we know if it's a secret key
|
||||||
mUserIdsAdapter = new UserIdsAdapter(getActivity(), null, 0, !mIsSecret, null);
|
mUserIdsAdapter = new UserIdsAdapter(getActivity(), null, 0, !mIsSecret, null);
|
||||||
mUserIds.setAdapter(mUserIdsAdapter);
|
mUserIds.setAdapter(mUserIdsAdapter);
|
||||||
|
@ -296,6 +296,34 @@ public class ContactHelper {
|
|||||||
return contactId;
|
return contactId;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the display name of the system contact associated with contactId, null if the
|
||||||
|
* contact does not exist
|
||||||
|
*
|
||||||
|
* @param resolver
|
||||||
|
* @param contactId
|
||||||
|
* @return primary display name of system contact associated with contactId, null if it does
|
||||||
|
* not exist
|
||||||
|
*/
|
||||||
|
public static String getContactName(ContentResolver resolver, long contactId) {
|
||||||
|
String contactName = null;
|
||||||
|
Cursor raw = resolver.query(ContactsContract.Contacts.CONTENT_URI,
|
||||||
|
new String[]{
|
||||||
|
ContactsContract.Contacts.DISPLAY_NAME_PRIMARY
|
||||||
|
},
|
||||||
|
ContactsContract.Contacts._ID + "=?",
|
||||||
|
new String[]{//"0" for "not deleted"
|
||||||
|
Long.toString(contactId)
|
||||||
|
}, null);
|
||||||
|
if (raw != null) {
|
||||||
|
if (raw.moveToNext()) {
|
||||||
|
contactName = raw.getString(0);
|
||||||
|
}
|
||||||
|
raw.close();
|
||||||
|
}
|
||||||
|
return contactName;
|
||||||
|
}
|
||||||
|
|
||||||
public static Bitmap getCachedPhotoByMasterKeyId(ContentResolver contentResolver, long masterKeyId) {
|
public static Bitmap getCachedPhotoByMasterKeyId(ContentResolver contentResolver, long masterKeyId) {
|
||||||
if (masterKeyId == -1) {
|
if (masterKeyId == -1) {
|
||||||
return null;
|
return null;
|
||||||
@ -333,12 +361,16 @@ public class ContactHelper {
|
|||||||
KeychainContract.KeyRings.MASTER_KEY_ID,
|
KeychainContract.KeyRings.MASTER_KEY_ID,
|
||||||
KeychainContract.KeyRings.USER_ID,
|
KeychainContract.KeyRings.USER_ID,
|
||||||
KeychainContract.KeyRings.IS_EXPIRED,
|
KeychainContract.KeyRings.IS_EXPIRED,
|
||||||
KeychainContract.KeyRings.IS_REVOKED};
|
KeychainContract.KeyRings.IS_REVOKED,
|
||||||
|
KeychainContract.KeyRings.VERIFIED,
|
||||||
|
KeychainContract.KeyRings.HAS_SECRET};
|
||||||
|
|
||||||
public static final int INDEX_MASTER_KEY_ID = 0;
|
public static final int INDEX_MASTER_KEY_ID = 0;
|
||||||
public static final int INDEX_USER_ID = 1;
|
public static final int INDEX_USER_ID = 1;
|
||||||
public static final int INDEX_IS_EXPIRED = 2;
|
public static final int INDEX_IS_EXPIRED = 2;
|
||||||
public static final int INDEX_IS_REVOKED = 3;
|
public static final int INDEX_IS_REVOKED = 3;
|
||||||
|
public static final int INDEX_VERIFIED = 4;
|
||||||
|
public static final int INDEX_HAS_SECRET = 5;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write/Update the current OpenKeychain keys to the contact db
|
* Write/Update the current OpenKeychain keys to the contact db
|
||||||
@ -373,6 +405,8 @@ public class ContactHelper {
|
|||||||
String keyIdShort = KeyFormattingUtils.convertKeyIdToHexShort(cursor.getLong(INDEX_MASTER_KEY_ID));
|
String keyIdShort = KeyFormattingUtils.convertKeyIdToHexShort(cursor.getLong(INDEX_MASTER_KEY_ID));
|
||||||
boolean isExpired = cursor.getInt(INDEX_IS_EXPIRED) != 0;
|
boolean isExpired = cursor.getInt(INDEX_IS_EXPIRED) != 0;
|
||||||
boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0;
|
boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0;
|
||||||
|
boolean isVerified = cursor.getInt(INDEX_VERIFIED) > 0;
|
||||||
|
boolean isSecret = cursor.getInt(INDEX_HAS_SECRET) != 0;
|
||||||
|
|
||||||
Log.d(Constants.TAG, "masterKeyId: " + masterKeyId);
|
Log.d(Constants.TAG, "masterKeyId: " + masterKeyId);
|
||||||
|
|
||||||
@ -385,8 +419,8 @@ public class ContactHelper {
|
|||||||
ArrayList<ContentProviderOperation> ops = new ArrayList<>();
|
ArrayList<ContentProviderOperation> ops = new ArrayList<>();
|
||||||
|
|
||||||
// Do not store expired or revoked keys in contact db - and remove them if they already exist
|
// Do not store expired or revoked keys in contact db - and remove them if they already exist
|
||||||
if (isExpired || isRevoked) {
|
if (isExpired || isRevoked || !isVerified&&!isSecret) {
|
||||||
Log.d(Constants.TAG, "Expired or revoked: Deleting rawContactId " + rawContactId);
|
Log.d(Constants.TAG, "Expired or revoked or unverified: Deleting rawContactId " + rawContactId);
|
||||||
if (rawContactId != -1) {
|
if (rawContactId != -1) {
|
||||||
deleteRawContactById(resolver, rawContactId);
|
deleteRawContactById(resolver, rawContactId);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user