diff --git a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gallery/MediaGalleryFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gallery/MediaGalleryFragment.kt index 818197ce26..2109f5cc3e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gallery/MediaGalleryFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/mediasend/v2/gallery/MediaGalleryFragment.kt @@ -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 } } diff --git a/app/src/main/res/layout/v2_media_gallery_fragment.xml b/app/src/main/res/layout/v2_media_gallery_fragment.xml index d4c3d875eb..dbf4aaa54c 100644 --- a/app/src/main/res/layout/v2_media_gallery_fragment.xml +++ b/app/src/main/res/layout/v2_media_gallery_fragment.xml @@ -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" />