Update span count in gallery according to breakpoint.

This commit is contained in:
Alex Hart
2026-07-17 09:34:52 -03:00
committed by Cody Henthorne
parent 74f08927f2
commit 99b1fa0ebb
2 changed files with 22 additions and 3 deletions
@@ -16,6 +16,8 @@ import androidx.lifecycle.map
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.ItemTouchHelper
import org.signal.core.models.media.Media
import org.signal.core.ui.WindowBreakpoint
import org.signal.core.ui.getWindowBreakpoint
import org.signal.core.ui.permissions.Permissions
import org.signal.core.ui.util.StorageUtil
import org.signal.core.util.Stopwatch
@@ -41,6 +43,10 @@ import org.signal.core.ui.R as CoreUiR
*/
class MediaGalleryFragment : Fragment(R.layout.v2_media_gallery_fragment) {
companion object {
private const val SPAN_COUNT = 24
}
private val viewModel: MediaGalleryViewModel by viewModels(
factoryProducer = { MediaGalleryViewModel.Factory(null, null, MediaGalleryRepository(requireContext(), MediaRepository())) }
)
@@ -77,15 +83,28 @@ class MediaGalleryFragment : Fragment(R.layout.v2_media_gallery_fragment) {
height = ViewUtil.getStatusBarHeight(view)
}
binding.mediaGalleryGrid.layoutManager = object : GridLayoutManager(requireContext(), 4) {
binding.mediaGalleryGrid.layoutManager = object : GridLayoutManager(requireContext(), SPAN_COUNT) {
override fun canScrollVertically() = shouldEnableScrolling
}
val breakpoint = resources.getWindowBreakpoint()
val folderSpans = when (breakpoint) {
is WindowBreakpoint.Large -> SPAN_COUNT / 4
is WindowBreakpoint.Medium -> SPAN_COUNT / 3
is WindowBreakpoint.Small -> SPAN_COUNT / 2
}
val fileSpans = when (breakpoint) {
is WindowBreakpoint.Large -> SPAN_COUNT / 8
is WindowBreakpoint.Medium -> SPAN_COUNT / 6
is WindowBreakpoint.Small -> SPAN_COUNT / 4
}
(binding.mediaGalleryGrid.layoutManager as GridLayoutManager).spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
val isFolder: Boolean = (binding.mediaGalleryGrid.adapter as MappingAdapter).getModel(position).map { it is MediaGallerySelectableItem.FolderModel }.orElse(false)
return if (isFolder) 2 else 1
return if (isFolder) folderSpans else fileSpans
}
}
@@ -59,7 +59,7 @@
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
app:layout_constraintBottom_toTopOf="@id/media_gallery_bottom_bar_barrier"
app:layout_constraintTop_toBottomOf="@id/media_gallery_manage_container"
app:spanCount="4"
app:spanCount="24"
tools:itemCount="36"
tools:listitem="@layout/v2_media_gallery_item" />