|
|
|
@ -4,27 +4,126 @@
|
|
|
|
|
|
|
|
|
|
package org.mozilla.fenix.debugsettings.ui
|
|
|
|
|
|
|
|
|
|
import androidx.compose.foundation.background
|
|
|
|
|
import androidx.compose.foundation.layout.Box
|
|
|
|
|
import androidx.compose.foundation.layout.Column
|
|
|
|
|
import androidx.compose.foundation.layout.fillMaxSize
|
|
|
|
|
import androidx.compose.material.Icon
|
|
|
|
|
import androidx.compose.material.IconButton
|
|
|
|
|
import androidx.compose.material.Text
|
|
|
|
|
import androidx.compose.material.TopAppBar
|
|
|
|
|
import androidx.compose.runtime.Composable
|
|
|
|
|
import androidx.compose.runtime.getValue
|
|
|
|
|
import androidx.compose.runtime.mutableStateOf
|
|
|
|
|
import androidx.compose.runtime.remember
|
|
|
|
|
import androidx.compose.runtime.setValue
|
|
|
|
|
import androidx.compose.ui.Modifier
|
|
|
|
|
import androidx.compose.ui.res.painterResource
|
|
|
|
|
import androidx.compose.ui.res.stringResource
|
|
|
|
|
import androidx.compose.ui.unit.dp
|
|
|
|
|
import androidx.navigation.NavHostController
|
|
|
|
|
import androidx.navigation.compose.NavHost
|
|
|
|
|
import androidx.navigation.compose.composable
|
|
|
|
|
import androidx.navigation.compose.rememberNavController
|
|
|
|
|
import org.mozilla.fenix.R
|
|
|
|
|
import org.mozilla.fenix.compose.annotation.LightDarkPreview
|
|
|
|
|
import org.mozilla.fenix.theme.FirefoxTheme
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The debug drawer UI.
|
|
|
|
|
*
|
|
|
|
|
* @param navController [NavHostController] used to perform navigation actions on the [NavHost].
|
|
|
|
|
* @param onBackButtonClick Invoked when the user taps on the back button in the app bar.
|
|
|
|
|
*/
|
|
|
|
|
@Composable
|
|
|
|
|
fun DebugDrawer() {
|
|
|
|
|
DebugDrawerHome(
|
|
|
|
|
menuItems = emptyList(),
|
|
|
|
|
)
|
|
|
|
|
fun DebugDrawer(
|
|
|
|
|
navController: NavHostController,
|
|
|
|
|
onBackButtonClick: () -> Unit,
|
|
|
|
|
) {
|
|
|
|
|
var backButtonVisible by remember { mutableStateOf(false) }
|
|
|
|
|
var toolbarTitle by remember { mutableStateOf("") }
|
|
|
|
|
|
|
|
|
|
// This is temporary until https://bugzilla.mozilla.org/show_bug.cgi?id=1864076
|
|
|
|
|
val homeMenuItems = List(size = 5) {
|
|
|
|
|
DebugDrawerMenuItem(
|
|
|
|
|
label = "Screen $it",
|
|
|
|
|
onClick = {
|
|
|
|
|
navController.navigate("screen_$it")
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Column(modifier = Modifier.fillMaxSize()) {
|
|
|
|
|
TopAppBar(
|
|
|
|
|
title = {
|
|
|
|
|
Text(
|
|
|
|
|
text = toolbarTitle,
|
|
|
|
|
color = FirefoxTheme.colors.textPrimary,
|
|
|
|
|
style = FirefoxTheme.typography.headline6,
|
|
|
|
|
)
|
|
|
|
|
},
|
|
|
|
|
navigationIcon = if (backButtonVisible) {
|
|
|
|
|
topBarBackButton(onClick = onBackButtonClick)
|
|
|
|
|
} else {
|
|
|
|
|
null
|
|
|
|
|
},
|
|
|
|
|
backgroundColor = FirefoxTheme.colors.layer1,
|
|
|
|
|
elevation = 5.dp,
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
NavHost(
|
|
|
|
|
navController = navController,
|
|
|
|
|
startDestination = "home",
|
|
|
|
|
modifier = Modifier.fillMaxSize(),
|
|
|
|
|
) {
|
|
|
|
|
composable(route = "home") {
|
|
|
|
|
toolbarTitle = stringResource(id = R.string.debug_drawer_title)
|
|
|
|
|
backButtonVisible = false
|
|
|
|
|
|
|
|
|
|
DebugDrawerHome(menuItems = homeMenuItems)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
homeMenuItems.forEachIndexed { index, item ->
|
|
|
|
|
composable(route = "screen_$index") {
|
|
|
|
|
toolbarTitle = item.label
|
|
|
|
|
backButtonVisible = true
|
|
|
|
|
Text(
|
|
|
|
|
text = "Screen $index",
|
|
|
|
|
color = FirefoxTheme.colors.textPrimary,
|
|
|
|
|
style = FirefoxTheme.typography.headline6,
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Composable
|
|
|
|
|
private fun topBarBackButton(onClick: () -> Unit): @Composable () -> Unit = {
|
|
|
|
|
IconButton(
|
|
|
|
|
onClick = onClick,
|
|
|
|
|
) {
|
|
|
|
|
Icon(
|
|
|
|
|
painter = painterResource(R.drawable.mozac_ic_back_24),
|
|
|
|
|
contentDescription = stringResource(R.string.debug_drawer_back_button_content_description),
|
|
|
|
|
tint = FirefoxTheme.colors.iconPrimary,
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Composable
|
|
|
|
|
@LightDarkPreview
|
|
|
|
|
private fun DebugDrawerPreview() {
|
|
|
|
|
val navController = rememberNavController()
|
|
|
|
|
|
|
|
|
|
FirefoxTheme {
|
|
|
|
|
Box {
|
|
|
|
|
DebugDrawer()
|
|
|
|
|
Box(modifier = Modifier.background(color = FirefoxTheme.colors.layer1)) {
|
|
|
|
|
DebugDrawer(
|
|
|
|
|
navController = navController,
|
|
|
|
|
onBackButtonClick = {
|
|
|
|
|
navController.popBackStack()
|
|
|
|
|
},
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|