From b75377676f70232d65361bd1759a962eafa4bb54 Mon Sep 17 00:00:00 2001 From: Han Yin Date: Fri, 29 Aug 2025 16:58:43 -0700 Subject: [PATCH] UI: hide share fab after clearing all benchmark results --- .../app/src/main/java/com/example/llama/MainActivity.kt | 2 ++ .../java/com/example/llama/ui/scaffold/AppScaffold.kt | 1 + .../llama/ui/scaffold/bottombar/BenchmarkBottomBar.kt | 3 ++- .../llama/ui/scaffold/bottombar/BottomBarConfig.kt | 1 + .../com/example/llama/viewmodel/BenchmarkViewModel.kt | 9 ++++++++- 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/examples/llama.android/app/src/main/java/com/example/llama/MainActivity.kt b/examples/llama.android/app/src/main/java/com/example/llama/MainActivity.kt index e1bf10b07e..43d3d7a683 100644 --- a/examples/llama.android/app/src/main/java/com/example/llama/MainActivity.kt +++ b/examples/llama.android/app/src/main/java/com/example/llama/MainActivity.kt @@ -259,6 +259,7 @@ fun AppContent( // Benchmark screen currentRoute.startsWith(AppDestinations.BENCHMARK_ROUTE) -> { + val showShareFab by benchmarkViewModel.showShareFab.collectAsState() val showModelCard by benchmarkViewModel.showModelCard.collectAsState() ScaffoldConfig( @@ -272,6 +273,7 @@ fun AppContent( ), bottomBarConfig = BottomBarConfig.Benchmark( engineIdle = !engineState.isUninterruptible, + showShareFab = showShareFab, onShare = { benchmarkViewModel.shareResult(handleScaffoldEvent) }, onRerun = { benchmarkViewModel.rerunBenchmark(handleScaffoldEvent) }, onClear = { benchmarkViewModel.clearResults(handleScaffoldEvent) }, diff --git a/examples/llama.android/app/src/main/java/com/example/llama/ui/scaffold/AppScaffold.kt b/examples/llama.android/app/src/main/java/com/example/llama/ui/scaffold/AppScaffold.kt index 1a51edcdfa..96a6a1b6ec 100644 --- a/examples/llama.android/app/src/main/java/com/example/llama/ui/scaffold/AppScaffold.kt +++ b/examples/llama.android/app/src/main/java/com/example/llama/ui/scaffold/AppScaffold.kt @@ -104,6 +104,7 @@ fun AppScaffold( is BottomBarConfig.Benchmark -> { BenchmarkBottomBar( + showShareFab = config.showShareFab, engineIdle = config.engineIdle, onShare = config.onShare, onRerun = config.onRerun, diff --git a/examples/llama.android/app/src/main/java/com/example/llama/ui/scaffold/bottombar/BenchmarkBottomBar.kt b/examples/llama.android/app/src/main/java/com/example/llama/ui/scaffold/bottombar/BenchmarkBottomBar.kt index a4ce8ae38b..bc52e4ac8c 100644 --- a/examples/llama.android/app/src/main/java/com/example/llama/ui/scaffold/bottombar/BenchmarkBottomBar.kt +++ b/examples/llama.android/app/src/main/java/com/example/llama/ui/scaffold/bottombar/BenchmarkBottomBar.kt @@ -21,6 +21,7 @@ import androidx.compose.runtime.Composable @Composable fun BenchmarkBottomBar( engineIdle: Boolean, + showShareFab: Boolean, onShare: () -> Unit, onRerun: () -> Unit, onClear: () -> Unit, @@ -59,7 +60,7 @@ fun BenchmarkBottomBar( floatingActionButton = { // Only show FAB if the benchmark result is ready AnimatedVisibility( - visible = engineIdle, + visible = showShareFab, enter = scaleIn() + fadeIn(), exit = scaleOut() + fadeOut() ) { diff --git a/examples/llama.android/app/src/main/java/com/example/llama/ui/scaffold/bottombar/BottomBarConfig.kt b/examples/llama.android/app/src/main/java/com/example/llama/ui/scaffold/bottombar/BottomBarConfig.kt index e87dca9c11..bf69463af7 100644 --- a/examples/llama.android/app/src/main/java/com/example/llama/ui/scaffold/bottombar/BottomBarConfig.kt +++ b/examples/llama.android/app/src/main/java/com/example/llama/ui/scaffold/bottombar/BottomBarConfig.kt @@ -87,6 +87,7 @@ sealed class BottomBarConfig { } data class Benchmark( + val showShareFab: Boolean, val engineIdle: Boolean, val onShare: () -> Unit, val onRerun: () -> Unit, diff --git a/examples/llama.android/app/src/main/java/com/example/llama/viewmodel/BenchmarkViewModel.kt b/examples/llama.android/app/src/main/java/com/example/llama/viewmodel/BenchmarkViewModel.kt index ff527f8629..826fee57f4 100644 --- a/examples/llama.android/app/src/main/java/com/example/llama/viewmodel/BenchmarkViewModel.kt +++ b/examples/llama.android/app/src/main/java/com/example/llama/viewmodel/BenchmarkViewModel.kt @@ -30,7 +30,7 @@ class BenchmarkViewModel @Inject constructor( private val _benchmarkResults = MutableStateFlow>(emptyList()) val benchmarkResults: StateFlow> = _benchmarkResults.asStateFlow() - // UI state: Model card + // UI state: Model card private val _showModelCard = MutableStateFlow(false) val showModelCard = _showModelCard.asStateFlow() @@ -38,6 +38,10 @@ class BenchmarkViewModel @Inject constructor( _showModelCard.value = show } + // UI state: Share FAB + private val _showShareFab = MutableStateFlow(false) + val showShareFab = _showShareFab.asStateFlow() + init { viewModelScope.launch { benchmarkService.benchmarkResults @@ -61,10 +65,12 @@ class BenchmarkViewModel @Inject constructor( } viewModelScope.launch { + _showShareFab.value = false val benchmarkStartTs = System.currentTimeMillis() benchmarkService.benchmark(pp, tg, pl, nr) val benchmarkEndTs = System.currentTimeMillis() _benchmarkDuration.emit(benchmarkEndTs - benchmarkStartTs) + _showShareFab.value = true } return true } @@ -76,6 +82,7 @@ class BenchmarkViewModel @Inject constructor( false } else { _benchmarkResults.value = emptyList() + _showShareFab.value = false onScaffoldEvent?.invoke(ScaffoldEvent.ShowSnackbar( message = "All benchmark results cleared." ))