diff options
author | zachh <zachh@google.com> | 2017-11-01 17:23:24 -0700 |
---|---|---|
committer | zachh <zachh@google.com> | 2017-11-10 23:41:09 +0000 |
commit | 2f38c65ba17d94b187591ed917a2dfe3bbc3b772 (patch) | |
tree | 3f676b2aafe35d58ffdd86e45258cbf4eaeb7e84 /java/com/android/dialer/phonelookup | |
parent | 711512175cb047b5ea7c9b15013f3b1fc5c2cae7 (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.java | 11 |
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 |