diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index 4f587eb..b357a94 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -105,11 +105,21 @@
 filegroup {
     name: "SystemUI-tests-utils",
     srcs: [
+        "tests/src/com/android/systemui/SysuiTestCase.java",
+        "tests/src/com/android/systemui/TestableDependency.java",
+        "tests/src/com/android/systemui/classifier/FalsingManagerFake.java",
         "tests/src/com/android/systemui/statusbar/notification/collection/NotificationEntryBuilder.java",
         "tests/src/com/android/systemui/statusbar/RankingBuilder.java",
         "tests/src/com/android/systemui/statusbar/SbnBuilder.java",
-        "tests/src/com/android/systemui/util/concurrency/FakeExecutor.java",
-        "tests/src/com/android/systemui/util/time/FakeSystemClock.java",
+        "tests/src/com/android/systemui/SysuiTestableContext.java",
+        "tests/src/com/android/systemui/utils/leaks/BaseLeakChecker.java",
+        "tests/src/com/android/systemui/utils/leaks/LeakCheckedTest.java",
+        "tests/src/com/android/systemui/**/Fake*.java",
+        "tests/src/com/android/systemui/**/Fake*.kt",
+    ],
+    exclude_srcs: [
+        "tests/src/com/android/systemui/**/*Test.java",
+        "tests/src/com/android/systemui/**/*Test.kt",
     ],
     path: "tests/src",
 }
diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java
index 5ac8961..b4fac5c 100644
--- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java
+++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/FalsingManager.java
@@ -114,7 +114,12 @@
     /** From com.android.systemui.Dumpable. */
     void dump(FileDescriptor fd, PrintWriter pw, String[] args);
 
-    void cleanup();
+    /**
+     *  Don't call this. It's meant for internal use to allow switching between implementations.
+     *
+     * Tests may also call it.
+     **/
+    void cleanupInternal();
 
     /** Call to report a ProximityEvent to the FalsingManager. */
     void onProximityEvent(ProximityEvent proximityEvent);
@@ -136,7 +141,9 @@
         void onFalse();
     }
 
-    /** Listener that is alerted when a double tap is required to confirm a single tap. */
+    /**
+     * Listener that is alerted when a double tap is required to confirm a single tap.
+     **/
     interface FalsingTapListener {
         void onDoubleTapRequired();
     }
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java b/packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java
index c821d10..020401e 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/BrightLineFalsingManager.java
@@ -82,6 +82,8 @@
     private final List<FalsingBeliefListener> mFalsingBeliefListeners = new ArrayList<>();
     private List<FalsingTapListener> mFalsingTapListeners = new ArrayList<>();
 
+    private boolean mDestroyed;
+
     private final SessionListener mSessionListener = new SessionListener() {
         @Override
         public void onSessionEnded() {
@@ -196,6 +198,8 @@
 
     @Override
     public boolean isFalseTouch(@Classifier.InteractionType int interactionType) {
+        checkDestroyed();
+
         mPriorInteractionType = interactionType;
         if (skipFalsing(interactionType)) {
             mPriorResults = getPassedResult(1);
@@ -221,6 +225,8 @@
 
     @Override
     public boolean isSimpleTap() {
+        checkDestroyed();
+
         FalsingClassifier.Result result = mSingleTapClassifier.isTap(
                 mDataProvider.getRecentMotionEvents(), 0);
         mPriorResults = Collections.singleton(result);
@@ -228,8 +234,16 @@
         return !result.isFalse();
     }
 
+    private void checkDestroyed() {
+        if (mDestroyed) {
+            Log.wtf(TAG, "Tried to use FalsingManager after being destroyed!");
+        }
+    }
+
     @Override
     public boolean isFalseTap(@Penalty int penalty) {
+        checkDestroyed();
+
         if (skipFalsing(GENERIC)) {
             mPriorResults = getPassedResult(1);
             logDebug("Skipped falsing");
@@ -292,6 +306,8 @@
 
     @Override
     public boolean isFalseDoubleTap() {
+        checkDestroyed();
+
         if (skipFalsing(GENERIC)) {
             mPriorResults = getPassedResult(1);
             logDebug("Skipped falsing");
@@ -406,7 +422,8 @@
     }
 
     @Override
-    public void cleanup() {
+    public void cleanupInternal() {
+        mDestroyed = true;
         mDataProvider.removeSessionListener(mSessionListener);
         mDataProvider.removeGestureCompleteListener(mGestureFinalizedListener);
         mClassifiers.forEach(FalsingClassifier::cleanup);
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java
index ee0dba0..5a24f35 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerProxy.java
@@ -79,7 +79,7 @@
             public void onPluginConnected(FalsingPlugin plugin, Context context) {
                 FalsingManager pluginFalsingManager = plugin.getFalsingManager(context);
                 if (pluginFalsingManager != null) {
-                    mInternalFalsingManager.cleanup();
+                    mInternalFalsingManager.cleanupInternal();
                     mInternalFalsingManager = pluginFalsingManager;
                 }
             }
@@ -109,7 +109,7 @@
      */
     private void setupFalsingManager() {
         if (mInternalFalsingManager != null) {
-            mInternalFalsingManager.cleanup();
+            mInternalFalsingManager.cleanupInternal();
         }
         mInternalFalsingManager = mBrightLineFalsingManagerProvider.get();
     }
@@ -195,10 +195,10 @@
     }
 
     @Override
-    public void cleanup() {
+    public void cleanupInternal() {
         mDeviceConfig.removeOnPropertiesChangedListener(mDeviceConfigListener);
         mPluginManager.removePluginListener(mPluginListener);
         mDumpManager.unregisterDumpable(DUMPABLE_TAG);
-        mInternalFalsingManager.cleanup();
+        mInternalFalsingManager.cleanupInternal();
     }
 }
diff --git a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java
index d0662e7..8da80ca 100644
--- a/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java
+++ b/packages/SystemUI/src/com/android/systemui/wallet/ui/WalletScreenController.java
@@ -260,7 +260,6 @@
         mIsDismissed = true;
         mSelectedCardId = null;
         mHandler.removeCallbacks(mSelectionRunnable);
-        mFalsingManager.cleanup();
         mWalletClient.notifyWalletDismissed();
         mWalletClient.removeWalletServiceEventListener(this);
         mWalletView.animateDismissal();
diff --git a/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineClassifierTest.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineClassifierTest.java
index a7f9fe4..3eb1a9e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineClassifierTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/BrightLineClassifierTest.java
@@ -118,7 +118,7 @@
         verify(mFalsingDataProvider).addSessionListener(
                 any(FalsingDataProvider.SessionListener.class));
 
-        mBrightLineFalsingManager.cleanup();
+        mBrightLineFalsingManager.cleanupInternal();
         verify(mFalsingDataProvider).removeSessionListener(
                 any(FalsingDataProvider.SessionListener.class));
     }
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerFake.java
similarity index 85%
rename from packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java
rename to packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerFake.java
index dba530e..87d1b6b 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/FalsingManagerFake.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/classifier/FalsingManagerFake.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2019 The Android Open Source Project
+ * Copyright (C) 2021 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.
@@ -16,6 +16,8 @@
 
 package com.android.systemui.classifier;
 
+import static com.google.common.truth.Truth.assertWithMessage;
+
 import android.net.Uri;
 
 import com.android.internal.annotations.VisibleForTesting;
@@ -34,10 +36,11 @@
     private boolean mIsSimpleTap;
     private boolean mIsFalseDoubleTap;
     private boolean mIsUnlockingDisabled;
-    private boolean mIsClassiferEnabled;
+    private boolean mIsClassifierEnabled;
     private boolean mShouldEnforceBouncer;
     private boolean mIsReportingEnabled;
     private boolean mIsFalseRobustTap;
+    private boolean mDestroyed;
 
     private final List<FalsingBeliefListener> mFalsingBeliefListeners = new ArrayList<>();
     private final List<FalsingTapListener> mTapListeners = new ArrayList<>();
@@ -64,6 +67,7 @@
 
     @Override
     public boolean isFalseTouch(@Classifier.InteractionType int interactionType) {
+        checkDestroyed();
         return mIsFalseTouch;
     }
 
@@ -81,27 +85,30 @@
 
     @Override
     public boolean isSimpleTap() {
+        checkDestroyed();
         return mIsSimpleTap;
     }
 
     @Override
     public boolean isFalseTap(@Penalty int penalty) {
+        checkDestroyed();
         return mIsFalseRobustTap;
     }
 
     @Override
     public boolean isFalseDoubleTap() {
+        checkDestroyed();
         return mIsFalseDoubleTap;
     }
 
     @VisibleForTesting
-    public void setIsClassiferEnabled(boolean isClassiferEnabled) {
-        mIsClassiferEnabled = isClassiferEnabled;
+    public void setIsClassifierEnabled(boolean isClassifierEnabled) {
+        mIsClassifierEnabled = isClassifierEnabled;
     }
 
     @Override
     public boolean isClassifierEnabled() {
-        return mIsClassiferEnabled;
+        return mIsClassifierEnabled;
     }
 
     @Override
@@ -129,7 +136,13 @@
     }
 
     @Override
-    public void cleanup() {
+    public void cleanupInternal() {
+        mDestroyed = true;
+    }
+
+    private void checkDestroyed() {
+        assertWithMessage("FakeFasingManager has been destroyed")
+                .that(mDestroyed).isFalse();
     }
 
     @Override
