feat: always enable experiments in debug builds
Signed-off-by: Infi <infi@infi.sh>
This commit is contained in:
parent
66914aefee
commit
9961809730
|
|
@ -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)
|
||||||
|
|
||||||
|
if (BuildConfig.DEBUG) {
|
||||||
|
GlobalState.experimentsEnabled = true
|
||||||
|
} else {
|
||||||
GlobalState.experimentsEnabled = kvStorage.getBoolean("experimentsEnabled") ?: false
|
GlobalState.experimentsEnabled = kvStorage.getBoolean("experimentsEnabled") ?: false
|
||||||
|
}
|
||||||
|
|
||||||
useKotlinBasedMarkdownRenderer.setEnabled(
|
useKotlinBasedMarkdownRenderer.setEnabled(
|
||||||
kvStorage.getBoolean("exp/useKotlinBasedMarkdownRenderer") ?: false
|
kvStorage.getBoolean("exp/useKotlinBasedMarkdownRenderer") ?: false
|
||||||
|
|
|
||||||
|
|
@ -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,15 +80,19 @@ 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()
|
||||||
) {
|
) {
|
||||||
|
if (BuildConfig.DEBUG) {
|
||||||
|
Text("Experiments are always enabled in debug builds")
|
||||||
|
} else {
|
||||||
Text("Disable")
|
Text("Disable")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue