summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/phonelookup
diff options
context:
space:
mode:
authorzachh <zachh@google.com>2017-11-03 16:45:34 -0700
committerzachh <zachh@google.com>2017-11-11 06:39:05 +0000
commit60dd96aa640ed4619de915576b5ed0df53081fc4 (patch)
tree6c865335b8872cc084e5a30993d75fcd257c005e /java/com/android/dialer/phonelookup
parent1a56facd7bf477e6fb8f0ec1093696ba83e4fd74 (diff)
Implemented CompositePhoneLookup#bulkUpdate.
Bug: 34672501 Test: unit PiperOrigin-RevId: 174532642 Change-Id: I0115fb26f99fe764bc90625e3ed51f3c4c99439d
Diffstat (limited to 'java/com/android/dialer/phonelookup')
-rw-r--r--java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java41
1 files changed, 40 insertions, 1 deletions
diff --git a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
index ba08fe9bf..f85b357e7 100644
--- a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
@@ -19,6 +19,7 @@ package com.android.dialer.phonelookup.composite;
import android.support.annotation.NonNull;
import android.telecom.Call;
import com.android.dialer.DialerPhoneNumber;
+import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DialerFutures;
import com.android.dialer.phonelookup.PhoneLookup;
import com.android.dialer.phonelookup.PhoneLookupInfo;
@@ -85,9 +86,47 @@ public final class CompositePhoneLookup implements PhoneLookup {
futures, Preconditions::checkNotNull, false /* defaultValue */);
}
+ /**
+ * Delegates to a set of dependent lookups and combines results.
+ *
+ * <p>Note: If any of the dependent lookups fails, the returned future will also fail. If any of
+ * the dependent lookups does not complete, the returned future will also not complete.
+ */
@Override
public ListenableFuture<ImmutableMap<DialerPhoneNumber, PhoneLookupInfo>> bulkUpdate(
ImmutableMap<DialerPhoneNumber, PhoneLookupInfo> existingInfoMap, long lastModified) {
- return null;
+ List<ListenableFuture<ImmutableMap<DialerPhoneNumber, PhoneLookupInfo>>> futures =
+ new ArrayList<>();
+ for (PhoneLookup phoneLookup : phoneLookups) {
+ futures.add(phoneLookup.bulkUpdate(existingInfoMap, lastModified));
+ }
+ return Futures.transform(
+ Futures.allAsList(futures),
+ new Function<
+ List<ImmutableMap<DialerPhoneNumber, PhoneLookupInfo>>,
+ ImmutableMap<DialerPhoneNumber, PhoneLookupInfo>>() {
+ @Override
+ public ImmutableMap<DialerPhoneNumber, PhoneLookupInfo> apply(
+ List<ImmutableMap<DialerPhoneNumber, PhoneLookupInfo>> allMaps) {
+ ImmutableMap.Builder<DialerPhoneNumber, PhoneLookupInfo> combinedMap =
+ ImmutableMap.builder();
+ for (DialerPhoneNumber dialerPhoneNumber : existingInfoMap.keySet()) {
+ PhoneLookupInfo.Builder combinedInfo = PhoneLookupInfo.newBuilder();
+ for (ImmutableMap<DialerPhoneNumber, PhoneLookupInfo> map : allMaps) {
+ PhoneLookupInfo subInfo = map.get(dialerPhoneNumber);
+ if (subInfo == null) {
+ throw new IllegalStateException(
+ "A sublookup didn't return an info for number: "
+ + LogUtil.sanitizePhoneNumber(
+ dialerPhoneNumber.getRawInput().getNumber()));
+ }
+ combinedInfo.mergeFrom(subInfo);
+ }
+ combinedMap.put(dialerPhoneNumber, combinedInfo.build());
+ }
+ return combinedMap.build();
+ }
+ },
+ MoreExecutors.directExecutor());
}
}