From 2f38c65ba17d94b187591ed917a2dfe3bbc3b772 Mon Sep 17 00:00:00 2001 From: zachh Date: Wed, 1 Nov 2017 17:23:24 -0700 Subject: 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 --- .../dialer/phonelookup/composite/CompositePhoneLookup.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'java/com/android/dialer/phonelookup') 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 isDirty( ImmutableSet phoneNumbers, long lastModified) { - return null; + List> 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 -- cgit v1.2.3