UI: animate FAB on model preselection states

This commit is contained in:
Han Yin 2025-04-21 14:51:17 -07:00
parent 05c620cc52
commit d97e28a6d8
2 changed files with 15 additions and 4 deletions

View File

@ -1,5 +1,10 @@
package com.example.llama.revamp.ui.scaffold
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.scaleIn
import androidx.compose.animation.scaleOut
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.text.input.TextFieldState
@ -236,9 +241,13 @@ fun ModelSelectionBottomBar(
},
floatingActionButton = {
// Only show FAB if a model is selected
runAction.selectedModel?.let { model ->
AnimatedVisibility(
visible = runAction.selectedModel != null,
enter = scaleIn() + fadeIn(),
exit = scaleOut() + fadeOut()
) {
FloatingActionButton(
onClick = { runAction.onRun(model) },
onClick = { runAction.selectedModel?.let { runAction.onRun(it) } },
containerColor = MaterialTheme.colorScheme.primary
) {
Icon(

View File

@ -51,9 +51,11 @@ fun ModelSelectionScreen(
onManageModelsClicked: () -> Unit,
viewModel: ModelSelectionViewModel,
) {
// Data: models
val filteredModels by viewModel.filteredModels.collectAsState()
val preselectedModel by viewModel.preselectedModel.collectAsState()
// Query states
val textFieldState = viewModel.searchFieldState
val isSearchActive by viewModel.isSearchActive.collectAsState()
val searchQuery by remember(textFieldState) {
@ -61,15 +63,15 @@ fun ModelSelectionScreen(
}
val queryResults by viewModel.queryResults.collectAsState()
// Filter states
val activeFilters by viewModel.activeFilters.collectAsState()
val activeFiltersCount by remember(activeFilters) {
derivedStateOf { activeFilters.count { it.value } }
}
// UI states
val focusRequester = remember { FocusRequester() }
val keyboardController = LocalSoftwareKeyboardController.current
val toggleSearchFocusAndIme: (Boolean) -> Unit = { show ->
if (show) {
focusRequester.requestFocus()