From 63048d2f0b57477aecb4fd91f1f8c20a66ec9e18 Mon Sep 17 00:00:00 2001 From: Ivan Iskandar <12537387+ivaniskandar@users.noreply.github.com> Date: Sun, 26 Feb 2023 02:44:35 +0700 Subject: [PATCH] Fix banners-related issues (#9143) This is most likely Compose issue so these changes will be reevaluated when new Compose ver is out. --- .../kanade/presentation/components/Banners.kt | 13 +++++++-- .../eu/kanade/presentation/util/Navigator.kt | 4 ++- .../eu/kanade/tachiyomi/ui/home/HomeScreen.kt | 28 ++++++++----------- .../kanade/tachiyomi/ui/main/MainActivity.kt | 10 +++---- 4 files changed, 29 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/eu/kanade/presentation/components/Banners.kt b/app/src/main/java/eu/kanade/presentation/components/Banners.kt index 14525e137..5f288d7e2 100644 --- a/app/src/main/java/eu/kanade/presentation/components/Banners.kt +++ b/app/src/main/java/eu/kanade/presentation/components/Banners.kt @@ -69,7 +69,8 @@ fun AppStateBanners( val mainInsets = WindowInsets.statusBars val mainInsetsTop = mainInsets.getTop(density) SubcomposeLayout(modifier = modifier) { constraints -> - val indexingPlaceable = subcompose(0) { + val indexingId = if (indexing) 0 else -1 + val indexingPlaceable = subcompose(indexingId) { AnimatedVisibility( visible = indexing, enter = expandVertically(), @@ -82,7 +83,8 @@ fun AppStateBanners( }.fastMap { it.measure(constraints) } val indexingHeight = indexingPlaceable.fastMaxBy { it.height }?.height ?: 0 - val downloadedOnlyPlaceable = subcompose(1) { + val downloadedId = if (indexing) 1 else 0 + val downloadedOnlyPlaceable = subcompose(downloadedId) { AnimatedVisibility( visible = downloadedOnlyMode, enter = expandVertically(), @@ -96,7 +98,12 @@ fun AppStateBanners( }.fastMap { it.measure(constraints) } val downloadedOnlyHeight = downloadedOnlyPlaceable.fastMaxBy { it.height }?.height ?: 0 - val incognitoPlaceable = subcompose(2) { + val incognitoId = when { + indexing && downloadedOnlyMode -> 3 + indexing || downloadedOnlyMode -> 2 + else -> 1 + } + val incognitoPlaceable = subcompose(incognitoId) { AnimatedVisibility( visible = incognitoMode, enter = expandVertically(), diff --git a/app/src/main/java/eu/kanade/presentation/util/Navigator.kt b/app/src/main/java/eu/kanade/presentation/util/Navigator.kt index fe89516d6..eab459b14 100644 --- a/app/src/main/java/eu/kanade/presentation/util/Navigator.kt +++ b/app/src/main/java/eu/kanade/presentation/util/Navigator.kt @@ -3,6 +3,7 @@ package eu.kanade.presentation.util import androidx.compose.runtime.Composable import androidx.compose.runtime.ProvidableCompositionLocal import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.Modifier import cafe.adriel.voyager.core.screen.Screen import cafe.adriel.voyager.core.screen.ScreenKey import cafe.adriel.voyager.core.screen.uniqueScreenKey @@ -33,7 +34,7 @@ interface AssistContentScreen { } @Composable -fun DefaultNavigatorScreenTransition(navigator: Navigator) { +fun DefaultNavigatorScreenTransition(navigator: Navigator, modifier: Modifier = Modifier) { val slideDistance = rememberSlideDistance() ScreenTransition( navigator = navigator, @@ -43,5 +44,6 @@ fun DefaultNavigatorScreenTransition(navigator: Navigator) { slideDistance = slideDistance, ) }, + modifier = modifier, ) } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt index 60dd21e0f..30af8215a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/home/HomeScreen.kt @@ -6,7 +6,6 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.expandVertically import androidx.compose.animation.shrinkVertically import androidx.compose.animation.with -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.consumeWindowInsets @@ -113,24 +112,21 @@ object HomeScreen : Screen() { }, contentWindowInsets = WindowInsets(0), ) { contentPadding -> - Box( + AnimatedContent( modifier = Modifier .padding(contentPadding) .consumeWindowInsets(contentPadding), - ) { - AnimatedContent( - targetState = tabNavigator.current, - transitionSpec = { - materialFadeThroughIn(initialScale = 1f, durationMillis = TabFadeDuration) with - materialFadeThroughOut(durationMillis = TabFadeDuration) - }, - content = { - tabNavigator.saveableState(key = "currentTab", it) { - it.Content() - } - }, - ) - } + targetState = tabNavigator.current, + transitionSpec = { + materialFadeThroughIn(initialScale = 1f, durationMillis = TabFadeDuration) with + materialFadeThroughOut(durationMillis = TabFadeDuration) + }, + content = { + tabNavigator.saveableState(key = "currentTab", it) { + it.Content() + } + }, + ) } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt index ccb86bafa..9eede468c 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/main/MainActivity.kt @@ -13,7 +13,6 @@ import android.widget.Toast import androidx.activity.ComponentActivity import androidx.activity.compose.BackHandler import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.consumeWindowInsets @@ -222,15 +221,14 @@ class MainActivity : BaseActivity() { }, contentWindowInsets = scaffoldInsets, ) { contentPadding -> + // Shows current screen // Consume insets already used by app state banners - Box( + DefaultNavigatorScreenTransition( + navigator = navigator, modifier = Modifier .padding(contentPadding) .consumeWindowInsets(contentPadding), - ) { - // Shows current screen - DefaultNavigatorScreenTransition(navigator = navigator) - } + ) } // Pop source-related screens when incognito mode is turned off