From 7ce3ee3152d13f01ea831b1c8ace0ba1f2b13822 Mon Sep 17 00:00:00 2001 From: Infi Date: Sun, 13 Oct 2024 13:35:01 +0200 Subject: [PATCH] feat: debugprep Signed-off-by: Infi --- .../main/java/chat/revolt/api/RevoltAPI.kt | 3 +- .../screens/login/LoginGreetingScreen.kt | 28 +++++- .../java/chat/revolt/sheets/DebugPrepSheet.kt | 85 +++++++++++++++++++ 3 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 app/src/main/java/chat/revolt/sheets/DebugPrepSheet.kt diff --git a/app/src/main/java/chat/revolt/api/RevoltAPI.kt b/app/src/main/java/chat/revolt/api/RevoltAPI.kt index ac72d47e..33448fb5 100644 --- a/app/src/main/java/chat/revolt/api/RevoltAPI.kt +++ b/app/src/main/java/chat/revolt/api/RevoltAPI.kt @@ -49,7 +49,8 @@ import java.lang.reflect.InvocationTargetException import java.net.SocketException import chat.revolt.api.schemas.Channel as ChannelSchema -const val REVOLT_BASE = "https://revolt.chat/api" +// The reason this is a var is because in debug builds we have the ability to swap the base URL. +var REVOLT_BASE = "https://revolt.chat/api" const val REVOLT_SUPPORT = "https://support.revolt.chat" const val REVOLT_MARKETING = "https://revolt.chat" const val REVOLT_FILES = "https://autumn.revolt.chat" diff --git a/app/src/main/java/chat/revolt/screens/login/LoginGreetingScreen.kt b/app/src/main/java/chat/revolt/screens/login/LoginGreetingScreen.kt index d287f9d6..685238a4 100644 --- a/app/src/main/java/chat/revolt/screens/login/LoginGreetingScreen.kt +++ b/app/src/main/java/chat/revolt/screens/login/LoginGreetingScreen.kt @@ -15,14 +15,18 @@ import androidx.compose.foundation.layout.safeDrawingPadding import androidx.compose.foundation.layout.width import androidx.compose.material3.Button import androidx.compose.material3.ElevatedButton +import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalTextStyle import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ModalBottomSheet import androidx.compose.material3.Text +import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableIntStateOf +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment @@ -38,14 +42,30 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.navigation.NavController +import chat.revolt.BuildConfig import chat.revolt.R import chat.revolt.api.REVOLT_MARKETING import chat.revolt.components.generic.Weblink +import chat.revolt.internals.extensions.BottomSheetInsets +import chat.revolt.sheets.DebugPrepSheet +@OptIn(ExperimentalMaterial3Api::class) @Composable fun LoginGreetingScreen(navController: NavController) { val context = LocalContext.current var catTaps by remember { mutableIntStateOf(0) } + var showDebugPrep by remember { mutableStateOf(false) } + + if (showDebugPrep) { + val sheetState = rememberModalBottomSheetState(skipPartiallyExpanded = true) + ModalBottomSheet( + onDismissRequest = { showDebugPrep = false }, + sheetState = sheetState, + windowInsets = BottomSheetInsets + ) { + DebugPrepSheet() + } + } Column( modifier = Modifier @@ -73,9 +93,9 @@ fun LoginGreetingScreen(navController: NavController) { interactionSource = remember(::MutableInteractionSource), indication = null ) { - if (catTaps < 9) { - catTaps++ - } else { + if ((catTaps >= (9 * 2)) && BuildConfig.DEBUG) { + showDebugPrep = true + } else if (catTaps == 9) { Toast .makeText( context, @@ -83,8 +103,8 @@ fun LoginGreetingScreen(navController: NavController) { Toast.LENGTH_SHORT ) .show() - catTaps = 0 } + catTaps++ } ) diff --git a/app/src/main/java/chat/revolt/sheets/DebugPrepSheet.kt b/app/src/main/java/chat/revolt/sheets/DebugPrepSheet.kt new file mode 100644 index 00000000..9ceae064 --- /dev/null +++ b/app/src/main/java/chat/revolt/sheets/DebugPrepSheet.kt @@ -0,0 +1,85 @@ +package chat.revolt.sheets + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.CornerSize +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.SegmentedButton +import androidx.compose.material3.SingleChoiceSegmentedButtonRow +import androidx.compose.material3.Text +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.unit.dp +import chat.revolt.api.REVOLT_BASE +import chat.revolt.components.generic.SheetEnd + +enum class DebugPrepSheetPage { + API +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun DebugPrepSheet(modifier: Modifier = Modifier) { + var mode by remember { mutableStateOf(DebugPrepSheetPage.API) } + + Column( + Modifier + .verticalScroll(rememberScrollState()) + .padding(horizontal = 16.dp), + verticalArrangement = Arrangement.spacedBy(8.dp) + ) { + Text("Debug Preparation", style = MaterialTheme.typography.headlineMedium) + SingleChoiceSegmentedButtonRow(Modifier.fillMaxWidth()) { + SegmentedButton( + selected = mode == DebugPrepSheetPage.API, + onClick = { mode = DebugPrepSheetPage.API }, + shape = CircleShape + ) { + Text("API") + } + } + + when (mode) { + DebugPrepSheetPage.API -> { + Text("API Base URL (not reactive)") + SingleChoiceSegmentedButtonRow(Modifier.fillMaxWidth()) { + SegmentedButton( + selected = REVOLT_BASE == "https://api.revolt.chat", + onClick = { + REVOLT_BASE = "https://api.revolt.chat" + }, + shape = CircleShape.copy( + topEnd = CornerSize(0), + bottomEnd = CornerSize(0) + ) + ) { + Text("api.") + } + SegmentedButton( + selected = REVOLT_BASE == "https://revolt.chat/api", + onClick = { + REVOLT_BASE = "https://revolt.chat/api" + }, + shape = CircleShape.copy( + topStart = CornerSize(0), + bottomStart = CornerSize(0) + ) + ) { + Text("/api") + } + } + } + } + } + SheetEnd() +} \ No newline at end of file