aboutsummaryrefslogtreecommitdiffstats
path: root/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util
diff options
context:
space:
mode:
authorDominik Schürmann <dominik@dominikschuermann.de>2015-04-13 23:33:23 +0200
committerDominik Schürmann <dominik@dominikschuermann.de>2015-04-13 23:33:23 +0200
commitf12c7b64d8b78b5927d8c5a76f9c16a0272a44c5 (patch)
treeee13ef64b968d90238647c7fab07207c2bdb9e1d /OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util
parent256d644d03f989132e9db01e15f75aaee2f76157 (diff)
parent083cd100cebbbfdca3a0df76e050b817d8711cd8 (diff)
downloadopen-keychain-f12c7b64d8b78b5927d8c5a76f9c16a0272a44c5.tar.gz
open-keychain-f12c7b64d8b78b5927d8c5a76f9c16a0272a44c5.tar.bz2
open-keychain-f12c7b64d8b78b5927d8c5a76f9c16a0272a44c5.zip
Merge pull request #1193 from adithyaphilip/auto-refresh-contacts
Immediate display of contact card, fixed contact picture display issue, hides card if no contact
Diffstat (limited to 'OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util')
-rw-r--r--OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java51
1 files changed, 33 insertions, 18 deletions
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 c782d2507..609288bf1 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/util/ContactHelper.java
@@ -220,15 +220,14 @@ public class ContactHelper {
*/
public static long getMainProfileContactId(ContentResolver resolver) {
Cursor profileCursor = resolver.query(ContactsContract.Profile.CONTENT_URI,
- new String[]{ ContactsContract.Profile._ID}, null, null, null);
+ new String[]{ContactsContract.Profile._ID}, null, null, null);
- if(profileCursor != null && profileCursor.getCount() != 0 && profileCursor.moveToNext()) {
+ if (profileCursor != null && profileCursor.getCount() != 0 && profileCursor.moveToNext()) {
long contactId = profileCursor.getLong(0);
profileCursor.close();
return contactId;
- }
- else {
- if(profileCursor != null) {
+ } else {
+ if (profileCursor != null) {
profileCursor.close();
}
return -1;
@@ -330,7 +329,9 @@ public class ContactHelper {
ContactsContract.RawContacts.SOURCE_ID + "=? AND " +
ContactsContract.RawContacts.DELETED + "=?",
new String[]{//"0" for "not deleted"
- Constants.ACCOUNT_TYPE, Long.toString(masterKeyId), "0"
+ Constants.ACCOUNT_TYPE,
+ Long.toString(masterKeyId),
+ "0"
}, null);
if (raw != null) {
if (raw.moveToNext()) {
@@ -385,23 +386,37 @@ public class ContactHelper {
return null;
}
try {
- long rawContactId = findRawContactId(contentResolver, masterKeyId);
- if (rawContactId == -1) {
- return null;
- }
- Uri rawContactUri = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, rawContactId);
- Uri contactUri = ContactsContract.RawContacts.getContactLookupUri(contentResolver, rawContactUri);
- InputStream photoInputStream =
- ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, contactUri, highRes);
- if (photoInputStream == null) {
- return null;
- }
- return BitmapFactory.decodeStream(photoInputStream);
+ long contactId = findContactId(contentResolver, masterKeyId);
+ return loadPhotoByContactId(contentResolver, contactId, highRes);
+
} catch (Throwable ignored) {
return null;
}
}
+ public static Bitmap loadPhotoByContactId(ContentResolver contentResolver, long contactId,
+ boolean highRes) {
+ if (contactId == -1) {
+ return null;
+ }
+ Uri contactUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, contactId);
+ // older android versions (tested on API level 15) fail on lookupuris being passed to
+ // openContactPhotoInputStream
+ // http://stackoverflow.com/a/21214524/3000919
+ // Uri lookupUri = ContactsContract.Contacts.getLookupUri(contentResolver, contactUri);
+ // Also, we don't need a permanent shortcut to the contact since we load it afresh each time
+
+ InputStream photoInputStream = ContactsContract.Contacts.openContactPhotoInputStream(
+ contentResolver,
+ contactUri,
+ highRes);
+
+ if (photoInputStream == null) {
+ return null;
+ }
+ return BitmapFactory.decodeStream(photoInputStream);
+ }
+
public static final String[] KEYS_TO_CONTACT_PROJECTION = new String[]{
KeychainContract.KeyRings.MASTER_KEY_ID,
KeychainContract.KeyRings.USER_ID,