mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 06:17:57 +01:00 
			
		
		
		
	Use unique keys for all screens to avoid crashes
Fixes #9008 Fixes #9110
This commit is contained in:
		
							
								
								
									
										12
									
								
								app/src/main/java/eu/kanade/core/navigation/Screen.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								app/src/main/java/eu/kanade/core/navigation/Screen.kt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| package eu.kanade.core.navigation | ||||
|  | ||||
| import cafe.adriel.voyager.core.screen.ScreenKey | ||||
| import cafe.adriel.voyager.core.screen.uniqueScreenKey | ||||
| import cafe.adriel.voyager.core.screen.Screen as VoyagerScreen | ||||
|  | ||||
| // TODO: this prevents crashes in nested navigators with transitions not being disposed | ||||
| // properly. Go back to using vanilla Voyager Screens once fixed upstream. | ||||
| abstract class Screen : VoyagerScreen { | ||||
|  | ||||
|     override val key: ScreenKey = uniqueScreenKey | ||||
| } | ||||
| @@ -53,9 +53,9 @@ import androidx.compose.ui.unit.IntOffset | ||||
| import androidx.compose.ui.unit.Velocity | ||||
| import androidx.compose.ui.unit.dp | ||||
| import cafe.adriel.voyager.core.lifecycle.DisposableEffectIgnoringConfiguration | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.Navigator | ||||
| import cafe.adriel.voyager.transitions.ScreenTransition | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.util.isTabletUi | ||||
| import kotlinx.coroutines.delay | ||||
| import kotlinx.coroutines.flow.collectLatest | ||||
|   | ||||
| @@ -16,9 +16,9 @@ import androidx.compose.ui.platform.LocalUriHandler | ||||
| import androidx.compose.ui.res.painterResource | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.compose.ui.unit.dp | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.domain.ui.UiPreferences | ||||
| import eu.kanade.presentation.components.AppBar | ||||
| import eu.kanade.presentation.more.LogoHeader | ||||
| @@ -49,7 +49,7 @@ import java.text.SimpleDateFormat | ||||
| import java.util.Locale | ||||
| import java.util.TimeZone | ||||
|  | ||||
| object AboutScreen : Screen { | ||||
| object AboutScreen : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -30,10 +30,9 @@ import androidx.compose.ui.util.fastMap | ||||
| import cafe.adriel.voyager.core.model.StateScreenModel | ||||
| import cafe.adriel.voyager.core.model.coroutineScope | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.core.screen.uniqueScreenKey | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.domain.source.interactor.GetSourcesWithNonLibraryManga | ||||
| import eu.kanade.presentation.browse.components.SourceIcon | ||||
| import eu.kanade.presentation.components.AppBar | ||||
| @@ -57,9 +56,7 @@ import tachiyomi.presentation.core.util.selectedBackground | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|  | ||||
| class ClearDatabaseScreen : Screen { | ||||
|  | ||||
|     override val key = uniqueScreenKey | ||||
| class ClearDatabaseScreen : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -5,16 +5,16 @@ import androidx.compose.material3.MaterialTheme | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.ui.Modifier | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import com.mikepenz.aboutlibraries.ui.compose.LibrariesContainer | ||||
| import com.mikepenz.aboutlibraries.ui.compose.LibraryDefaults | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.components.AppBar | ||||
| import eu.kanade.tachiyomi.R | ||||
| import tachiyomi.presentation.core.components.material.Scaffold | ||||
|  | ||||
| class LicensesScreen : Screen { | ||||
| class LicensesScreen : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -41,10 +41,10 @@ import androidx.compose.ui.graphics.vector.ImageVector | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.compose.ui.unit.dp | ||||
| import androidx.core.graphics.ColorUtils | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.Navigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.components.AppBar | ||||
| import eu.kanade.presentation.components.AppBarActions | ||||
| import eu.kanade.presentation.more.settings.widget.TextPreferenceWidget | ||||
| @@ -52,8 +52,9 @@ import eu.kanade.presentation.util.LocalBackPress | ||||
| import eu.kanade.tachiyomi.R | ||||
| import tachiyomi.presentation.core.components.LazyColumn | ||||
| import tachiyomi.presentation.core.components.material.Scaffold | ||||
| import cafe.adriel.voyager.core.screen.Screen as VoyagerScreen | ||||
|  | ||||
| object SettingsMainScreen : Screen { | ||||
| object SettingsMainScreen : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
| @@ -173,7 +174,7 @@ object SettingsMainScreen : Screen { | ||||
|         ) | ||||
|     } | ||||
|  | ||||
|     private fun Navigator.navigate(screen: Screen, twoPane: Boolean) { | ||||
|     private fun Navigator.navigate(screen: VoyagerScreen, twoPane: Boolean) { | ||||
|         if (twoPane) replaceAll(screen) else push(screen) | ||||
|     } | ||||
|  | ||||
| @@ -182,7 +183,7 @@ object SettingsMainScreen : Screen { | ||||
|         @StringRes val subtitleRes: Int, | ||||
|         val formatSubtitle: @Composable () -> String = { stringResource(subtitleRes) }, | ||||
|         val icon: ImageVector, | ||||
|         val screen: Screen, | ||||
|         val screen: VoyagerScreen, | ||||
|     ) | ||||
|  | ||||
|     private val items = listOf( | ||||
|   | ||||
| @@ -47,9 +47,9 @@ import androidx.compose.ui.text.input.ImeAction | ||||
| import androidx.compose.ui.text.input.TextFieldValue | ||||
| import androidx.compose.ui.text.style.TextOverflow | ||||
| import androidx.compose.ui.unit.dp | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.components.EmptyScreen | ||||
| import eu.kanade.presentation.more.settings.Preference | ||||
| import eu.kanade.tachiyomi.R | ||||
| @@ -57,8 +57,9 @@ import eu.kanade.tachiyomi.util.system.isLTR | ||||
| import tachiyomi.presentation.core.components.material.Divider | ||||
| import tachiyomi.presentation.core.components.material.Scaffold | ||||
| import tachiyomi.presentation.core.util.runOnEnterKeyPressed | ||||
| import cafe.adriel.voyager.core.screen.Screen as VoyagerScreen | ||||
|  | ||||
| class SettingsSearchScreen : Screen { | ||||
| class SettingsSearchScreen : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
| @@ -297,12 +298,12 @@ private val settingScreens = listOf( | ||||
|  | ||||
| private data class SettingsData( | ||||
|     val title: String, | ||||
|     val route: Screen, | ||||
|     val route: VoyagerScreen, | ||||
|     val contents: List<Preference>, | ||||
| ) | ||||
|  | ||||
| private data class SearchResultItem( | ||||
|     val route: Screen, | ||||
|     val route: VoyagerScreen, | ||||
|     val title: String, | ||||
|     val breadcrumbs: String, | ||||
|     val highlightKey: String, | ||||
|   | ||||
| @@ -34,9 +34,9 @@ import androidx.work.WorkQuery | ||||
| import cafe.adriel.voyager.core.model.ScreenModel | ||||
| import cafe.adriel.voyager.core.model.coroutineScope | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.tachiyomi.R | ||||
| import kotlinx.coroutines.flow.SharingStarted | ||||
| import kotlinx.coroutines.flow.map | ||||
| @@ -46,7 +46,7 @@ import tachiyomi.presentation.core.components.LazyColumn | ||||
| import tachiyomi.presentation.core.components.material.Scaffold | ||||
| import tachiyomi.presentation.core.util.plus | ||||
|  | ||||
| object WorkerInfoScreen : Screen { | ||||
| object WorkerInfoScreen : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -6,16 +6,16 @@ import androidx.compose.runtime.collectAsState | ||||
| import androidx.compose.runtime.getValue | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.browse.ExtensionFilterScreen | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| import kotlinx.coroutines.flow.collectLatest | ||||
| import tachiyomi.presentation.core.components.LoadingScreen | ||||
|  | ||||
| class ExtensionFilterScreen : Screen { | ||||
| class ExtensionFilterScreen : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -7,16 +7,16 @@ import androidx.compose.runtime.getValue | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import androidx.compose.ui.platform.LocalUriHandler | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.browse.ExtensionDetailsScreen | ||||
| import kotlinx.coroutines.flow.collectLatest | ||||
| import tachiyomi.presentation.core.components.LoadingScreen | ||||
|  | ||||
| data class ExtensionDetailsScreen( | ||||
|     private val pkgName: String, | ||||
| ) : Screen { | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -35,10 +35,9 @@ import androidx.preference.PreferenceFragmentCompat | ||||
| import androidx.preference.PreferenceScreen | ||||
| import androidx.preference.forEach | ||||
| import androidx.preference.getOnBindEditTextListener | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.core.screen.uniqueScreenKey | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.preference.SharedPreferencesDataStore | ||||
| import eu.kanade.tachiyomi.source.ConfigurableSource | ||||
| @@ -49,9 +48,7 @@ import tachiyomi.presentation.core.components.material.Scaffold | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|  | ||||
| class SourcePreferencesScreen(val sourceId: Long) : Screen { | ||||
|  | ||||
|     override val key = uniqueScreenKey | ||||
| class SourcePreferencesScreen(val sourceId: Long) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -6,9 +6,9 @@ import androidx.compose.runtime.collectAsState | ||||
| import androidx.compose.runtime.getValue | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.browse.MigrateMangaScreen | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.ui.browse.migration.search.MigrateSearchScreen | ||||
| @@ -19,7 +19,7 @@ import tachiyomi.presentation.core.components.LoadingScreen | ||||
|  | ||||
| data class MigrationMangaScreen( | ||||
|     private val sourceId: Long, | ||||
| ) : Screen { | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -4,13 +4,13 @@ import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.collectAsState | ||||
| import androidx.compose.runtime.getValue | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.browse.MigrateSearchScreen | ||||
| import eu.kanade.tachiyomi.ui.manga.MangaScreen | ||||
|  | ||||
| class MigrateSearchScreen(private val mangaId: Long) : Screen { | ||||
| class MigrateSearchScreen(private val mangaId: Long) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -19,9 +19,9 @@ import androidx.compose.ui.platform.LocalUriHandler | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.paging.compose.collectAsLazyPagingItems | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.browse.BrowseSourceContent | ||||
| import eu.kanade.presentation.components.SearchToolbar | ||||
| import eu.kanade.tachiyomi.R | ||||
| @@ -41,7 +41,7 @@ data class SourceSearchScreen( | ||||
|     private val oldManga: Manga, | ||||
|     private val sourceId: Long, | ||||
|     private val query: String?, | ||||
| ) : Screen { | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -6,15 +6,15 @@ import androidx.compose.runtime.collectAsState | ||||
| import androidx.compose.runtime.getValue | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.browse.SourcesFilterScreen | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.util.system.toast | ||||
| import tachiyomi.presentation.core.components.LoadingScreen | ||||
|  | ||||
| class SourcesFilterScreen : Screen { | ||||
| class SourcesFilterScreen : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -34,10 +34,9 @@ import androidx.compose.ui.platform.LocalUriHandler | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import androidx.paging.compose.collectAsLazyPagingItems | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.core.screen.uniqueScreenKey | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.browse.BrowseSourceContent | ||||
| import eu.kanade.presentation.browse.MissingSourceScreen | ||||
| import eu.kanade.presentation.browse.components.BrowseSourceToolbar | ||||
| @@ -66,12 +65,10 @@ import tachiyomi.presentation.core.components.material.padding | ||||
| data class BrowseSourceScreen( | ||||
|     private val sourceId: Long, | ||||
|     private val listingQuery: String?, | ||||
| ) : Screen, AssistContentScreen { | ||||
| ) : Screen(), AssistContentScreen { | ||||
|  | ||||
|     private var assistUrl: String? = null | ||||
|  | ||||
|     override val key = uniqueScreenKey | ||||
|  | ||||
|     override fun onProvideAssistUrl() = assistUrl | ||||
|  | ||||
|     @Composable | ||||
|   | ||||
| @@ -4,10 +4,9 @@ import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.collectAsState | ||||
| import androidx.compose.runtime.getValue | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.core.screen.uniqueScreenKey | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.browse.GlobalSearchScreen | ||||
| import eu.kanade.tachiyomi.ui.browse.source.browse.BrowseSourceScreen | ||||
| import eu.kanade.tachiyomi.ui.manga.MangaScreen | ||||
| @@ -15,9 +14,7 @@ import eu.kanade.tachiyomi.ui.manga.MangaScreen | ||||
| class GlobalSearchScreen( | ||||
|     val searchQuery: String = "", | ||||
|     val extensionFilter: String = "", | ||||
| ) : Screen { | ||||
|  | ||||
|     override val key = uniqueScreenKey | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -6,10 +6,9 @@ import androidx.compose.runtime.collectAsState | ||||
| import androidx.compose.runtime.getValue | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.core.screen.uniqueScreenKey | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.category.CategoryScreen | ||||
| import eu.kanade.presentation.category.components.CategoryCreateDialog | ||||
| import eu.kanade.presentation.category.components.CategoryDeleteDialog | ||||
| @@ -18,9 +17,7 @@ import eu.kanade.tachiyomi.util.system.toast | ||||
| import kotlinx.coroutines.flow.collectLatest | ||||
| import tachiyomi.presentation.core.components.LoadingScreen | ||||
|  | ||||
| class CategoryScreen : Screen { | ||||
|  | ||||
|     override val key = uniqueScreenKey | ||||
| class CategoryScreen : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -45,9 +45,9 @@ import androidx.core.view.updateLayoutParams | ||||
| import androidx.core.view.updatePadding | ||||
| import androidx.recyclerview.widget.LinearLayoutManager | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.components.AppBar | ||||
| import eu.kanade.presentation.components.EmptyScreen | ||||
| import eu.kanade.presentation.components.OverflowMenu | ||||
| @@ -60,7 +60,7 @@ import tachiyomi.presentation.core.components.material.ExtendedFloatingActionBut | ||||
| import tachiyomi.presentation.core.components.material.Scaffold | ||||
| import kotlin.math.roundToInt | ||||
|  | ||||
| object DownloadQueueScreen : Screen { | ||||
| object DownloadQueueScreen : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -30,11 +30,11 @@ import androidx.compose.ui.semantics.contentDescription | ||||
| import androidx.compose.ui.semantics.semantics | ||||
| import androidx.compose.ui.text.style.TextOverflow | ||||
| import androidx.compose.ui.util.fastForEach | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import cafe.adriel.voyager.navigator.tab.LocalTabNavigator | ||||
| import cafe.adriel.voyager.navigator.tab.TabNavigator | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.domain.library.service.LibraryPreferences | ||||
| import eu.kanade.domain.source.service.SourcePreferences | ||||
| import eu.kanade.presentation.util.isTabletUi | ||||
| @@ -59,7 +59,7 @@ import tachiyomi.presentation.core.components.material.Scaffold | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|  | ||||
| object HomeScreen : Screen { | ||||
| object HomeScreen : Screen() { | ||||
|  | ||||
|     private val librarySearchEvent = Channel<String>() | ||||
|     private val openTabEvent = Channel<Tab>() | ||||
|   | ||||
| @@ -17,11 +17,10 @@ import androidx.compose.ui.platform.LocalContext | ||||
| import androidx.compose.ui.platform.LocalHapticFeedback | ||||
| import androidx.core.net.toUri | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.core.screen.uniqueScreenKey | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.Navigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.domain.manga.model.hasCustomCover | ||||
| import eu.kanade.domain.manga.model.toSManga | ||||
| import eu.kanade.presentation.category.ChangeCategoryDialog | ||||
| @@ -60,12 +59,10 @@ import tachiyomi.presentation.core.components.LoadingScreen | ||||
| class MangaScreen( | ||||
|     private val mangaId: Long, | ||||
|     val fromSource: Boolean = false, | ||||
| ) : Screen, AssistContentScreen { | ||||
| ) : Screen(), AssistContentScreen { | ||||
|  | ||||
|     private var assistUrl: String? = null | ||||
|  | ||||
|     override val key = uniqueScreenKey | ||||
|  | ||||
|     override fun onProvideAssistUrl() = assistUrl | ||||
|  | ||||
|     @Composable | ||||
|   | ||||
| @@ -32,10 +32,10 @@ import cafe.adriel.voyager.core.model.ScreenModel | ||||
| import cafe.adriel.voyager.core.model.StateScreenModel | ||||
| import cafe.adriel.voyager.core.model.coroutineScope | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.Navigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.domain.chapter.interactor.SyncChaptersWithTrackServiceTwoWay | ||||
| import eu.kanade.domain.track.model.toDbTrack | ||||
| import eu.kanade.domain.track.model.toDomainTrack | ||||
| @@ -83,7 +83,7 @@ data class TrackInfoDialogHomeScreen( | ||||
|     private val mangaId: Long, | ||||
|     private val mangaTitle: String, | ||||
|     private val sourceId: Long, | ||||
| ) : Screen { | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
| @@ -265,7 +265,7 @@ data class TrackInfoDialogHomeScreen( | ||||
| private data class TrackStatusSelectorScreen( | ||||
|     private val track: Track, | ||||
|     private val serviceId: Long, | ||||
| ) : Screen { | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
| @@ -314,7 +314,7 @@ private data class TrackStatusSelectorScreen( | ||||
| private data class TrackChapterSelectorScreen( | ||||
|     private val track: Track, | ||||
|     private val serviceId: Long, | ||||
| ) : Screen { | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
| @@ -369,7 +369,7 @@ private data class TrackChapterSelectorScreen( | ||||
| private data class TrackScoreSelectorScreen( | ||||
|     private val track: Track, | ||||
|     private val serviceId: Long, | ||||
| ) : Screen { | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
| @@ -420,7 +420,7 @@ private data class TrackDateSelectorScreen( | ||||
|     private val track: Track, | ||||
|     private val serviceId: Long, | ||||
|     private val start: Boolean, | ||||
| ) : Screen { | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
| @@ -514,7 +514,7 @@ private data class TrackDateRemoverScreen( | ||||
|     private val track: Track, | ||||
|     private val serviceId: Long, | ||||
|     private val start: Boolean, | ||||
| ) : Screen { | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
| @@ -597,7 +597,7 @@ data class TrackServiceSearchScreen( | ||||
|     private val initialQuery: String, | ||||
|     private val currentUrl: String?, | ||||
|     private val serviceId: Long, | ||||
| ) : Screen { | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -3,9 +3,9 @@ package eu.kanade.tachiyomi.ui.more | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.remember | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.more.NewUpdateScreen | ||||
| import eu.kanade.tachiyomi.data.updater.AppUpdateService | ||||
| import eu.kanade.tachiyomi.util.system.openInBrowser | ||||
| @@ -15,7 +15,7 @@ class NewUpdateScreen( | ||||
|     private val changelogInfo: String, | ||||
|     private val releaseLink: String, | ||||
|     private val downloadLink: String, | ||||
| ) : Screen { | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -9,10 +9,10 @@ import androidx.compose.foundation.layout.windowInsetsPadding | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.runtime.CompositionLocalProvider | ||||
| import androidx.compose.ui.Modifier | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.Navigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.more.settings.screen.AboutScreen | ||||
| import eu.kanade.presentation.more.settings.screen.SettingsBackupScreen | ||||
| import eu.kanade.presentation.more.settings.screen.SettingsGeneralScreen | ||||
| @@ -25,7 +25,7 @@ import tachiyomi.presentation.core.components.TwoPanelBox | ||||
| class SettingsScreen private constructor( | ||||
|     val toBackup: Boolean, | ||||
|     val toAbout: Boolean, | ||||
| ) : Screen { | ||||
| ) : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -5,10 +5,9 @@ import androidx.compose.runtime.collectAsState | ||||
| import androidx.compose.runtime.getValue | ||||
| import androidx.compose.ui.res.stringResource | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.core.screen.uniqueScreenKey | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.components.AppBar | ||||
| import eu.kanade.presentation.more.stats.StatsScreenContent | ||||
| import eu.kanade.presentation.more.stats.StatsScreenState | ||||
| @@ -16,9 +15,7 @@ import eu.kanade.tachiyomi.R | ||||
| import tachiyomi.presentation.core.components.LoadingScreen | ||||
| import tachiyomi.presentation.core.components.material.Scaffold | ||||
|  | ||||
| class StatsScreen : Screen { | ||||
|  | ||||
|     override val key = uniqueScreenKey | ||||
| class StatsScreen : Screen() { | ||||
|  | ||||
|     @Composable | ||||
|     override fun Content() { | ||||
|   | ||||
| @@ -3,10 +3,9 @@ package eu.kanade.tachiyomi.ui.webview | ||||
| import androidx.compose.runtime.Composable | ||||
| import androidx.compose.ui.platform.LocalContext | ||||
| import cafe.adriel.voyager.core.model.rememberScreenModel | ||||
| import cafe.adriel.voyager.core.screen.Screen | ||||
| import cafe.adriel.voyager.core.screen.uniqueScreenKey | ||||
| import cafe.adriel.voyager.navigator.LocalNavigator | ||||
| import cafe.adriel.voyager.navigator.currentOrThrow | ||||
| import eu.kanade.core.navigation.Screen | ||||
| import eu.kanade.presentation.util.AssistContentScreen | ||||
| import eu.kanade.presentation.webview.WebViewScreenContent | ||||
|  | ||||
| @@ -14,12 +13,10 @@ class WebViewScreen( | ||||
|     private val url: String, | ||||
|     private val initialTitle: String? = null, | ||||
|     private val sourceId: Long? = null, | ||||
| ) : Screen, AssistContentScreen { | ||||
| ) : Screen(), AssistContentScreen { | ||||
|  | ||||
|     private var assistUrl: String? = null | ||||
|  | ||||
|     override val key = uniqueScreenKey | ||||
|  | ||||
|     override fun onProvideAssistUrl() = assistUrl | ||||
|  | ||||
|     @Composable | ||||
|   | ||||
		Reference in New Issue
	
	Block a user