From f4bd74aafd70d664f434dc1816e87ca90f0c59fa Mon Sep 17 00:00:00 2001 From: Nishant Mishra Date: Tue, 16 Dec 2025 22:44:34 +0530 Subject: [PATCH] fix(stats): significantly improve stats screen performance --- .../ui/statsScreen/components/sharedBoundsReveal.kt | 13 +++++++------ .../ui/statsScreen/screens/LastMonthScreen.kt | 2 +- .../ui/statsScreen/screens/LastWeekScreen.kt | 2 +- .../ui/statsScreen/screens/LastYearScreen.kt | 2 +- .../ui/statsScreen/screens/StatsMainScreen.kt | 6 +++--- 5 files changed, 13 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/components/sharedBoundsReveal.kt b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/components/sharedBoundsReveal.kt index 30ed8c1..7183b7f 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/components/sharedBoundsReveal.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/components/sharedBoundsReveal.kt @@ -23,6 +23,7 @@ import androidx.compose.animation.EnterTransition import androidx.compose.animation.ExitTransition import androidx.compose.animation.SharedTransitionDefaults import androidx.compose.animation.SharedTransitionScope +import androidx.compose.animation.SharedTransitionScope.ResizeMode.Companion.scaleToBounds import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi @@ -30,6 +31,7 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.layout.ContentScale import androidx.navigation3.ui.LocalNavAnimatedContentScope @OptIn(ExperimentalMaterial3ExpressiveApi::class) @@ -41,12 +43,14 @@ fun Modifier.sharedBoundsReveal( boundsTransform: BoundsTransform = SharedTransitionDefaults.BoundsTransform, enter: EnterTransition = fadeIn(), exit: ExitTransition = fadeOut(), - resizeMode: SharedTransitionScope.ResizeMode = SharedTransitionScope.ResizeMode.RemeasureToBounds, + resizeMode: SharedTransitionScope.ResizeMode = scaleToBounds( + contentScale = ContentScale.Crop + ), clipShape: Shape = MaterialTheme.shapes.largeIncreased, renderInOverlayDuringTransition: Boolean = true, -): Modifier { +): Modifier = with(sharedTransitionScope) { - return this@sharedBoundsReveal + this@sharedBoundsReveal .sharedBounds( sharedContentState = sharedContentState, animatedVisibilityScope = animatedVisibilityScope, @@ -57,7 +61,4 @@ fun Modifier.sharedBoundsReveal( clipInOverlayDuringTransition = OverlayClip(clipShape), renderInOverlayDuringTransition = renderInOverlayDuringTransition, ) -// .skipToLookaheadSize() -// .skipToLookaheadPosition() } -} diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/LastMonthScreen.kt b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/LastMonthScreen.kt index 3154968..46296f4 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/LastMonthScreen.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/LastMonthScreen.kt @@ -214,7 +214,7 @@ fun SharedTransitionScope.LastMonthScreen( context.model.extraStore[lastMonthSummaryChartData.second][x.toInt()] }, modifier = Modifier - .sharedElement( + .sharedBounds( sharedContentState = this@LastMonthScreen .rememberSharedContentState("last month chart"), animatedVisibilityScope = LocalNavAnimatedContentScope.current diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/LastWeekScreen.kt b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/LastWeekScreen.kt index 264dd5b..6353655 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/LastWeekScreen.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/LastWeekScreen.kt @@ -215,7 +215,7 @@ fun SharedTransitionScope.LastWeekScreen( context.model.extraStore[mainChartData.second][x.toInt()] }, modifier = Modifier - .sharedElement( + .sharedBounds( sharedContentState = this@LastWeekScreen .rememberSharedContentState("last week chart"), animatedVisibilityScope = LocalNavAnimatedContentScope.current diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/LastYearScreen.kt b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/LastYearScreen.kt index 0573306..53847b2 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/LastYearScreen.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/LastYearScreen.kt @@ -223,7 +223,7 @@ fun SharedTransitionScope.LastYearScreen( }, modifier = Modifier .padding(horizontal = 16.dp) - .sharedElement( + .sharedBounds( sharedContentState = this@LastYearScreen .rememberSharedContentState("last year chart"), animatedVisibilityScope = LocalNavAnimatedContentScope.current diff --git a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/StatsMainScreen.kt b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/StatsMainScreen.kt index ec71e7f..36d9dba 100644 --- a/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/StatsMainScreen.kt +++ b/app/src/main/java/org/nsh07/pomodoro/ui/statsScreen/screens/StatsMainScreen.kt @@ -290,7 +290,7 @@ fun SharedTransitionScope.StatsMainScreen( context.model.extraStore[lastWeekSummaryChartData.second][x.toInt()] }, modifier = Modifier - .sharedElement( + .sharedBounds( sharedContentState = this@StatsMainScreen .rememberSharedContentState("last week chart"), animatedVisibilityScope = LocalNavAnimatedContentScope.current @@ -374,7 +374,7 @@ fun SharedTransitionScope.StatsMainScreen( context.model.extraStore[lastMonthSummaryChartData.second][x.toInt()] }, modifier = Modifier - .sharedElement( + .sharedBounds( sharedContentState = this@StatsMainScreen .rememberSharedContentState("last month chart"), animatedVisibilityScope = LocalNavAnimatedContentScope.current @@ -457,7 +457,7 @@ fun SharedTransitionScope.StatsMainScreen( context.model.extraStore[lastYearSummaryChartData.second][x.toInt()] }, modifier = Modifier - .sharedElement( + .sharedBounds( sharedContentState = this@StatsMainScreen .rememberSharedContentState("last year chart"), animatedVisibilityScope = LocalNavAnimatedContentScope.current