aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src
diff options
context:
space:
mode:
authorAdithya Abraham Philip <adithyaphilip@gmail.com>2015-03-13 04:49:34 +0530
committerAdithya Abraham Philip <adithyaphilip@gmail.com>2015-03-13 04:49:34 +0530
commitd7ef2c1b9ed9a98c33049c9dc8b43611cf5b99ce (patch)
treef11a90b75bf98a37216dade70e09a3676e212449 /OpenKeychain/src
parent759009ddb4ac11f4065ecfa14e17ed330bd01989 (diff)
downloadopen-keychain-d7ef2c1b9ed9a98c33049c9dc8b43611cf5b99ce.tar.gz
open-keychain-d7ef2c1b9ed9a98c33049c9dc8b43611cf5b99ce.tar.bz2
open-keychain-d7ef2c1b9ed9a98c33049c9dc8b43611cf5b99ce.zip
added some documentation
Diffstat (limited to 'OpenKeychain/src')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java9
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java105
2 files changed, 87 insertions, 27 deletions
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java
index 68da3b58c..18f1ef8a7 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/ui/ViewKeyFragment.java
@@ -121,6 +121,7 @@ public class ViewKeyFragment extends LoaderFragment implements
/**
* 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
+ * In the case of a secret key, "me" contact details are loaded
*
* @param masterKeyId
*/
@@ -131,10 +132,10 @@ public class ViewKeyFragment extends LoaderFragment implements
long contactId;
String contactName = null;
- if(mIsSecret) {
+ if (mIsSecret) {//all secret keys are linked to "me" profile in contacts
contactId = ContactHelper.getMainProfileContactId(resolver);
List<String> mainProfileNames = ContactHelper.getMainProfileContactName(context);
- if(mainProfileNames!=null) contactName = mainProfileNames.get(0);
+ if (mainProfileNames != null) contactName = mainProfileNames.get(0);
} else {
contactId = ContactHelper.findContactId(resolver, masterKeyId);
@@ -145,10 +146,10 @@ public class ViewKeyFragment extends LoaderFragment implements
mSystemContactName.setText(contactName);
Bitmap picture;
- if(mIsSecret) {
+ if (mIsSecret) {
picture = ContactHelper.loadMainProfilePhoto(resolver, false);
} else {
- picture = ContactHelper.loadPhotoByMasterKeyId(resolver,masterKeyId,false);
+ picture = ContactHelper.loadPhotoByMasterKeyId(resolver, masterKeyId, false);
}
if (picture != null) mSystemContactPicture.setImageBitmap(picture);
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java
index cb6c39188..c07d7a36b 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java
@@ -214,6 +214,13 @@ public class ContactHelper {
return new ArrayList<>(names);
}
+ /**
+ * returns the CONTACT_ID of the main ("me") contact
+ * http://developer.android.com/reference/android/provider/ContactsContract.Profile.html
+ *
+ * @param resolver
+ * @return
+ */
public static long getMainProfileContactId(ContentResolver resolver) {
Cursor profileCursor = resolver.query(
ContactsContract.Profile.CONTENT_URI,
@@ -229,6 +236,14 @@ public class ContactHelper {
return profileCursor.getLong(0);
}
+ /**
+ * loads the profile picture of the main ("me") contact
+ * http://developer.android.com/reference/android/provider/ContactsContract.Profile.html
+ *
+ * @param contentResolver
+ * @param highRes true for large image if present, false for thumbnail
+ * @return bitmap of loaded photo
+ */
public static Bitmap loadMainProfilePhoto(ContentResolver contentResolver, boolean highRes) {
try {
long mainProfileContactId = getMainProfileContactId(contentResolver);
@@ -496,6 +511,12 @@ public class ContactHelper {
}
}
+ /**
+ * Links all keys with secrets to the main ("me") contact
+ * http://developer.android.com/reference/android/provider/ContactsContract.Profile.html
+ *
+ * @param context
+ */
public static void writeKeysToMainProfileContact(Context context) {
ContentResolver resolver = context.getContentResolver();
Set<Long> keysToDelete = getMainProfileMasterKeyIds(resolver);
@@ -509,22 +530,28 @@ public class ContactHelper {
if (cursor != null) {
while (cursor.moveToNext()) {
long masterKeyId = cursor.getLong(INDEX_MASTER_KEY_ID);
+ boolean isExpired = cursor.getInt(INDEX_IS_EXPIRED) != 0;
+ boolean isRevoked = cursor.getInt(INDEX_IS_REVOKED) > 0;
- boolean existsInMainProfile = keysToDelete.remove(masterKeyId);
- if (!existsInMainProfile) {
- long rawContactId = -1;//new raw contact
+ if (!isExpired && !isRevoked) {
+ // if expired or revoked will not be removed from keysToDelete or inserted
+ // into main profile ("me" contact)
+ boolean existsInMainProfile = keysToDelete.remove(masterKeyId);
+ if (!existsInMainProfile) {
+ long rawContactId = -1;//new raw contact
- String keyIdShort = KeyFormattingUtils.convertKeyIdToHexShort(masterKeyId);
- Log.d(Constants.TAG, "masterKeyId with secret " + masterKeyId);
+ String keyIdShort = KeyFormattingUtils.convertKeyIdToHexShort(masterKeyId);
+ Log.d(Constants.TAG, "masterKeyId with secret " + masterKeyId);
- ArrayList<ContentProviderOperation> ops = new ArrayList<>();
- insertMainProfileRawContact(ops, masterKeyId);
- writeContactKey(ops, context, rawContactId, masterKeyId, keyIdShort);
+ ArrayList<ContentProviderOperation> ops = new ArrayList<>();
+ insertMainProfileRawContact(ops, masterKeyId);
+ writeContactKey(ops, context, rawContactId, masterKeyId, keyIdShort);
- try {
- resolver.applyBatch(ContactsContract.AUTHORITY, ops);
- } catch (Exception e) {
- Log.w(Constants.TAG, e);
+ try {
+ resolver.applyBatch(ContactsContract.AUTHORITY, ops);
+ } catch (Exception e) {
+ Log.w(Constants.TAG, e);
+ }
}
}
}
@@ -538,6 +565,7 @@ public class ContactHelper {
/**
* Inserts a raw contact into the table defined by ContactsContract.Profile
+ * http://developer.android.com/reference/android/provider/ContactsContract.Profile.html
*
* @param ops
* @param masterKeyId
@@ -552,7 +580,8 @@ public class ContactHelper {
}
/**
- * deletes a raw contact from the profile table
+ * deletes a raw contact from the main profile table ("me" contact)
+ * http://developer.android.com/reference/android/provider/ContactsContract.Profile.html
*
* @param resolver
* @param masterKeyId
@@ -560,8 +589,8 @@ public class ContactHelper {
*/
private static int deleteMainProfileRawContactByMasterKeyId(ContentResolver resolver,
long masterKeyId) {
- //allows us to actually wipe the RawContact from the device, otherwise would be just flagged
- //for deletion
+ // CALLER_IS_SYNCADAPTER allows us to actually wipe the RawContact from the device, otherwise
+ // would be just flagged for deletion
Uri deleteUri = ContactsContract.Profile.CONTENT_RAW_CONTACTS_URI.buildUpon().
appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build();
@@ -574,25 +603,47 @@ public class ContactHelper {
}
/**
- * Delete all raw contacts associated to OpenKeychain.
+ * Delete all raw contacts associated to OpenKeychain, including those from "me" contact
+ * defined by ContactsContract.Profile
+ *
+ * @return number of rows deleted
*/
private static int debugDeleteRawContacts(ContentResolver resolver) {
- //allows us to actually wipe the RawContact from the device, otherwise would be just flagged
- //for deletion
+ // CALLER_IS_SYNCADAPTER allows us to actually wipe the RawContact from the device, otherwise
+ // would be just flagged for deletion
Uri deleteUri = ContactsContract.RawContacts.CONTENT_URI.buildUpon().
appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build();
Log.d(Constants.TAG, "Deleting all raw contacts associated to OK...");
- return resolver.delete(deleteUri,
+ int delete = resolver.delete(deleteUri,
+ ContactsContract.RawContacts.ACCOUNT_TYPE + "=?",
+ new String[]{
+ Constants.ACCOUNT_TYPE
+ });
+
+ Uri mainProfileDeleteUri = ContactsContract.Profile.CONTENT_RAW_CONTACTS_URI.buildUpon()
+ .appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build();
+
+ delete += resolver.delete(mainProfileDeleteUri,
ContactsContract.RawContacts.ACCOUNT_TYPE + "=?",
new String[]{
Constants.ACCOUNT_TYPE
});
+
+ return delete;
}
+ /**
+ * Deletes raw contacts from ContactsContract.RawContacts based on rawContactId. Does not
+ * delete contacts from the "me" contact defined in ContactsContract.Profile
+ *
+ * @param resolver
+ * @param rawContactId
+ * @return number of rows deleted
+ */
private static int deleteRawContactById(ContentResolver resolver, long rawContactId) {
- //allows us to actually wipe the RawContact from the device, otherwise would be just flagged
- //for deletion
+ // CALLER_IS_SYNCADAPTER allows us to actually wipe the RawContact from the device, otherwise
+ // would be just flagged for deletion
Uri deleteUri = ContactsContract.RawContacts.CONTENT_URI.buildUpon().
appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build();
@@ -604,9 +655,17 @@ public class ContactHelper {
});
}
+ /**
+ * Deletes raw contacts from ContactsContract.RawContacts based on masterKeyId. Does not
+ * delete contacts from the "me" contact defined in ContactsContract.Profile
+ *
+ * @param resolver
+ * @param masterKeyId
+ * @return number of rows deleted
+ */
private static int deleteRawContactByMasterKeyId(ContentResolver resolver, long masterKeyId) {
- //allows us to actually wipe the RawContact from the device, otherwise would be just flagged
- //for deletion
+ // CALLER_IS_SYNCADAPTER allows us to actually wipe the RawContact from the device, otherwise
+ // would be just flagged for deletion
Uri deleteUri = ContactsContract.RawContacts.CONTENT_URI.buildUpon().
appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build();