From 6037deb60e9ef708da2ddcf84a5ef5ccc27d7237 Mon Sep 17 00:00:00 2001 From: uabdullah Date: Thu, 12 Oct 2017 17:17:50 -0700 Subject: Use CONTENT_URI_WITH_VOICEMAIL for SystemCallLogDataSource Currently the SystemCallLogDataSource queries the call log table with CONTENT_URI. This works for the call log tab, but will not work for the voicemail tab. To allow the voicemail tab to query annotated call log for voicemail information, we need to surface up voicemail data from the system call log data source into the annotated call log. Bug: 64882313,33006245 Test: Unit tests, also verified that in the call log only the non-voicemail entries show PiperOrigin-RevId: 172036196 Change-Id: Ieac855ae854a043207c9ae668280391c790ac33d --- .../database/AnnotatedCallLogContentProvider.java | 9 ++++++++- .../systemcalllog/SystemCallLogDataSource.java | 23 +++++++++++++++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) (limited to 'java/com') diff --git a/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java b/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java index 9a3d2e20f..39a806568 100644 --- a/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java +++ b/java/com/android/dialer/calllog/database/AnnotatedCallLogContentProvider.java @@ -29,6 +29,7 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteQueryBuilder; import android.net.Uri; import android.os.Build; +import android.provider.CallLog.Calls; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract; @@ -121,7 +122,13 @@ public class AnnotatedCallLogContentProvider extends ContentProvider { Assert.checkArgument(sortOrder == null, "sort order not supported for coalesced call log"); try (Cursor allAnnotatedCallLogRows = queryBuilder.query( - db, null, null, null, null, null, AnnotatedCallLog.TIMESTAMP + " DESC")) { + db, + null, + String.format("%s != ?", CoalescedAnnotatedCallLog.CALL_TYPE), + new String[] {Integer.toString(Calls.VOICEMAIL_TYPE)}, + null, + null, + AnnotatedCallLog.TIMESTAMP + " DESC")) { Cursor coalescedRows = coalescer.coalesce(allAnnotatedCallLogRows); coalescedRows.setNotificationUri( getContext().getContentResolver(), CoalescedAnnotatedCallLog.CONTENT_URI); diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java index 0a965f63e..681a86da7 100644 --- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java +++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java @@ -88,7 +88,7 @@ public class SystemCallLogDataSource implements CallLogDataSource { appContext .getContentResolver() .registerContentObserver( - CallLog.Calls.CONTENT_URI, + CallLog.Calls.CONTENT_URI_WITH_VOICEMAIL, true, new CallLogObserver( ThreadUtil.getUiThreadHandler(), appContext, contentObserverCallbacks)); @@ -152,6 +152,9 @@ public class SystemCallLogDataSource implements CallLogDataSource { @Override public ContentValues coalesce(List individualRowsSortedByTimestampDesc) { // TODO(zachh): Complete implementation. + + assertNoVoicemailsInRows(individualRowsSortedByTimestampDesc); + return new RowCombiner(individualRowsSortedByTimestampDesc) .useMostRecentLong(AnnotatedCallLog.TIMESTAMP) .useMostRecentLong(AnnotatedCallLog.NEW) @@ -174,6 +177,15 @@ public class SystemCallLogDataSource implements CallLogDataSource { .combine(); } + private void assertNoVoicemailsInRows(List individualRowsSortedByTimestampDesc) { + for (ContentValues contentValue : individualRowsSortedByTimestampDesc) { + if (contentValue.getAsLong(AnnotatedCallLog.CALL_TYPE) != null) { + Assert.checkArgument( + contentValue.getAsLong(AnnotatedCallLog.CALL_TYPE) != Calls.VOICEMAIL_TYPE); + } + } + } + @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources private void handleInsertsAndUpdates( Context appContext, CallLogMutations mutations, Set existingAnnotatedCallLogIds) { @@ -189,7 +201,7 @@ public class SystemCallLogDataSource implements CallLogDataSource { appContext .getContentResolver() .query( - Calls.CONTENT_URI, // Excludes voicemail + Calls.CONTENT_URI_WITH_VOICEMAIL, new String[] { Calls._ID, Calls.DATE, @@ -414,7 +426,12 @@ public class SystemCallLogDataSource implements CallLogDataSource { try (Cursor cursor = appContext .getContentResolver() - .query(Calls.CONTENT_URI, new String[] {Calls._ID}, whereClause, whereArgs, null)) { + .query( + Calls.CONTENT_URI_WITH_VOICEMAIL, + new String[] {Calls._ID}, + whereClause, + whereArgs, + null)) { if (cursor == null) { LogUtil.e("SystemCallLogDataSource.getIdsFromSystemCallLog", "null cursor"); -- cgit v1.2.3