Adding Future method for DialerPhoneNumberUtil
This CL adds a method to DialerPhoneNumberUtil which returns a Future
holding the result of parsing a number into the DialerPhoneNumber proto.
This will be used in the APDL integration as it will use Futures as
well.
The CL also changes DialerExecutors.lowPriorityThreadPool to be an
ExecutorService instead of an Executor (the super type) so it can be
used in MoreExecutors.listeningDecorator.
Test: TAP
PiperOrigin-RevId: 171347542
Change-Id: I620aacf3304d625f57af6d2b89a36f11b44008dd
diff --git a/java/com/android/dialer/common/concurrent/DialerExecutors.java b/java/com/android/dialer/common/concurrent/DialerExecutors.java
index 81b3c5c..850c28c 100644
--- a/java/com/android/dialer/common/concurrent/DialerExecutors.java
+++ b/java/com/android/dialer/common/concurrent/DialerExecutors.java
@@ -21,7 +21,7 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DialerExecutor.Worker;
-import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadFactory;
@@ -136,7 +136,7 @@
return new DefaultDialerExecutorFactory().createNonUiTaskBuilder(Assert.isNotNull(worker));
}
- private static final Executor lowPriorityThreadPool =
+ private static final ExecutorService lowPriorityThreadPool =
Executors.newFixedThreadPool(
5,
new ThreadFactory() {
@@ -155,7 +155,7 @@
* <p>This exists to prevent each individual dialer component from having to create its own
* threads/pools, which would result in the application having more threads than really necessary.
*/
- public static Executor getLowPriorityThreadPool() {
+ public static ExecutorService getLowPriorityThreadPool() {
return lowPriorityThreadPool;
}
}
diff --git a/java/com/android/dialer/phonenumberproto/DialerPhoneNumberUtil.java b/java/com/android/dialer/phonenumberproto/DialerPhoneNumberUtil.java
index cc509f4..a00ee75 100644
--- a/java/com/android/dialer/phonenumberproto/DialerPhoneNumberUtil.java
+++ b/java/com/android/dialer/phonenumberproto/DialerPhoneNumberUtil.java
@@ -16,6 +16,7 @@
package com.android.dialer.phonenumberproto;
+import android.support.annotation.AnyThread;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.annotation.WorkerThread;
@@ -24,6 +25,8 @@
import com.android.dialer.DialerPhoneNumber.RawInput;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
+import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.ListeningExecutorService;
import com.google.i18n.phonenumbers.NumberParseException;
import com.google.i18n.phonenumbers.PhoneNumberUtil;
import com.google.i18n.phonenumbers.PhoneNumberUtil.MatchType;
@@ -46,7 +49,7 @@
/**
* Parses the provided raw phone number into a {@link DialerPhoneNumber}.
*
- * @see PhoneNumberUtil#parse(String, String)
+ * @see PhoneNumberUtil#parse(CharSequence, String)
*/
@WorkerThread
public DialerPhoneNumber parse(@Nullable String numberToParse, @Nullable String defaultRegion) {
@@ -73,6 +76,21 @@
}
/**
+ * Parses the provided raw phone number into a Future result of {@link DialerPhoneNumber}.
+ *
+ * <p>Work is run on the provided {@link ListeningExecutorService}.
+ *
+ * @see PhoneNumberUtil#parse(CharSequence, String)
+ */
+ @AnyThread
+ public ListenableFuture<DialerPhoneNumber> parse(
+ @Nullable String numberToParse,
+ @Nullable String defaultRegion,
+ @NonNull ListeningExecutorService service) {
+ return service.submit(() -> parse(numberToParse, defaultRegion));
+ }
+
+ /**
* Returns true if the two numbers were parseable by libphonenumber and are an {@link
* MatchType#EXACT_MATCH} or if they have the same raw input.
*/