Ver código fonte

Move worker info screen into debug info menu

No need to translate anything for debug info. Dunno what else will end up in that menu in the future.
arkon 1 ano atrás
pai
commit
4bcd623829

+ 7 - 5
app/src/main/java/eu/kanade/presentation/more/settings/screen/SettingsAdvancedScreen.kt

@@ -26,6 +26,7 @@ import cafe.adriel.voyager.navigator.LocalNavigator
 import cafe.adriel.voyager.navigator.currentOrThrow
 import eu.kanade.domain.base.BasePreferences
 import eu.kanade.presentation.more.settings.Preference
+import eu.kanade.presentation.more.settings.screen.debug.DebugInfoScreen
 import eu.kanade.presentation.util.collectAsState
 import eu.kanade.tachiyomi.R
 import eu.kanade.tachiyomi.data.cache.ChapterCache
@@ -75,6 +76,8 @@ object SettingsAdvancedScreen : SearchableSettings {
     override fun getPreferences(): List<Preference> {
         val scope = rememberCoroutineScope()
         val context = LocalContext.current
+        val navigator = LocalNavigator.currentOrThrow
+
         val basePreferences = remember { Injekt.get<BasePreferences>() }
         val networkPreferences = remember { Injekt.get<NetworkPreferences>() }
 
@@ -103,6 +106,10 @@ object SettingsAdvancedScreen : SearchableSettings {
                     true
                 },
             ),
+            Preference.PreferenceItem.TextPreference(
+                title = stringResource(R.string.pref_debug_info),
+                onClick = { navigator.push(DebugInfoScreen) },
+            ),
             getBackgroundActivityGroup(),
             getDataGroup(),
             getNetworkGroup(networkPreferences = networkPreferences),
@@ -115,7 +122,6 @@ object SettingsAdvancedScreen : SearchableSettings {
     private fun getBackgroundActivityGroup(): Preference.PreferenceGroup {
         val context = LocalContext.current
         val uriHandler = LocalUriHandler.current
-        val navigator = LocalNavigator.currentOrThrow
 
         return Preference.PreferenceGroup(
             title = stringResource(R.string.label_background_activity),
@@ -147,10 +153,6 @@ object SettingsAdvancedScreen : SearchableSettings {
                     subtitle = stringResource(R.string.about_dont_kill_my_app),
                     onClick = { uriHandler.openUri("https://dontkillmyapp.com/") },
                 ),
-                Preference.PreferenceItem.TextPreference(
-                    title = stringResource(R.string.pref_worker_info),
-                    onClick = { navigator.push(WorkerInfoScreen) },
-                ),
             ),
         )
     }

+ 29 - 0
app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/DebugInfoScreen.kt

@@ -0,0 +1,29 @@
+package eu.kanade.presentation.more.settings.screen.debug
+
+import androidx.annotation.StringRes
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.ReadOnlyComposable
+import cafe.adriel.voyager.navigator.LocalNavigator
+import cafe.adriel.voyager.navigator.currentOrThrow
+import eu.kanade.presentation.more.settings.Preference
+import eu.kanade.presentation.more.settings.screen.SearchableSettings
+import eu.kanade.tachiyomi.R
+
+object DebugInfoScreen : SearchableSettings {
+    @ReadOnlyComposable
+    @Composable
+    @StringRes
+    override fun getTitleRes() = R.string.pref_debug_info
+
+    @Composable
+    override fun getPreferences(): List<Preference> {
+        val navigator = LocalNavigator.currentOrThrow
+
+        return listOf(
+            Preference.PreferenceItem.TextPreference(
+                title = WorkerInfoScreen.title,
+                onClick = { navigator.push(WorkerInfoScreen) },
+            ),
+        )
+    }
+}

+ 8 - 20
app/src/main/java/eu/kanade/presentation/more/settings/screen/WorkerInfoScreen.kt → app/src/main/java/eu/kanade/presentation/more/settings/screen/debug/WorkerInfoScreen.kt

@@ -1,4 +1,4 @@
-package eu.kanade.presentation.more.settings.screen
+package eu.kanade.presentation.more.settings.screen.debug
 
 import android.content.Context
 import androidx.compose.foundation.horizontalScroll
@@ -11,22 +11,16 @@ import androidx.compose.material.icons.filled.ContentCopy
 import androidx.compose.material3.Icon
 import androidx.compose.material3.IconButton
 import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.SnackbarHost
-import androidx.compose.material3.SnackbarHostState
 import androidx.compose.material3.Text
 import androidx.compose.material3.TopAppBar
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.collectAsState
 import androidx.compose.runtime.getValue
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.platform.LocalClipboardManager
 import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.text.AnnotatedString
 import androidx.compose.ui.text.font.FontFamily
 import androidx.compose.ui.unit.dp
+import androidx.compose.ui.util.fastForEach
 import androidx.lifecycle.asFlow
 import androidx.work.WorkInfo
 import androidx.work.WorkQuery
@@ -36,47 +30,42 @@ import cafe.adriel.voyager.navigator.LocalNavigator
 import cafe.adriel.voyager.navigator.currentOrThrow
 import eu.kanade.presentation.util.Screen
 import eu.kanade.presentation.util.ioCoroutineScope
-import eu.kanade.tachiyomi.R
+import eu.kanade.tachiyomi.util.system.copyToClipboard
 import eu.kanade.tachiyomi.util.system.workManager
 import kotlinx.coroutines.flow.SharingStarted
 import kotlinx.coroutines.flow.map
 import kotlinx.coroutines.flow.stateIn
-import kotlinx.coroutines.launch
 import tachiyomi.presentation.core.components.LazyColumn
 import tachiyomi.presentation.core.components.material.Scaffold
 import tachiyomi.presentation.core.util.plus
 
 object WorkerInfoScreen : Screen() {
 
+    const val title = "Worker info"
+
     @Composable
     override fun Content() {
         val context = LocalContext.current
         val navigator = LocalNavigator.currentOrThrow
-        val clipboardManager = LocalClipboardManager.current
 
         val screenModel = rememberScreenModel { Model(context) }
         val enqueued by screenModel.enqueued.collectAsState()
         val finished by screenModel.finished.collectAsState()
         val running by screenModel.running.collectAsState()
 
-        val snackbarHostState = remember { SnackbarHostState() }
-        val scope = rememberCoroutineScope()
-
         Scaffold(
             topBar = {
                 TopAppBar(
-                    title = { Text(text = stringResource(R.string.pref_worker_info)) },
+                    title = { Text(text = title) },
                     navigationIcon = {
                         IconButton(onClick = navigator::pop) {
                             Icon(imageVector = Icons.Default.ArrowBack, contentDescription = null)
                         }
                     },
                     actions = {
-                        val copiedString = stringResource(R.string.copied_to_clipboard_plain)
                         IconButton(
                             onClick = {
-                                clipboardManager.setText(AnnotatedString(enqueued + finished + running))
-                                scope.launch { snackbarHostState.showSnackbar(copiedString) }
+                                context.copyToClipboard(title, enqueued + finished + running)
                             },
                         ) {
                             Icon(imageVector = Icons.Default.ContentCopy, contentDescription = null)
@@ -85,7 +74,6 @@ object WorkerInfoScreen : Screen() {
                     scrollBehavior = it,
                 )
             },
-            snackbarHost = { SnackbarHost(hostState = snackbarHostState) },
         ) { contentPadding ->
             LazyColumn(
                 contentPadding = contentPadding + PaddingValues(horizontal = 16.dp),
@@ -146,7 +134,7 @@ object WorkerInfoScreen : Screen() {
             if (list.isEmpty()) {
                 appendLine("-")
             } else {
-                list.forEach { workInfo ->
+                list.fastForEach { workInfo ->
                     appendLine("Id: ${workInfo.id}")
                     appendLine("Tags:")
                     workInfo.tags.forEach {

+ 1 - 1
i18n/src/main/res/values/strings.xml

@@ -540,7 +540,7 @@
     <string name="pref_tablet_ui_mode">Tablet UI</string>
     <string name="pref_verbose_logging">Verbose logging</string>
     <string name="pref_verbose_logging_summary">Print verbose logs to system log (reduces app performance)</string>
-    <string name="pref_worker_info">Worker info</string>
+    <string name="pref_debug_info">Debug info</string>
 
       <!-- About section -->
     <string name="website">Website</string>

+ 3 - 4
presentation-core/src/main/java/tachiyomi/presentation/core/screens/EmptyScreen.kt

@@ -23,6 +23,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
 import androidx.compose.ui.res.stringResource
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.unit.dp
+import androidx.compose.ui.util.fastForEach
 import tachiyomi.presentation.core.components.material.padding
 import tachiyomi.presentation.core.util.secondaryItemAlpha
 import kotlin.random.Random
@@ -79,12 +80,10 @@ fun EmptyScreen(
         if (!actions.isNullOrEmpty()) {
             Row(
                 modifier = Modifier
-                    .padding(
-                        top = 24.dp,
-                    ),
+                    .padding(top = 24.dp),
                 horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.small),
             ) {
-                actions.forEach {
+                actions.fastForEach {
                     ActionButton(
                         modifier = Modifier.weight(1f),
                         title = stringResource(it.stringResId),