diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/StatusBarTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/StatusBarTouchController.java
index 6becf0f..395833f 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/StatusBarTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/StatusBarTouchController.java
@@ -30,8 +30,6 @@
 import android.view.Window;
 import android.view.WindowManager;
 
-import androidx.annotation.VisibleForTesting;
-
 import com.android.launcher3.AbstractFloatingView;
 import com.android.launcher3.DeviceProfile;
 import com.android.launcher3.Launcher;
@@ -52,13 +50,12 @@
 
     private final Launcher mLauncher;
     private final SystemUiProxy mSystemUiProxy;
-    @VisibleForTesting final float mTouchSlop;
+    private final float mTouchSlop;
     private int mLastAction;
     private final SparseArray<PointF> mDownEvents;
 
     /* If {@code false}, this controller should not handle the input {@link MotionEvent}.*/
-    @VisibleForTesting
-    boolean mCanIntercept;
+    private boolean mCanIntercept;
 
     public StatusBarTouchController(Launcher l) {
         mLauncher = l;
@@ -85,9 +82,9 @@
 
     @Override
     public final boolean onControllerInterceptTouchEvent(MotionEvent ev) {
-        final int action = ev.getActionMasked();
-        final int idx = ev.getActionIndex();
-        final int pid = ev.getPointerId(idx);
+        int action = ev.getActionMasked();
+        int idx = ev.getActionIndex();
+        int pid = ev.getPointerId(idx);
         if (action == ACTION_DOWN) {
             mCanIntercept = canInterceptTouch(ev);
             if (!mCanIntercept) {
@@ -95,14 +92,14 @@
             }
             mDownEvents.clear();
             mDownEvents.put(pid, new PointF(ev.getX(), ev.getY()));
-        } else if (action == MotionEvent.ACTION_POINTER_DOWN) {
+        } else if (ev.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN) {
             // Check!! should only set it only when threshold is not entered.
             mDownEvents.put(pid, new PointF(ev.getX(idx), ev.getY(idx)));
         }
         if (!mCanIntercept) {
             return false;
         }
-        if (action == ACTION_MOVE && mDownEvents.contains(pid)) {
+        if (action == ACTION_MOVE) {
             float dy = ev.getY(idx) - mDownEvents.get(pid).y;
             float dx = ev.getX(idx) - mDownEvents.get(pid).x;
             // Currently input dispatcher will not do touch transfer if there are more than
@@ -129,6 +126,7 @@
             mLauncher.getStatsLogManager().logger()
                     .log(LAUNCHER_SWIPE_DOWN_WORKSPACE_NOTISHADE_OPEN);
             setWindowSlippery(false);
+            return true;
         }
         return true;
     }
@@ -142,8 +140,7 @@
      * Touches can slide out of the window but they cannot necessarily slide
      * back in (unless the other window with touch focus permits it).
      */
-    @VisibleForTesting
-    void setWindowSlippery(boolean enable) {
+    private void setWindowSlippery(boolean enable) {
         Window w = mLauncher.getWindow();
         WindowManager.LayoutParams wlp = w.getAttributes();
         if (enable) {
diff --git a/quickstep/tests/src/com/android/launcher3/uioverrides/touchcontrollers/StatusBarTouchControllerTest.kt b/quickstep/tests/src/com/android/launcher3/uioverrides/touchcontrollers/StatusBarTouchControllerTest.kt
deleted file mode 100644
index b2f13c7..0000000
--- a/quickstep/tests/src/com/android/launcher3/uioverrides/touchcontrollers/StatusBarTouchControllerTest.kt
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 202 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.launcher3.uioverrides.touchcontrollers
-
-import android.view.MotionEvent
-import android.view.WindowManager
-import androidx.test.filters.SmallTest
-import androidx.test.runner.AndroidJUnit4
-import com.android.launcher3.Launcher
-import com.android.launcher3.ui.AbstractLauncherUiTest
-import com.android.launcher3.ui.TaplTestsLauncher3
-import junit.framework.Assert.assertEquals
-import junit.framework.Assert.assertFalse
-import junit.framework.Assert.assertTrue
-import org.junit.Before
-import org.junit.Test
-import org.junit.runner.RunWith
-
-@SmallTest
-@RunWith(AndroidJUnit4::class)
-class StatusBarTouchControllerTest : AbstractLauncherUiTest() {
-    @Before
-    @Throws(Exception::class)
-    fun setup() {
-        TaplTestsLauncher3.initialize(this)
-    }
-
-    @Test
-    fun interceptActionDown_canIntercept() {
-        executeOnLauncher { launcher: Launcher? ->
-            val underTest = StatusBarTouchController(launcher)
-            assertFalse(underTest.mCanIntercept)
-            val downEvent = MotionEvent.obtain(1, 1, MotionEvent.ACTION_DOWN, 0f, 0f, 0)
-
-            underTest.onControllerInterceptTouchEvent(downEvent)
-
-            assertTrue(underTest.mCanIntercept)
-        }
-    }
-
-    @Test
-    fun interceptActionMove_handledAndSetSlippery() {
-        executeOnLauncher { launcher: Launcher ->
-            val underTest = StatusBarTouchController(launcher)
-            val downEvent = MotionEvent.obtain(1, 1, MotionEvent.ACTION_DOWN, 0f, 0f, 0)
-            underTest.onControllerInterceptTouchEvent(downEvent)
-            val w = launcher.window
-            assertEquals(0, w.attributes.flags and WindowManager.LayoutParams.FLAG_SLIPPERY)
-            val moveEvent =
-                MotionEvent.obtain(
-                    2,
-                    2,
-                    MotionEvent.ACTION_MOVE,
-                    underTest.mTouchSlop,
-                    underTest.mTouchSlop + 10,
-                    0
-                )
-
-            val handled = underTest.onControllerInterceptTouchEvent(moveEvent)
-
-            assertTrue(handled)
-            assertEquals(
-                WindowManager.LayoutParams.FLAG_SLIPPERY,
-                w.attributes.flags and WindowManager.LayoutParams.FLAG_SLIPPERY
-            )
-        }
-    }
-
-    @Test
-    fun interceptActionMove_not_handled() {
-        executeOnLauncher { launcher: Launcher? ->
-            val underTest = StatusBarTouchController(launcher)
-            val downEvent = MotionEvent.obtain(1, 1, MotionEvent.ACTION_DOWN, 0f, 0f, 0)
-            underTest.onControllerInterceptTouchEvent(downEvent)
-            val moveEvent =
-                MotionEvent.obtain(
-                    2,
-                    2,
-                    MotionEvent.ACTION_MOVE,
-                    underTest.mTouchSlop + 10,
-                    underTest.mTouchSlop,
-                    0
-                )
-
-            val handled = underTest.onControllerInterceptTouchEvent(moveEvent)
-
-            assertFalse(handled)
-        }
-    }
-
-    @Test
-    fun interceptActionMoveAsFirstGestureEvent_notCrashedNorHandled() {
-        executeOnLauncher { launcher: Launcher? ->
-            val underTest = StatusBarTouchController(launcher)
-            underTest.mCanIntercept = true
-            val moveEvent = MotionEvent.obtain(2, 2, MotionEvent.ACTION_MOVE, 10f, 10f, 0)
-
-            val handled = underTest.onControllerInterceptTouchEvent(moveEvent)
-
-            assertFalse(handled)
-        }
-    }
-
-    @Test
-    fun handleActionUp_setNotSlippery() {
-        executeOnLauncher { launcher: Launcher ->
-            val underTest = StatusBarTouchController(launcher)
-            underTest.mCanIntercept = true
-            underTest.setWindowSlippery(true)
-            val moveEvent = MotionEvent.obtain(2, 2, MotionEvent.ACTION_UP, 10f, 10f, 0)
-
-            val handled = underTest.onControllerTouchEvent(moveEvent)
-
-            assertTrue(handled)
-            assertEquals(
-                0,
-                launcher.window.attributes.flags and WindowManager.LayoutParams.FLAG_SLIPPERY
-            )
-        }
-    }
-
-    @Test
-    fun handleActionCancel_setNotSlippery() {
-        executeOnLauncher { launcher: Launcher ->
-            val underTest = StatusBarTouchController(launcher)
-            underTest.mCanIntercept = true
-            underTest.setWindowSlippery(true)
-            val moveEvent = MotionEvent.obtain(2, 2, MotionEvent.ACTION_CANCEL, 10f, 10f, 0)
-
-            val handled = underTest.onControllerTouchEvent(moveEvent)
-
-            assertTrue(handled)
-            assertEquals(
-                0,
-                launcher.window.attributes.flags and WindowManager.LayoutParams.FLAG_SLIPPERY
-            )
-        }
-    }
-}
