Bug 1864074 - Create debug drawer landing page UI
parent
1c6ab5db3f
commit
3ddf06c968
@ -0,0 +1,134 @@
|
||||
/* 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.debugsettings.ui
|
||||
|
||||
import androidx.compose.foundation.background
|
||||
import androidx.compose.foundation.layout.Arrangement
|
||||
import androidx.compose.foundation.layout.Box
|
||||
import androidx.compose.foundation.layout.Row
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.foundation.layout.fillMaxWidth
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.lazy.LazyColumn
|
||||
import androidx.compose.foundation.lazy.items
|
||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||
import androidx.compose.material.Snackbar
|
||||
import androidx.compose.material.SnackbarHost
|
||||
import androidx.compose.material.SnackbarHostState
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.rememberCoroutineScope
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.LocalContext
|
||||
import androidx.compose.ui.unit.dp
|
||||
import kotlinx.coroutines.launch
|
||||
import mozilla.components.support.ktx.android.content.appName
|
||||
import mozilla.components.support.ktx.android.content.appVersionName
|
||||
import org.mozilla.fenix.compose.Divider
|
||||
import org.mozilla.fenix.compose.annotation.LightDarkPreview
|
||||
import org.mozilla.fenix.compose.inComposePreview
|
||||
import org.mozilla.fenix.compose.list.TextListItem
|
||||
import org.mozilla.fenix.theme.FirefoxTheme
|
||||
|
||||
/**
|
||||
* The home screen of the [DebugDrawer].
|
||||
*
|
||||
* @param menuItems The list of [DebugDrawerMenuItem]s.
|
||||
*/
|
||||
@Composable
|
||||
fun DebugDrawerHome(
|
||||
menuItems: List<DebugDrawerMenuItem>,
|
||||
) {
|
||||
val lazyListState = rememberLazyListState()
|
||||
|
||||
val appName: String
|
||||
val appVersion: String
|
||||
if (inComposePreview) {
|
||||
appName = "App Name Preview"
|
||||
appVersion = "100.00.000"
|
||||
} else {
|
||||
appName = LocalContext.current.appName
|
||||
appVersion = LocalContext.current.appVersionName
|
||||
}
|
||||
|
||||
LazyColumn(
|
||||
modifier = Modifier
|
||||
.fillMaxSize()
|
||||
.background(color = FirefoxTheme.colors.layer1),
|
||||
state = lazyListState,
|
||||
) {
|
||||
item(key = "home_header") {
|
||||
Row(
|
||||
modifier = Modifier
|
||||
.padding(all = 16.dp)
|
||||
.fillMaxWidth(),
|
||||
horizontalArrangement = Arrangement.SpaceBetween,
|
||||
) {
|
||||
Text(
|
||||
text = appName,
|
||||
color = FirefoxTheme.colors.textPrimary,
|
||||
style = FirefoxTheme.typography.headline5,
|
||||
)
|
||||
|
||||
Text(
|
||||
text = appVersion,
|
||||
color = FirefoxTheme.colors.textSecondary,
|
||||
style = FirefoxTheme.typography.headline5,
|
||||
)
|
||||
}
|
||||
|
||||
Divider()
|
||||
}
|
||||
|
||||
items(
|
||||
items = menuItems,
|
||||
key = { menuItem ->
|
||||
menuItem.label
|
||||
},
|
||||
) { menuItem ->
|
||||
TextListItem(
|
||||
label = menuItem.label,
|
||||
onClick = menuItem.onClick,
|
||||
)
|
||||
|
||||
Divider()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
@LightDarkPreview
|
||||
private fun DebugDrawerPreview() {
|
||||
val scope = rememberCoroutineScope()
|
||||
val snackbarState = remember { SnackbarHostState() }
|
||||
|
||||
FirefoxTheme {
|
||||
Box {
|
||||
DebugDrawerHome(
|
||||
menuItems = List(size = 30) {
|
||||
DebugDrawerMenuItem(
|
||||
label = "Navigation $it",
|
||||
onClick = {
|
||||
scope.launch {
|
||||
snackbarState.showSnackbar("$it clicked")
|
||||
}
|
||||
},
|
||||
)
|
||||
},
|
||||
)
|
||||
|
||||
SnackbarHost(
|
||||
hostState = snackbarState,
|
||||
modifier = Modifier.align(Alignment.BottomCenter),
|
||||
) { snackbarData ->
|
||||
Snackbar(
|
||||
snackbarData = snackbarData,
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
/* 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.debugsettings.ui
|
||||
|
||||
/**
|
||||
* Menu items to be presented within [DebugDrawer].
|
||||
*
|
||||
* @property label The label of the menu item.
|
||||
* @property onClick Invoked when the menu item is clicked.
|
||||
*/
|
||||
data class DebugDrawerMenuItem(
|
||||
val label: String,
|
||||
val onClick: () -> Unit,
|
||||
)
|
Loading…
Reference in New Issue