mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
refactor: Start using Voyager for navigation
This commit is contained in:
parent
563a3a0289
commit
2e1faefa97
6 changed files with 97 additions and 45 deletions
|
@ -258,6 +258,9 @@ dependencies {
|
|||
implementation(libs.conductor)
|
||||
implementation(libs.conductor.support.preference)
|
||||
|
||||
// Navigation
|
||||
implementation(libs.bundles.voyager)
|
||||
|
||||
// Shizuku
|
||||
implementation(libs.shizuku.api)
|
||||
implementation(libs.shizuku.provider)
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
package eu.kanade.tachiyomi.ui.more
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.compose.foundation.layout.Column
|
||||
import androidx.compose.foundation.layout.padding
|
||||
import androidx.compose.foundation.rememberScrollState
|
||||
|
@ -15,26 +14,36 @@ import androidx.compose.ui.platform.LocalUriHandler
|
|||
import androidx.compose.ui.unit.dp
|
||||
import androidx.compose.ui.viewinterop.AndroidView
|
||||
import androidx.core.text.HtmlCompat
|
||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import com.google.android.material.textview.MaterialTextView
|
||||
import dev.icerock.moko.resources.compose.stringResource
|
||||
import eu.kanade.tachiyomi.ui.base.controller.BaseComposeController
|
||||
import eu.kanade.tachiyomi.util.compose.LocalBackPress
|
||||
import eu.kanade.tachiyomi.util.compose.currentOrThrow
|
||||
import yokai.i18n.MR
|
||||
import yokai.presentation.AppBarType
|
||||
import yokai.presentation.YokaiScaffold
|
||||
import yokai.presentation.component.ToolTipButton
|
||||
import yokai.util.Screen
|
||||
|
||||
class AboutLibraryLicenseController(private val bundle: Bundle) : BaseComposeController(bundle) {
|
||||
class AboutLibraryLicenseScreen(
|
||||
private val name: String,
|
||||
private val website: String?,
|
||||
private val license: String,
|
||||
) : Screen() {
|
||||
@Composable
|
||||
override fun ScreenContent() {
|
||||
val name = bundle.getString(LIBRARY_NAME) ?: throw RuntimeException("Missing library name")
|
||||
val website = bundle.getString(LIBRARY_WEBSITE)
|
||||
val license = bundle.getString(LIBRARY_LICENSE) ?: throw RuntimeException("Missing library license")
|
||||
|
||||
override fun Content() {
|
||||
val navigator = LocalNavigator.currentOrThrow
|
||||
val backPress = LocalBackPress.currentOrThrow
|
||||
val uriHandler = LocalUriHandler.current
|
||||
|
||||
// FIXME: For some reason AppBar is offscreen
|
||||
YokaiScaffold(
|
||||
onNavigationIconClicked = router::handleBack,
|
||||
onNavigationIconClicked = {
|
||||
when {
|
||||
navigator.canPop -> navigator.pop()
|
||||
else -> backPress()
|
||||
}
|
||||
},
|
||||
title = name,
|
||||
appBarType = AppBarType.SMALL,
|
||||
scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(
|
||||
|
@ -73,7 +82,3 @@ class AboutLibraryLicenseController(private val bundle: Bundle) : BaseComposeCon
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
const val LIBRARY_NAME = "aboutLibraries__LibraryName"
|
||||
const val LIBRARY_WEBSITE = "aboutLibraries__LibraryWebsite"
|
||||
const val LIBRARY_LICENSE = "aboutLibraries__LibraryLicense"
|
|
@ -1,43 +1,27 @@
|
|||
package eu.kanade.tachiyomi.ui.more
|
||||
|
||||
import android.os.Bundle
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.material3.TopAppBarDefaults
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
|
||||
import com.mikepenz.aboutlibraries.ui.compose.m3.util.htmlReadyLicenseContent
|
||||
import dev.icerock.moko.resources.compose.stringResource
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import cafe.adriel.voyager.core.stack.StackEvent
|
||||
import cafe.adriel.voyager.navigator.Navigator
|
||||
import cafe.adriel.voyager.transitions.ScreenTransition
|
||||
import eu.kanade.tachiyomi.ui.base.controller.BaseComposeController
|
||||
import eu.kanade.tachiyomi.util.view.withFadeTransaction
|
||||
import yokai.i18n.MR
|
||||
import yokai.presentation.AppBarType
|
||||
import yokai.presentation.YokaiScaffold
|
||||
import eu.kanade.tachiyomi.util.compose.LocalBackPress
|
||||
import soup.compose.material.motion.animation.materialSharedAxisZ
|
||||
|
||||
class AboutLicenseController : BaseComposeController() {
|
||||
@Composable
|
||||
override fun ScreenContent() {
|
||||
YokaiScaffold(
|
||||
onNavigationIconClicked = router::handleBack,
|
||||
title = stringResource(MR.strings.open_source_licenses),
|
||||
appBarType = AppBarType.SMALL,
|
||||
scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(),
|
||||
) { innerPadding ->
|
||||
LibrariesContainer(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentPadding = innerPadding,
|
||||
onLibraryClick = {
|
||||
router.pushController(
|
||||
AboutLibraryLicenseController(
|
||||
Bundle().apply {
|
||||
this.putString(LIBRARY_NAME, it.name)
|
||||
it.website?.let { website -> this.putString(LIBRARY_WEBSITE, website) }
|
||||
this.putString(LIBRARY_LICENSE, it.licenses.firstOrNull()?.htmlReadyLicenseContent.orEmpty())
|
||||
}
|
||||
).withFadeTransaction(),
|
||||
Navigator(
|
||||
screen = AboutLicenseScreen(),
|
||||
content = {
|
||||
CompositionLocalProvider(LocalBackPress provides router::handleBack) {
|
||||
ScreenTransition(
|
||||
navigator = it,
|
||||
transition = { materialSharedAxisZ(forward = it.lastEvent != StackEvent.Pop) },
|
||||
)
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,45 @@
|
|||
package eu.kanade.tachiyomi.ui.more
|
||||
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.material3.TopAppBarDefaults
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||
import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
|
||||
import com.mikepenz.aboutlibraries.ui.compose.m3.util.htmlReadyLicenseContent
|
||||
import dev.icerock.moko.resources.compose.stringResource
|
||||
import eu.kanade.tachiyomi.util.compose.LocalBackPress
|
||||
import eu.kanade.tachiyomi.util.compose.currentOrThrow
|
||||
import yokai.i18n.MR
|
||||
import yokai.presentation.AppBarType
|
||||
import yokai.presentation.YokaiScaffold
|
||||
import yokai.util.Screen
|
||||
|
||||
class AboutLicenseScreen : Screen() {
|
||||
@Composable
|
||||
override fun Content() {
|
||||
val navigator = LocalNavigator.currentOrThrow
|
||||
val backPress = LocalBackPress.currentOrThrow
|
||||
|
||||
YokaiScaffold(
|
||||
onNavigationIconClicked = backPress,
|
||||
title = stringResource(MR.strings.open_source_licenses),
|
||||
appBarType = AppBarType.SMALL,
|
||||
scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(),
|
||||
) { innerPadding ->
|
||||
LibrariesContainer(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
contentPadding = innerPadding,
|
||||
onLibraryClick = {
|
||||
navigator.push(
|
||||
AboutLibraryLicenseScreen(
|
||||
it.name,
|
||||
it.website,
|
||||
it.licenses.firstOrNull()?.htmlReadyLicenseContent.orEmpty(),
|
||||
),
|
||||
)
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
10
app/src/main/java/yokai/util/Navigation.kt
Normal file
10
app/src/main/java/yokai/util/Navigation.kt
Normal file
|
@ -0,0 +1,10 @@
|
|||
package yokai.util
|
||||
|
||||
import cafe.adriel.voyager.core.screen.Screen
|
||||
import cafe.adriel.voyager.core.screen.ScreenKey
|
||||
import cafe.adriel.voyager.core.screen.uniqueScreenKey
|
||||
|
||||
abstract class Screen : Screen {
|
||||
|
||||
override val key: ScreenKey = uniqueScreenKey
|
||||
}
|
|
@ -1,4 +1,5 @@
|
|||
[versions]
|
||||
aboutlibraries = "11.2.2"
|
||||
chucker = "3.5.2"
|
||||
coil3 = "3.0.0-alpha08"
|
||||
flexible-adapter = "c8013533"
|
||||
|
@ -13,7 +14,7 @@ sqlite = "2.4.0"
|
|||
sqldelight = "2.0.2"
|
||||
junit = "5.8.2"
|
||||
kermit = "2.0.3"
|
||||
aboutlibraries = "11.2.2"
|
||||
voyager = "1.1.0-beta02"
|
||||
|
||||
[libraries]
|
||||
aboutlibraries = { module = "com.mikepenz:aboutlibraries-compose-m3", version.ref = "aboutlibraries" }
|
||||
|
@ -96,6 +97,9 @@ unifile = { module = "com.github.tachiyomiorg:unifile", version = "a9de196cc7" }
|
|||
viewstatepageradapter = { module = "com.nightlynexus.viewstatepageradapter:viewstatepageradapter", version = "1.1.0" }
|
||||
viewtooltip = { module = "com.github.florent37:viewtooltip", version = "1.2.2" }
|
||||
|
||||
voyager-navigator = { module = "cafe.adriel.voyager:voyager-navigator", version.ref = "voyager" }
|
||||
voyager-transitions = { module = "cafe.adriel.voyager:voyager-transitions", version.ref = "voyager" }
|
||||
|
||||
[plugins]
|
||||
aboutlibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutlibraries" }
|
||||
firebase-crashlytics = { id = "com.google.firebase.crashlytics", version = "3.0.2" }
|
||||
|
@ -116,3 +120,4 @@ sqlite = [ "sqlite-ktx" ]
|
|||
test = [ "junit-api", "mockk" ]
|
||||
test-android = [ "junit-android" ]
|
||||
test-runtime = [ "junit-engine" ]
|
||||
voyager = ["voyager-navigator", "voyager-transitions"]
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue