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.mutableStateOf
import androidx.compose.runtime.setValue
import chat.revolt.BuildConfig
import chat.revolt.RevoltApplication
import chat.revolt.persistence.KVStorage
@ -30,7 +31,11 @@ object Experiments {
suspend fun hydrateWithKv() {
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(
kvStorage.getBoolean("exp/useKotlinBasedMarkdownRenderer") ?: false

View File

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