diff options
Diffstat (limited to 'java')
11 files changed, 84 insertions, 101 deletions
diff --git a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java index d382517cd..96a640918 100644 --- a/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java +++ b/java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java @@ -119,7 +119,7 @@ public class AnnotatedCallLogContract { * * <p>TYPE: BLOB * - * @see com.android.dialer.calllog.model.NumberAttributes + * @see com.android.dialer.NumberAttributes */ String NUMBER_ATTRIBUTES = "number_attributes"; diff --git a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java index a0daae141..67fb4f018 100644 --- a/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java +++ b/java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java @@ -74,7 +74,7 @@ final class NewCallLogViewHolder extends RecyclerView.ViewHolder { this.clock = clock; this.realtimeRowProcessor = realtimeRowProcessor; - uiExecutorService = DialerExecutorComponent.get(context).uiExecutorService(); + uiExecutorService = DialerExecutorComponent.get(context).uiExecutor(); } /** @param cursor a cursor from {@link CoalescedAnnotatedCallLogCursorLoader}. */ diff --git a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java index 57ad9657c..9e58e53ad 100644 --- a/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java +++ b/java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java @@ -25,10 +25,9 @@ import com.android.dialer.calllog.model.CoalescedRow; import com.android.dialer.common.Assert; import com.android.dialer.common.concurrent.Annotations.Ui; import com.android.dialer.inject.ApplicationContext; +import com.android.dialer.phonelookup.PhoneLookup; import com.android.dialer.phonelookup.PhoneLookupInfo; -import com.android.dialer.phonelookup.PhoneLookupInfo.Cp2Info; import com.android.dialer.phonelookup.consolidator.PhoneLookupInfoConsolidator; -import com.android.dialer.phonelookup.cp2.Cp2LocalPhoneLookup; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; @@ -49,19 +48,19 @@ import javax.inject.Inject; public final class RealtimeRowProcessor { private final Context appContext; - private final Cp2LocalPhoneLookup cp2LocalPhoneLookup; + private final PhoneLookup<PhoneLookupInfo> phoneLookup; private final ListeningExecutorService uiExecutor; - private final Map<DialerPhoneNumber, Cp2Info> cache = new ArrayMap<>(); + private final Map<DialerPhoneNumber, PhoneLookupInfo> cache = new ArrayMap<>(); @Inject RealtimeRowProcessor( @ApplicationContext Context appContext, @Ui ListeningExecutorService uiExecutor, - Cp2LocalPhoneLookup cp2LocalPhoneLookup) { + PhoneLookup<PhoneLookupInfo> phoneLookup) { this.appContext = appContext; this.uiExecutor = uiExecutor; - this.cp2LocalPhoneLookup = cp2LocalPhoneLookup; + this.phoneLookup = phoneLookup; } /** @@ -75,17 +74,17 @@ public final class RealtimeRowProcessor { return Futures.immediateFuture(row); } - Cp2Info cachedCp2Info = cache.get(row.number()); - if (cachedCp2Info != null) { - return Futures.immediateFuture(applyCp2LocalInfoToRow(cachedCp2Info, row)); + PhoneLookupInfo cachedPhoneLookupInfo = cache.get(row.number()); + if (cachedPhoneLookupInfo != null) { + return Futures.immediateFuture(applyPhoneLookupInfoToRow(cachedPhoneLookupInfo, row)); } - ListenableFuture<Cp2Info> cp2InfoFuture = cp2LocalPhoneLookup.lookupByNumber(row.number()); + ListenableFuture<PhoneLookupInfo> phoneLookupInfoFuture = phoneLookup.lookup(row.number()); return Futures.transform( - cp2InfoFuture, - cp2Info -> { - cache.put(row.number(), cp2Info); - return applyCp2LocalInfoToRow(cp2Info, row); + phoneLookupInfoFuture, + phoneLookupInfo -> { + cache.put(row.number(), phoneLookupInfo); + return applyPhoneLookupInfoToRow(phoneLookupInfo, row); }, uiExecutor /* ensures the cache is updated on a single thread */); } @@ -97,13 +96,13 @@ public final class RealtimeRowProcessor { cache.clear(); } - private CoalescedRow applyCp2LocalInfoToRow(Cp2Info cp2Info, CoalescedRow row) { - PhoneLookupInfo phoneLookupInfo = PhoneLookupInfo.newBuilder().setCp2LocalInfo(cp2Info).build(); + private CoalescedRow applyPhoneLookupInfoToRow( + PhoneLookupInfo phoneLookupInfo, CoalescedRow row) { PhoneLookupInfoConsolidator phoneLookupInfoConsolidator = new PhoneLookupInfoConsolidator(appContext, phoneLookupInfo); - // It is safe to overwrite any existing data because CP2 always has highest priority. return row.toBuilder() .setNumberAttributes( + // TODO(zachh): Put this in a common location. NumberAttributes.newBuilder() .setName(phoneLookupInfoConsolidator.getName()) .setPhotoUri(phoneLookupInfoConsolidator.getPhotoUri()) diff --git a/java/com/android/dialer/common/concurrent/DialerExecutorComponent.java b/java/com/android/dialer/common/concurrent/DialerExecutorComponent.java index 28abf96fd..734891430 100644 --- a/java/com/android/dialer/common/concurrent/DialerExecutorComponent.java +++ b/java/com/android/dialer/common/concurrent/DialerExecutorComponent.java @@ -18,6 +18,8 @@ package com.android.dialer.common.concurrent; import android.app.FragmentManager; import android.content.Context; +import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor; +import com.android.dialer.common.concurrent.Annotations.LightweightExecutor; import com.android.dialer.common.concurrent.Annotations.NonUiParallel; import com.android.dialer.common.concurrent.Annotations.Ui; import com.android.dialer.inject.HasRootComponent; @@ -31,17 +33,23 @@ public abstract class DialerExecutorComponent { public abstract DialerExecutorFactory dialerExecutorFactory(); + @NonUiParallel + public abstract ExecutorService lowPriorityThreadPool(); + @Ui - public abstract ListeningExecutorService uiExecutorService(); + public abstract ListeningExecutorService uiExecutor(); + + @BackgroundExecutor + public abstract ListeningExecutorService backgroundExecutor(); + + @LightweightExecutor + public abstract ListeningExecutorService lightweightExecutor(); public <OutputT> UiListener<OutputT> createUiListener( FragmentManager fragmentManager, String taskId) { return UiListener.create(fragmentManager, taskId); } - @NonUiParallel - public abstract ExecutorService lowPriorityThreadPool(); - public static DialerExecutorComponent get(Context context) { return ((DialerExecutorComponent.HasComponent) ((HasRootComponent) context.getApplicationContext()).component()) diff --git a/java/com/android/dialer/common/concurrent/UiListener.java b/java/com/android/dialer/common/concurrent/UiListener.java index df791301f..b5922f9c8 100644 --- a/java/com/android/dialer/common/concurrent/UiListener.java +++ b/java/com/android/dialer/common/concurrent/UiListener.java @@ -96,7 +96,7 @@ public class UiListener<OutputT> extends Fragment { Futures.addCallback( Assert.isNotNull(future), callbackWrapper, - DialerExecutorComponent.get(context).uiExecutorService()); + DialerExecutorComponent.get(context).uiExecutor()); } private static class CallbackWrapper<OutputT> implements FutureCallback<OutputT> { diff --git a/java/com/android/dialer/phonelookup/PhoneLookup.java b/java/com/android/dialer/phonelookup/PhoneLookup.java index 118ae603e..76ff98e7c 100644 --- a/java/com/android/dialer/phonelookup/PhoneLookup.java +++ b/java/com/android/dialer/phonelookup/PhoneLookup.java @@ -18,8 +18,6 @@ package com.android.dialer.phonelookup; import android.content.Context; import android.support.annotation.MainThread; -import android.support.annotation.NonNull; -import android.telecom.Call; import com.android.dialer.DialerPhoneNumber; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -35,13 +33,13 @@ import com.google.common.util.concurrent.ListenableFuture; public interface PhoneLookup<T> { /** - * Returns a future containing a new info for the provided call. + * Returns a future containing a new info for the provided number. * * <p>The returned message should contain populated data for the sub-message corresponding to this * {@link PhoneLookup}. For example, the CP2 implementation returns a {@link * PhoneLookupInfo.Cp2Info} sub-message. */ - ListenableFuture<T> lookup(@NonNull Call call); + ListenableFuture<T> lookup(DialerPhoneNumber dialerPhoneNumber); /** * Returns a future which returns true if the information for any of the provided phone numbers diff --git a/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java b/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java index fa67feec8..ce1217751 100644 --- a/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java +++ b/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java @@ -21,9 +21,7 @@ import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.support.annotation.MainThread; -import android.support.annotation.NonNull; import android.support.annotation.WorkerThread; -import android.telecom.Call; import android.util.ArraySet; import com.android.dialer.DialerPhoneNumber; import com.android.dialer.common.Assert; @@ -39,15 +37,12 @@ import com.android.dialer.phonelookup.PhoneLookup; import com.android.dialer.phonelookup.PhoneLookupInfo; import com.android.dialer.phonelookup.PhoneLookupInfo.BlockedState; import com.android.dialer.phonelookup.PhoneLookupInfo.DialerBlockedNumberInfo; -import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil; import com.android.dialer.phonenumberproto.PartitionedNumbers; -import com.android.dialer.telecom.TelecomCallUtil; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.i18n.phonenumbers.PhoneNumberUtil; import java.util.Set; import javax.inject.Inject; @@ -69,18 +64,9 @@ public final class DialerBlockedNumberPhoneLookup implements PhoneLookup<DialerB } @Override - public ListenableFuture<DialerBlockedNumberInfo> lookup(@NonNull Call call) { + public ListenableFuture<DialerBlockedNumberInfo> lookup(DialerPhoneNumber dialerPhoneNumber) { return executorService.submit( - () -> { - DialerPhoneNumberUtil dialerPhoneNumberUtil = - new DialerPhoneNumberUtil(PhoneNumberUtil.getInstance()); - - DialerPhoneNumber number = - dialerPhoneNumberUtil.parse( - TelecomCallUtil.getNumber(call), - TelecomCallUtil.getCountryCode(appContext, call).orNull()); - return queryNumbers(ImmutableSet.of(number)).get(number); - }); + () -> queryNumbers(ImmutableSet.of(dialerPhoneNumber)).get(dialerPhoneNumber)); } @Override diff --git a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java index 68695b7e9..622b4db10 100644 --- a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java +++ b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java @@ -18,8 +18,6 @@ package com.android.dialer.phonelookup.composite; import android.content.Context; import android.support.annotation.MainThread; -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.Annotations.LightweightExecutor; @@ -65,12 +63,12 @@ public final class CompositePhoneLookup implements PhoneLookup<PhoneLookupInfo> */ @SuppressWarnings({"unchecked", "rawtype"}) @Override - public ListenableFuture<PhoneLookupInfo> lookup(@NonNull Call call) { + public ListenableFuture<PhoneLookupInfo> lookup(DialerPhoneNumber dialerPhoneNumber) { // TODO(zachh): Add short-circuiting logic so that this call is not blocked on low-priority // lookups finishing when a higher-priority one has already finished. List<ListenableFuture<?>> futures = new ArrayList<>(); for (PhoneLookup<?> phoneLookup : phoneLookups) { - futures.add(phoneLookup.lookup(call)); + futures.add(phoneLookup.lookup(dialerPhoneNumber)); } return Futures.transform( Futures.allAsList(futures), diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2LocalPhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2LocalPhoneLookup.java index 995950d0e..127569b9f 100644 --- a/java/com/android/dialer/phonelookup/cp2/Cp2LocalPhoneLookup.java +++ b/java/com/android/dialer/phonelookup/cp2/Cp2LocalPhoneLookup.java @@ -27,7 +27,6 @@ import android.provider.ContactsContract.DeletedContacts; import android.support.annotation.Nullable; import android.support.v4.util.ArrayMap; import android.support.v4.util.ArraySet; -import android.telecom.Call; import android.text.TextUtils; import com.android.dialer.DialerPhoneNumber; import com.android.dialer.common.Assert; @@ -43,7 +42,6 @@ import com.android.dialer.phonelookup.database.contract.PhoneLookupHistoryContra import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil; import com.android.dialer.phonenumberproto.PartitionedNumbers; import com.android.dialer.storage.Unencrypted; -import com.android.dialer.telecom.TelecomCallUtil; import com.google.common.base.Optional; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; @@ -93,16 +91,18 @@ public final class Cp2LocalPhoneLookup implements PhoneLookup<Cp2Info> { } @Override - public ListenableFuture<Cp2Info> lookup(Call call) { - return backgroundExecutorService.submit(() -> lookupInternal(call)); + public ListenableFuture<Cp2Info> lookup(DialerPhoneNumber dialerPhoneNumber) { + return backgroundExecutorService.submit(() -> lookupInternal(dialerPhoneNumber)); } - private Cp2Info lookupInternal(Call call) { - String rawNumber = TelecomCallUtil.getNumber(call); - if (TextUtils.isEmpty(rawNumber)) { + private Cp2Info lookupInternal(DialerPhoneNumber dialerPhoneNumber) { + DialerPhoneNumberUtil dialerPhoneNumberUtil = + new DialerPhoneNumberUtil(PhoneNumberUtil.getInstance()); + String number = dialerPhoneNumberUtil.normalizeNumber(dialerPhoneNumber); + if (TextUtils.isEmpty(number)) { return Cp2Info.getDefaultInstance(); } - Optional<String> validE164 = TelecomCallUtil.getValidE164Number(appContext, call); + Optional<String> validE164 = dialerPhoneNumberUtil.formatToValidE164(dialerPhoneNumber); Set<Cp2ContactInfo> cp2ContactInfos = new ArraySet<>(); // Note: It would make sense to use PHONE_LOOKUP for E164 numbers as well, but we use PHONE to // ensure consistency when the batch methods are used to update data. @@ -110,7 +110,7 @@ public final class Cp2LocalPhoneLookup implements PhoneLookup<Cp2Info> { validE164.isPresent() ? queryPhoneTableBasedOnE164( Cp2Projections.getProjectionForPhoneTable(), ImmutableSet.of(validE164.get())) - : queryPhoneLookup(Cp2Projections.getProjectionForPhoneLookupTable(), rawNumber)) { + : queryPhoneLookup(Cp2Projections.getProjectionForPhoneLookupTable(), number)) { if (cursor == null) { LogUtil.w("Cp2LocalPhoneLookup.lookupInternal", "null cursor"); return Cp2Info.getDefaultInstance(); @@ -122,35 +122,6 @@ public final class Cp2LocalPhoneLookup implements PhoneLookup<Cp2Info> { return Cp2Info.newBuilder().addAllCp2ContactInfo(cp2ContactInfos).build(); } - /** - * Queries ContactsContract.PhoneLookup for the {@link Cp2Info} associated with the provided - * {@link DialerPhoneNumber}. Returns {@link Cp2Info#getDefaultInstance()} if there is no - * information. - */ - public ListenableFuture<Cp2Info> lookupByNumber(DialerPhoneNumber dialerPhoneNumber) { - return backgroundExecutorService.submit( - () -> { - DialerPhoneNumberUtil dialerPhoneNumberUtil = - new DialerPhoneNumberUtil(PhoneNumberUtil.getInstance()); - String rawNumber = dialerPhoneNumberUtil.normalizeNumber(dialerPhoneNumber); - if (rawNumber.isEmpty()) { - return Cp2Info.getDefaultInstance(); - } - Set<Cp2ContactInfo> cp2ContactInfos = new ArraySet<>(); - try (Cursor cursor = - queryPhoneLookup(Cp2Projections.getProjectionForPhoneLookupTable(), rawNumber)) { - if (cursor == null) { - LogUtil.w("Cp2LocalPhoneLookup.lookupByNumber", "null cursor"); - return Cp2Info.getDefaultInstance(); - } - while (cursor.moveToNext()) { - cp2ContactInfos.add(Cp2Projections.buildCp2ContactInfoFromCursor(appContext, cursor)); - } - } - return Cp2Info.newBuilder().addAllCp2ContactInfo(cp2ContactInfos).build(); - }); - } - @Override public ListenableFuture<Boolean> isDirty(ImmutableSet<DialerPhoneNumber> phoneNumbers) { PartitionedNumbers partitionedNumbers = new PartitionedNumbers(phoneNumbers); diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2RemotePhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2RemotePhoneLookup.java index 6a4682958..9596f15f7 100644 --- a/java/com/android/dialer/phonelookup/cp2/Cp2RemotePhoneLookup.java +++ b/java/com/android/dialer/phonelookup/cp2/Cp2RemotePhoneLookup.java @@ -24,7 +24,6 @@ import android.os.Build.VERSION_CODES; import android.provider.ContactsContract; import android.provider.ContactsContract.Directory; import android.support.annotation.VisibleForTesting; -import android.telecom.Call; import com.android.dialer.DialerPhoneNumber; import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor; @@ -33,13 +32,14 @@ import com.android.dialer.inject.ApplicationContext; import com.android.dialer.phonelookup.PhoneLookup; import com.android.dialer.phonelookup.PhoneLookupInfo; import com.android.dialer.phonelookup.PhoneLookupInfo.Cp2Info; +import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil; import com.android.dialer.phonenumberutil.PhoneNumberHelper; -import com.android.dialer.telecom.TelecomCallUtil; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.i18n.phonenumbers.PhoneNumberUtil; import java.util.ArrayList; import java.util.List; import javax.inject.Inject; @@ -62,15 +62,10 @@ public final class Cp2RemotePhoneLookup implements PhoneLookup<Cp2Info> { } @Override - public ListenableFuture<Cp2Info> lookup(Call call) { - String number = TelecomCallUtil.getNumber(call); - if (number == null) { - return Futures.immediateFuture(Cp2Info.getDefaultInstance()); - } - + public ListenableFuture<Cp2Info> lookup(DialerPhoneNumber dialerPhoneNumber) { return Futures.transformAsync( queryCp2ForRemoteDirectoryIds(), - remoteDirectoryIds -> queryCp2ForRemoteContact(number, remoteDirectoryIds), + remoteDirectoryIds -> queryCp2ForRemoteContact(dialerPhoneNumber, remoteDirectoryIds), lightweightExecutorService); } @@ -114,11 +109,15 @@ public final class Cp2RemotePhoneLookup implements PhoneLookup<Cp2Info> { } private ListenableFuture<Cp2Info> queryCp2ForRemoteContact( - String number, List<Long> remoteDirectoryIds) { + DialerPhoneNumber dialerPhoneNumber, List<Long> remoteDirectoryIds) { if (remoteDirectoryIds.isEmpty()) { return Futures.immediateFuture(Cp2Info.getDefaultInstance()); } + DialerPhoneNumberUtil dialerPhoneNumberUtil = + new DialerPhoneNumberUtil(PhoneNumberUtil.getInstance()); + String number = dialerPhoneNumberUtil.normalizeNumber(dialerPhoneNumber); + List<ListenableFuture<Cp2Info>> cp2InfoFutures = new ArrayList<>(); for (long remoteDirectoryId : remoteDirectoryIds) { cp2InfoFutures.add(queryCp2ForRemoteContact(number, remoteDirectoryId)); diff --git a/java/com/android/incallui/PhoneLookupHistoryRecorder.java b/java/com/android/incallui/PhoneLookupHistoryRecorder.java index 8517deb65..abbf934f0 100644 --- a/java/com/android/incallui/PhoneLookupHistoryRecorder.java +++ b/java/com/android/incallui/PhoneLookupHistoryRecorder.java @@ -19,18 +19,23 @@ import android.content.ContentValues; import android.content.Context; import android.support.annotation.Nullable; import android.telecom.Call; +import com.android.dialer.DialerPhoneNumber; import com.android.dialer.buildtype.BuildType; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; -import com.android.dialer.common.concurrent.DialerExecutors; +import com.android.dialer.common.concurrent.DialerExecutorComponent; import com.android.dialer.phonelookup.PhoneLookupComponent; import com.android.dialer.phonelookup.PhoneLookupInfo; import com.android.dialer.phonelookup.database.contract.PhoneLookupHistoryContract.PhoneLookupHistory; +import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil; import com.android.dialer.telecom.TelecomCallUtil; import com.google.common.base.Optional; import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; 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; /** * Fetches the current {@link PhoneLookupInfo} for the provided call and writes it to the @@ -46,10 +51,29 @@ final class PhoneLookupHistoryRecorder { if (!(BuildType.get() == BuildType.BUGFOOD || LogUtil.isDebugEnabled())) { return; } - ListenableFuture<PhoneLookupInfo> future = - PhoneLookupComponent.get(appContext).phoneLookup().lookup(call); + + ListeningExecutorService backgroundExecutor = + DialerExecutorComponent.get(appContext).backgroundExecutor(); + + ListenableFuture<DialerPhoneNumber> numberFuture = + backgroundExecutor.submit( + () -> { + DialerPhoneNumberUtil dialerPhoneNumberUtil = + new DialerPhoneNumberUtil(PhoneNumberUtil.getInstance()); + return dialerPhoneNumberUtil.parse( + TelecomCallUtil.getNumber(call), + TelecomCallUtil.getCountryCode(appContext, call).orNull()); + }); + + ListenableFuture<PhoneLookupInfo> infoFuture = + Futures.transformAsync( + numberFuture, + dialerPhoneNumber -> + PhoneLookupComponent.get(appContext).phoneLookup().lookup(dialerPhoneNumber), + MoreExecutors.directExecutor()); + Futures.addCallback( - future, + infoFuture, new FutureCallback<PhoneLookupInfo>() { @Override public void onSuccess(@Nullable PhoneLookupInfo result) { @@ -79,6 +103,6 @@ final class PhoneLookupHistoryRecorder { "PhoneLookupHistoryRecorder.onFailure", "could not write PhoneLookupHistory", t); } }, - DialerExecutors.getLowPriorityThreadPool(appContext)); + backgroundExecutor); } } |