diff --git a/res/layout/bottom_sheet_shortcut.xml b/res/layout/bottom_sheet_shortcut.xml
index e285604..29222d3 100644
--- a/res/layout/bottom_sheet_shortcut.xml
+++ b/res/layout/bottom_sheet_shortcut.xml
@@ -24,7 +24,7 @@
     <FrameLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:background="@drawable/picker_fragment_background">
+        android:background="@drawable/floating_sheet_background2">
 
         <androidx.recyclerview.widget.RecyclerView
             android:id="@+id/quick_affordance_horizontal_list"
@@ -34,16 +34,10 @@
             android:clipToPadding="false"/>
     </FrameLayout>
 
-    <FrameLayout
-        android:layout_width="match_parent"
+    <com.android.wallpaper.picker.customization.ui.view.FloatingTabToolbar
+        android:id="@+id/floating_bar_tabs"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:paddingVertical="8dp">
-
-        <androidx.recyclerview.widget.RecyclerView
-            android:id="@id/slot_tabs"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:layout_gravity="center_horizontal"
-            android:clipToPadding="false" />
-    </FrameLayout>
+        android:layout_gravity="center_horizontal"
+        android:paddingVertical="8dp" />
 </LinearLayout>
\ No newline at end of file
diff --git a/src/com/android/wallpaper/customization/ui/binder/ShortcutBottomSheetBinder.kt b/src/com/android/wallpaper/customization/ui/binder/ShortcutBottomSheetBinder.kt
index de95fc3..f9cb688 100644
--- a/src/com/android/wallpaper/customization/ui/binder/ShortcutBottomSheetBinder.kt
+++ b/src/com/android/wallpaper/customization/ui/binder/ShortcutBottomSheetBinder.kt
@@ -19,28 +19,26 @@
 import android.app.Dialog
 import android.content.Context
 import android.view.View
-import android.view.ViewGroup
-import android.view.accessibility.AccessibilityEvent
 import android.widget.ImageView
-import androidx.core.view.AccessibilityDelegateCompat
-import androidx.core.view.ViewCompat
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleOwner
 import androidx.lifecycle.lifecycleScope
 import androidx.lifecycle.repeatOnLifecycle
 import androidx.recyclerview.widget.GridLayoutManager
-import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
-import com.android.customization.picker.common.ui.view.ItemSpacing
 import com.android.customization.picker.common.ui.view.KeyguardQuickAffordanceItemSpacing
-import com.android.customization.picker.quickaffordance.ui.adapter.SlotTabAdapter
 import com.android.themepicker.R
 import com.android.wallpaper.customization.ui.viewmodel.KeyguardQuickAffordancePickerViewModel2
 import com.android.wallpaper.picker.common.dialog.ui.viewbinder.DialogViewBinder
 import com.android.wallpaper.picker.common.dialog.ui.viewmodel.DialogViewModel
 import com.android.wallpaper.picker.common.icon.ui.viewbinder.IconViewBinder
 import com.android.wallpaper.picker.common.icon.ui.viewmodel.Icon
+import com.android.wallpaper.picker.customization.ui.view.FloatingTabToolbar
+import com.android.wallpaper.picker.customization.ui.view.FloatingTabToolbar.Tab
+import com.android.wallpaper.picker.customization.ui.view.FloatingTabToolbar.Tab.PRIMARY
+import com.android.wallpaper.picker.customization.ui.view.FloatingTabToolbar.Tab.SECONDARY
 import com.android.wallpaper.picker.option.ui.adapter.OptionItemAdapter
+import com.android.wallpaper.picker.option.ui.viewmodel.OptionItemViewModel
 import kotlinx.coroutines.ExperimentalCoroutinesApi
 import kotlinx.coroutines.flow.collectIndexed
 import kotlinx.coroutines.flow.combine
@@ -57,52 +55,13 @@
         viewModel: KeyguardQuickAffordancePickerViewModel2,
         lifecycleOwner: LifecycleOwner,
     ) {
-        val quickAffordanceAdapter =
-            OptionItemAdapter(
-                layoutResourceId = R.layout.quick_affordance_list_item,
-                lifecycleOwner = lifecycleOwner,
-                bindIcon = { foregroundView: View, gridIcon: Icon ->
-                    val imageView = foregroundView as? ImageView
-                    imageView?.let { IconViewBinder.bind(imageView, gridIcon) }
-                },
-            )
+        val quickAffordanceAdapter = createOptionItemAdapter(lifecycleOwner)
         val quickAffordanceList =
-            view.requireViewById<RecyclerView>(R.id.quick_affordance_horizontal_list).apply {
-                adapter = quickAffordanceAdapter
-                layoutManager =
-                    GridLayoutManager(
-                        view.context.applicationContext,
-                        2,
-                        GridLayoutManager.HORIZONTAL,
-                        false
-                    )
-                addItemDecoration(KeyguardQuickAffordanceItemSpacing())
+            view.requireViewById<RecyclerView>(R.id.quick_affordance_horizontal_list).also {
+                it.initQuickAffordanceList(view.context.applicationContext, quickAffordanceAdapter)
             }
-        val slotTabAdapter = SlotTabAdapter()
-        val slotTabView: RecyclerView =
-            view.requireViewById<RecyclerView>(R.id.slot_tabs).apply {
-                adapter = slotTabAdapter
-                layoutManager = LinearLayoutManager(view.context, RecyclerView.HORIZONTAL, false)
-                addItemDecoration(ItemSpacing(ItemSpacing.TAB_ITEM_SPACING_DP))
-            }
-        // Setting a custom accessibility delegate so that the default content descriptions
-        // for items in a list aren't announced (for left & right shortcuts). We populate
-        // the content description for these shortcuts later on with the right (expected)
-        // values.
-        val slotTabViewDelegate: AccessibilityDelegateCompat =
-            object : AccessibilityDelegateCompat() {
-                override fun onRequestSendAccessibilityEvent(
-                    host: ViewGroup,
-                    child: View,
-                    event: AccessibilityEvent
-                ): Boolean {
-                    if (event.eventType != AccessibilityEvent.TYPE_VIEW_FOCUSED) {
-                        child.contentDescription = null
-                    }
-                    return super.onRequestSendAccessibilityEvent(host, child, event)
-                }
-            }
-        ViewCompat.setAccessibilityDelegate(slotTabView, slotTabViewDelegate)
+
+        val tabs = view.requireViewById<FloatingTabToolbar>(R.id.floating_bar_tabs)
 
         var dialog: Dialog? = null
 
@@ -111,7 +70,24 @@
                 launch {
                     viewModel.slots
                         .map { slotById -> slotById.values }
-                        .collect { slots -> slotTabAdapter.setItems(slots.toList()) }
+                        .collect { slots ->
+                            val list = slots.toList()
+                            list.mapIndexed { index, slot ->
+                                val tab = if (index == 0) PRIMARY else SECONDARY
+                                tabs.setSelectedAffordances(tab, slot.selectedQuickAffordances)
+                                tabs.setTabText(tab, slot.name)
+                                tabs.setOnTabClick(tab, slot.onClicked)
+                            }
+                            list
+                                .indexOfFirst { it.isSelected }
+                                .let {
+                                    if (it == 0) {
+                                        tabs.setTabSelected(PRIMARY)
+                                    } else if (it == 1) {
+                                        tabs.setTabSelected(SECONDARY)
+                                    }
+                                }
+                        }
                 }
 
                 launch {
@@ -184,4 +160,48 @@
             onDismissed = onDismissed,
         )
     }
+
+    private fun createOptionItemAdapter(lifecycleOwner: LifecycleOwner): OptionItemAdapter<Icon> =
+        OptionItemAdapter(
+            layoutResourceId = R.layout.quick_affordance_list_item,
+            lifecycleOwner = lifecycleOwner,
+            bindIcon = { foregroundView: View, gridIcon: Icon ->
+                val imageView = foregroundView as? ImageView
+                imageView?.let { IconViewBinder.bind(imageView, gridIcon) }
+            },
+        )
+
+    private fun RecyclerView.initQuickAffordanceList(
+        context: Context,
+        adapter: OptionItemAdapter<Icon>
+    ) {
+        apply {
+            this.adapter = adapter
+            layoutManager =
+                GridLayoutManager(
+                    context,
+                    2,
+                    GridLayoutManager.HORIZONTAL,
+                    false,
+                )
+            addItemDecoration(KeyguardQuickAffordanceItemSpacing())
+        }
+    }
+
+    private fun FloatingTabToolbar.setSelectedAffordances(
+        tab: Tab,
+        selectedQuickAffordances: List<OptionItemViewModel<Icon>>,
+    ) {
+        val icon =
+            selectedQuickAffordances.firstOrNull()?.payload
+                ?: Icon.Resource(res = R.drawable.link_off, contentDescription = null)
+        IconViewBinder.bind(
+            if (tab == PRIMARY) {
+                this.primaryIcon
+            } else {
+                this.secondaryIcon
+            },
+            icon,
+        )
+    }
 }
