diff --git a/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt b/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt index 97c161bba..634fdff79 100644 --- a/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt +++ b/app/src/main/java/org/mozilla/fenix/settings/wallpaper/WallpaperSettings.kt @@ -11,17 +11,18 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.border import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.aspectRatio import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.GridCells -import androidx.compose.foundation.lazy.LazyVerticalGrid -import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll import androidx.compose.material.Scaffold import androidx.compose.material.Snackbar import androidx.compose.material.SnackbarDuration @@ -66,6 +67,9 @@ import java.util.Locale * * @param wallpapers Wallpapers to add to grid. * @param selectedWallpaper The currently selected wallpaper. + * @param defaultWallpaper The default wallpaper + * @param loadWallpaperResource Callback to handle loading a wallpaper bitmap. Only optional in the + * default case. * @param onSelectWallpaper Callback for when a new wallpaper is selected. * @param onViewWallpaper Callback for when the view action is clicked from snackbar. * @param tapLogoSwitchChecked Enabled state for switch controlling taps to change wallpaper. @@ -95,7 +99,7 @@ fun WallpaperSettings( } }, ) { - Column { + Column(modifier = Modifier.verticalScroll(rememberScrollState())) { WallpaperThumbnails( wallpapers = wallpapers, defaultWallpaper = defaultWallpaper, @@ -159,6 +163,9 @@ private fun WallpaperSnackbar( * A grid of selectable wallpaper thumbnails. * * @param wallpapers Wallpapers to add to grid. + * @param defaultWallpaper The default wallpaper + * @param loadWallpaperResource Callback to handle loading a wallpaper bitmap. Only optional in the + * default case. * @param selectedWallpaper The currently selected wallpaper. * @param numColumns The number of columns that will occupy the grid. * @param onSelectWallpaper Action to take when a new wallpaper is selected. @@ -175,18 +182,29 @@ private fun WallpaperThumbnails( onSelectWallpaper: (Wallpaper) -> Unit, ) { Surface(color = FirefoxTheme.colors.layer2) { - LazyVerticalGrid( - cells = GridCells.Fixed(numColumns), - modifier = Modifier.padding(vertical = 30.dp, horizontal = 20.dp) - ) { - items(wallpapers) { wallpaper -> - WallpaperThumbnailItem( - wallpaper = wallpaper, - defaultWallpaper = defaultWallpaper, - loadWallpaperResource = loadWallpaperResource, - isSelected = selectedWallpaper == wallpaper, - onSelect = onSelectWallpaper - ) + Column(modifier = Modifier.padding(vertical = 30.dp, horizontal = 20.dp)) { + val numRows = (wallpapers.size + numColumns - 1) / numColumns + for (rowIndex in 0 until numRows) { + Row { + for (columnIndex in 0 until numColumns) { + val itemIndex = rowIndex * numColumns + columnIndex + if (itemIndex < wallpapers.size) { + Box( + modifier = Modifier.weight(1f, fill = true).padding(4.dp), + ) { + WallpaperThumbnailItem( + wallpaper = wallpapers[itemIndex], + defaultWallpaper = defaultWallpaper, + loadWallpaperResource = loadWallpaperResource, + isSelected = selectedWallpaper == wallpapers[itemIndex], + onSelect = onSelectWallpaper + ) + } + } else { + Spacer(Modifier.weight(1f)) + } + } + } } } } @@ -234,7 +252,6 @@ private fun WallpaperThumbnailItem( modifier = Modifier .fillMaxWidth() .aspectRatio(aspectRatio) - .padding(4.dp) .then(border) .clickable { onSelect(wallpaper) } ) {