Merge "Update Camera2 for guava 27.1"
diff --git a/src/com/android/camera/async/Futures2.java b/src/com/android/camera/async/Futures2.java
index 6669132..052c722 100644
--- a/src/com/android/camera/async/Futures2.java
+++ b/src/com/android/camera/async/Futures2.java
@@ -20,6 +20,7 @@
 import com.google.common.util.concurrent.ForwardingListenableFuture;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 
 import java.util.List;
 
@@ -96,7 +97,7 @@
         // allAsList will propagate the failures instead of null values to the
         // parameters of the supplied function.
         ListenableFuture<List<Object>> result = Futures.<Object>allAsList(futures);
-        return Futures.transform(result, new AsyncFunction<List<Object>, TResult>() {
+        return Futures.transformAsync(result, new AsyncFunction<List<Object>, TResult>() {
             @Override
             public ListenableFuture<TResult> apply(@Nullable List<Object> list) throws Exception {
                 T1 value1 = (T1) list.get(0);
@@ -104,7 +105,7 @@
 
                 return fn.apply(value1, value2);
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 
     /**
@@ -141,7 +142,7 @@
         // allAsList will propagate the failures instead of null values to the
         // parameters of the supplied function.
         ListenableFuture<List<Object>> result = Futures.<Object>allAsList(futures);
-        return Futures.transform(result, new AsyncFunction<List<Object>, TResult>() {
+        return Futures.transformAsync(result, new AsyncFunction<List<Object>, TResult>() {
             @Override
             public ListenableFuture<TResult> apply(@Nullable List<Object> list) throws Exception {
                 T1 value1 = (T1) list.get(0);
@@ -150,7 +151,7 @@
 
                 return fn.apply(value1, value2, value3);
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 
     /**
diff --git a/src/com/android/camera/async/Observables.java b/src/com/android/camera/async/Observables.java
index e946fee..0fbfc6c 100644
--- a/src/com/android/camera/async/Observables.java
+++ b/src/com/android/camera/async/Observables.java
@@ -114,6 +114,6 @@
             public void run() {
                 callback.update(observable.get());
             }
-        }, MoreExecutors.sameThreadExecutor());
+        }, MoreExecutors.directExecutor());
     }
 }
diff --git a/src/com/android/camera/one/v2/OneCameraImpl.java b/src/com/android/camera/one/v2/OneCameraImpl.java
index d4c7cba..c3b8ecb 100644
--- a/src/com/android/camera/one/v2/OneCameraImpl.java
+++ b/src/com/android/camera/one/v2/OneCameraImpl.java
@@ -71,6 +71,7 @@
 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.MoreExecutors;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -512,7 +513,7 @@
             public void onFailure(Throwable throwable) {
                 captureParams.callback.onPictureSaved(null);
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 
     /**
diff --git a/src/com/android/camera/one/v2/OneCameraZslImpl.java b/src/com/android/camera/one/v2/OneCameraZslImpl.java
index 6bdad44..b431594 100644
--- a/src/com/android/camera/one/v2/OneCameraZslImpl.java
+++ b/src/com/android/camera/one/v2/OneCameraZslImpl.java
@@ -71,6 +71,7 @@
 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.MoreExecutors;
 
 import java.nio.ByteBuffer;
 import java.security.InvalidParameterException;
@@ -649,7 +650,7 @@
             public void onFailure(Throwable throwable) {
                 captureParams.callback.onPictureSaved(null);
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 
     /**
diff --git a/src/com/android/camera/one/v2/camera2proxy/AndroidImageProxy.java b/src/com/android/camera/one/v2/camera2proxy/AndroidImageProxy.java
index 3dc5d65..ef9baa5 100644
--- a/src/com/android/camera/one/v2/camera2proxy/AndroidImageProxy.java
+++ b/src/com/android/camera/one/v2/camera2proxy/AndroidImageProxy.java
@@ -19,6 +19,7 @@
 import android.graphics.Rect;
 import android.media.Image;
 
+import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import com.google.common.collect.ImmutableList;
 
@@ -203,7 +204,7 @@
 
     @Override
     public String toString() {
-        return Objects.toStringHelper(this)
+        return MoreObjects.toStringHelper(this)
                 .add("format", getFormat())
                 .add("timestamp", getTimestamp())
                 .add("width", getWidth())
diff --git a/src/com/android/camera/one/v2/camera2proxy/AndroidImageReaderProxy.java b/src/com/android/camera/one/v2/camera2proxy/AndroidImageReaderProxy.java
index 8a59c83..e4c0638 100644
--- a/src/com/android/camera/one/v2/camera2proxy/AndroidImageReaderProxy.java
+++ b/src/com/android/camera/one/v2/camera2proxy/AndroidImageReaderProxy.java
@@ -21,7 +21,7 @@
 import android.os.Handler;
 import android.view.Surface;
 
-import com.google.common.base.Objects;
+import com.google.common.base.MoreObjects;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -160,9 +160,9 @@
 
     @Override
     public String toString() {
-        Objects.ToStringHelper tsh;
+        MoreObjects.ToStringHelper tsh;
         synchronized (mLock) {
-            tsh = Objects.toStringHelper(mDelegate);
+            tsh = MoreObjects.toStringHelper(mDelegate);
         }
         return tsh.add("width", getWidth())
                 .add("height", getHeight())
diff --git a/src/com/android/camera/one/v2/camera2proxy/ForwardingImageProxy.java b/src/com/android/camera/one/v2/camera2proxy/ForwardingImageProxy.java
index 545ff60..98d972e 100644
--- a/src/com/android/camera/one/v2/camera2proxy/ForwardingImageProxy.java
+++ b/src/com/android/camera/one/v2/camera2proxy/ForwardingImageProxy.java
@@ -19,6 +19,7 @@
 import android.graphics.Rect;
 import android.media.Image;
 
+import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 
 import java.util.List;
@@ -102,7 +103,7 @@
 
     @Override
     public String toString() {
-        return Objects.toStringHelper(this)
+        return MoreObjects.toStringHelper(this)
                 .add("timestamp", getTimestamp())
                 .add("width", getWidth())
                 .add("height", getHeight())
diff --git a/src/com/android/camera/one/v2/common/BasicCameraFactory.java b/src/com/android/camera/one/v2/common/BasicCameraFactory.java
index 2cd4098..0e30db4 100644
--- a/src/com/android/camera/one/v2/common/BasicCameraFactory.java
+++ b/src/com/android/camera/one/v2/common/BasicCameraFactory.java
@@ -126,16 +126,16 @@
         // Also, de-register these callbacks when the camera is closed (to
         // not leak memory).
         SafeCloseable zoomCallback = zoom.addCallback(mPreviewUpdater, MoreExecutors
-                .sameThreadExecutor());
+                .directExecutor());
         lifetime.add(zoomCallback);
         SafeCloseable flashCallback = flash.addCallback(mPreviewUpdater, MoreExecutors
-                .sameThreadExecutor());
+                .directExecutor());
         lifetime.add(flashCallback);
         SafeCloseable exposureCallback = exposure.addCallback(mPreviewUpdater, MoreExecutors
-                .sameThreadExecutor());
+                .directExecutor());
         lifetime.add(exposureCallback);
         SafeCloseable hdrCallback = hdrSceneSetting.addCallback(mPreviewUpdater, MoreExecutors
-                .sameThreadExecutor());
+                .directExecutor());
         lifetime.add(hdrCallback);
 
         int sensorOrientation = cameraCharacteristics.getSensorOrientation();
diff --git a/src/com/android/camera/one/v2/common/PictureSizeCalculator.java b/src/com/android/camera/one/v2/common/PictureSizeCalculator.java
index eb25be0..8f2fb6a 100644
--- a/src/com/android/camera/one/v2/common/PictureSizeCalculator.java
+++ b/src/com/android/camera/one/v2/common/PictureSizeCalculator.java
@@ -22,6 +22,7 @@
 import com.android.camera.one.OneCameraCharacteristics;
 import com.android.camera.util.AspectRatio;
 import com.android.camera.util.Size;
+import com.google.common.base.MoreObjects;
 import com.google.common.base.Objects;
 import com.google.common.base.Preconditions;
 
@@ -76,7 +77,7 @@
 
         @Override
         public String toString() {
-            return Objects.toStringHelper("PictureSizeCalculator.Configuration")
+            return MoreObjects.toStringHelper("PictureSizeCalculator.Configuration")
                     .add("native size", mSize)
                     .add("crop", mPostCrop)
                     .toString();
diff --git a/src/com/android/camera/one/v2/initialization/GenericOneCameraImpl.java b/src/com/android/camera/one/v2/initialization/GenericOneCameraImpl.java
index f966bfd..472378f 100644
--- a/src/com/android/camera/one/v2/initialization/GenericOneCameraImpl.java
+++ b/src/com/android/camera/one/v2/initialization/GenericOneCameraImpl.java
@@ -35,6 +35,7 @@
 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.MoreExecutors;
 
 import java.util.concurrent.Executor;
 
@@ -159,7 +160,7 @@
             public void onFailure(@Nonnull Throwable throwable) {
                 listener.onSetupFailed();
             }
-        });
+        }, MoreExecutors.directExecutor());
     }
 
     @Override
diff --git a/src/com/android/camera/one/v2/initialization/PreviewStarter.java b/src/com/android/camera/one/v2/initialization/PreviewStarter.java
index 99c34a3..17a0966 100644
--- a/src/com/android/camera/one/v2/initialization/PreviewStarter.java
+++ b/src/com/android/camera/one/v2/initialization/PreviewStarter.java
@@ -24,6 +24,7 @@
 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.ArrayList;
 import java.util.List;
@@ -82,7 +83,7 @@
         final ListenableFuture<CameraCaptureSessionProxy> sessionFuture =
                 mCaptureSessionCreator.createCaptureSession(surfaceList);
 
-        return Futures.transform(sessionFuture,
+        return Futures.transformAsync(sessionFuture,
                 new AsyncFunction<CameraCaptureSessionProxy, Void>() {
                     @Override
                     public ListenableFuture<Void> apply(
@@ -90,6 +91,6 @@
                         mSessionListener.onCameraCaptureSessionCreated(captureSession, surface);
                         return Futures.immediateFuture(null);
                     }
-                });
+                }, MoreExecutors.directExecutor());
     }
 }
diff --git a/src/com/android/camera/one/v2/photo/PictureTakerImpl.java b/src/com/android/camera/one/v2/photo/PictureTakerImpl.java
index 13498c7..59245da 100644
--- a/src/com/android/camera/one/v2/photo/PictureTakerImpl.java
+++ b/src/com/android/camera/one/v2/photo/PictureTakerImpl.java
@@ -28,7 +28,7 @@
 import com.android.camera.one.v2.core.ResourceAcquisitionFailedException;
 import com.android.camera.one.v2.imagesaver.ImageSaver;
 import com.android.camera.session.CaptureSession;
-import com.google.common.base.Objects;
+import com.google.common.base.MoreObjects;
 
 class PictureTakerImpl implements PictureTaker {
     private final MainThread mMainExecutor;
@@ -70,7 +70,7 @@
 
         @Override
         public String toString() {
-            return Objects.toStringHelper(this)
+            return MoreObjects.toStringHelper(this)
                     .add("command", mCommand)
                     .toString();
         }
diff --git a/src/com/android/camera/one/v2/sharedimagereader/metadatasynchronizer/MetadataPoolImpl.java b/src/com/android/camera/one/v2/sharedimagereader/metadatasynchronizer/MetadataPoolImpl.java
index 8500ebe..5be9032 100644
--- a/src/com/android/camera/one/v2/sharedimagereader/metadatasynchronizer/MetadataPoolImpl.java
+++ b/src/com/android/camera/one/v2/sharedimagereader/metadatasynchronizer/MetadataPoolImpl.java
@@ -25,6 +25,7 @@
 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.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
 
 import java.util.HashMap;
@@ -81,7 +82,7 @@
             public void onFailure(Throwable throwable) {
                 throw new UnsupportedOperationException();
             }
-        });
+        }, MoreExecutors.directExecutor());
         return Futures2.nonCancellationPropagating(future);
     }
 
diff --git a/src/com/android/camera/one/v2/sharedimagereader/ringbuffer/DynamicRingBufferFactory.java b/src/com/android/camera/one/v2/sharedimagereader/ringbuffer/DynamicRingBufferFactory.java
index 1530c48..11350f2 100644
--- a/src/com/android/camera/one/v2/sharedimagereader/ringbuffer/DynamicRingBufferFactory.java
+++ b/src/com/android/camera/one/v2/sharedimagereader/ringbuffer/DynamicRingBufferFactory.java
@@ -51,7 +51,7 @@
             public void run() {
                 ringBuffer.setMaxSize(Math.max(0, maxRingBufferSize.get()));
             }
-        }, MoreExecutors.sameThreadExecutor()));
+        }, MoreExecutors.directExecutor()));
         ringBuffer.setMaxSize(Math.max(0, maxRingBufferSize.get()));
 
         mOutputTicketPool = ringBuffer;
diff --git a/src/com/android/camera/processing/imagebackend/TaskCompressImageToJpeg.java b/src/com/android/camera/processing/imagebackend/TaskCompressImageToJpeg.java
index 2e5976c..c87eab8 100644
--- a/src/com/android/camera/processing/imagebackend/TaskCompressImageToJpeg.java
+++ b/src/com/android/camera/processing/imagebackend/TaskCompressImageToJpeg.java
@@ -39,6 +39,7 @@
 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.MoreExecutors;
 
 import java.nio.ByteBuffer;
 import java.util.HashMap;
@@ -355,7 +356,7 @@
             @Override
             public void onFailure(Throwable throwable) {
             }
-        });
+        }, MoreExecutors.directExecutor());
 
         final ListenableFuture<TotalCaptureResultProxy> requestMetadata = img.metadata;
         // If TotalCaptureResults are available add them to the capture event.