diff options
-rw-r--r-- | src/com/android/dialer/calllog/CallLogQuery.java | 31 | ||||
-rw-r--r-- | src/com/android/dialer/calllog/ContactInfoHelper.java | 16 | ||||
-rw-r--r-- | src/com/android/dialer/compat/DialerCompatUtils.java | 12 |
3 files changed, 46 insertions, 13 deletions
diff --git a/src/com/android/dialer/calllog/CallLogQuery.java b/src/com/android/dialer/calllog/CallLogQuery.java index 3f798010e..905a4b789 100644 --- a/src/com/android/dialer/calllog/CallLogQuery.java +++ b/src/com/android/dialer/calllog/CallLogQuery.java @@ -18,10 +18,12 @@ package com.android.dialer.calllog; import android.provider.CallLog.Calls; +import com.android.dialer.compat.DialerCompatUtils; import com.android.dialer.util.AppCompatConstants; -import java.util.ArrayList; -import java.util.Arrays; +import com.google.common.collect.Lists; + +import java.util.List; /** * The query for the call log table. @@ -52,7 +54,6 @@ public final class CallLogQuery { Calls.FEATURES, // 20 Calls.DATA_USAGE, // 21 Calls.TRANSCRIPTION, // 22 - Calls.CACHED_PHOTO_URI // 23 }; public static final int ID = 0; @@ -78,18 +79,32 @@ public final class CallLogQuery { public static final int FEATURES = 20; public static final int DATA_USAGE = 21; public static final int TRANSCRIPTION = 22; - public static final int CACHED_PHOTO_URI = 23; - public static final int POST_DIAL_DIGITS = 24; + + // Indices for columns that may not be available, depending on the Sdk Version + /** + * Only available in versions >= M + * Call {@link DialerCompatUtils#isCallsCachedPhotoUriCompatible()} prior to use + */ + public static int CACHED_PHOTO_URI = -1; + + /** + * Only available in versions > M + * Call {@link PhoneNumberDisplayUtil#canShowPostDial()} prior to use + */ + public static int POST_DIAL_DIGITS = -1; public static final String[] _PROJECTION; static { - ArrayList<String> projectionList = new ArrayList<String>(); - projectionList.addAll(Arrays.asList(_PROJECTION_INTERNAL)); + List<String> projectionList = Lists.newArrayList(_PROJECTION_INTERNAL); + if (DialerCompatUtils.isCallsCachedPhotoUriCompatible()) { + projectionList.add(Calls.CACHED_PHOTO_URI); + CACHED_PHOTO_URI = projectionList.size() - 1; + } if (PhoneNumberDisplayUtil.canShowPostDial()) { projectionList.add(AppCompatConstants.POST_DIAL_DIGITS); + POST_DIAL_DIGITS = projectionList.size() - 1; } - projectionList.trimToSize(); _PROJECTION = projectionList.toArray(new String[projectionList.size()]); } diff --git a/src/com/android/dialer/calllog/ContactInfoHelper.java b/src/com/android/dialer/calllog/ContactInfoHelper.java index 5b6c52b64..3e4f70f4e 100644 --- a/src/com/android/dialer/calllog/ContactInfoHelper.java +++ b/src/com/android/dialer/calllog/ContactInfoHelper.java @@ -33,6 +33,7 @@ import com.android.contacts.common.util.Constants; import com.android.contacts.common.util.PermissionsUtil; import com.android.contacts.common.util.PhoneNumberHelper; import com.android.contacts.common.util.UriUtils; +import com.android.dialer.compat.DialerCompatUtils; import com.android.dialer.service.CachedNumberLookupService; import com.android.dialer.service.CachedNumberLookupService.CachedContactInfo; import com.android.dialer.util.TelecomUtil; @@ -335,7 +336,8 @@ public class ContactInfoHelper { final Uri updatedPhotoUriContactsOnly = UriUtils.nullForNonContactsUri(updatedInfo.photoUri); - if (!UriUtils.areEqual(updatedPhotoUriContactsOnly, callLogInfo.photoUri)) { + if (DialerCompatUtils.isCallsCachedPhotoUriCompatible() && + !UriUtils.areEqual(updatedPhotoUriContactsOnly, callLogInfo.photoUri)) { values.put(Calls.CACHED_PHOTO_URI, UriUtils.uriToString(updatedPhotoUriContactsOnly)); needsUpdate = true; @@ -354,8 +356,10 @@ public class ContactInfoHelper { values.put(Calls.CACHED_MATCHED_NUMBER, updatedInfo.number); values.put(Calls.CACHED_NORMALIZED_NUMBER, updatedInfo.normalizedNumber); values.put(Calls.CACHED_PHOTO_ID, updatedInfo.photoId); - values.put(Calls.CACHED_PHOTO_URI, UriUtils.uriToString( - UriUtils.nullForNonContactsUri(updatedInfo.photoUri))); + if (DialerCompatUtils.isCallsCachedPhotoUriCompatible()) { + values.put(Calls.CACHED_PHOTO_URI, UriUtils.uriToString( + UriUtils.nullForNonContactsUri(updatedInfo.photoUri))); + } values.put(Calls.CACHED_FORMATTED_NUMBER, updatedInfo.formattedNumber); needsUpdate = true; } @@ -412,8 +416,10 @@ public class ContactInfoHelper { info.normalizedNumber = c.getString(CallLogQuery.CACHED_NORMALIZED_NUMBER); info.photoId = c.getLong(CallLogQuery.CACHED_PHOTO_ID); - info.photoUri = UriUtils.nullForNonContactsUri( - UriUtils.parseUriOrNull(c.getString(CallLogQuery.CACHED_PHOTO_URI))); + info.photoUri = DialerCompatUtils.isCallsCachedPhotoUriCompatible() ? + UriUtils.nullForNonContactsUri( + UriUtils.parseUriOrNull(c.getString(CallLogQuery.CACHED_PHOTO_URI))) + : null; info.formattedNumber = c.getString(CallLogQuery.CACHED_FORMATTED_NUMBER); return info; diff --git a/src/com/android/dialer/compat/DialerCompatUtils.java b/src/com/android/dialer/compat/DialerCompatUtils.java index cda51c691..07a279aa4 100644 --- a/src/com/android/dialer/compat/DialerCompatUtils.java +++ b/src/com/android/dialer/compat/DialerCompatUtils.java @@ -41,4 +41,16 @@ public final class DialerCompatUtils { return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.LOLLIPOP) >= Build.VERSION_CODES.M; } + + /** + * Determines if this version has access to the + * {@link android.provider.CallLog.Calls.CACHED_PHOTO_URI} column + * + * @return {@code true} if {@link android.provider.CallLog.Calls.CACHED_PHOTO_URI} is available, + * {@code false} otherwise + */ + public static boolean isCallsCachedPhotoUriCompatible() { + return SdkVersionOverride.getSdkVersion(Build.VERSION_CODES.M) + >= Build.VERSION_CODES.M; + } }
\ No newline at end of file |