summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/phonelookup
diff options
context:
space:
mode:
authorzachh <zachh@google.com>2017-11-01 17:23:24 -0700
committerzachh <zachh@google.com>2017-11-10 23:41:09 +0000
commit2f38c65ba17d94b187591ed917a2dfe3bbc3b772 (patch)
tree3f676b2aafe35d58ffdd86e45258cbf4eaeb7e84 /java/com/android/dialer/phonelookup
parent711512175cb047b5ea7c9b15013f3b1fc5c2cae7 (diff)
Implemented CompositePhoneLookup#isDirty.
IsDirty is implemented by (possibly in parallel) executing all child lookups, and completing as soon as the first lookup reports itself as dirty, cancelling other lookups upon completion. If a lookup fails for some reason, it is treated as not being dirty. This required adding a new method DialerFutures#firstMatching. Bug: 34672501 Test: yes PiperOrigin-RevId: 174261470 Change-Id: Icb4f7b5d9926094fc446542411d15d02a4b873a3
Diffstat (limited to 'java/com/android/dialer/phonelookup')
-rw-r--r--java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java11
1 files changed, 10 insertions, 1 deletions
diff --git a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
index 10b0e24d2..ba08fe9bf 100644
--- a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
@@ -19,9 +19,11 @@ 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.concurrent.DialerFutures;
import com.android.dialer.phonelookup.PhoneLookup;
import com.android.dialer.phonelookup.PhoneLookupInfo;
import com.google.common.base.Function;
+import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
@@ -73,7 +75,14 @@ public final class CompositePhoneLookup implements PhoneLookup {
@Override
public ListenableFuture<Boolean> isDirty(
ImmutableSet<DialerPhoneNumber> phoneNumbers, long lastModified) {
- return null;
+ List<ListenableFuture<Boolean>> futures = new ArrayList<>();
+ for (PhoneLookup phoneLookup : phoneLookups) {
+ futures.add(phoneLookup.isDirty(phoneNumbers, lastModified));
+ }
+ // Executes all child lookups (possibly in parallel), completing when the first composite lookup
+ // which returns "true" completes, and cancels the others.
+ return DialerFutures.firstMatching(
+ futures, Preconditions::checkNotNull, false /* defaultValue */);
}
@Override