[fenix] closes https://github.com/mozilla-mobile/fenix/issues/23662: replace wallpaper thumbnail lazyverticalgrid with manual scroll layout

pull/600/head
Matt Tighe 3 years ago committed by mergify[bot]
parent a08875d995
commit e83a0167a2

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

Loading…
Cancel
Save