summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/calllog/datasources/systemcalllog
diff options
context:
space:
mode:
authorTobias Thierer <tobiast@google.com>2017-06-09 14:16:05 +0000
committerTobias Thierer <tobiast@google.com>2017-06-09 14:16:05 +0000
commitcded3beaf28a703e1ef8f71bbc6836e6806c3736 (patch)
treec1b5e8199b5996fc848e7455d04126b9cdbb3c39 /java/com/android/dialer/calllog/datasources/systemcalllog
parentc67d658e7daa453fe9ad9fd1a37f81eaf2048c44 (diff)
Revert "Update AOSP Dialer source from internal google3 repository at cl/158012278. am: 91ce7d2a47"
This reverts commit c67d658e7daa453fe9ad9fd1a37f81eaf2048c44. Reason for revert: This CL broke the sailfish-userdebug_javac-all target on master. Change-Id: I9b54333a654c00154ca84f4ece84bea4f07cc19b
Diffstat (limited to 'java/com/android/dialer/calllog/datasources/systemcalllog')
-rw-r--r--java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java209
1 files changed, 9 insertions, 200 deletions
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index be2df6043..ea6663fbe 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -16,49 +16,28 @@
package com.android.dialer.calllog.datasources.systemcalllog;
-import android.Manifest.permission;
-import android.annotation.TargetApi;
-import android.content.ContentValues;
import android.content.Context;
import android.database.ContentObserver;
-import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
-import android.os.Build;
import android.os.Handler;
-import android.preference.PreferenceManager;
import android.provider.CallLog;
-import android.provider.CallLog.Calls;
import android.support.annotation.MainThread;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
import android.support.annotation.WorkerThread;
-import android.text.TextUtils;
-import android.util.ArraySet;
-import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog;
+import com.android.dialer.calllog.database.CallLogMutations;
import com.android.dialer.calllog.datasources.CallLogDataSource;
-import com.android.dialer.calllog.datasources.CallLogMutations;
-import com.android.dialer.calllog.datasources.util.RowCombiner;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.ThreadUtil;
import com.android.dialer.util.PermissionsUtil;
-import java.util.Arrays;
-import java.util.List;
-import java.util.Set;
import javax.inject.Inject;
/**
* Responsible for defining the rows in the annotated call log and maintaining the columns in it
* which are derived from the system call log.
*/
-@SuppressWarnings("MissingPermission")
public class SystemCallLogDataSource implements CallLogDataSource {
- @VisibleForTesting
- static final String PREF_LAST_TIMESTAMP_PROCESSED = "systemCallLogLastTimestampProcessed";
-
- @Nullable private Long lastTimestampProcessed;
-
@Inject
public SystemCallLogDataSource() {}
@@ -68,8 +47,6 @@ public class SystemCallLogDataSource implements CallLogDataSource {
Context appContext, ContentObserverCallbacks contentObserverCallbacks) {
Assert.isMainThread();
- LogUtil.enterBlock("SystemCallLogDataSource.registerContentObservers");
-
if (!PermissionsUtil.hasCallLogReadPermissions(appContext)) {
LogUtil.i("SystemCallLogDataSource.registerContentObservers", "no call log permissions");
return;
@@ -100,185 +77,17 @@ public class SystemCallLogDataSource implements CallLogDataSource {
@WorkerThread
@Override
- public void fill(Context appContext, CallLogMutations mutations) {
+ public void fill(
+ Context appContext,
+ SQLiteDatabase readableDatabase,
+ long lastRebuildTimeMillis,
+ CallLogMutations mutations) {
Assert.isWorkerThread();
- lastTimestampProcessed = null;
-
- if (!PermissionsUtil.hasPermission(appContext, permission.READ_CALL_LOG)) {
- LogUtil.i("SystemCallLogDataSource.fill", "no call log permissions");
- return;
- }
-
// This data source should always run first so the mutations should always be empty.
- Assert.checkArgument(mutations.isEmpty());
-
- Set<Long> annotatedCallLogIds = getAnnotatedCallLogIds(appContext);
-
- LogUtil.i(
- "SystemCallLogDataSource.fill",
- "found %d existing annotated call log ids",
- annotatedCallLogIds.size());
-
- handleInsertsAndUpdates(appContext, mutations, annotatedCallLogIds);
- handleDeletes(appContext, annotatedCallLogIds, mutations);
- }
-
- @WorkerThread
- @Override
- public void onSuccessfulFill(Context appContext) {
- // If a fill operation was a no-op, lastTimestampProcessed could still be null.
- if (lastTimestampProcessed != null) {
- PreferenceManager.getDefaultSharedPreferences(appContext)
- .edit()
- .putLong(PREF_LAST_TIMESTAMP_PROCESSED, lastTimestampProcessed)
- .commit();
- }
- }
-
- @Override
- public ContentValues coalesce(List<ContentValues> individualRowsSortedByTimestampDesc) {
- // TODO: Complete implementation.
- return new RowCombiner(individualRowsSortedByTimestampDesc)
- .useMostRecentLong(AnnotatedCallLog.TIMESTAMP)
- .combine();
- }
-
- @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
- private void handleInsertsAndUpdates(
- Context appContext, CallLogMutations mutations, Set<Long> existingAnnotatedCallLogIds) {
- long previousTimestampProcessed =
- PreferenceManager.getDefaultSharedPreferences(appContext)
- .getLong(PREF_LAST_TIMESTAMP_PROCESSED, 0L);
-
- try (Cursor cursor =
- appContext
- .getContentResolver()
- .query(
- Calls.CONTENT_URI, // Excludes voicemail
- new String[] {Calls._ID, Calls.DATE, Calls.LAST_MODIFIED},
- Calls.LAST_MODIFIED + " > ?",
- new String[] {String.valueOf(previousTimestampProcessed)},
- Calls.LAST_MODIFIED + " DESC LIMIT 1000")) {
-
- if (cursor == null) {
- LogUtil.e("SystemCallLogDataSource.handleInsertsAndUpdates", "null cursor");
- return;
- }
-
- LogUtil.i(
- "SystemCallLogDataSource.handleInsertsAndUpdates",
- "found %d entries to insert/update",
- cursor.getCount());
+ Assert.checkState(mutations.isEmpty());
- if (cursor.moveToFirst()) {
- int idColumn = cursor.getColumnIndexOrThrow(Calls._ID);
- int dateColumn = cursor.getColumnIndexOrThrow(Calls.DATE);
- int lastModifiedColumn = cursor.getColumnIndexOrThrow(Calls.LAST_MODIFIED);
-
- // The cursor orders by LAST_MODIFIED DESC, so the first result is the most recent timestamp
- // processed.
- lastTimestampProcessed = cursor.getLong(lastModifiedColumn);
- do {
- long id = cursor.getLong(idColumn);
- long date = cursor.getLong(dateColumn);
-
- ContentValues contentValues = new ContentValues();
- contentValues.put(AnnotatedCallLog.TIMESTAMP, date);
-
- if (existingAnnotatedCallLogIds.contains(id)) {
- mutations.update(id, contentValues);
- } else {
- mutations.insert(id, contentValues);
- }
- } while (cursor.moveToNext());
- } // else no new results, do nothing.
- }
- }
-
- private static void handleDeletes(
- Context appContext, Set<Long> existingAnnotatedCallLogIds, CallLogMutations mutations) {
- Set<Long> systemCallLogIds =
- getIdsFromSystemCallLogThatMatch(appContext, existingAnnotatedCallLogIds);
- LogUtil.i(
- "SystemCallLogDataSource.handleDeletes",
- "found %d entries in system call log",
- systemCallLogIds.size());
- Set<Long> idsInAnnotatedCallLogNoLongerInSystemCallLog = new ArraySet<>();
- idsInAnnotatedCallLogNoLongerInSystemCallLog.addAll(existingAnnotatedCallLogIds);
- idsInAnnotatedCallLogNoLongerInSystemCallLog.removeAll(systemCallLogIds);
-
- LogUtil.i(
- "SystemCallLogDataSource.handleDeletes",
- "found %d call log entries to remove",
- idsInAnnotatedCallLogNoLongerInSystemCallLog.size());
-
- for (long id : idsInAnnotatedCallLogNoLongerInSystemCallLog) {
- mutations.delete(id);
- }
- }
-
- @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
- private static Set<Long> getAnnotatedCallLogIds(Context appContext) {
- ArraySet<Long> ids = new ArraySet<>();
-
- try (Cursor cursor =
- appContext
- .getContentResolver()
- .query(
- AnnotatedCallLog.CONTENT_URI,
- new String[] {AnnotatedCallLog._ID},
- null,
- null,
- null)) {
-
- if (cursor == null) {
- LogUtil.e("SystemCallLogDataSource.getAnnotatedCallLogIds", "null cursor");
- return ids;
- }
-
- if (cursor.moveToFirst()) {
- int idColumn = cursor.getColumnIndexOrThrow(AnnotatedCallLog._ID);
- do {
- ids.add(cursor.getLong(idColumn));
- } while (cursor.moveToNext());
- }
- }
- return ids;
- }
-
- @TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
- private static Set<Long> getIdsFromSystemCallLogThatMatch(
- Context appContext, Set<Long> matchingIds) {
- ArraySet<Long> ids = new ArraySet<>();
-
- String[] questionMarks = new String[matchingIds.size()];
- Arrays.fill(questionMarks, "?");
- String whereClause = (Calls._ID + " in (") + TextUtils.join(",", questionMarks) + ")";
- String[] whereArgs = new String[matchingIds.size()];
- int i = 0;
- for (long id : matchingIds) {
- whereArgs[i++] = String.valueOf(id);
- }
-
- try (Cursor cursor =
- appContext
- .getContentResolver()
- .query(Calls.CONTENT_URI, new String[] {Calls._ID}, whereClause, whereArgs, null)) {
-
- if (cursor == null) {
- LogUtil.e("SystemCallLogDataSource.getIdsFromSystemCallLog", "null cursor");
- return ids;
- }
-
- if (cursor.moveToFirst()) {
- int idColumn = cursor.getColumnIndexOrThrow(Calls._ID);
- do {
- ids.add(cursor.getLong(idColumn));
- } while (cursor.moveToNext());
- }
- return ids;
- }
+ // TODO: Implementation.
}
private static class CallLogObserver extends ContentObserver {