diff --git a/go/quickstep/src/com/android/quickstep/TaskOverlayFactoryGo.java b/go/quickstep/src/com/android/quickstep/TaskOverlayFactoryGo.java
index f3c7a02..fc07162 100644
--- a/go/quickstep/src/com/android/quickstep/TaskOverlayFactoryGo.java
+++ b/go/quickstep/src/com/android/quickstep/TaskOverlayFactoryGo.java
@@ -243,7 +243,7 @@
             @SuppressLint("NewApi")
             public void onListen() {
                 if (mIsAllowedByPolicy) {
-                    sendNIUIntent(ACTION_LISTEN);
+                    endLiveTileMode(() -> sendNIUIntent(ACTION_LISTEN));
                 } else {
                     showBlockedByPolicyMessage();
                 }
@@ -252,7 +252,7 @@
             @SuppressLint("NewApi")
             public void onTranslate() {
                 if (mIsAllowedByPolicy) {
-                    sendNIUIntent(ACTION_TRANSLATE);
+                    endLiveTileMode(() -> sendNIUIntent(ACTION_TRANSLATE));
                 } else {
                     showBlockedByPolicyMessage();
                 }
@@ -261,7 +261,7 @@
             @SuppressLint("NewApi")
             public void onSearch() {
                 if (mIsAllowedByPolicy) {
-                    sendNIUIntent(ACTION_SEARCH);
+                    endLiveTileMode(() -> sendNIUIntent(ACTION_SEARCH));
                 } else {
                     showBlockedByPolicyMessage();
                 }
diff --git a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java
index 6cad3dd..aa49e08 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/RecentsViewStateController.java
@@ -30,6 +30,7 @@
 import android.annotation.TargetApi;
 import android.os.Build;
 import android.util.FloatProperty;
+import android.util.Log;
 
 import androidx.annotation.NonNull;
 
@@ -110,6 +111,8 @@
         propertySetter.setFloat(mLauncher.getActionsView().getVisibilityAlpha(),
                 MultiValueAlpha.VALUE, overviewButtonAlpha, config.getInterpolator(
                         ANIM_OVERVIEW_ACTIONS_FADE, LINEAR));
+        Log.v("b/193125090",
+                "RecentsViewStateController - setVisibilityAlpha: " + overviewButtonAlpha);
 
         float splitPlaceholderAlpha = state.areElementsVisible(mLauncher, SPLIT_PLACHOLDER_VIEW) ?
                 0.85f : 0;
diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
index 40c3e02..d488dda 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
@@ -54,6 +54,7 @@
 import android.animation.AnimatorListenerAdapter;
 import android.animation.ValueAnimator;
 import android.graphics.PointF;
+import android.util.Log;
 import android.view.MotionEvent;
 import android.view.animation.Interpolator;
 
@@ -227,6 +228,8 @@
         mRecentsView.setFullscreenProgress(fromState.getOverviewFullscreenProgress());
         mLauncher.getActionsView().getVisibilityAlpha().setValue(
                 (fromState.getVisibleElements(mLauncher) & OVERVIEW_ACTIONS) != 0 ? 1f : 0f);
+        Log.v("b/193125090", "NoButtonQuickSwitchTouchController - setVisibilityAlpha: "
+                + mLauncher.getActionsView().getVisibilityAlpha().getValue());
 
         float[] scaleAndOffset = toState.getOverviewScaleAndOffset(mLauncher);
         // As we drag right, animate the following properties:
diff --git a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java
index 50b69dc..8f8ee68 100644
--- a/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java
+++ b/quickstep/src/com/android/quickstep/fallback/FallbackRecentsStateController.java
@@ -32,6 +32,8 @@
 import static com.android.quickstep.views.RecentsView.TASK_SECONDARY_TRANSLATION;
 import static com.android.quickstep.views.TaskView.FLAG_UPDATE_ALL;
 
+import android.util.Log;
+
 import com.android.launcher3.anim.PendingAnimation;
 import com.android.launcher3.anim.PropertySetter;
 import com.android.launcher3.statemanager.StateManager.StateHandler;
@@ -82,6 +84,8 @@
         float overviewButtonAlpha = state.hasOverviewActions() ? 1 : 0;
         setter.setFloat(mActivity.getActionsView().getVisibilityAlpha(),
                 MultiValueAlpha.VALUE, overviewButtonAlpha, LINEAR);
+        Log.v("b/193125090",
+                "FallbackRecentsStateController - setVisibilityAlpha: " + overviewButtonAlpha);
 
         float[] scaleAndOffset = state.getOverviewScaleAndOffset(mActivity);
         setter.setFloat(mRecentsView, RECENTS_SCALE_PROPERTY, scaleAndOffset[0],
diff --git a/quickstep/src/com/android/quickstep/views/OverviewActionsView.java b/quickstep/src/com/android/quickstep/views/OverviewActionsView.java
index 8c115e5..65cf6ea 100644
--- a/quickstep/src/com/android/quickstep/views/OverviewActionsView.java
+++ b/quickstep/src/com/android/quickstep/views/OverviewActionsView.java
@@ -23,6 +23,7 @@
 import android.content.res.Configuration;
 import android.graphics.Rect;
 import android.util.AttributeSet;
+import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.FrameLayout;
@@ -162,6 +163,8 @@
         } else {
             mHiddenFlags &= ~visibilityFlags;
         }
+        Log.v("b/193125090",
+                "updateHiddenFlags - visibilityFlags: " + visibilityFlags + ", enable: " + enable);
         boolean isHidden = mHiddenFlags != 0;
         mMultiValueAlpha.getProperty(INDEX_HIDDEN_FLAGS_ALPHA).setValue(isHidden ? 0 : 1);
     }
@@ -181,6 +184,8 @@
             mDisabledFlags &= ~disabledFlags;
         }
         //
+        Log.v("b/193125090",
+                "updateDisabledFlags - disabledFlags: " + disabledFlags + ", enable: " + enable);
         boolean isEnabled = (mDisabledFlags & ~DISABLED_ROTATED) == 0;
         LayoutUtils.setViewEnabled(this, isEnabled);
     }
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index 897dfbe..ca43193 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -989,7 +989,6 @@
     @Override
     protected void onPageBeginTransition() {
         super.onPageBeginTransition();
-        Log.d("b/193125090", "Disabling ActionsView due to scrolling");
         mActionsView.updateDisabledFlags(OverviewActionsView.DISABLED_SCROLLING, true);
     }
 
@@ -997,10 +996,8 @@
     protected void onPageEndTransition() {
         super.onPageEndTransition();
         if (isClearAllHidden()) {
-            Log.d("b/193125090", "Enabling ActionsView due after scrolling");
             mActionsView.updateDisabledFlags(OverviewActionsView.DISABLED_SCROLLING, false);
         } else {
-            Log.d("b/193125090", "Not enabling ActionsView due to ClearAll not hidden");
         }
         if (getNextPage() > 0) {
             setSwipeDownShouldLaunchApp(true);
@@ -1164,7 +1161,6 @@
         }
         if (mFocusedTaskId == -1 && getTaskViewCount() > 0) {
             mFocusedTaskId = getTaskViewAt(0).getTaskId();
-            Log.d("b/193125090", "applyLoadPlan - mFocusedTaskId: " + mFocusedTaskId);
         }
         updateTaskSize();
 
@@ -1274,6 +1270,7 @@
         // Fade out the actions view quickly (0.1 range)
         mActionsView.getFullscreenAlpha().setValue(
                 mapToRange(fullscreenProgress, 0, 0.1f, 1f, 0f, LINEAR));
+        Log.v("b/193125090", "setFullscreenAlpha: " + mActionsView.getFullscreenAlpha().getValue());
     }
 
     private void updateTaskStackListenerState() {
@@ -1481,25 +1478,18 @@
     }
 
     private void updateActionsViewScrollAlpha() {
-        Log.d("b/193125090", "updateActionsViewScrollAlpha - showAsGrid: " + showAsGrid());
         float scrollAlpha = 1f;
         if (showAsGrid()) {
             TaskView focusedTaskView = getFocusedTaskView();
-            Log.d("b/193125090",
-                    "updateActionsViewScrollAlpha - focusedTaskView: " + focusedTaskView);
             if (focusedTaskView != null) {
                 float scrollDiff = Math.abs(getScrollForPage(indexOfChild(focusedTaskView))
                         - mOrientationHandler.getPrimaryScroll(this));
                 float delta = (mGridSideMargin - scrollDiff) / (float) mGridSideMargin;
                 scrollAlpha = Utilities.boundToRange(delta, 0, 1);
-                Log.d("b/193125090",
-                        "updateActionsViewScrollAlpha - focusedTaskScroll: " + getScrollForPage(
-                                indexOfChild(focusedTaskView)) + ", primaryScroll: "
-                                + mOrientationHandler.getPrimaryScroll(this) + ", mGridSideMargin: "
-                                + mGridSideMargin);
             }
         }
         mActionsView.getScrollAlpha().setValue(scrollAlpha);
+        Log.v("b/193125090", "setScrollAlpha: " + scrollAlpha);
     }
 
     /**
@@ -1924,6 +1914,7 @@
     private void animateActionsViewIn() {
         ObjectAnimator anim = ObjectAnimator.ofFloat(
                 mActionsView.getVisibilityAlpha(), MultiValueAlpha.VALUE, 0, 1);
+        Log.v("b/193125090", "animateActionsViewIn - setVisibilityAlpha: " + 1);
         anim.setDuration(TaskView.SCALE_ICON_DURATION);
         anim.start();
     }
@@ -2733,6 +2724,7 @@
         mEmptyMessagePaint.setAlpha(alphaInt);
         mEmptyIcon.setAlpha(alphaInt);
         mActionsView.getContentAlpha().setValue(mContentAlpha);
+        Log.v("b/193125090", "setContentAlpha: " + mContentAlpha);
 
         if (alpha > 0) {
             setVisibility(VISIBLE);
@@ -2756,7 +2748,6 @@
 
     @Override
     public void setVisibility(int visibility) {
-        Log.d("b/193125090", "setVisibility: " + visibility);
         super.setVisibility(visibility);
         if (mActionsView != null) {
             mActionsView.updateHiddenFlags(HIDDEN_NO_RECENTS, visibility != VISIBLE);
