diff --git a/src/com/android/customization/module/ThemePickerInjector.kt b/src/com/android/customization/module/ThemePickerInjector.kt
index ab6b673..2d932b8 100644
--- a/src/com/android/customization/module/ThemePickerInjector.kt
+++ b/src/com/android/customization/module/ThemePickerInjector.kt
@@ -157,7 +157,9 @@
                     getKeyguardQuickAffordancePickerInteractor(context),
                     getUndoInteractor(context),
                     getCurrentWallpaperInfoFactory(context),
-                )
+                ) { intent ->
+                    context.startActivity(intent)
+                }
                 .also { keyguardQuickAffordancePickerViewModelFactory = it }
     }
 
diff --git a/src/com/android/customization/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepository.kt b/src/com/android/customization/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepository.kt
index fd553fe..c432bd9 100644
--- a/src/com/android/customization/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepository.kt
+++ b/src/com/android/customization/picker/quickaffordance/data/repository/KeyguardQuickAffordancePickerRepository.kt
@@ -83,6 +83,7 @@
             enablementInstructions = enablementInstructions ?: emptyList(),
             enablementActionText = enablementActionText,
             enablementActionComponentName = enablementActionComponentName,
+            configureIntent = configureIntent,
         )
     }
 
diff --git a/src/com/android/customization/picker/quickaffordance/shared/model/KeyguardQuickAffordancePickerAffordanceModel.kt b/src/com/android/customization/picker/quickaffordance/shared/model/KeyguardQuickAffordancePickerAffordanceModel.kt
index 1b18af7..7b04ff1 100644
--- a/src/com/android/customization/picker/quickaffordance/shared/model/KeyguardQuickAffordancePickerAffordanceModel.kt
+++ b/src/com/android/customization/picker/quickaffordance/shared/model/KeyguardQuickAffordancePickerAffordanceModel.kt
@@ -17,6 +17,7 @@
 
 package com.android.customization.picker.quickaffordance.shared.model
 
+import android.content.Intent
 import androidx.annotation.DrawableRes
 
 /** Models a quick affordance. */
@@ -42,4 +43,6 @@
      * user to a destination where they can re-enable it.
      */
     val enablementActionComponentName: String?,
+    /** Optional [Intent] to use to start an activity to configure this affordance. */
+    val configureIntent: Intent?,
 )
diff --git a/src/com/android/customization/picker/quickaffordance/ui/adapter/AffordancesAdapter.kt b/src/com/android/customization/picker/quickaffordance/ui/adapter/AffordancesAdapter.kt
index b0dc350..e11643a 100644
--- a/src/com/android/customization/picker/quickaffordance/ui/adapter/AffordancesAdapter.kt
+++ b/src/com/android/customization/picker/quickaffordance/ui/adapter/AffordancesAdapter.kt
@@ -74,6 +74,15 @@
                 null
             }
         )
+        holder.itemView.onLongClickListener =
+            if (item.onLongClicked != null) {
+                View.OnLongClickListener {
+                    item.onLongClicked.invoke()
+                    true
+                }
+            } else {
+                null
+            }
         holder.iconContainerView.setBackgroundResource(
             if (item.isSelected) {
                 R.drawable.keyguard_quick_affordance_icon_container_background_selected
diff --git a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
index d879045..1b3dbe3 100644
--- a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
+++ b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModel.kt
@@ -54,6 +54,7 @@
     private val quickAffordanceInteractor: KeyguardQuickAffordancePickerInteractor,
     undoInteractor: UndoInteractor,
     private val wallpaperInfoFactory: CurrentWallpaperInfoFactory,
+    activityStarter: (Intent) -> Unit,
 ) : ViewModel() {
 
     @SuppressLint("StaticFieldLeak") private val applicationContext = context.applicationContext
@@ -129,6 +130,7 @@
                                         contentDescription = affordanceModel.name,
                                         isSelected = true,
                                         onClicked = null,
+                                        onLongClicked = null,
                                         isEnabled = affordanceModel.isEnabled,
                                     )
                                 },
@@ -201,6 +203,12 @@
                                     )
                                 }
                             },
+                        onLongClicked =
+                            if (affordance.configureIntent != null) {
+                                { activityStarter(affordance.configureIntent) }
+                            } else {
+                                null
+                            },
                         isEnabled = affordance.isEnabled,
                     )
                 }
@@ -374,6 +382,7 @@
         private val quickAffordanceInteractor: KeyguardQuickAffordancePickerInteractor,
         private val undoInteractor: UndoInteractor,
         private val wallpaperInfoFactory: CurrentWallpaperInfoFactory,
+        private val activityStarter: (Intent) -> Unit,
     ) : ViewModelProvider.Factory {
         override fun <T : ViewModel> create(modelClass: Class<T>): T {
             @Suppress("UNCHECKED_CAST")
@@ -382,6 +391,7 @@
                 quickAffordanceInteractor = quickAffordanceInteractor,
                 undoInteractor = undoInteractor,
                 wallpaperInfoFactory = wallpaperInfoFactory,
+                activityStarter = activityStarter,
             )
                 as T
         }
diff --git a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt
index d720b0c..8f6d327 100644
--- a/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt
+++ b/src/com/android/customization/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordanceViewModel.kt
@@ -38,6 +38,9 @@
 
     /** Notifies that the quick affordance has been clicked by the user. */
     val onClicked: (() -> Unit)?,
+
+    /** Notifies that the quick affordance has been long-clicked by the user. */
+    val onLongClicked: (() -> Unit)?,
 ) {
     companion object {
         @SuppressLint("UseCompatLoadingForDrawables")
@@ -56,6 +59,7 @@
                     } else {
                         onSelected
                     },
+                onLongClicked = null,
                 isEnabled = true,
             )
         }
diff --git a/tests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt b/tests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt
index d1214c1..cf09f9b 100644
--- a/tests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt
+++ b/tests/src/com/android/customization/model/picker/quickaffordance/ui/viewmodel/KeyguardQuickAffordancePickerViewModelTest.kt
@@ -18,6 +18,7 @@
 package com.android.customization.model.picker.quickaffordance.ui.viewmodel
 
 import android.content.Context
+import android.content.Intent
 import androidx.test.filters.SmallTest
 import androidx.test.platform.app.InstrumentationRegistry
 import com.android.customization.picker.quickaffordance.data.repository.KeyguardQuickAffordancePickerRepository
@@ -65,6 +66,8 @@
     private lateinit var client: FakeCustomizationProviderClient
     private lateinit var quickAffordanceInteractor: KeyguardQuickAffordancePickerInteractor
 
+    private var latestStartedActivityIntent: Intent? = null
+
     @Before
     fun setUp() {
         InjectorProvider.setInjector(TestInjector())
@@ -102,6 +105,7 @@
                     quickAffordanceInteractor = quickAffordanceInteractor,
                     undoInteractor = undoInteractor,
                     wallpaperInfoFactory = TestCurrentWallpaperInfoFactory(context),
+                    activityStarter = { intent -> latestStartedActivityIntent = intent },
                 )
                 .create(KeyguardQuickAffordancePickerViewModel::class.java)
     }
@@ -273,6 +277,30 @@
         }
 
     @Test
+    fun `Start settings activity when long-pressing an affordance`() =
+        testScope.runTest {
+            val quickAffordances = collectLastValue(underTest.quickAffordances)
+
+            // Lets add a configurable affordance to the picker:
+            val configureIntent = Intent("some.action")
+            val affordanceIndex =
+                client.addAffordance(
+                    CustomizationProviderClient.Affordance(
+                        id = "affordance",
+                        name = "affordance",
+                        iconResourceId = 1,
+                        isEnabled = true,
+                        configureIntent = configureIntent,
+                    )
+                )
+
+            // Lets try to long-click the affordance:
+            quickAffordances()?.get(affordanceIndex + 1)?.onLongClicked?.invoke()
+
+            assertThat(latestStartedActivityIntent).isEqualTo(configureIntent)
+        }
+
+    @Test
     fun `summary - affordance selected in both bottom-start and bottom-end`() =
         testScope.runTest {
             val slots = collectLastValue(underTest.slots)
