diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/utils/PreviewUtils.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/utils/PreviewUtils.kt index a9374d50166803cb6e16ed37fba342730f5035a3..a0ccb0b221a51a854a2498f063881ce033159b23 100644 --- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/utils/PreviewUtils.kt +++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/utils/PreviewUtils.kt @@ -28,7 +28,6 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.foundation.layout.wrapContentSize import androidx.compose.foundation.text.BasicTextField import androidx.compose.material.DropdownMenu import androidx.compose.material.DropdownMenuItem @@ -39,22 +38,24 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Done import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import androidx.compose.ui.window.singleWindowApplication import org.briarproject.bramble.api.UniqueId +import org.briarproject.briar.desktop.settings.UnencryptedSettings import org.briarproject.briar.desktop.theme.BriarTheme import org.briarproject.briar.desktop.ui.LocalWindowFocusState import org.briarproject.briar.desktop.ui.LocalWindowScope import org.briarproject.briar.desktop.ui.WindowFocusState +import org.briarproject.briar.desktop.viewmodel.SingleStateEvent import kotlin.random.Random object PreviewUtils { @@ -107,7 +108,7 @@ object PreviewUtils { private fun <T : Any> PreviewScope.addParameter( name: String, initial: T, - editField: @Composable (MutableState<T>) -> Unit + editField: @Composable (MutableState<T>) -> Unit, ) { val value = remember { mutableStateOf(initial) } @@ -168,7 +169,7 @@ object PreviewUtils { val initialValue = items[initial.initial] var selectedIndex by remember { mutableStateOf(initial.initial) } addParameter(name, initialValue) { value -> - Box(modifier = Modifier.fillMaxSize().wrapContentSize(Alignment.TopStart)) { + Box { Text( items[selectedIndex], modifier = Modifier.fillMaxWidth().clickable(onClick = { expanded = true }) @@ -203,7 +204,7 @@ object PreviewUtils { @Suppress("HardCodedStringLiteral") fun preview( vararg parameters: Pair<String, Any>, - content: @Composable PreviewScope.() -> Unit + content: @Composable PreviewScope.() -> Unit, ) { val scope = PreviewScope() @@ -216,6 +217,10 @@ object PreviewUtils { Column { Column(Modifier.padding(10.dp)) { scope.addBooleanParameter("darkTheme", true) + scope.addDropDownParameter( + "language", + DropDownValues(0, UnencryptedSettings.Language.values().toList().map { it.name }) + ) parameters.forEach { (name, initial) -> when (initial) { is String -> scope.addStringParameter(name, initial) @@ -230,6 +235,16 @@ object PreviewUtils { } } + val invalidate = remember { SingleStateEvent<Boolean>() } + + LaunchedEffect(scope.getStringParameter("language")) { + InternationalizationUtils.locale = + UnencryptedSettings.Language.valueOf(scope.getStringParameter("language")).locale + invalidate.emit(true) + } + + invalidate.react { return@Column } + BriarTheme(isDarkTheme = scope.getBooleanParameter("darkTheme")) { Box(Modifier.fillMaxSize(1f)) { Column(Modifier.padding(10.dp)) {