diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index a9b92a3..1381955 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -9428,9 +9428,12 @@
          * 0 indicates disabled and 1 indicates enabled. A non existent value should be treated as
          * enabled.
          *
+         * @deprecated Controls are migrated to Quick Settings, rendering this unnecessary and will
+         *             be removed in a future release.
          * @hide
          */
         @Readable
+        @Deprecated
         public static final String CONTROLS_ENABLED = "controls_enabled";
 
         /**
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt
index 496741b..ea1ade41 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsController.kt
@@ -40,11 +40,6 @@
  */
 interface ControlsController : UserAwareController {
 
-    /**
-     * Whether the controls system is available for the current user.
-     */
-    val available: Boolean
-
     // SERVICE COMMUNICATION
 
     /**
diff --git a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
index 8c3ef68..5d0127a 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/controller/ControlsControllerImpl.kt
@@ -28,7 +28,6 @@
 import android.net.Uri
 import android.os.Environment
 import android.os.UserHandle
-import android.provider.Settings
 import android.service.controls.Control
 import android.service.controls.actions.ControlAction
 import android.util.ArrayMap
@@ -70,15 +69,10 @@
 
     companion object {
         private const val TAG = "ControlsControllerImpl"
-        internal const val CONTROLS_AVAILABLE = Settings.Secure.CONTROLS_ENABLED
-        internal val URI = Settings.Secure.getUriFor(CONTROLS_AVAILABLE)
         private const val USER_CHANGE_RETRY_DELAY = 500L // ms
         private const val DEFAULT_ENABLED = 1
         private const val PERMISSION_SELF = "com.android.systemui.permission.SELF"
         const val SUGGESTED_CONTROLS_PER_STRUCTURE = 6
-
-        private fun isAvailable(userId: Int, cr: ContentResolver) = Settings.Secure.getIntForUser(
-            cr, CONTROLS_AVAILABLE, DEFAULT_ENABLED, userId) != 0
     }
 
     private var userChanging: Boolean = true
@@ -93,8 +87,6 @@
 
     private val contentResolver: ContentResolver
         get() = context.contentResolver
-    override var available = isAvailable(currentUserId, contentResolver)
-        private set
 
     private val persistenceWrapper: ControlsFavoritePersistenceWrapper
     @VisibleForTesting
@@ -126,8 +118,7 @@
                 BackupManager(userStructure.userContext)
         )
         auxiliaryPersistenceWrapper.changeFile(userStructure.auxiliaryFile)
-        available = isAvailable(newUser.identifier, contentResolver)
-        resetFavorites(available)
+        resetFavorites()
         bindingController.changeUser(newUser)
         listingController.changeUser(newUser)
         userChanging = false
@@ -157,7 +148,7 @@
                     Log.d(TAG, "Restore finished, storing auxiliary favorites")
                     auxiliaryPersistenceWrapper.initialize()
                     persistenceWrapper.storeFavorites(auxiliaryPersistenceWrapper.favorites)
-                    resetFavorites(available)
+                    resetFavorites()
                 }
             }
         }
@@ -176,8 +167,7 @@
             if (userChanging || userId != currentUserId) {
                 return
             }
-            available = isAvailable(currentUserId, contentResolver)
-            resetFavorites(available)
+            resetFavorites()
         }
     }
 
@@ -242,7 +232,7 @@
 
     init {
         dumpManager.registerDumpable(javaClass.name, this)
-        resetFavorites(available)
+        resetFavorites()
         userChanging = false
         broadcastDispatcher.registerReceiver(
                 userSwitchReceiver,
@@ -256,23 +246,18 @@
             PERMISSION_SELF,
             null
         )
-        contentResolver.registerContentObserver(URI, false, settingObserver, UserHandle.USER_ALL)
         listingController.addCallback(listingCallback)
     }
 
     fun destroy() {
         broadcastDispatcher.unregisterReceiver(userSwitchReceiver)
         context.unregisterReceiver(restoreFinishedReceiver)
-        contentResolver.unregisterContentObserver(settingObserver)
         listingController.removeCallback(listingCallback)
     }
 
-    private fun resetFavorites(shouldLoad: Boolean) {
+    private fun resetFavorites() {
         Favorites.clear()
-
-        if (shouldLoad) {
-            Favorites.load(persistenceWrapper.readFavorites())
-        }
+        Favorites.load(persistenceWrapper.readFavorites())
     }
 
     private fun confirmAvailability(): Boolean {
@@ -280,10 +265,6 @@
             Log.w(TAG, "Controls not available while user is changing")
             return false
         }
-        if (!available) {
-            Log.d(TAG, "Controls not available")
-            return false
-        }
         return true
     }
 
@@ -577,7 +558,6 @@
 
     override fun dump(fd: FileDescriptor, pw: PrintWriter, args: Array<out String>) {
         pw.println("ControlsController state:")
-        pw.println("  Available: $available")
         pw.println("  Changing users: $userChanging")
         pw.println("  Current user: ${currentUser.identifier}")
         pw.println("  Favorites:")
diff --git a/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsComponent.kt b/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsComponent.kt
index 6b7a1ac..5557c86 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsComponent.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/dagger/ControlsComponent.kt
@@ -93,7 +93,7 @@
     /**
      * @return true if controls are feature-enabled and the user has the setting enabled
      */
-    fun isEnabled() = featureEnabled && lazyControlsController.get().available
+    fun isEnabled() = featureEnabled
 
     /**
      * Returns one of 3 states:
diff --git a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestDialog.kt b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestDialog.kt
index 4ed6106..f9e7f0e 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestDialog.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/management/ControlsRequestDialog.kt
@@ -71,10 +71,7 @@
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        if (!controller.available) {
-            Log.w(TAG, "Quick Controls not available for this user ")
-            finish()
-        }
+
         currentUserTracker.startTracking()
         controlsListingController.addCallback(callback)
 
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiController.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiController.kt
index ac13aad..2bbd3cb 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiController.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiController.kt
@@ -23,8 +23,6 @@
 import android.view.ViewGroup
 
 interface ControlsUiController {
-    val available: Boolean
-
     companion object {
         public const val TAG = "ControlsUiController"
         public const val EXTRA_ANIMATE = "extra_animate"
diff --git a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
index 954bfb3..26be987 100644
--- a/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/controls/ui/ControlsUiControllerImpl.kt
@@ -128,9 +128,6 @@
             reload(parent)
     }
 
-    override val available: Boolean
-        get() = controlsController.get().available
-
     private lateinit var activityContext: Context
     private lateinit var listingCallback: ControlsListingController.ControlsListingCallback
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
index 3dd4a3b..fa32620 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/AutoTileManager.java
@@ -16,6 +16,7 @@
 
 import static com.android.systemui.qs.dagger.QSFlagsModule.RBC_AVAILABLE;
 
+import android.annotation.Nullable;
 import android.content.Context;
 import android.content.res.Resources;
 import android.hardware.display.ColorDisplayManager;
@@ -294,9 +295,11 @@
     private final DeviceControlsController.Callback mDeviceControlsCallback =
             new DeviceControlsController.Callback() {
         @Override
-        public void onControlsAvailable(int position) {
+        public void onControlsUpdate(@Nullable Integer position) {
             if (mAutoTracker.isAdded(DEVICE_CONTROLS)) return;
-            mHost.addTile(DEVICE_CONTROLS, position);
+            if (position != null) {
+                mHost.addTile(DEVICE_CONTROLS, position);
+            }
             mAutoTracker.setTileAdded(DEVICE_CONTROLS);
             mHandler.post(() -> mDeviceControlsController.removeCallback());
         }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsController.kt
index b211898..e2bebbe 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsController.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsController.kt
@@ -24,7 +24,7 @@
         /**
          * If controls become available, initiate this callback with the desired position
          */
-        fun onControlsAvailable(position: Int)
+        fun onControlsUpdate(position: Int?)
     }
 
     /** Add callback, supporting only a single callback at once */
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt
index a4fd647..7563b30 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImpl.kt
@@ -19,6 +19,7 @@
 import android.content.ComponentName
 import android.content.Context
 import android.content.SharedPreferences
+import android.provider.Settings
 import android.util.Log
 
 import com.android.systemui.R
@@ -29,6 +30,7 @@
 import com.android.systemui.qs.QSTileHost.POSITION_AT_END
 import com.android.systemui.settings.UserContextProvider
 import com.android.systemui.statusbar.policy.DeviceControlsController.Callback
+import com.android.systemui.util.settings.SecureSettings
 
 import javax.inject.Inject
 
@@ -45,7 +47,8 @@
 public class DeviceControlsControllerImpl @Inject constructor(
     private val context: Context,
     private val controlsComponent: ControlsComponent,
-    private val userContextProvider: UserContextProvider
+    private val userContextProvider: UserContextProvider,
+    private val secureSettings: SecureSettings
 ) : DeviceControlsController {
 
     private var callback: Callback? = null
@@ -73,6 +76,7 @@
         controlsComponent.getControlsController().ifPresent {
             if (!it.getFavorites().isEmpty()) {
                 position = QS_PRIORITY_POSITION
+                fireControlsUpdate()
             }
         }
     }
@@ -80,20 +84,22 @@
     /**
      * This migration logic assumes that something like [AutoTileManager] is tracking state
      * externally, and won't call this method after receiving a response via
-     * [Callback#onControlsAvailable], once per user. Otherwise the calculated position may be
+     * [Callback#onControlsUpdate], once per user. Otherwise the calculated position may be
      * incorrect.
      */
     override fun setCallback(callback: Callback) {
         // Treat any additional call as a reset before recalculating
         removeCallback()
-
-        checkMigrationToQs()
-        controlsComponent.getControlsListingController().ifPresent {
-            it.addCallback(listingCallback)
-        }
-
         this.callback = callback
-        fireControlsAvailable()
+
+        if (secureSettings.getInt(Settings.Secure.CONTROLS_ENABLED, 1) == 0) {
+            fireControlsUpdate()
+        } else {
+            checkMigrationToQs()
+            controlsComponent.getControlsListingController().ifPresent {
+                it.addCallback(listingCallback)
+            }
+        }
     }
 
     override fun removeCallback() {
@@ -104,11 +110,9 @@
         }
     }
 
-    private fun fireControlsAvailable() {
-        position?.let {
-            Log.i(TAG, "Setting DeviceControlsTile position: $it")
-            callback?.onControlsAvailable(it)
-        }
+    private fun fireControlsUpdate() {
+        Log.i(TAG, "Setting DeviceControlsTile position: $position")
+        callback?.onControlsUpdate(position)
     }
 
     /**
@@ -155,7 +159,7 @@
                         if (position == null) {
                             position = QS_DEFAULT_POSITION
                         }
-                        fireControlsAvailable()
+                        fireControlsUpdate()
 
                         controlsComponent.getControlsListingController().ifPresent {
                             it.removeCallback(listingCallback)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt
index f6c836a..a80fbbe 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/controller/ControlsControllerImplTest.kt
@@ -24,7 +24,6 @@
 import android.content.Intent
 import android.content.pm.ServiceInfo
 import android.os.UserHandle
-import android.provider.Settings
 import android.service.controls.Control
 import android.service.controls.DeviceTypes
 import android.service.controls.actions.ControlAction
@@ -141,11 +140,6 @@
     fun setUp() {
         MockitoAnnotations.initMocks(this)
 
-        Settings.Secure.putInt(mContext.contentResolver,
-                ControlsControllerImpl.CONTROLS_AVAILABLE, 1)
-        Settings.Secure.putIntForUser(mContext.contentResolver,
-                ControlsControllerImpl.CONTROLS_AVAILABLE, 1, otherUser)
-
         `when`(userTracker.userHandle).thenReturn(UserHandle.of(user))
 
         delayableExecutor = FakeExecutor(FakeSystemClock())
@@ -172,7 +166,6 @@
         )
         controller.auxiliaryPersistenceWrapper = auxiliaryPersistenceWrapper
 
-        assertTrue(controller.available)
         verify(broadcastDispatcher).registerReceiver(
                 capture(broadcastReceiverCaptor), any(), any(), eq(UserHandle.ALL))
 
@@ -527,58 +520,6 @@
         verify(listingController).changeUser(UserHandle.of(otherUser))
         assertTrue(controller.getFavorites().isEmpty())
         assertEquals(otherUser, controller.currentUserId)
-        assertTrue(controller.available)
-    }
-
-    @Test
-    fun testDisableFeature_notAvailable() {
-        Settings.Secure.putIntForUser(mContext.contentResolver,
-                ControlsControllerImpl.CONTROLS_AVAILABLE, 0, user)
-        controller.settingObserver.onChange(false, listOf(ControlsControllerImpl.URI), 0, 0)
-        assertFalse(controller.available)
-    }
-
-    @Test
-    fun testDisableFeature_clearFavorites() {
-        controller.replaceFavoritesForStructure(TEST_STRUCTURE_INFO)
-        delayableExecutor.runAllReady()
-
-        assertFalse(controller.getFavorites().isEmpty())
-
-        Settings.Secure.putIntForUser(mContext.contentResolver,
-                ControlsControllerImpl.CONTROLS_AVAILABLE, 0, user)
-        controller.settingObserver.onChange(false, listOf(ControlsControllerImpl.URI), 0, user)
-        assertTrue(controller.getFavorites().isEmpty())
-    }
-
-    @Test
-    fun testDisableFeature_noChangeForNotCurrentUser() {
-        controller.replaceFavoritesForStructure(TEST_STRUCTURE_INFO)
-        delayableExecutor.runAllReady()
-
-        Settings.Secure.putIntForUser(mContext.contentResolver,
-                ControlsControllerImpl.CONTROLS_AVAILABLE, 0, otherUser)
-        controller.settingObserver.onChange(false, listOf(ControlsControllerImpl.URI), 0, otherUser)
-
-        assertTrue(controller.available)
-        assertFalse(controller.getFavorites().isEmpty())
-    }
-
-    @Test
-    fun testCorrectUserSettingOnUserChange() {
-        Settings.Secure.putIntForUser(mContext.contentResolver,
-                ControlsControllerImpl.CONTROLS_AVAILABLE, 0, otherUser)
-
-        val intent = Intent(Intent.ACTION_USER_SWITCHED).apply {
-            putExtra(Intent.EXTRA_USER_HANDLE, otherUser)
-        }
-        val pendingResult = mock(BroadcastReceiver.PendingResult::class.java)
-        `when`(pendingResult.sendingUserId).thenReturn(otherUser)
-        broadcastReceiverCaptor.value.pendingResult = pendingResult
-
-        broadcastReceiverCaptor.value.onReceive(mContext, intent)
-
-        assertFalse(controller.available)
     }
 
     @Test
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/dagger/ControlsComponentTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/dagger/ControlsComponentTest.kt
index b8f91b8..c678f46 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/dagger/ControlsComponentTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/dagger/ControlsComponentTest.kt
@@ -103,7 +103,6 @@
 
     @Test
     fun testFeatureEnabledAfterBootVisibility() {
-        `when`(controller.available).thenReturn(true)
         `when`(lockPatternUtils.getStrongAuthForUser(anyInt()))
             .thenReturn(STRONG_AUTH_REQUIRED_AFTER_BOOT)
         val component = setupComponent(true)
@@ -113,7 +112,6 @@
 
     @Test
     fun testFeatureEnabledAndCannotShowOnLockScreenVisibility() {
-        `when`(controller.available).thenReturn(true)
         `when`(lockPatternUtils.getStrongAuthForUser(anyInt()))
             .thenReturn(STRONG_AUTH_NOT_REQUIRED)
         `when`(keyguardStateController.isUnlocked()).thenReturn(false)
@@ -126,7 +124,6 @@
 
     @Test
     fun testFeatureEnabledAndCanShowOnLockScreenVisibility() {
-        `when`(controller.available).thenReturn(true)
         `when`(lockPatternUtils.getStrongAuthForUser(anyInt()))
             .thenReturn(STRONG_AUTH_NOT_REQUIRED)
         `when`(keyguardStateController.isUnlocked()).thenReturn(false)
@@ -141,7 +138,6 @@
     fun testFeatureEnabledAndCanShowWhileUnlockedVisibility() {
         `when`(secureSettings.getInt(eq(Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT), anyInt()))
             .thenReturn(0)
-        `when`(controller.available).thenReturn(true)
         `when`(lockPatternUtils.getStrongAuthForUser(anyInt()))
             .thenReturn(STRONG_AUTH_NOT_REQUIRED)
         `when`(keyguardStateController.isUnlocked()).thenReturn(true)
diff --git a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestDialogTest.kt b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestDialogTest.kt
index 0122db6..a328d9e 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestDialogTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/controls/management/ControlsRequestDialogTest.kt
@@ -110,7 +110,6 @@
         intent.putExtra(ControlsProviderService.EXTRA_CONTROL, control)
 
         `when`(controller.currentUserId).thenReturn(USER_ID)
-        `when`(controller.available).thenReturn(true)
         `when`(listingController.getAppLabel(CONTROL_COMPONENT)).thenReturn(LABEL)
         `when`(controller.getFavoritesForComponent(CONTROL_COMPONENT)).thenReturn(emptyList())
 
@@ -142,4 +141,4 @@
             assertEquals(control.deviceType, it.deviceType)
         }
     }
-}
\ No newline at end of file
+}
diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt
index a59f45d..aa76651 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/qs/tiles/DeviceControlsTileTest.kt
@@ -105,7 +105,6 @@
         doNothing().`when`(spiedContext).startActivity(any(Intent::class.java))
         `when`(qsHost.context).thenReturn(spiedContext)
         `when`(qsHost.uiEventLogger).thenReturn(uiEventLogger)
-        `when`(controlsController.available).thenReturn(true)
         `when`(controlsComponent.isEnabled()).thenReturn(true)
         secureSettings.putInt(Settings.Secure.POWER_MENU_LOCKED_SHOW_CONTENT, 1)
 
@@ -154,14 +153,6 @@
     }
 
     @Test
-    fun testAvailableControlsSettingOff() {
-        `when`(controlsController.available).thenReturn(false)
-
-        tile = createTile()
-        assertThat(tile.isAvailable).isTrue()
-    }
-
-    @Test
     fun testObservingCallback() {
         verify(controlsListingController).observe(
                 any(LifecycleOwner::class.java),
diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImplTest.kt
index 95a363e..e9d16a6 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImplTest.kt
+++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceControlsControllerImplTest.kt
@@ -19,6 +19,7 @@
 import android.content.ComponentName
 import android.content.Context
 import android.content.pm.ServiceInfo
+import android.provider.Settings
 import android.testing.AndroidTestingRunner
 
 import androidx.test.filters.SmallTest
@@ -37,6 +38,7 @@
 import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.PREFS_CONTROLS_SEEDING_COMPLETED
 import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.QS_DEFAULT_POSITION
 import com.android.systemui.statusbar.policy.DeviceControlsControllerImpl.Companion.QS_PRIORITY_POSITION
+import com.android.systemui.util.settings.SecureSettings
 
 import java.util.Optional
 import java.util.function.Consumer
@@ -55,6 +57,7 @@
 import org.mockito.Mockito.verify
 import org.mockito.Mockito.`when`
 import org.mockito.ArgumentMatchers.anyInt
+import org.mockito.ArgumentMatchers.anyObject
 
 @SmallTest
 @RunWith(AndroidTestingRunner::class)
@@ -76,6 +79,8 @@
     private lateinit var serviceInfo: ServiceInfo
     @Mock
     private lateinit var userContextProvider: UserContextProvider
+    @Mock
+    private lateinit var secureSettings: SecureSettings
     @Captor
     private lateinit var seedCallback: ArgumentCaptor<Consumer<SeedResponse>>
 
@@ -98,7 +103,14 @@
         `when`(controlsComponent.getControlsListingController())
                 .thenReturn(Optional.of(controlsListingController))
 
-        controller = DeviceControlsControllerImpl(mContext, controlsComponent, userContextProvider)
+        controller = DeviceControlsControllerImpl(
+            mContext,
+            controlsComponent,
+            userContextProvider,
+            secureSettings
+        )
+
+        `when`(secureSettings.getInt(Settings.Secure.CONTROLS_ENABLED, 1)).thenReturn(1)
 
         `when`(serviceInfo.componentName).thenReturn(TEST_COMPONENT)
         controlsServiceInfo = ControlsServiceInfo(mContext, serviceInfo)
@@ -116,7 +128,16 @@
 
         verify(controlsListingController).addCallback(capture(listingCallbackCaptor))
         listingCallbackCaptor.value.onServicesUpdated(emptyList())
-        verify(callback, never()).onControlsAvailable(anyInt())
+        verify(callback, never()).onControlsUpdate(anyInt())
+    }
+
+    @Test
+    fun testCallbackWithNullValueWhenSettingIsDisabled() {
+        `when`(secureSettings.getInt(Settings.Secure.CONTROLS_ENABLED, 1)).thenReturn(0)
+        controller.setCallback(callback)
+
+        verify(controlsListingController, never()).addCallback(anyObject())
+        verify(callback).onControlsUpdate(null)
     }
 
     @Test
@@ -126,7 +147,7 @@
 
         verify(controlsListingController).addCallback(capture(listingCallbackCaptor))
         listingCallbackCaptor.value.onServicesUpdated(listOf(controlsServiceInfo))
-        verify(callback).onControlsAvailable(QS_PRIORITY_POSITION)
+        verify(callback).onControlsUpdate(QS_PRIORITY_POSITION)
     }
 
     @Test
@@ -146,6 +167,6 @@
             capture(seedCallback)
         )
         seedCallback.value.accept(SeedResponse(TEST_PKG, true))
-        verify(callback).onControlsAvailable(QS_DEFAULT_POSITION)
+        verify(callback).onControlsUpdate(QS_DEFAULT_POSITION)
     }
 }
