From 88fab99fbd784c34d19427e63a7d26e790b2e0f3 Mon Sep 17 00:00:00 2001 From: DatLag Date: Fri, 29 Dec 2023 02:03:11 +0100 Subject: [PATCH] dismiss series if page clicked twice (part of #68) --- .../shared/ui/screen/initial/InitialScreen.kt | 4 +++- .../ui/screen/initial/InitialScreenComponent.kt | 11 +++++++---- .../shared/ui/screen/initial/SeriesHolderComponent.kt | 7 +++++++ .../ui/screen/initial/favorite/FavoriteComponent.kt | 3 ++- .../initial/favorite/FavoriteScreenComponent.kt | 6 +++++- .../shared/ui/screen/initial/home/HomeComponent.kt | 3 ++- .../ui/screen/initial/home/HomeScreenComponent.kt | 8 ++++++-- .../ui/screen/initial/search/SearchComponent.kt | 3 ++- .../ui/screen/initial/search/SearchScreenComponent.kt | 6 +++++- 9 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/SeriesHolderComponent.kt diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreen.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreen.kt index de47d50f..8049499d 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreen.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreen.kt @@ -75,7 +75,9 @@ private fun CompactScreen( Pages( pages = component.pages, onPageSelected = { index -> - component.selectPage(index) + if (selectedPage != index) { + component.selectPage(index) + } }, pager = { modifier, state, key, pageContent -> val scrollEnabled = when (state.currentPage) { diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreenComponent.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreenComponent.kt index 661b836f..385e2be3 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreenComponent.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreenComponent.kt @@ -14,7 +14,6 @@ import dev.datlag.burningseries.model.Series import dev.datlag.burningseries.model.Shortcut import dev.datlag.burningseries.shared.LocalDI import dev.datlag.burningseries.shared.SharedRes -import dev.datlag.burningseries.shared.ui.navigation.Component import dev.datlag.burningseries.shared.ui.screen.initial.favorite.FavoriteScreenComponent import dev.datlag.burningseries.shared.ui.screen.initial.home.HomeScreenComponent import dev.datlag.burningseries.shared.ui.screen.initial.search.SearchScreenComponent @@ -48,7 +47,7 @@ class InitialScreenComponent( private val pagesNavigation = PagesNavigation() @OptIn(ExperimentalDecomposeApi::class) - override val pages: Value> = childPages( + override val pages: Value> = childPages( source = pagesNavigation, serializer = View.serializer(), initialPages = { @@ -85,7 +84,7 @@ class InitialScreenComponent( private fun createChild( view: View, componentContext: ComponentContext - ) : Component { + ) : SeriesHolderComponent { return when (view) { is View.Home -> HomeScreenComponent( componentContext = componentContext, @@ -117,6 +116,10 @@ class InitialScreenComponent( @OptIn(ExperimentalDecomposeApi::class) override fun selectPage(index: Int) { - pagesNavigation.select(index = index) + pagesNavigation.select(index = index) { new, old -> + if (new.items[new.selectedIndex] == old.items[old.selectedIndex]) { + pages.value.items[pages.value.selectedIndex].instance?.dismissHoldingSeries() + } + } } } \ No newline at end of file diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/SeriesHolderComponent.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/SeriesHolderComponent.kt new file mode 100644 index 00000000..98407ebb --- /dev/null +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/SeriesHolderComponent.kt @@ -0,0 +1,7 @@ +package dev.datlag.burningseries.shared.ui.screen.initial + +import dev.datlag.burningseries.shared.ui.navigation.Component + +interface SeriesHolderComponent : Component { + fun dismissHoldingSeries() +} \ No newline at end of file diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteComponent.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteComponent.kt index 0b2f9191..cab8f565 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteComponent.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteComponent.kt @@ -4,9 +4,10 @@ import com.arkivanov.decompose.router.slot.ChildSlot import com.arkivanov.decompose.value.Value import dev.datlag.burningseries.database.Series import dev.datlag.burningseries.shared.ui.navigation.Component +import dev.datlag.burningseries.shared.ui.screen.initial.SeriesHolderComponent import kotlinx.coroutines.flow.StateFlow -interface FavoriteComponent : Component { +interface FavoriteComponent : SeriesHolderComponent { val favorites: StateFlow> val searchItems: StateFlow> diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteScreenComponent.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteScreenComponent.kt index 510724f2..c378311a 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteScreenComponent.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteScreenComponent.kt @@ -79,7 +79,7 @@ class FavoriteScreenComponent( initialHref = config.href, initialCoverHref = config.coverHref, onGoBack = { - navigation.dismiss(scrollEnabled) + dismissHoldingSeries() }, watchVideo = { schemeKey, series, episode, stream -> watchVideo(schemeKey, series, episode, stream) @@ -109,4 +109,8 @@ class FavoriteScreenComponent( override fun searchQuery(text: String) { searchQuery.value = text.trim() } + + override fun dismissHoldingSeries() { + navigation.dismiss(scrollEnabled) + } } \ No newline at end of file diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeComponent.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeComponent.kt index 66117ee7..24dd5545 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeComponent.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeComponent.kt @@ -6,9 +6,10 @@ import dev.datlag.burningseries.model.Release import dev.datlag.burningseries.model.state.HomeState import dev.datlag.burningseries.shared.ui.navigation.Component import dev.datlag.burningseries.shared.ui.navigation.DialogComponent +import dev.datlag.burningseries.shared.ui.screen.initial.SeriesHolderComponent import kotlinx.coroutines.flow.StateFlow -interface HomeComponent : Component { +interface HomeComponent : SeriesHolderComponent { val child: Value> val dialog: Value> diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeScreenComponent.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeScreenComponent.kt index e0c0cd44..9fe2cfa6 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeScreenComponent.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeScreenComponent.kt @@ -77,8 +77,7 @@ class HomeScreenComponent( initialHref = config.href, initialCoverHref = config.coverHref, onGoBack = { - shortcutIntent = Shortcut.Intent.NONE - navigation.dismiss(scrollEnabled) + dismissHoldingSeries() }, watchVideo = { schemeKey, series, episode, stream -> watchVideo(schemeKey, series, episode, stream) @@ -127,4 +126,9 @@ class HomeScreenComponent( override fun showDialog(config: DialogConfig) { dialogNavigation.activate(config) } + + override fun dismissHoldingSeries() { + shortcutIntent = Shortcut.Intent.NONE + navigation.dismiss(scrollEnabled) + } } \ No newline at end of file diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/search/SearchComponent.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/search/SearchComponent.kt index fba5506a..44a34a3f 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/search/SearchComponent.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/search/SearchComponent.kt @@ -5,9 +5,10 @@ import com.arkivanov.decompose.value.Value import dev.datlag.burningseries.model.Genre import dev.datlag.burningseries.model.state.SearchState import dev.datlag.burningseries.shared.ui.navigation.Component +import dev.datlag.burningseries.shared.ui.screen.initial.SeriesHolderComponent import kotlinx.coroutines.flow.StateFlow -interface SearchComponent : Component { +interface SearchComponent : SeriesHolderComponent { val searchState: StateFlow val genres: StateFlow> diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/search/SearchScreenComponent.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/search/SearchScreenComponent.kt index cecff0ff..a68e4a63 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/search/SearchScreenComponent.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/search/SearchScreenComponent.kt @@ -89,7 +89,7 @@ class SearchScreenComponent( initialHref = config.href, initialCoverHref = null, onGoBack = { - navigation.dismiss(scrollEnabled) + dismissHoldingSeries() }, watchVideo = { schemeKey, series, episode, stream -> watchVideo(schemeKey, series, episode, stream) @@ -127,4 +127,8 @@ class SearchScreenComponent( scrollEnabled(false) } } + + override fun dismissHoldingSeries() { + navigation.dismiss(scrollEnabled) + } } \ No newline at end of file