UI: animate FAB on model preselection states
This commit is contained in:
parent
05c620cc52
commit
d97e28a6d8
|
|
@ -1,5 +1,10 @@
|
||||||
package com.example.llama.revamp.ui.scaffold
|
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.padding
|
||||||
import androidx.compose.foundation.layout.size
|
import androidx.compose.foundation.layout.size
|
||||||
import androidx.compose.foundation.text.input.TextFieldState
|
import androidx.compose.foundation.text.input.TextFieldState
|
||||||
|
|
@ -236,9 +241,13 @@ fun ModelSelectionBottomBar(
|
||||||
},
|
},
|
||||||
floatingActionButton = {
|
floatingActionButton = {
|
||||||
// Only show FAB if a model is selected
|
// Only show FAB if a model is selected
|
||||||
runAction.selectedModel?.let { model ->
|
AnimatedVisibility(
|
||||||
|
visible = runAction.selectedModel != null,
|
||||||
|
enter = scaleIn() + fadeIn(),
|
||||||
|
exit = scaleOut() + fadeOut()
|
||||||
|
) {
|
||||||
FloatingActionButton(
|
FloatingActionButton(
|
||||||
onClick = { runAction.onRun(model) },
|
onClick = { runAction.selectedModel?.let { runAction.onRun(it) } },
|
||||||
containerColor = MaterialTheme.colorScheme.primary
|
containerColor = MaterialTheme.colorScheme.primary
|
||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
|
|
|
||||||
|
|
@ -51,9 +51,11 @@ fun ModelSelectionScreen(
|
||||||
onManageModelsClicked: () -> Unit,
|
onManageModelsClicked: () -> Unit,
|
||||||
viewModel: ModelSelectionViewModel,
|
viewModel: ModelSelectionViewModel,
|
||||||
) {
|
) {
|
||||||
|
// Data: models
|
||||||
val filteredModels by viewModel.filteredModels.collectAsState()
|
val filteredModels by viewModel.filteredModels.collectAsState()
|
||||||
val preselectedModel by viewModel.preselectedModel.collectAsState()
|
val preselectedModel by viewModel.preselectedModel.collectAsState()
|
||||||
|
|
||||||
|
// Query states
|
||||||
val textFieldState = viewModel.searchFieldState
|
val textFieldState = viewModel.searchFieldState
|
||||||
val isSearchActive by viewModel.isSearchActive.collectAsState()
|
val isSearchActive by viewModel.isSearchActive.collectAsState()
|
||||||
val searchQuery by remember(textFieldState) {
|
val searchQuery by remember(textFieldState) {
|
||||||
|
|
@ -61,15 +63,15 @@ fun ModelSelectionScreen(
|
||||||
}
|
}
|
||||||
val queryResults by viewModel.queryResults.collectAsState()
|
val queryResults by viewModel.queryResults.collectAsState()
|
||||||
|
|
||||||
|
// Filter states
|
||||||
val activeFilters by viewModel.activeFilters.collectAsState()
|
val activeFilters by viewModel.activeFilters.collectAsState()
|
||||||
val activeFiltersCount by remember(activeFilters) {
|
val activeFiltersCount by remember(activeFilters) {
|
||||||
derivedStateOf { activeFilters.count { it.value } }
|
derivedStateOf { activeFilters.count { it.value } }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// UI states
|
||||||
val focusRequester = remember { FocusRequester() }
|
val focusRequester = remember { FocusRequester() }
|
||||||
val keyboardController = LocalSoftwareKeyboardController.current
|
val keyboardController = LocalSoftwareKeyboardController.current
|
||||||
|
|
||||||
val toggleSearchFocusAndIme: (Boolean) -> Unit = { show ->
|
val toggleSearchFocusAndIme: (Boolean) -> Unit = { show ->
|
||||||
if (show) {
|
if (show) {
|
||||||
focusRequester.requestFocus()
|
focusRequester.requestFocus()
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue