@@ -11,6 +11,7 @@ import androidx.core.view.isInvisible
1111import androidx.core.view.isVisible
1212import androidx.core.widget.doOnTextChanged
1313import androidx.fragment.app.viewModels
14+ import androidx.recyclerview.widget.GridLayoutManager
1415import androidx.recyclerview.widget.ItemTouchHelper
1516import androidx.recyclerview.widget.LinearLayoutManager
1617import androidx.recyclerview.widget.RecyclerView
@@ -42,12 +43,19 @@ class AssistantSelectorBottomSheet : BaseBottomSheet<FragmentAssistantDialogBind
4243
4344 override fun onViewCreated (view : View , savedInstanceState : Bundle ? ) {
4445 super .onViewCreated(view, savedInstanceState)
46+ setupTitle()
4547 setupRecyclerView()
4648 setupObservers()
4749 setupSearch()
4850 setupReorder()
4951 }
5052
53+ private fun setupTitle () {
54+ val isTitleVisible =
55+ preferenceHelper.getBoolean(Constants .ASSISTANT_SELECTOR_TITLE_PREF_KEY , true )
56+ titleTextView.isVisible = isTitleVisible
57+ }
58+
5159 private fun setupSearch () {
5260 val isSearchBarEnabled =
5361 preferenceHelper.getBoolean(Constants .ASSISTANT_SEARCH_BAR_PREF_KEY , true )
@@ -62,6 +70,7 @@ class AssistantSelectorBottomSheet : BaseBottomSheet<FragmentAssistantDialogBind
6270 }
6371
6472 private fun setupRecyclerView () {
73+ val isGridMode = preferenceHelper.getBoolean(Constants .ASSISTANT_GRID_VIEW_PREF_KEY , false )
6574 assistantSelectorAdapter = AssistantSelectorAdapter (onAssistantClicked = { assistantKey ->
6675 openAssistant(assistantKey)
6776 viewModel.updateRecentlyUsedAssistants(assistantKey)
@@ -70,9 +79,51 @@ class AssistantSelectorBottomSheet : BaseBottomSheet<FragmentAssistantDialogBind
7079 viewModel.togglePinAssistant(assistantKey)
7180 }, onDismissTipClicked = {
7281 viewModel.dismissReorderTip()
73- })
82+ }, isGridMode = isGridMode )
7483 binding.assistantsRecyclerView.apply {
75- layoutManager = LinearLayoutManager (context)
84+ if (isGridMode) {
85+ val isLandscape = resources.configuration.orientation ==
86+ android.content.res.Configuration .ORIENTATION_LANDSCAPE
87+ val userPref = if (isLandscape) {
88+ preferenceHelper.getString(
89+ Constants .ASSISTANT_GRID_COLUMNS_LAND_PREF_KEY , " 0"
90+ )?.toIntOrNull() ? : 0
91+ } else {
92+ preferenceHelper.getString(
93+ Constants .ASSISTANT_GRID_COLUMNS_PREF_KEY , " 0"
94+ )?.toIntOrNull() ? : 0
95+ }
96+ val autoSpan = run {
97+ val isLowDensity = resources.displayMetrics.densityDpi <=
98+ android.util.DisplayMetrics .DENSITY_MEDIUM
99+ when {
100+ isLandscape && isLowDensity -> 3
101+ isLandscape -> 4
102+ isLowDensity -> 2
103+ else -> 3
104+ }
105+ }
106+ val spanCount = if (userPref > 0 ) userPref else autoSpan
107+ val gridLayoutManager = GridLayoutManager (context, spanCount)
108+ gridLayoutManager.spanSizeLookup = object : GridLayoutManager .SpanSizeLookup () {
109+ override fun getSpanSize (position : Int ): Int {
110+ return when (assistantSelectorAdapter.getItemViewType(position)) {
111+ Constants .VIEW_TYPE_ASSISTANT_GRID_ITEM -> 1
112+ else -> spanCount
113+ }
114+ }
115+ }
116+ val tv = android.util.TypedValue ()
117+ context.theme.resolveAttribute(android.R .attr.dialogPreferredPadding, tv, true )
118+ val dialogPadding = android.util.TypedValue .complexToDimensionPixelSize(tv.data, resources.displayMetrics)
119+ val itemMargin = (3 * resources.displayMetrics.density).toInt()
120+ val horizontalPadding = dialogPadding - itemMargin
121+ setPadding(horizontalPadding, 0 , horizontalPadding, paddingBottom)
122+ scrollBarStyle = View .SCROLLBARS_OUTSIDE_INSET
123+ layoutManager = gridLayoutManager
124+ } else {
125+ layoutManager = LinearLayoutManager (context)
126+ }
76127 adapter = assistantSelectorAdapter
77128 }
78129 }
@@ -120,7 +171,9 @@ class AssistantSelectorBottomSheet : BaseBottomSheet<FragmentAssistantDialogBind
120171 private class PinnedItemReorderCallback (
121172 private val adapter : AssistantSelectorAdapter ,
122173 private val onReorderFinished : (List <AssistantItem >) -> Unit
123- ) : ItemTouchHelper.SimpleCallback(ItemTouchHelper .UP or ItemTouchHelper .DOWN , 0 ) {
174+ ) : ItemTouchHelper.SimpleCallback(
175+ ItemTouchHelper .UP or ItemTouchHelper .DOWN or ItemTouchHelper .LEFT or ItemTouchHelper .RIGHT , 0
176+ ) {
124177
125178 override fun getDragDirs (
126179 recyclerView : RecyclerView , viewHolder : RecyclerView .ViewHolder
0 commit comments