Bug 1840210 - Rename mozac_ic_close to mozac_ic_cross_24
[gecko.git] / mobile / android / fenix / app / src / main / java / org / mozilla / fenix / wallpapers / WallpaperOnboarding.kt
blob916d34e553f4c2bb36282b1ea25808fae14e920e
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 package org.mozilla.fenix.wallpapers
7 import android.graphics.Bitmap
8 import androidx.compose.foundation.clickable
9 import androidx.compose.foundation.layout.Column
10 import androidx.compose.foundation.layout.Spacer
11 import androidx.compose.foundation.layout.fillMaxWidth
12 import androidx.compose.foundation.layout.height
13 import androidx.compose.foundation.layout.padding
14 import androidx.compose.foundation.layout.size
15 import androidx.compose.foundation.shape.RoundedCornerShape
16 import androidx.compose.material.ExperimentalMaterialApi
17 import androidx.compose.material.Icon
18 import androidx.compose.material.Surface
19 import androidx.compose.material.Text
20 import androidx.compose.material.TextButton
21 import androidx.compose.runtime.Composable
22 import androidx.compose.ui.Alignment
23 import androidx.compose.ui.Modifier
24 import androidx.compose.ui.res.painterResource
25 import androidx.compose.ui.res.stringResource
26 import androidx.compose.ui.text.style.TextOverflow
27 import androidx.compose.ui.tooling.preview.Preview
28 import androidx.compose.ui.unit.dp
29 import org.mozilla.fenix.R
30 import org.mozilla.fenix.settings.wallpaper.WallpaperThumbnails
31 import org.mozilla.fenix.theme.FirefoxTheme
33 /**
34  * A view that shows content of a WallpaperOnboarding dialog.
35  *
36  * @param wallpapers Wallpapers to add to grid.
37  * @param currentWallpaper The currently selected wallpaper.
38  * @param loadWallpaperResource Callback to handle loading a wallpaper bitmap. Only optional in the default case.
39  * @param onCloseClicked Callback for when the close button is clicked.
40  * @param onExploreMoreButtonClicked Callback for when the bottom text button is clicked.
41  * @param onSelectWallpaper Callback for when a new wallpaper is selected.
42  */
44 @Suppress("LongParameterList")
45 @ExperimentalMaterialApi
46 @Composable
47 fun WallpaperOnboarding(
48     wallpapers: List<Wallpaper>,
49     currentWallpaper: Wallpaper,
50     loadWallpaperResource: suspend (Wallpaper) -> Bitmap?,
51     onCloseClicked: () -> Unit,
52     onExploreMoreButtonClicked: () -> Unit,
53     onSelectWallpaper: (Wallpaper) -> Unit,
54 ) {
55     Surface(
56         color = FirefoxTheme.colors.layer2,
57         shape = RoundedCornerShape(topStart = 8.dp, topEnd = 8.dp),
58     ) {
59         Column(
60             modifier = Modifier.padding(horizontal = 32.dp, vertical = 16.dp),
61             horizontalAlignment = Alignment.CenterHorizontally,
62         ) {
63             Icon(
64                 painter = painterResource(id = R.drawable.mozac_ic_cross_24),
65                 contentDescription = stringResource(id = R.string.close_tab),
66                 tint = FirefoxTheme.colors.iconPrimary,
67                 modifier = Modifier
68                     .clickable { onCloseClicked() }
69                     .size(24.dp)
70                     .align(Alignment.End),
71             )
73             Spacer(modifier = Modifier.height(8.dp))
75             Text(
76                 text = stringResource(R.string.wallpapers_onboarding_dialog_title_text),
77                 color = FirefoxTheme.colors.textPrimary,
78                 overflow = TextOverflow.Ellipsis,
79                 maxLines = 1,
80                 style = FirefoxTheme.typography.headline7,
81             )
83             Spacer(modifier = Modifier.height(4.dp))
85             Text(
86                 text = stringResource(R.string.wallpapers_onboarding_dialog_body_text),
87                 color = FirefoxTheme.colors.textSecondary,
88                 overflow = TextOverflow.Ellipsis,
89                 maxLines = 1,
90                 style = FirefoxTheme.typography.caption,
91             )
93             Spacer(modifier = Modifier.height(16.dp))
95             WallpaperThumbnails(
96                 wallpapers = wallpapers,
97                 defaultWallpaper = Wallpaper.Default,
98                 selectedWallpaper = currentWallpaper,
99                 loadWallpaperResource = { loadWallpaperResource(it) },
100                 onSelectWallpaper = { onSelectWallpaper(it) },
101             )
103             Spacer(modifier = Modifier.height(16.dp))
105             TextButton(
106                 modifier = Modifier
107                     .align(Alignment.CenterHorizontally)
108                     .fillMaxWidth(),
109                 onClick = { onExploreMoreButtonClicked() },
110             ) {
111                 Text(
112                     text = stringResource(R.string.wallpapers_onboarding_dialog_explore_more_button_text),
113                     color = FirefoxTheme.colors.textAccent,
114                     overflow = TextOverflow.Ellipsis,
115                     maxLines = 1,
116                     style = FirefoxTheme.typography.button,
117                 )
118             }
119         }
120     }
123 @Preview
124 @ExperimentalMaterialApi
125 @Composable
126 private fun WallpaperSnackbarPreview() {
127     FirefoxTheme {
128         WallpaperOnboarding(
129             wallpapers = listOf(Wallpaper.Default),
130             currentWallpaper = Wallpaper.Default,
131             onCloseClicked = {},
132             onExploreMoreButtonClicked = {},
133             loadWallpaperResource = { null },
134             onSelectWallpaper = {},
135         )
136     }