|
@@ -0,0 +1,78 @@
|
|
|
+package eu.kanade.presentation.more.settings.screen.debug
|
|
|
+
|
|
|
+import androidx.compose.foundation.layout.padding
|
|
|
+import androidx.compose.foundation.rememberScrollState
|
|
|
+import androidx.compose.foundation.verticalScroll
|
|
|
+import androidx.compose.material.icons.Icons
|
|
|
+import androidx.compose.material.icons.filled.ArrowBack
|
|
|
+import androidx.compose.material.icons.filled.ContentCopy
|
|
|
+import androidx.compose.material3.Icon
|
|
|
+import androidx.compose.material3.IconButton
|
|
|
+import androidx.compose.material3.Text
|
|
|
+import androidx.compose.material3.TopAppBar
|
|
|
+import androidx.compose.runtime.Composable
|
|
|
+import androidx.compose.runtime.remember
|
|
|
+import androidx.compose.ui.Modifier
|
|
|
+import androidx.compose.ui.platform.LocalContext
|
|
|
+import androidx.compose.ui.res.stringResource
|
|
|
+import androidx.compose.ui.text.font.FontFamily
|
|
|
+import androidx.compose.ui.unit.dp
|
|
|
+import cafe.adriel.voyager.navigator.LocalNavigator
|
|
|
+import cafe.adriel.voyager.navigator.currentOrThrow
|
|
|
+import eu.kanade.presentation.components.AppBar
|
|
|
+import eu.kanade.presentation.components.AppBarActions
|
|
|
+import eu.kanade.presentation.util.Screen
|
|
|
+import eu.kanade.tachiyomi.R
|
|
|
+import eu.kanade.tachiyomi.data.backup.models.Backup
|
|
|
+import eu.kanade.tachiyomi.util.system.copyToClipboard
|
|
|
+import kotlinx.serialization.protobuf.schema.ProtoBufSchemaGenerator
|
|
|
+import tachiyomi.presentation.core.components.material.Scaffold
|
|
|
+
|
|
|
+object BackupSchemaScreen : Screen() {
|
|
|
+
|
|
|
+ const val title = "Backup file schema"
|
|
|
+
|
|
|
+ @Composable
|
|
|
+ override fun Content() {
|
|
|
+ val context = LocalContext.current
|
|
|
+ val navigator = LocalNavigator.currentOrThrow
|
|
|
+
|
|
|
+ val schema = remember { ProtoBufSchemaGenerator.generateSchemaText(Backup.serializer().descriptor) }
|
|
|
+
|
|
|
+ Scaffold(
|
|
|
+ topBar = {
|
|
|
+ TopAppBar(
|
|
|
+ title = { Text(text = title) },
|
|
|
+ navigationIcon = {
|
|
|
+ IconButton(onClick = navigator::pop) {
|
|
|
+ Icon(imageVector = Icons.Default.ArrowBack, contentDescription = null)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ actions = {
|
|
|
+ AppBarActions(
|
|
|
+ listOf(
|
|
|
+ AppBar.Action(
|
|
|
+ title = stringResource(R.string.action_copy_to_clipboard),
|
|
|
+ icon = Icons.Default.ContentCopy,
|
|
|
+ onClick = {
|
|
|
+ context.copyToClipboard(title, schema)
|
|
|
+ },
|
|
|
+ ),
|
|
|
+ ),
|
|
|
+ )
|
|
|
+ },
|
|
|
+ scrollBehavior = it,
|
|
|
+ )
|
|
|
+ },
|
|
|
+ ) { contentPadding ->
|
|
|
+ Text(
|
|
|
+ text = schema,
|
|
|
+ modifier = Modifier
|
|
|
+ .verticalScroll(rememberScrollState())
|
|
|
+ .padding(contentPadding)
|
|
|
+ .padding(16.dp),
|
|
|
+ fontFamily = FontFamily.Monospace,
|
|
|
+ )
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|