summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/calllog/datasources
diff options
context:
space:
mode:
authorzachh <zachh@google.com>2017-12-05 17:42:58 -0800
committerCopybara-Service <copybara-piper@google.com>2017-12-07 18:26:26 -0800
commit5194036b423d455a517d06b38fd616a8bbfc4896 (patch)
treed9437bc5c8be48e7122c88b8c3e36edc94443b9d /java/com/android/dialer/calllog/datasources
parent6f7d6f1bc3f90d16f5b90c8424a5783f07bef1ec (diff)
Switched CallLogDataSource interface to be Future based.
Bug: 34672501 Test: existing PiperOrigin-RevId: 178038086 Change-Id: I1230992ad04bb4415f5a29bd15802d23dff88012
Diffstat (limited to 'java/com/android/dialer/calllog/datasources')
-rw-r--r--java/com/android/dialer/calllog/datasources/CallLogDataSource.java10
-rw-r--r--java/com/android/dialer/calllog/datasources/DataSources.java3
-rw-r--r--java/com/android/dialer/calllog/datasources/contacts/ContactsDataSource.java70
-rw-r--r--java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java35
-rw-r--r--java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java39
5 files changed, 64 insertions, 93 deletions
diff --git a/java/com/android/dialer/calllog/datasources/CallLogDataSource.java b/java/com/android/dialer/calllog/datasources/CallLogDataSource.java
index 3fff3ba53..60654a81a 100644
--- a/java/com/android/dialer/calllog/datasources/CallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/CallLogDataSource.java
@@ -21,6 +21,7 @@ import android.content.Context;
import android.support.annotation.MainThread;
import android.support.annotation.WorkerThread;
import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract;
+import com.google.common.util.concurrent.ListenableFuture;
import java.util.List;
/**
@@ -64,8 +65,7 @@ public interface CallLogDataSource {
*
* @see CallLogDataSource class doc for complete lifecyle information
*/
- @WorkerThread
- boolean isDirty(Context appContext);
+ ListenableFuture<Boolean> isDirty(Context appContext);
/**
* Computes the set of mutations necessary to update the annotated call log with respect to this
@@ -76,8 +76,7 @@ public interface CallLogDataSource {
* contain inserts from the system call log, and these inserts should be modified by each data
* source.
*/
- @WorkerThread
- void fill(Context appContext, CallLogMutations mutations);
+ ListenableFuture<Void> fill(Context appContext, CallLogMutations mutations);
/**
* Called after database mutations have been applied to all data sources. This is useful for
@@ -86,8 +85,7 @@ public interface CallLogDataSource {
*
* @see CallLogDataSource class doc for complete lifecyle information
*/
- @WorkerThread
- void onSuccessfulFill(Context appContext);
+ ListenableFuture<Void> onSuccessfulFill(Context appContext);
/**
* Combines raw annotated call log rows into a single coalesced row.
diff --git a/java/com/android/dialer/calllog/datasources/DataSources.java b/java/com/android/dialer/calllog/datasources/DataSources.java
index 113a9f7b1..9fe6c1db3 100644
--- a/java/com/android/dialer/calllog/datasources/DataSources.java
+++ b/java/com/android/dialer/calllog/datasources/DataSources.java
@@ -16,13 +16,12 @@
package com.android.dialer.calllog.datasources;
-import com.android.dialer.calllog.datasources.systemcalllog.SystemCallLogDataSource;
import com.google.common.collect.ImmutableList;
/** Immutable lists of data sources used to populate the annotated call log. */
public interface DataSources {
- SystemCallLogDataSource getSystemCallLogDataSource();
+ CallLogDataSource getSystemCallLogDataSource();
ImmutableList<CallLogDataSource> getDataSourcesIncludingSystemCallLog();
diff --git a/java/com/android/dialer/calllog/datasources/contacts/ContactsDataSource.java b/java/com/android/dialer/calllog/datasources/contacts/ContactsDataSource.java
deleted file mode 100644
index f0384b09a..000000000
--- a/java/com/android/dialer/calllog/datasources/contacts/ContactsDataSource.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2017 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License
- */
-
-package com.android.dialer.calllog.datasources.contacts;
-
-import android.content.ContentValues;
-import android.content.Context;
-import android.support.annotation.MainThread;
-import android.support.annotation.WorkerThread;
-import com.android.dialer.calllog.datasources.CallLogDataSource;
-import com.android.dialer.calllog.datasources.CallLogMutations;
-import com.android.dialer.common.Assert;
-import java.util.List;
-import javax.inject.Inject;
-
-/** Responsible for maintaining the contacts related columns in the annotated call log. */
-public final class ContactsDataSource implements CallLogDataSource {
-
- @Inject
- public ContactsDataSource() {}
-
- @WorkerThread
- @Override
- public boolean isDirty(Context appContext) {
- Assert.isWorkerThread();
-
- // TODO(zachh): Implementation.
- return false;
- }
-
- @WorkerThread
- @Override
- public void fill(
- Context appContext,
- CallLogMutations mutations) {
- Assert.isWorkerThread();
- // TODO(zachh): Implementation.
- }
-
- @Override
- public void onSuccessfulFill(Context appContext) {
- // TODO(zachh): Implementation.
- }
-
- @Override
- public ContentValues coalesce(List<ContentValues> individualRowsSortedByTimestampDesc) {
- // TODO(zachh): Implementation.
- return new ContentValues();
- }
-
- @MainThread
- @Override
- public void registerContentObservers(
- Context appContext, ContentObserverCallbacks contentObserverCallbacks) {
- // TODO(zachh): Guard against missing permissions during callback registration.
- }
-}
diff --git a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
index 010cb8541..41eaf2bae 100644
--- a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
@@ -29,6 +29,7 @@ import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.Ann
import com.android.dialer.calllog.datasources.CallLogDataSource;
import com.android.dialer.calllog.datasources.CallLogMutations;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.Annotations.NonUiParallel;
import com.android.dialer.phonelookup.PhoneLookup;
import com.android.dialer.phonelookup.PhoneLookupInfo;
import com.android.dialer.phonelookup.PhoneLookupSelector;
@@ -37,6 +38,9 @@ import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.protobuf.InvalidProtocolBufferException;
import java.util.Arrays;
@@ -45,6 +49,7 @@ import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
import javax.inject.Inject;
/**
@@ -54,15 +59,31 @@ import javax.inject.Inject;
public final class PhoneLookupDataSource implements CallLogDataSource {
private final PhoneLookup phoneLookup;
+ private final ListeningExecutorService executorService;
@Inject
- PhoneLookupDataSource(PhoneLookup phoneLookup) {
+ PhoneLookupDataSource(PhoneLookup phoneLookup, @NonUiParallel ExecutorService executorService) {
this.phoneLookup = phoneLookup;
+ this.executorService = MoreExecutors.listeningDecorator(executorService);
+ }
+
+ @Override
+ public ListenableFuture<Boolean> isDirty(Context appContext) {
+ return executorService.submit(() -> isDirtyInternal(appContext));
+ }
+
+ @Override
+ public ListenableFuture<Void> fill(Context appContext, CallLogMutations mutations) {
+ return executorService.submit(() -> fillInternal(appContext, mutations));
}
- @WorkerThread
@Override
- public boolean isDirty(Context appContext) {
+ public ListenableFuture<Void> onSuccessfulFill(Context appContext) {
+ return executorService.submit(this::onSuccessfulFillInternal);
+ }
+
+ @WorkerThread
+ private boolean isDirtyInternal(Context appContext) {
ImmutableSet<DialerPhoneNumber> uniqueDialerPhoneNumbers =
queryDistinctDialerPhoneNumbersFromAnnotatedCallLog(appContext);
@@ -102,8 +123,7 @@ public final class PhoneLookupDataSource implements CallLogDataSource {
* </ul>
*/
@WorkerThread
- @Override
- public void fill(Context appContext, CallLogMutations mutations) {
+ private Void fillInternal(Context appContext, CallLogMutations mutations) {
Map<DialerPhoneNumber, Set<Long>> annotatedCallLogIdsByNumber =
queryIdAndNumberFromAnnotatedCallLog(appContext);
ImmutableMap<DialerPhoneNumber, PhoneLookupInfo> originalPhoneLookupInfosByNumber =
@@ -137,12 +157,13 @@ public final class PhoneLookupDataSource implements CallLogDataSource {
}
}
updateMutations(rowsToUpdate.build(), mutations);
+ return null;
}
@WorkerThread
- @Override
- public void onSuccessfulFill(Context appContext) {
+ private Void onSuccessfulFillInternal() {
// TODO(zachh): Update PhoneLookupHistory.
+ return null;
}
@WorkerThread
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index ef40c308e..dfc768c0a 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -45,15 +45,20 @@ import com.android.dialer.calllog.datasources.util.RowCombiner;
import com.android.dialer.calllogutils.PhoneAccountUtils;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.android.dialer.common.concurrent.Annotations.NonUiParallel;
import com.android.dialer.common.concurrent.ThreadUtil;
import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil;
import com.android.dialer.storage.StorageComponent;
import com.android.dialer.theme.R;
import com.android.dialer.util.PermissionsUtil;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
+import com.google.common.util.concurrent.MoreExecutors;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
+import java.util.concurrent.ExecutorService;
import javax.inject.Inject;
/**
@@ -66,10 +71,14 @@ public class SystemCallLogDataSource implements CallLogDataSource {
@VisibleForTesting
static final String PREF_LAST_TIMESTAMP_PROCESSED = "systemCallLogLastTimestampProcessed";
+ private final ListeningExecutorService executorService;
+
@Nullable private Long lastTimestampProcessed;
@Inject
- public SystemCallLogDataSource() {}
+ SystemCallLogDataSource(@NonUiParallel ExecutorService executorService) {
+ this.executorService = MoreExecutors.listeningDecorator(executorService);
+ }
@MainThread
@Override
@@ -94,9 +103,23 @@ public class SystemCallLogDataSource implements CallLogDataSource {
ThreadUtil.getUiThreadHandler(), appContext, contentObserverCallbacks));
}
- @WorkerThread
@Override
- public boolean isDirty(Context appContext) {
+ public ListenableFuture<Boolean> isDirty(Context appContext) {
+ return executorService.submit(() -> isDirtyInternal(appContext));
+ }
+
+ @Override
+ public ListenableFuture<Void> fill(Context appContext, CallLogMutations mutations) {
+ return executorService.submit(() -> fillInternal(appContext, mutations));
+ }
+
+ @Override
+ public ListenableFuture<Void> onSuccessfulFill(Context appContext) {
+ return executorService.submit(() -> onSuccessfulFillInternal(appContext));
+ }
+
+ @WorkerThread
+ private boolean isDirtyInternal(Context appContext) {
Assert.isWorkerThread();
/*
@@ -113,15 +136,14 @@ public class SystemCallLogDataSource implements CallLogDataSource {
}
@WorkerThread
- @Override
- public void fill(Context appContext, CallLogMutations mutations) {
+ private Void fillInternal(Context appContext, CallLogMutations mutations) {
Assert.isWorkerThread();
lastTimestampProcessed = null;
if (!PermissionsUtil.hasPermission(appContext, permission.READ_CALL_LOG)) {
LogUtil.i("SystemCallLogDataSource.fill", "no call log permissions");
- return;
+ return null;
}
// This data source should always run first so the mutations should always be empty.
@@ -136,11 +158,11 @@ public class SystemCallLogDataSource implements CallLogDataSource {
handleInsertsAndUpdates(appContext, mutations, annotatedCallLogIds);
handleDeletes(appContext, annotatedCallLogIds, mutations);
+ return null;
}
@WorkerThread
- @Override
- public void onSuccessfulFill(Context appContext) {
+ private Void onSuccessfulFillInternal(Context appContext) {
// If a fill operation was a no-op, lastTimestampProcessed could still be null.
if (lastTimestampProcessed != null) {
StorageComponent.get(appContext)
@@ -149,6 +171,7 @@ public class SystemCallLogDataSource implements CallLogDataSource {
.putLong(PREF_LAST_TIMESTAMP_PROCESSED, lastTimestampProcessed)
.apply();
}
+ return null;
}
@Override