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)
|
||||||
implementation(libs.conductor.support.preference)
|
implementation(libs.conductor.support.preference)
|
||||||
|
|
||||||
|
// Navigation
|
||||||
|
implementation(libs.bundles.voyager)
|
||||||
|
|
||||||
// Shizuku
|
// Shizuku
|
||||||
implementation(libs.shizuku.api)
|
implementation(libs.shizuku.api)
|
||||||
implementation(libs.shizuku.provider)
|
implementation(libs.shizuku.provider)
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
package eu.kanade.tachiyomi.ui.more
|
package eu.kanade.tachiyomi.ui.more
|
||||||
|
|
||||||
import android.os.Bundle
|
|
||||||
import androidx.compose.foundation.layout.Column
|
import androidx.compose.foundation.layout.Column
|
||||||
import androidx.compose.foundation.layout.padding
|
import androidx.compose.foundation.layout.padding
|
||||||
import androidx.compose.foundation.rememberScrollState
|
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.unit.dp
|
||||||
import androidx.compose.ui.viewinterop.AndroidView
|
import androidx.compose.ui.viewinterop.AndroidView
|
||||||
import androidx.core.text.HtmlCompat
|
import androidx.core.text.HtmlCompat
|
||||||
|
import cafe.adriel.voyager.navigator.LocalNavigator
|
||||||
import com.google.android.material.textview.MaterialTextView
|
import com.google.android.material.textview.MaterialTextView
|
||||||
import dev.icerock.moko.resources.compose.stringResource
|
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.i18n.MR
|
||||||
import yokai.presentation.AppBarType
|
import yokai.presentation.AppBarType
|
||||||
import yokai.presentation.YokaiScaffold
|
import yokai.presentation.YokaiScaffold
|
||||||
import yokai.presentation.component.ToolTipButton
|
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
|
@Composable
|
||||||
override fun ScreenContent() {
|
override fun Content() {
|
||||||
val name = bundle.getString(LIBRARY_NAME) ?: throw RuntimeException("Missing library name")
|
val navigator = LocalNavigator.currentOrThrow
|
||||||
val website = bundle.getString(LIBRARY_WEBSITE)
|
val backPress = LocalBackPress.currentOrThrow
|
||||||
val license = bundle.getString(LIBRARY_LICENSE) ?: throw RuntimeException("Missing library license")
|
|
||||||
|
|
||||||
val uriHandler = LocalUriHandler.current
|
val uriHandler = LocalUriHandler.current
|
||||||
|
|
||||||
// FIXME: For some reason AppBar is offscreen
|
// FIXME: For some reason AppBar is offscreen
|
||||||
YokaiScaffold(
|
YokaiScaffold(
|
||||||
onNavigationIconClicked = router::handleBack,
|
onNavigationIconClicked = {
|
||||||
|
when {
|
||||||
|
navigator.canPop -> navigator.pop()
|
||||||
|
else -> backPress()
|
||||||
|
}
|
||||||
|
},
|
||||||
title = name,
|
title = name,
|
||||||
appBarType = AppBarType.SMALL,
|
appBarType = AppBarType.SMALL,
|
||||||
scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(
|
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
|
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.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.runtime.CompositionLocalProvider
|
||||||
import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
|
import cafe.adriel.voyager.core.stack.StackEvent
|
||||||
import com.mikepenz.aboutlibraries.ui.compose.m3.util.htmlReadyLicenseContent
|
import cafe.adriel.voyager.navigator.Navigator
|
||||||
import dev.icerock.moko.resources.compose.stringResource
|
import cafe.adriel.voyager.transitions.ScreenTransition
|
||||||
import eu.kanade.tachiyomi.ui.base.controller.BaseComposeController
|
import eu.kanade.tachiyomi.ui.base.controller.BaseComposeController
|
||||||
import eu.kanade.tachiyomi.util.view.withFadeTransaction
|
import eu.kanade.tachiyomi.util.compose.LocalBackPress
|
||||||
import yokai.i18n.MR
|
import soup.compose.material.motion.animation.materialSharedAxisZ
|
||||||
import yokai.presentation.AppBarType
|
|
||||||
import yokai.presentation.YokaiScaffold
|
|
||||||
|
|
||||||
class AboutLicenseController : BaseComposeController() {
|
class AboutLicenseController : BaseComposeController() {
|
||||||
@Composable
|
@Composable
|
||||||
override fun ScreenContent() {
|
override fun ScreenContent() {
|
||||||
YokaiScaffold(
|
Navigator(
|
||||||
onNavigationIconClicked = router::handleBack,
|
screen = AboutLicenseScreen(),
|
||||||
title = stringResource(MR.strings.open_source_licenses),
|
content = {
|
||||||
appBarType = AppBarType.SMALL,
|
CompositionLocalProvider(LocalBackPress provides router::handleBack) {
|
||||||
scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(),
|
ScreenTransition(
|
||||||
) { innerPadding ->
|
navigator = it,
|
||||||
LibrariesContainer(
|
transition = { materialSharedAxisZ(forward = it.lastEvent != StackEvent.Pop) },
|
||||||
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(),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
)
|
},
|
||||||
}
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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]
|
[versions]
|
||||||
|
aboutlibraries = "11.2.2"
|
||||||
chucker = "3.5.2"
|
chucker = "3.5.2"
|
||||||
coil3 = "3.0.0-alpha08"
|
coil3 = "3.0.0-alpha08"
|
||||||
flexible-adapter = "c8013533"
|
flexible-adapter = "c8013533"
|
||||||
|
@ -13,7 +14,7 @@ sqlite = "2.4.0"
|
||||||
sqldelight = "2.0.2"
|
sqldelight = "2.0.2"
|
||||||
junit = "5.8.2"
|
junit = "5.8.2"
|
||||||
kermit = "2.0.3"
|
kermit = "2.0.3"
|
||||||
aboutlibraries = "11.2.2"
|
voyager = "1.1.0-beta02"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
aboutlibraries = { module = "com.mikepenz:aboutlibraries-compose-m3", version.ref = "aboutlibraries" }
|
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" }
|
viewstatepageradapter = { module = "com.nightlynexus.viewstatepageradapter:viewstatepageradapter", version = "1.1.0" }
|
||||||
viewtooltip = { module = "com.github.florent37:viewtooltip", version = "1.2.2" }
|
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]
|
[plugins]
|
||||||
aboutlibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutlibraries" }
|
aboutlibraries = { id = "com.mikepenz.aboutlibraries.plugin", version.ref = "aboutlibraries" }
|
||||||
firebase-crashlytics = { id = "com.google.firebase.crashlytics", version = "3.0.2" }
|
firebase-crashlytics = { id = "com.google.firebase.crashlytics", version = "3.0.2" }
|
||||||
|
@ -116,3 +120,4 @@ sqlite = [ "sqlite-ktx" ]
|
||||||
test = [ "junit-api", "mockk" ]
|
test = [ "junit-api", "mockk" ]
|
||||||
test-android = [ "junit-android" ]
|
test-android = [ "junit-android" ]
|
||||||
test-runtime = [ "junit-engine" ]
|
test-runtime = [ "junit-engine" ]
|
||||||
|
voyager = ["voyager-navigator", "voyager-transitions"]
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue