You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
5.0 KiB
Kotlin
136 lines
5.0 KiB
Kotlin
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.fenix.wallpapers
|
|
|
|
import android.graphics.Bitmap
|
|
import androidx.compose.foundation.clickable
|
|
import androidx.compose.foundation.layout.Column
|
|
import androidx.compose.foundation.layout.Spacer
|
|
import androidx.compose.foundation.layout.fillMaxWidth
|
|
import androidx.compose.foundation.layout.height
|
|
import androidx.compose.foundation.layout.padding
|
|
import androidx.compose.foundation.layout.size
|
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
|
import androidx.compose.material.ExperimentalMaterialApi
|
|
import androidx.compose.material.Icon
|
|
import androidx.compose.material.Surface
|
|
import androidx.compose.material.Text
|
|
import androidx.compose.material.TextButton
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.ui.Alignment
|
|
import androidx.compose.ui.Modifier
|
|
import androidx.compose.ui.res.painterResource
|
|
import androidx.compose.ui.res.stringResource
|
|
import androidx.compose.ui.text.style.TextOverflow
|
|
import androidx.compose.ui.tooling.preview.Preview
|
|
import androidx.compose.ui.unit.dp
|
|
import org.mozilla.fenix.R
|
|
import org.mozilla.fenix.settings.wallpaper.WallpaperThumbnails
|
|
import org.mozilla.fenix.theme.FirefoxTheme
|
|
|
|
/**
|
|
* A view that shows content of a WallpaperOnboarding dialog.
|
|
*
|
|
* @param wallpapers Wallpapers to add to grid.
|
|
* @param currentWallpaper The currently selected wallpaper.
|
|
* @param loadWallpaperResource Callback to handle loading a wallpaper bitmap. Only optional in the default case.
|
|
* @param onCloseClicked Callback for when the close button is clicked.
|
|
* @param onExploreMoreButtonClicked Callback for when the bottom text button is clicked.
|
|
* @param onSelectWallpaper Callback for when a new wallpaper is selected.
|
|
*/
|
|
@ExperimentalMaterialApi
|
|
@Composable
|
|
fun WallpaperOnboarding(
|
|
wallpapers: List<Wallpaper>,
|
|
currentWallpaper: Wallpaper,
|
|
loadWallpaperResource: suspend (Wallpaper) -> Bitmap?,
|
|
onCloseClicked: () -> Unit,
|
|
onExploreMoreButtonClicked: () -> Unit,
|
|
onSelectWallpaper: (Wallpaper) -> Unit,
|
|
) {
|
|
Surface(
|
|
color = FirefoxTheme.colors.layer2,
|
|
shape = RoundedCornerShape(topStart = 8.dp, topEnd = 8.dp),
|
|
) {
|
|
Column(
|
|
modifier = Modifier.padding(horizontal = 32.dp, vertical = 16.dp),
|
|
horizontalAlignment = Alignment.CenterHorizontally,
|
|
) {
|
|
Icon(
|
|
painter = painterResource(id = R.drawable.mozac_ic_cross_24),
|
|
contentDescription = stringResource(id = R.string.close_tab),
|
|
tint = FirefoxTheme.colors.iconPrimary,
|
|
modifier = Modifier
|
|
.clickable { onCloseClicked() }
|
|
.size(24.dp)
|
|
.align(Alignment.End),
|
|
)
|
|
|
|
Spacer(modifier = Modifier.height(8.dp))
|
|
|
|
Text(
|
|
text = stringResource(R.string.wallpapers_onboarding_dialog_title_text),
|
|
color = FirefoxTheme.colors.textPrimary,
|
|
overflow = TextOverflow.Ellipsis,
|
|
maxLines = 1,
|
|
style = FirefoxTheme.typography.headline7,
|
|
)
|
|
|
|
Spacer(modifier = Modifier.height(4.dp))
|
|
|
|
Text(
|
|
text = stringResource(R.string.wallpapers_onboarding_dialog_body_text),
|
|
color = FirefoxTheme.colors.textSecondary,
|
|
overflow = TextOverflow.Ellipsis,
|
|
maxLines = 1,
|
|
style = FirefoxTheme.typography.caption,
|
|
)
|
|
|
|
Spacer(modifier = Modifier.height(16.dp))
|
|
|
|
WallpaperThumbnails(
|
|
wallpapers = wallpapers,
|
|
defaultWallpaper = Wallpaper.Default,
|
|
selectedWallpaper = currentWallpaper,
|
|
loadWallpaperResource = { loadWallpaperResource(it) },
|
|
onSelectWallpaper = { onSelectWallpaper(it) },
|
|
)
|
|
|
|
Spacer(modifier = Modifier.height(16.dp))
|
|
|
|
TextButton(
|
|
modifier = Modifier
|
|
.align(Alignment.CenterHorizontally)
|
|
.fillMaxWidth(),
|
|
onClick = { onExploreMoreButtonClicked() },
|
|
) {
|
|
Text(
|
|
text = stringResource(R.string.wallpapers_onboarding_dialog_explore_more_button_text),
|
|
color = FirefoxTheme.colors.textAccent,
|
|
overflow = TextOverflow.Ellipsis,
|
|
maxLines = 1,
|
|
style = FirefoxTheme.typography.button,
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
@Preview
|
|
@ExperimentalMaterialApi
|
|
@Composable
|
|
private fun WallpaperSnackbarPreview() {
|
|
FirefoxTheme {
|
|
WallpaperOnboarding(
|
|
wallpapers = listOf(Wallpaper.Default),
|
|
currentWallpaper = Wallpaper.Default,
|
|
onCloseClicked = {},
|
|
onExploreMoreButtonClicked = {},
|
|
loadWallpaperResource = { null },
|
|
onSelectWallpaper = {},
|
|
)
|
|
}
|
|
}
|