diff --git a/src/com/android/camera/app/FilmstripBottomPanel.java b/src/com/android/camera/app/FilmstripBottomPanel.java
index f978856..018476c 100644
--- a/src/com/android/camera/app/FilmstripBottomPanel.java
+++ b/src/com/android/camera/app/FilmstripBottomPanel.java
@@ -16,6 +16,9 @@
 
 package com.android.camera.app;
 
+import android.animation.Animator;
+import android.animation.AnimatorListenerAdapter;
+import android.animation.ObjectAnimator;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
@@ -269,17 +272,29 @@
     }
 
     public void show() {
-        if (mLayout.getTranslationY() > 0) {
-            mLayout.animate().translationY(0).setDuration(ANIM_DURATION)
-                    .setInterpolator(Gusterpolator.INSTANCE);
-        }
+        ObjectAnimator animator = ObjectAnimator
+                .ofFloat(mLayout, "translationY", mLayout.getHeight(), 0.0f);
+        animator.setDuration(ANIM_DURATION);
+        animator.setInterpolator(Gusterpolator.INSTANCE);
+        animator.addListener(new AnimatorListenerAdapter() {
+            @Override
+            public void onAnimationEnd(Animator animation) {
+                mViewButton.updateClingVisibility();
+            }
+        });
+        mViewButton.hideClings();
+        animator.start();
     }
 
     public void hide() {
         int offset = mLayout.getHeight();
         if (mLayout.getTranslationY() < offset) {
-            mLayout.animate().translationY(offset).setDuration(ANIM_DURATION)
-                    .setInterpolator(Gusterpolator.INSTANCE);
+            ObjectAnimator animator = ObjectAnimator
+                    .ofFloat(mLayout, "translationY", mLayout.getTranslationY(), offset);
+            animator.setDuration(ANIM_DURATION);
+            animator.setInterpolator(Gusterpolator.INSTANCE);
+            mViewButton.hideClings();
+            animator.start();
         }
     }
 }
diff --git a/src/com/android/camera/one/v2/ImageCaptureManager.java b/src/com/android/camera/one/v2/ImageCaptureManager.java
index 464cb1e..a815345 100644
--- a/src/com/android/camera/one/v2/ImageCaptureManager.java
+++ b/src/com/android/camera/one/v2/ImageCaptureManager.java
@@ -56,7 +56,7 @@
  * they are passed in from the lower-level camera2 API.
  */
 @TargetApi(Build.VERSION_CODES.L)
-public class ImageCaptureManager extends CameraCaptureSession.CaptureListener implements
+public class ImageCaptureManager extends CameraCaptureSession.CaptureCallback implements
         ImageReader.OnImageAvailableListener {
     /**
      * Callback to listen for changes to the ability to capture an existing
diff --git a/src/com/android/camera/one/v2/OneCameraImpl.java b/src/com/android/camera/one/v2/OneCameraImpl.java
index 28e214c..e27755d 100644
--- a/src/com/android/camera/one/v2/OneCameraImpl.java
+++ b/src/com/android/camera/one/v2/OneCameraImpl.java
@@ -153,8 +153,8 @@
     /**
      * Common listener for preview frame metadata.
      */
-    private final CameraCaptureSession.CaptureListener mAutoFocusStateListener = new
-            CameraCaptureSession.CaptureListener() {
+    private final CameraCaptureSession.CaptureCallback mAutoFocusStateListener = new
+            CameraCaptureSession.CaptureCallback() {
                 @Override
                 public void onCaptureStarted(CameraCaptureSession session, CaptureRequest request,
                                              long timestamp) {
@@ -474,7 +474,7 @@
             outputSurfaces.add(previewSurface);
             outputSurfaces.add(mCaptureImageReader.getSurface());
 
-            mDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateListener() {
+            mDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback() {
 
                 @Override
                 public void onConfigureFailed(CameraCaptureSession session) {
diff --git a/src/com/android/camera/one/v2/OneCameraManagerImpl.java b/src/com/android/camera/one/v2/OneCameraManagerImpl.java
index 48b3fcf..0f22477 100644
--- a/src/com/android/camera/one/v2/OneCameraManagerImpl.java
+++ b/src/com/android/camera/one/v2/OneCameraManagerImpl.java
@@ -66,7 +66,7 @@
         try {
             final String cameraId = getCameraId(facing);
             Log.i(TAG, "Opening Camera ID " + cameraId);
-            mCameraManager.openCamera(cameraId, new CameraDevice.StateListener() {
+            mCameraManager.openCamera(cameraId, new CameraDevice.StateCallback() {
 
                 @Override
                 public void onDisconnected(CameraDevice device) {
diff --git a/src/com/android/camera/one/v2/OneCameraZslImpl.java b/src/com/android/camera/one/v2/OneCameraZslImpl.java
index c8a21de..34284dd 100644
--- a/src/com/android/camera/one/v2/OneCameraZslImpl.java
+++ b/src/com/android/camera/one/v2/OneCameraZslImpl.java
@@ -645,7 +645,7 @@
             outputSurfaces.add(previewSurface);
             outputSurfaces.add(mCaptureImageReader.getSurface());
 
-            mDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateListener() {
+            mDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback() {
                     @Override
                 public void onConfigureFailed(CameraCaptureSession session) {
                     listener.onSetupFailed();
diff --git a/src/com/android/camera/widget/Cling.java b/src/com/android/camera/widget/Cling.java
index 46ef68b..712dc9b 100644
--- a/src/com/android/camera/widget/Cling.java
+++ b/src/com/android/camera/widget/Cling.java
@@ -76,7 +76,7 @@
     /**
      * Adjust the translation of the cling to stay on top of the reference view.
      */
-    private void adjustPosition() {
+    public void adjustPosition() {
         if (mReferenceView == null) {
             return;
         }
diff --git a/src/com/android/camera/widget/ExternalViewerButton.java b/src/com/android/camera/widget/ExternalViewerButton.java
index bac54d0..7ac42f4 100644
--- a/src/com/android/camera/widget/ExternalViewerButton.java
+++ b/src/com/android/camera/widget/ExternalViewerButton.java
@@ -110,7 +110,7 @@
     /**
      * Sets all the clings to be invisible.
      */
-    private void hideClings() {
+    public void hideClings() {
         for (int i = 0; i < mClingMap.size(); i++) {
             mClingMap.valueAt(i).setVisibility(View.INVISIBLE);
         }
@@ -134,11 +134,12 @@
      * Updates the visibility of clings based on whether the button is currently
      * shown.
      */
-    private void updateClingVisibility() {
+    public void updateClingVisibility() {
         hideClings();
         if (isShown()) {
-            View cling = mClingMap.get(mState);
+            Cling cling = mClingMap.get(mState);
             if (cling != null) {
+                cling.adjustPosition();
                 cling.setVisibility(View.VISIBLE);
             }
         }
