From 6f7276bcdf78ec004dafd1bbb5ccb7607f8e4b38 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <99822064+revonateB0T@users.noreply.github.com> Date: Thu, 14 Nov 2024 19:24:11 +0800 Subject: [PATCH] Revert "Temporarily disable shared element transitions (#1621)" (#1932) * Revert "Temporarily disable shared element transitions (#1621)" This reverts commit 42ed51094e2e1946c2a85df5b0cf5ceb6a7ac930. * Fixes * Update EhAsyncThumb.kt --------- Co-authored-by: Dude so hot --- .../com/hippo/ehviewer/ui/MainActivity.kt | 29 ++++--- .../hippo/ehviewer/ui/main/EhAsyncThumb.kt | 12 ++- .../ui/tools/SharedElementTransition.kt | 84 +------------------ 3 files changed, 21 insertions(+), 104 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt index f9dfd41e4..2c8e0e5ba 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt @@ -26,6 +26,7 @@ import android.net.Uri import android.os.Bundle import android.widget.Toast import androidx.annotation.StringRes +import androidx.compose.animation.SharedTransitionLayout import androidx.compose.animation.SharedTransitionScope import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.Image @@ -137,7 +138,6 @@ import com.hippo.ehviewer.ui.tools.DialogState import com.hippo.ehviewer.ui.tools.LabeledCheckbox import com.hippo.ehviewer.ui.tools.LocalDialogState import com.hippo.ehviewer.ui.tools.LocalWindowSizeClass -import com.hippo.ehviewer.ui.tools.NoopSharedTransitionScope import com.hippo.ehviewer.updater.AppUpdater import com.hippo.ehviewer.util.AppConfig import com.hippo.ehviewer.util.addTextToClipboard @@ -470,22 +470,21 @@ class MainActivity : EhActivity() { drawerState = sideSheetState, gesturesEnabled = sheet != null && drawerEnabled, ) { - // https://issuetracker.google.com/336140982 - // SharedTransitionLayout { - CompositionLocalProvider(LocalSharedTransitionScope provides NoopSharedTransitionScope) { - val start = when { - needSignIn -> SignInScreenDestination - hasNetwork -> StartDestination - else -> DownloadsScreenDestination + SharedTransitionLayout { + CompositionLocalProvider(LocalSharedTransitionScope provides this) { + val start = when { + needSignIn -> SignInScreenDestination + hasNetwork -> StartDestination + else -> DownloadsScreenDestination + } + DestinationsNavHost( + navGraph = NavGraphs.root, + start = start, + defaultTransitions = rememberEhNavAnim(), + navController = navController, + ) } - DestinationsNavHost( - navGraph = NavGraphs.root, - start = start, - defaultTransitions = rememberEhNavAnim(), - navController = navController, - ) } - // } } } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/EhAsyncThumb.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/EhAsyncThumb.kt index 0301b2edc..bff3a9431 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/main/EhAsyncThumb.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/main/EhAsyncThumb.kt @@ -26,6 +26,7 @@ import com.hippo.ehviewer.client.data.GalleryInfo import com.hippo.ehviewer.ktbuilder.imageRequest import com.hippo.ehviewer.ui.tools.SETNodeGenerator import com.hippo.ehviewer.ui.tools.TransitionsVisibilityScope +import com.hippo.ehviewer.ui.tools.sharedBounds import com.hippo.ehviewer.ui.tools.shouldCrop @Composable @@ -64,9 +65,7 @@ fun EhAsyncThumb( ) = AsyncImage( model = requestOf(model), contentDescription = null, - modifier = modifier - // .sharedBounds(key = "${model.gid}") - .clip(ShapeDefaults.Medium), + modifier = modifier.sharedBounds(key = "${model.gid}").clip(ShapeDefaults.Medium), onSuccess = onSuccess?.let { callback -> { callback(it.result.image) } }, @@ -83,9 +82,7 @@ fun EhAsyncCropThumb( AsyncImage( model = requestOf(key), contentDescription = null, - modifier = modifier - // .sharedBounds(key = "${key.gid}") - .clip(ShapeDefaults.Medium), + modifier = modifier.sharedBounds(key = "${key.gid}").clip(ShapeDefaults.Medium), onSuccess = { if (it.result.image.shouldCrop) { contentScale = ContentScale.Crop @@ -95,6 +92,7 @@ fun EhAsyncCropThumb( ) } +context(SharedTransitionScope, TransitionsVisibilityScope, SETNodeGenerator) @Composable fun EhThumbCard( key: GalleryInfo, @@ -121,7 +119,7 @@ fun EhThumbCard( Image( painter = painter, contentDescription = null, - modifier = Modifier.imageRequest(request).fillMaxSize().clip(ShapeDefaults.Medium), + modifier = Modifier.imageRequest(request).fillMaxSize().sharedBounds(key = "${key.gid}").clip(ShapeDefaults.Medium), contentScale = contentScale, ) } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/SharedElementTransition.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/SharedElementTransition.kt index 76f6dfeea..75fdcf138 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/SharedElementTransition.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/tools/SharedElementTransition.kt @@ -1,8 +1,6 @@ package com.hippo.ehviewer.ui.tools -import android.annotation.SuppressLint import androidx.compose.animation.AnimatedVisibilityScope -import androidx.compose.animation.BoundsTransform import androidx.compose.animation.EnterTransition import androidx.compose.animation.ExitTransition import androidx.compose.animation.SharedTransitionScope @@ -13,13 +11,7 @@ import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.Stable import androidx.compose.runtime.remember import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Path -import androidx.compose.ui.graphics.Shape -import androidx.compose.ui.layout.LayoutCoordinates -import androidx.compose.ui.layout.Placeable -import androidx.compose.ui.unit.Density -import androidx.compose.ui.unit.LayoutDirection -import arrow.atomic.AtomicInt +import java.util.concurrent.atomic.AtomicInteger val NoopTransitionsVisibilityScope = TransitionsVisibilityScope(emptySet()) @@ -68,7 +60,7 @@ fun initSETConnection() { listThumbGenerator connectTo detailThumbGenerator } -private val atomicIncId = AtomicInt() +private val atomicIncId = AtomicInteger() class SETNodeGenerator { private val tracker = hashMapOf() @@ -87,75 +79,3 @@ class SETNodeGenerator { other.opposites.add(this) } } - -@SuppressLint("ModifierFactoryUnreferencedReceiver") -object NoopSharedTransitionScope : SharedTransitionScope { - override val isTransitionActive: Boolean - get() = TODO("Not yet implemented") - override val Placeable.PlacementScope.lookaheadScopeCoordinates: LayoutCoordinates - get() = TODO("Not yet implemented") - - override fun OverlayClip(clipShape: Shape): SharedTransitionScope.OverlayClip { - TODO("Not yet implemented") - } - - @Composable - override fun rememberSharedContentState(key: Any): SharedTransitionScope.SharedContentState { - TODO("Not yet implemented") - } - - override fun Modifier.renderInSharedTransitionScopeOverlay( - renderInOverlay: () -> Boolean, - zIndexInOverlay: Float, - clipInOverlayDuringTransition: (LayoutDirection, Density) -> Path?, - ): Modifier { - TODO("Not yet implemented") - } - - override fun Modifier.sharedBounds( - sharedContentState: SharedTransitionScope.SharedContentState, - animatedVisibilityScope: AnimatedVisibilityScope, - enter: EnterTransition, - exit: ExitTransition, - boundsTransform: BoundsTransform, - resizeMode: SharedTransitionScope.ResizeMode, - placeHolderSize: SharedTransitionScope.PlaceHolderSize, - renderInOverlayDuringTransition: Boolean, - zIndexInOverlay: Float, - clipInOverlayDuringTransition: SharedTransitionScope.OverlayClip, - ): Modifier { - TODO("Not yet implemented") - } - - override fun Modifier.sharedElement( - state: SharedTransitionScope.SharedContentState, - animatedVisibilityScope: AnimatedVisibilityScope, - boundsTransform: BoundsTransform, - placeHolderSize: SharedTransitionScope.PlaceHolderSize, - renderInOverlayDuringTransition: Boolean, - zIndexInOverlay: Float, - clipInOverlayDuringTransition: SharedTransitionScope.OverlayClip, - ): Modifier { - TODO("Not yet implemented") - } - - override fun Modifier.sharedElementWithCallerManagedVisibility( - sharedContentState: SharedTransitionScope.SharedContentState, - visible: Boolean, - boundsTransform: BoundsTransform, - placeHolderSize: SharedTransitionScope.PlaceHolderSize, - renderInOverlayDuringTransition: Boolean, - zIndexInOverlay: Float, - clipInOverlayDuringTransition: SharedTransitionScope.OverlayClip, - ): Modifier { - TODO("Not yet implemented") - } - - override fun Modifier.skipToLookaheadSize(): Modifier { - TODO("Not yet implemented") - } - - override fun LayoutCoordinates.toLookaheadCoordinates(): LayoutCoordinates { - TODO("Not yet implemented") - } -}