feat: always enable experiments in debug builds

Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
Infi 2024-09-28 14:15:05 +02:00
parent 66914aefee
commit 9961809730
2 changed files with 51 additions and 29 deletions

View File

@ -3,6 +3,7 @@ package chat.revolt.api.settings
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import chat.revolt.BuildConfig
import chat.revolt.RevoltApplication import chat.revolt.RevoltApplication
import chat.revolt.persistence.KVStorage import chat.revolt.persistence.KVStorage
@ -30,7 +31,11 @@ object Experiments {
suspend fun hydrateWithKv() { suspend fun hydrateWithKv() {
val kvStorage = KVStorage(RevoltApplication.instance) val kvStorage = KVStorage(RevoltApplication.instance)
GlobalState.experimentsEnabled = kvStorage.getBoolean("experimentsEnabled") ?: false if (BuildConfig.DEBUG) {
GlobalState.experimentsEnabled = true
} else {
GlobalState.experimentsEnabled = kvStorage.getBoolean("experimentsEnabled") ?: false
}
useKotlinBasedMarkdownRenderer.setEnabled( useKotlinBasedMarkdownRenderer.setEnabled(
kvStorage.getBoolean("exp/useKotlinBasedMarkdownRenderer") ?: false kvStorage.getBoolean("exp/useKotlinBasedMarkdownRenderer") ?: false

View File

@ -1,19 +1,21 @@
package chat.revolt.screens.settings package chat.revolt.screens.settings
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.ElevatedButton import androidx.compose.material3.ElevatedButton
import androidx.compose.material3.ListItem import androidx.compose.material3.ListItem
import androidx.compose.material3.Switch import androidx.compose.material3.Switch
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.ui.Modifier
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavController import androidx.navigation.NavController
import chat.revolt.BuildConfig
import chat.revolt.RevoltApplication
import chat.revolt.api.settings.Experiments import chat.revolt.api.settings.Experiments
import chat.revolt.api.settings.GlobalState import chat.revolt.api.settings.GlobalState
import chat.revolt.persistence.KVStorage import chat.revolt.persistence.KVStorage
@ -21,17 +23,33 @@ import chat.revolt.settings.dsl.SettingsPage
import chat.revolt.settings.dsl.SubcategoryContentInsets import chat.revolt.settings.dsl.SubcategoryContentInsets
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@Composable class ExperimentsSettingsScreenViewModel : ViewModel() {
fun ExperimentsSettingsScreen(navController: NavController) { private val kv = KVStorage(RevoltApplication.instance)
val context = LocalContext.current
val kv = remember { KVStorage(context) }
val scope = rememberCoroutineScope()
var useKotlinMdRendererChecked by remember { mutableStateOf(false) } fun disableExperiments(then: () -> Unit = {}) {
LaunchedEffect(Unit) { viewModelScope.launch {
useKotlinMdRendererChecked = kv.getBoolean("exp/useKotlinBasedMarkdownRenderer") ?: false kv.remove("experimentsEnabled")
GlobalState.experimentsEnabled = false
then()
}
} }
val useKotlinMdRendererChecked = mutableStateOf(false)
fun setUseKotlinMdRendererChecked(value: Boolean) {
viewModelScope.launch {
kv.set("exp/useKotlinBasedMarkdownRenderer", value)
Experiments.useKotlinBasedMarkdownRenderer.setEnabled(value)
useKotlinMdRendererChecked.value = value
}
}
}
@Composable
fun ExperimentsSettingsScreen(
navController: NavController,
viewModel: ExperimentsSettingsScreenViewModel = viewModel()
) {
SettingsPage( SettingsPage(
navController, navController,
title = { title = {
@ -47,16 +65,11 @@ fun ExperimentsSettingsScreen(navController: NavController) {
}, },
trailingContent = { trailingContent = {
Switch( Switch(
checked = useKotlinMdRendererChecked, checked = viewModel.useKotlinMdRendererChecked.value,
onCheckedChange = { isChecked -> onCheckedChange = viewModel::setUseKotlinMdRendererChecked
scope.launch {
kv.set("exp/useKotlinBasedMarkdownRenderer", isChecked)
Experiments.useKotlinBasedMarkdownRenderer.setEnabled(isChecked)
useKotlinMdRendererChecked = isChecked
}
}
) )
} },
modifier = Modifier.clickable { viewModel.setUseKotlinMdRendererChecked(!viewModel.useKotlinMdRendererChecked.value) }
) )
Subcategory( Subcategory(
@ -67,14 +80,18 @@ fun ExperimentsSettingsScreen(navController: NavController) {
) { ) {
ElevatedButton( ElevatedButton(
onClick = { onClick = {
scope.launch { viewModel.disableExperiments {
kv.remove("experimentsEnabled")
GlobalState.experimentsEnabled = false
navController.popBackStack() navController.popBackStack()
} }
} },
enabled = !BuildConfig.DEBUG,
modifier = Modifier.fillMaxWidth()
) { ) {
Text("Disable") if (BuildConfig.DEBUG) {
Text("Experiments are always enabled in debug builds")
} else {
Text("Disable")
}
} }
} }
} }