Update Contacts for guava 27.1

Futures.transform now requires an Executor argument.

Futures.withFallback has been replaced with Futures.catchingAsync.

Bug: 130306229
Test: m checkbuild
Change-Id: I5ea7810446ed23b133e6dfb0eb06e6e10125db53
diff --git a/src/com/android/contacts/SimImportFragment.java b/src/com/android/contacts/SimImportFragment.java
index 6042939..cee1b1a 100644
--- a/src/com/android/contacts/SimImportFragment.java
+++ b/src/com/android/contacts/SimImportFragment.java
@@ -55,6 +55,7 @@
 import com.google.common.base.Function;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -477,7 +478,7 @@
                     simLoadResult.accounts = accounts;
                     return simLoadResult;
                 }
-            });
+            }, MoreExecutors.directExecutor());
         }
 
         private LoaderResult loadFromSim() {
diff --git a/src/com/android/contacts/model/AccountTypeManager.java b/src/com/android/contacts/model/AccountTypeManager.java
index f67f074..34f9cb2 100644
--- a/src/com/android/contacts/model/AccountTypeManager.java
+++ b/src/com/android/contacts/model/AccountTypeManager.java
@@ -59,6 +59,7 @@
 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 java.util.ArrayList;
 import java.util.Collections;
@@ -503,7 +504,8 @@
     private synchronized void reloadAccountTypes() {
         loadAccountTypes();
         Futures.addCallback(
-                Futures.transform(mAccountTypesFuture, mAccountsExtractor),
+                Futures.transform(mAccountTypesFuture, mAccountsExtractor,
+                        MoreExecutors.directExecutor()),
                 newAccountsUpdatedCallback(mAccountManagerAccounts),
                 mMainThreadExecutor);
     }
@@ -534,7 +536,8 @@
         final ListenableFuture<List<List<AccountWithDataSet>>> all =
                 Futures.nonCancellationPropagating(
                         Futures.successfulAsList(
-                                Futures.transform(mAccountTypesFuture, mAccountsExtractor),
+                                Futures.transform(mAccountTypesFuture, mAccountsExtractor,
+                                        MoreExecutors.directExecutor()),
                                 mLocalAccountsFuture));
 
         return Futures.transform(all, new Function<List<List<AccountWithDataSet>>,
@@ -560,7 +563,7 @@
                 AccountInfo.sortAccounts(null, result);
                 return result;
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 
     @Override
diff --git a/src/com/android/contacts/util/concurrent/FuturesUtil.java b/src/com/android/contacts/util/concurrent/FuturesUtil.java
index 113af93..ba72446 100644
--- a/src/com/android/contacts/util/concurrent/FuturesUtil.java
+++ b/src/com/android/contacts/util/concurrent/FuturesUtil.java
@@ -3,9 +3,10 @@
 
 import android.os.Handler;
 
-import com.google.common.util.concurrent.FutureFallback;
+import com.google.common.util.concurrent.AsyncFunction;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 
 import java.util.concurrent.CancellationException;
 import java.util.concurrent.ScheduledExecutorService;
@@ -46,14 +47,14 @@
             }
         }, time, unit);
 
-        return Futures.withFallback(future, new FutureFallback<V>() {
+        return Futures.catchingAsync(future, Throwable.class, new AsyncFunction<Throwable, V>() {
             @Override
-            public ListenableFuture<V> create(Throwable t) throws Exception {
+            public ListenableFuture<V> apply(Throwable t) throws Exception {
                 if ((t instanceof CancellationException) && didTimeout.get()) {
                     return Futures.immediateFailedFuture(new TimeoutException("Timeout expired"));
                 }
                 return Futures.immediateFailedFuture(t);
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 }