refactor: about viewmodel
This commit is contained in:
parent
3f0cd812a5
commit
eb87ef8b45
19 changed files with 152 additions and 94 deletions
|
|
@ -0,0 +1,22 @@
|
||||||
|
/*
|
||||||
|
* Book's Story — free and open-source Material You eBook reader.
|
||||||
|
* Copyright (C) 2024-2025 Acclorite
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package ua.acclorite.book_story.presentation.about
|
||||||
|
|
||||||
|
import androidx.compose.runtime.Immutable
|
||||||
|
|
||||||
|
@Immutable
|
||||||
|
sealed class AboutEffect {
|
||||||
|
data class OnNavigateToBrowserPage(
|
||||||
|
val page: String
|
||||||
|
) : AboutEffect()
|
||||||
|
|
||||||
|
data object OnNavigateToLicenses : AboutEffect()
|
||||||
|
|
||||||
|
data object OnNavigateToCredits : AboutEffect()
|
||||||
|
|
||||||
|
data object OnNavigateBack : AboutEffect()
|
||||||
|
}
|
||||||
|
|
@ -6,13 +6,17 @@
|
||||||
|
|
||||||
package ua.acclorite.book_story.presentation.about
|
package ua.acclorite.book_story.presentation.about
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import androidx.compose.runtime.Immutable
|
import androidx.compose.runtime.Immutable
|
||||||
|
|
||||||
@Immutable
|
@Immutable
|
||||||
sealed class AboutEvent {
|
sealed class AboutEvent {
|
||||||
data class OnNavigateToBrowserPage(
|
data class OnNavigateToBrowserPage(
|
||||||
val page: String,
|
val page: String
|
||||||
val context: Context
|
|
||||||
) : AboutEvent()
|
) : AboutEvent()
|
||||||
|
|
||||||
|
data object OnNavigateToLicenses : AboutEvent()
|
||||||
|
|
||||||
|
data object OnNavigateToCredits : AboutEvent()
|
||||||
|
|
||||||
|
data object OnNavigateBack : AboutEvent()
|
||||||
}
|
}
|
||||||
|
|
@ -6,38 +6,37 @@
|
||||||
|
|
||||||
package ua.acclorite.book_story.presentation.about
|
package ua.acclorite.book_story.presentation.about
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import androidx.activity.ComponentActivity
|
|
||||||
import androidx.core.net.toUri
|
|
||||||
import androidx.lifecycle.ViewModel
|
import androidx.lifecycle.ViewModel
|
||||||
import androidx.lifecycle.viewModelScope
|
import androidx.lifecycle.viewModelScope
|
||||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.flow.MutableSharedFlow
|
||||||
|
import kotlinx.coroutines.flow.asSharedFlow
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
|
||||||
import ua.acclorite.book_story.R
|
|
||||||
import ua.acclorite.book_story.ui.common.helpers.launchActivity
|
|
||||||
import ua.acclorite.book_story.ui.common.helpers.showToast
|
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
@HiltViewModel
|
@HiltViewModel
|
||||||
class AboutModel @Inject constructor() : ViewModel() {
|
class AboutModel @Inject constructor() : ViewModel() {
|
||||||
|
|
||||||
fun onEvent(event: AboutEvent) {
|
private val _effects = MutableSharedFlow<AboutEffect>()
|
||||||
when (event) {
|
val effects = _effects.asSharedFlow()
|
||||||
is AboutEvent.OnNavigateToBrowserPage -> {
|
|
||||||
viewModelScope.launch {
|
|
||||||
val intent = Intent(
|
|
||||||
Intent.ACTION_VIEW,
|
|
||||||
event.page.toUri()
|
|
||||||
)
|
|
||||||
|
|
||||||
intent.launchActivity(event.context as ComponentActivity) {
|
fun onEvent(event: AboutEvent) {
|
||||||
withContext(Dispatchers.Main) {
|
viewModelScope.launch {
|
||||||
event.context.getString(R.string.error_no_browser)
|
when (event) {
|
||||||
.showToast(context = event.context, longToast = false)
|
is AboutEvent.OnNavigateToBrowserPage -> {
|
||||||
}
|
_effects.emit(AboutEffect.OnNavigateToBrowserPage(event.page))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
is AboutEvent.OnNavigateToLicenses -> {
|
||||||
|
_effects.emit(AboutEffect.OnNavigateToLicenses)
|
||||||
|
}
|
||||||
|
|
||||||
|
is AboutEvent.OnNavigateToCredits -> {
|
||||||
|
_effects.emit(AboutEffect.OnNavigateToCredits)
|
||||||
|
}
|
||||||
|
|
||||||
|
is AboutEvent.OnNavigateBack -> {
|
||||||
|
_effects.emit(AboutEffect.OnNavigateBack)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -12,12 +12,10 @@ import androidx.compose.material3.TopAppBarDefaults
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.hilt.navigation.compose.hiltViewModel
|
import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import ua.acclorite.book_story.presentation.credits.CreditsScreen
|
|
||||||
import ua.acclorite.book_story.presentation.licenses.LicensesScreen
|
|
||||||
import ua.acclorite.book_story.presentation.navigator.Screen
|
import ua.acclorite.book_story.presentation.navigator.Screen
|
||||||
import ua.acclorite.book_story.ui.about.AboutContent
|
import ua.acclorite.book_story.ui.about.AboutContent
|
||||||
|
import ua.acclorite.book_story.ui.about.AboutEffects
|
||||||
import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior
|
import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior
|
||||||
import ua.acclorite.book_story.ui.navigator.LocalNavigator
|
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
object AboutScreen : Screen, Parcelable {
|
object AboutScreen : Screen, Parcelable {
|
||||||
|
|
@ -25,24 +23,19 @@ object AboutScreen : Screen, Parcelable {
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
override fun Content() {
|
override fun Content() {
|
||||||
val navigator = LocalNavigator.current
|
|
||||||
val screenModel = hiltViewModel<AboutModel>()
|
val screenModel = hiltViewModel<AboutModel>()
|
||||||
|
|
||||||
val (scrollBehavior, listState) = TopAppBarDefaults.collapsibleTopAppBarScrollBehavior()
|
val (scrollBehavior, listState) = TopAppBarDefaults.collapsibleTopAppBarScrollBehavior()
|
||||||
|
|
||||||
|
AboutEffects(screenModel.effects)
|
||||||
|
|
||||||
AboutContent(
|
AboutContent(
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
listState = listState,
|
listState = listState,
|
||||||
navigateToBrowserPage = screenModel::onEvent,
|
navigateToBrowserPage = screenModel::onEvent,
|
||||||
navigateToLicenses = {
|
navigateToLicenses = screenModel::onEvent,
|
||||||
navigator.push(LicensesScreen)
|
navigateToCredits = screenModel::onEvent,
|
||||||
},
|
navigateBack = screenModel::onEvent
|
||||||
navigateToCredits = {
|
|
||||||
navigator.push(CreditsScreen)
|
|
||||||
},
|
|
||||||
navigateBack = {
|
|
||||||
navigator.pop()
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -14,9 +14,9 @@ import androidx.hilt.navigation.compose.hiltViewModel
|
||||||
import kotlinx.parcelize.Parcelize
|
import kotlinx.parcelize.Parcelize
|
||||||
import ua.acclorite.book_story.presentation.about.AboutModel
|
import ua.acclorite.book_story.presentation.about.AboutModel
|
||||||
import ua.acclorite.book_story.presentation.navigator.Screen
|
import ua.acclorite.book_story.presentation.navigator.Screen
|
||||||
|
import ua.acclorite.book_story.ui.about.AboutEffects
|
||||||
import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior
|
import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior
|
||||||
import ua.acclorite.book_story.ui.credits.CreditsContent
|
import ua.acclorite.book_story.ui.credits.CreditsContent
|
||||||
import ua.acclorite.book_story.ui.navigator.LocalNavigator
|
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
object CreditsScreen : Screen, Parcelable {
|
object CreditsScreen : Screen, Parcelable {
|
||||||
|
|
@ -24,18 +24,17 @@ object CreditsScreen : Screen, Parcelable {
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
override fun Content() {
|
override fun Content() {
|
||||||
val navigator = LocalNavigator.current
|
|
||||||
val screenModel = hiltViewModel<AboutModel>()
|
val screenModel = hiltViewModel<AboutModel>()
|
||||||
|
|
||||||
val (scrollBehavior, listState) = TopAppBarDefaults.collapsibleTopAppBarScrollBehavior()
|
val (scrollBehavior, listState) = TopAppBarDefaults.collapsibleTopAppBarScrollBehavior()
|
||||||
|
|
||||||
|
AboutEffects(screenModel.effects)
|
||||||
|
|
||||||
CreditsContent(
|
CreditsContent(
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
listState = listState,
|
listState = listState,
|
||||||
navigateToBrowserPage = screenModel::onEvent,
|
navigateToBrowserPage = screenModel::onEvent,
|
||||||
navigateBack = {
|
navigateBack = screenModel::onEvent
|
||||||
navigator.pop()
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -20,9 +20,9 @@ import kotlinx.parcelize.Parcelize
|
||||||
import ua.acclorite.book_story.R
|
import ua.acclorite.book_story.R
|
||||||
import ua.acclorite.book_story.presentation.about.AboutModel
|
import ua.acclorite.book_story.presentation.about.AboutModel
|
||||||
import ua.acclorite.book_story.presentation.navigator.Screen
|
import ua.acclorite.book_story.presentation.navigator.Screen
|
||||||
|
import ua.acclorite.book_story.ui.about.AboutEffects
|
||||||
import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior
|
import ua.acclorite.book_story.ui.common.components.top_bar.collapsibleTopAppBarScrollBehavior
|
||||||
import ua.acclorite.book_story.ui.license_info.LicenseInfoContent
|
import ua.acclorite.book_story.ui.license_info.LicenseInfoContent
|
||||||
import ua.acclorite.book_story.ui.navigator.LocalNavigator
|
|
||||||
|
|
||||||
@Parcelize
|
@Parcelize
|
||||||
data class LicenseInfoScreen(val uniqueId: String) : Screen, Parcelable {
|
data class LicenseInfoScreen(val uniqueId: String) : Screen, Parcelable {
|
||||||
|
|
@ -30,7 +30,6 @@ data class LicenseInfoScreen(val uniqueId: String) : Screen, Parcelable {
|
||||||
@OptIn(ExperimentalMaterial3Api::class)
|
@OptIn(ExperimentalMaterial3Api::class)
|
||||||
@Composable
|
@Composable
|
||||||
override fun Content() {
|
override fun Content() {
|
||||||
val navigator = LocalNavigator.current
|
|
||||||
val screenModel = hiltViewModel<AboutModel>()
|
val screenModel = hiltViewModel<AboutModel>()
|
||||||
|
|
||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
|
|
@ -42,14 +41,14 @@ data class LicenseInfoScreen(val uniqueId: String) : Screen, Parcelable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AboutEffects(screenModel.effects)
|
||||||
|
|
||||||
LicenseInfoContent(
|
LicenseInfoContent(
|
||||||
library = library.value,
|
library = library.value,
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
listState = listState,
|
listState = listState,
|
||||||
navigateToBrowserPage = screenModel::onEvent,
|
navigateToBrowserPage = screenModel::onEvent,
|
||||||
navigateBack = {
|
navigateBack = screenModel::onEvent
|
||||||
navigator.pop()
|
|
||||||
}
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -52,8 +52,7 @@ fun AboutBadges(
|
||||||
badge.url?.let {
|
badge.url?.let {
|
||||||
navigateToBrowserPage(
|
navigateToBrowserPage(
|
||||||
AboutEvent.OnNavigateToBrowserPage(
|
AboutEvent.OnNavigateToBrowserPage(
|
||||||
page = it,
|
page = it
|
||||||
context = context
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,9 +18,9 @@ fun AboutContent(
|
||||||
scrollBehavior: TopAppBarScrollBehavior,
|
scrollBehavior: TopAppBarScrollBehavior,
|
||||||
listState: LazyListState,
|
listState: LazyListState,
|
||||||
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
||||||
navigateToLicenses: () -> Unit,
|
navigateToLicenses: (AboutEvent.OnNavigateToLicenses) -> Unit,
|
||||||
navigateToCredits: () -> Unit,
|
navigateToCredits: (AboutEvent.OnNavigateToCredits) -> Unit,
|
||||||
navigateBack: () -> Unit
|
navigateBack: (AboutEvent.OnNavigateBack) -> Unit
|
||||||
) {
|
) {
|
||||||
AboutScaffold(
|
AboutScaffold(
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
* Book's Story — free and open-source Material You eBook reader.
|
||||||
|
* Copyright (C) 2024-2025 Acclorite
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
package ua.acclorite.book_story.ui.about
|
||||||
|
|
||||||
|
import android.content.Intent
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
import androidx.core.net.toUri
|
||||||
|
import kotlinx.coroutines.flow.SharedFlow
|
||||||
|
import ua.acclorite.book_story.R
|
||||||
|
import ua.acclorite.book_story.presentation.about.AboutEffect
|
||||||
|
import ua.acclorite.book_story.presentation.credits.CreditsScreen
|
||||||
|
import ua.acclorite.book_story.presentation.licenses.LicensesScreen
|
||||||
|
import ua.acclorite.book_story.ui.common.helpers.LocalActivity
|
||||||
|
import ua.acclorite.book_story.ui.common.helpers.launchActivity
|
||||||
|
import ua.acclorite.book_story.ui.common.helpers.showToast
|
||||||
|
import ua.acclorite.book_story.ui.navigator.LocalNavigator
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun AboutEffects(effects: SharedFlow<AboutEffect>) {
|
||||||
|
val navigator = LocalNavigator.current
|
||||||
|
val activity = LocalActivity.current
|
||||||
|
|
||||||
|
LaunchedEffect(Unit) {
|
||||||
|
effects.collect { effect ->
|
||||||
|
when (effect) {
|
||||||
|
is AboutEffect.OnNavigateToBrowserPage -> {
|
||||||
|
val intent = Intent(
|
||||||
|
Intent.ACTION_VIEW,
|
||||||
|
effect.page.toUri()
|
||||||
|
)
|
||||||
|
|
||||||
|
intent.launchActivity(activity) {
|
||||||
|
activity.getString(R.string.error_no_browser)
|
||||||
|
.showToast(context = activity, longToast = false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
is AboutEffect.OnNavigateToLicenses -> {
|
||||||
|
navigator.push(LicensesScreen)
|
||||||
|
}
|
||||||
|
|
||||||
|
is AboutEffect.OnNavigateToCredits -> {
|
||||||
|
navigator.push(CreditsScreen)
|
||||||
|
}
|
||||||
|
|
||||||
|
is AboutEffect.OnNavigateBack -> {
|
||||||
|
navigator.pop()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -21,7 +21,6 @@ import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import androidx.compose.ui.res.painterResource
|
import androidx.compose.ui.res.painterResource
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
|
@ -36,11 +35,9 @@ fun AboutLayout(
|
||||||
paddingValues: PaddingValues,
|
paddingValues: PaddingValues,
|
||||||
listState: LazyListState,
|
listState: LazyListState,
|
||||||
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
||||||
navigateToLicenses: () -> Unit,
|
navigateToLicenses: (AboutEvent.OnNavigateToLicenses) -> Unit,
|
||||||
navigateToCredits: () -> Unit
|
navigateToCredits: (AboutEvent.OnNavigateToCredits) -> Unit
|
||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
|
||||||
|
|
||||||
LazyColumnWithScrollbar(
|
LazyColumnWithScrollbar(
|
||||||
Modifier
|
Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
|
|
@ -82,8 +79,7 @@ fun AboutLayout(
|
||||||
) {
|
) {
|
||||||
navigateToBrowserPage(
|
navigateToBrowserPage(
|
||||||
AboutEvent.OnNavigateToBrowserPage(
|
AboutEvent.OnNavigateToBrowserPage(
|
||||||
page = LinkData.RELEASES,
|
page = LinkData.RELEASES
|
||||||
context = context
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -96,8 +92,7 @@ fun AboutLayout(
|
||||||
) {
|
) {
|
||||||
navigateToBrowserPage(
|
navigateToBrowserPage(
|
||||||
AboutEvent.OnNavigateToBrowserPage(
|
AboutEvent.OnNavigateToBrowserPage(
|
||||||
page = LinkData.ISSUES,
|
page = LinkData.ISSUES
|
||||||
context = context
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -111,8 +106,7 @@ fun AboutLayout(
|
||||||
) {
|
) {
|
||||||
navigateToBrowserPage(
|
navigateToBrowserPage(
|
||||||
AboutEvent.OnNavigateToBrowserPage(
|
AboutEvent.OnNavigateToBrowserPage(
|
||||||
page = LinkData.CONTRIBUTORS,
|
page = LinkData.CONTRIBUTORS
|
||||||
context = context
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -123,7 +117,7 @@ fun AboutLayout(
|
||||||
title = stringResource(id = R.string.licenses_option),
|
title = stringResource(id = R.string.licenses_option),
|
||||||
description = null
|
description = null
|
||||||
) {
|
) {
|
||||||
navigateToLicenses()
|
navigateToLicenses(AboutEvent.OnNavigateToLicenses)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -132,7 +126,7 @@ fun AboutLayout(
|
||||||
title = stringResource(id = R.string.credits_option),
|
title = stringResource(id = R.string.credits_option),
|
||||||
description = null
|
description = null
|
||||||
) {
|
) {
|
||||||
navigateToCredits()
|
navigateToCredits(AboutEvent.OnNavigateToCredits)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -143,8 +137,7 @@ fun AboutLayout(
|
||||||
) {
|
) {
|
||||||
navigateToBrowserPage(
|
navigateToBrowserPage(
|
||||||
AboutEvent.OnNavigateToBrowserPage(
|
AboutEvent.OnNavigateToBrowserPage(
|
||||||
page = LinkData.TRANSLATION,
|
page = LinkData.TRANSLATION
|
||||||
context = context
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
@ -157,8 +150,7 @@ fun AboutLayout(
|
||||||
) {
|
) {
|
||||||
navigateToBrowserPage(
|
navigateToBrowserPage(
|
||||||
AboutEvent.OnNavigateToBrowserPage(
|
AboutEvent.OnNavigateToBrowserPage(
|
||||||
page = LinkData.SUPPORT,
|
page = LinkData.SUPPORT
|
||||||
context = context
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,9 +26,9 @@ fun AboutScaffold(
|
||||||
scrollBehavior: TopAppBarScrollBehavior,
|
scrollBehavior: TopAppBarScrollBehavior,
|
||||||
listState: LazyListState,
|
listState: LazyListState,
|
||||||
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
||||||
navigateToLicenses: () -> Unit,
|
navigateToLicenses: (AboutEvent.OnNavigateToLicenses) -> Unit,
|
||||||
navigateToCredits: () -> Unit,
|
navigateToCredits: (AboutEvent.OnNavigateToCredits) -> Unit,
|
||||||
navigateBack: () -> Unit
|
navigateBack: (AboutEvent.OnNavigateBack) -> Unit
|
||||||
) {
|
) {
|
||||||
Scaffold(
|
Scaffold(
|
||||||
Modifier
|
Modifier
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import androidx.compose.material3.TopAppBarScrollBehavior
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import ua.acclorite.book_story.R
|
import ua.acclorite.book_story.R
|
||||||
|
import ua.acclorite.book_story.presentation.about.AboutEvent
|
||||||
import ua.acclorite.book_story.ui.common.components.common.StyledText
|
import ua.acclorite.book_story.ui.common.components.common.StyledText
|
||||||
import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton
|
import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton
|
||||||
|
|
||||||
|
|
@ -21,14 +22,14 @@ import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton
|
||||||
@Composable
|
@Composable
|
||||||
fun AboutTopBar(
|
fun AboutTopBar(
|
||||||
scrollBehavior: TopAppBarScrollBehavior,
|
scrollBehavior: TopAppBarScrollBehavior,
|
||||||
navigateBack: () -> Unit
|
navigateBack: (AboutEvent.OnNavigateBack) -> Unit
|
||||||
) {
|
) {
|
||||||
LargeTopAppBar(
|
LargeTopAppBar(
|
||||||
title = {
|
title = {
|
||||||
StyledText(stringResource(id = R.string.about_screen))
|
StyledText(stringResource(id = R.string.about_screen))
|
||||||
},
|
},
|
||||||
navigationIcon = {
|
navigationIcon = {
|
||||||
NavigatorBackIconButton(navigateBack = navigateBack)
|
NavigatorBackIconButton(navigateBack = { navigateBack(AboutEvent.OnNavigateBack) })
|
||||||
},
|
},
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
colors = TopAppBarDefaults.topAppBarColors(
|
colors = TopAppBarDefaults.topAppBarColors(
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ fun CreditsContent(
|
||||||
scrollBehavior: TopAppBarScrollBehavior,
|
scrollBehavior: TopAppBarScrollBehavior,
|
||||||
listState: LazyListState,
|
listState: LazyListState,
|
||||||
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
||||||
navigateBack: () -> Unit
|
navigateBack: (AboutEvent.OnNavigateBack) -> Unit
|
||||||
) {
|
) {
|
||||||
CreditsScaffold(
|
CreditsScaffold(
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,6 @@ import androidx.compose.foundation.lazy.LazyListState
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import ua.acclorite.book_story.presentation.about.AboutEvent
|
import ua.acclorite.book_story.presentation.about.AboutEvent
|
||||||
import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar
|
import ua.acclorite.book_story.ui.common.components.common.LazyColumnWithScrollbar
|
||||||
import ua.acclorite.book_story.ui.credits.data.CreditData
|
import ua.acclorite.book_story.ui.credits.data.CreditData
|
||||||
|
|
@ -24,7 +23,6 @@ fun CreditsLayout(
|
||||||
listState: LazyListState,
|
listState: LazyListState,
|
||||||
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit
|
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit
|
||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
|
||||||
LazyColumnWithScrollbar(
|
LazyColumnWithScrollbar(
|
||||||
Modifier
|
Modifier
|
||||||
.fillMaxSize()
|
.fillMaxSize()
|
||||||
|
|
@ -39,8 +37,7 @@ fun CreditsLayout(
|
||||||
credit.website?.let { website ->
|
credit.website?.let { website ->
|
||||||
navigateToBrowserPage(
|
navigateToBrowserPage(
|
||||||
AboutEvent.OnNavigateToBrowserPage(
|
AboutEvent.OnNavigateToBrowserPage(
|
||||||
page = website,
|
page = website
|
||||||
context = context
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -26,7 +26,7 @@ fun CreditsScaffold(
|
||||||
scrollBehavior: TopAppBarScrollBehavior,
|
scrollBehavior: TopAppBarScrollBehavior,
|
||||||
listState: LazyListState,
|
listState: LazyListState,
|
||||||
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
||||||
navigateBack: () -> Unit
|
navigateBack: (AboutEvent.OnNavigateBack) -> Unit
|
||||||
) {
|
) {
|
||||||
Scaffold(
|
Scaffold(
|
||||||
Modifier
|
Modifier
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,7 @@ import androidx.compose.material3.TopAppBarScrollBehavior
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import ua.acclorite.book_story.R
|
import ua.acclorite.book_story.R
|
||||||
|
import ua.acclorite.book_story.presentation.about.AboutEvent
|
||||||
import ua.acclorite.book_story.ui.common.components.common.StyledText
|
import ua.acclorite.book_story.ui.common.components.common.StyledText
|
||||||
import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton
|
import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton
|
||||||
|
|
||||||
|
|
@ -21,14 +22,14 @@ import ua.acclorite.book_story.ui.navigator.NavigatorBackIconButton
|
||||||
@Composable
|
@Composable
|
||||||
fun CreditsTopBar(
|
fun CreditsTopBar(
|
||||||
scrollBehavior: TopAppBarScrollBehavior,
|
scrollBehavior: TopAppBarScrollBehavior,
|
||||||
navigateBack: () -> Unit
|
navigateBack: (AboutEvent.OnNavigateBack) -> Unit
|
||||||
) {
|
) {
|
||||||
LargeTopAppBar(
|
LargeTopAppBar(
|
||||||
title = {
|
title = {
|
||||||
StyledText(stringResource(id = R.string.credits_option))
|
StyledText(stringResource(id = R.string.credits_option))
|
||||||
},
|
},
|
||||||
navigationIcon = {
|
navigationIcon = {
|
||||||
NavigatorBackIconButton(navigateBack = navigateBack)
|
NavigatorBackIconButton(navigateBack = { navigateBack(AboutEvent.OnNavigateBack) })
|
||||||
},
|
},
|
||||||
scrollBehavior = scrollBehavior,
|
scrollBehavior = scrollBehavior,
|
||||||
colors = TopAppBarDefaults.topAppBarColors(
|
colors = TopAppBarDefaults.topAppBarColors(
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ fun LicenseInfoContent(
|
||||||
scrollBehavior: TopAppBarScrollBehavior,
|
scrollBehavior: TopAppBarScrollBehavior,
|
||||||
listState: LazyListState,
|
listState: LazyListState,
|
||||||
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
||||||
navigateBack: () -> Unit
|
navigateBack: (AboutEvent.OnNavigateBack) -> Unit
|
||||||
) {
|
) {
|
||||||
LicenseInfoScaffold(
|
LicenseInfoScaffold(
|
||||||
library = library,
|
library = library,
|
||||||
|
|
|
||||||
|
|
@ -29,7 +29,7 @@ fun LicenseInfoScaffold(
|
||||||
scrollBehavior: TopAppBarScrollBehavior,
|
scrollBehavior: TopAppBarScrollBehavior,
|
||||||
listState: LazyListState,
|
listState: LazyListState,
|
||||||
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
||||||
navigateBack: () -> Unit
|
navigateBack: (AboutEvent.OnNavigateBack) -> Unit
|
||||||
) {
|
) {
|
||||||
Scaffold(
|
Scaffold(
|
||||||
Modifier
|
Modifier
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,6 @@ import androidx.compose.material3.MaterialTheme
|
||||||
import androidx.compose.material3.TopAppBarDefaults
|
import androidx.compose.material3.TopAppBarDefaults
|
||||||
import androidx.compose.material3.TopAppBarScrollBehavior
|
import androidx.compose.material3.TopAppBarScrollBehavior
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.platform.LocalContext
|
|
||||||
import com.mikepenz.aboutlibraries.entity.Library
|
import com.mikepenz.aboutlibraries.entity.Library
|
||||||
import ua.acclorite.book_story.R
|
import ua.acclorite.book_story.R
|
||||||
import ua.acclorite.book_story.presentation.about.AboutEvent
|
import ua.acclorite.book_story.presentation.about.AboutEvent
|
||||||
|
|
@ -28,19 +27,16 @@ fun LicenseInfoTopBar(
|
||||||
library: Library,
|
library: Library,
|
||||||
scrollBehavior: TopAppBarScrollBehavior,
|
scrollBehavior: TopAppBarScrollBehavior,
|
||||||
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit,
|
||||||
navigateBack: () -> Unit
|
navigateBack: (AboutEvent.OnNavigateBack) -> Unit
|
||||||
) {
|
) {
|
||||||
val context = LocalContext.current
|
|
||||||
|
|
||||||
LargeTopAppBar(
|
LargeTopAppBar(
|
||||||
title = {
|
title = {
|
||||||
StyledText(
|
StyledText(
|
||||||
text = library.name,
|
text = library.name
|
||||||
maxLines = 1
|
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
navigationIcon = {
|
navigationIcon = {
|
||||||
NavigatorBackIconButton(navigateBack = navigateBack)
|
NavigatorBackIconButton(navigateBack = { navigateBack(AboutEvent.OnNavigateBack) })
|
||||||
},
|
},
|
||||||
actions = {
|
actions = {
|
||||||
if (library.website?.isNotBlank() == true) {
|
if (library.website?.isNotBlank() == true) {
|
||||||
|
|
@ -51,8 +47,7 @@ fun LicenseInfoTopBar(
|
||||||
) {
|
) {
|
||||||
navigateToBrowserPage(
|
navigateToBrowserPage(
|
||||||
AboutEvent.OnNavigateToBrowserPage(
|
AboutEvent.OnNavigateToBrowserPage(
|
||||||
page = library.website!!,
|
page = library.website!!
|
||||||
context = context
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue