summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--java/com/android/dialer/calllog/database/contract/AnnotatedCallLogContract.java2
-rw-r--r--java/com/android/dialer/calllog/ui/NewCallLogViewHolder.java2
-rw-r--r--java/com/android/dialer/calllog/ui/RealtimeRowProcessor.java33
-rw-r--r--java/com/android/dialer/common/concurrent/DialerExecutorComponent.java16
-rw-r--r--java/com/android/dialer/common/concurrent/UiListener.java2
-rw-r--r--java/com/android/dialer/phonelookup/PhoneLookup.java6
-rw-r--r--java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java18
-rw-r--r--java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java6
-rw-r--r--java/com/android/dialer/phonelookup/cp2/Cp2LocalPhoneLookup.java47
-rw-r--r--java/com/android/dialer/phonelookup/cp2/Cp2RemotePhoneLookup.java19
-rw-r--r--java/com/android/incallui/PhoneLookupHistoryRecorder.java34
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);
}
}