Prevent soft keyboard from covering recipient picker floating action button.

This commit is contained in:
jeffrey-signal
2025-11-20 15:21:52 -05:00
parent 4219e2d16f
commit d4a03ae16b

View File

@@ -11,9 +11,7 @@ import android.os.Bundle
import android.widget.Toast
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Text
@@ -21,7 +19,6 @@ import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
@@ -150,47 +147,49 @@ private fun AddToGroupsScreenUi(
onDismiss = callbacks::onUserMessageDismissed,
closeScreen = callbacks::onBackPressed
)
}
},
floatingActionButton = getDoneButton(uiState, callbacks)
)
}
private fun getDoneButton(
uiState: AddToGroupsUiState,
callbacks: UiCallbacks
): (@Composable () -> Unit)? {
return if (uiState.isMultiSelectEnabled) {
{
Buttons.MediumTonal(
enabled = uiState.newSelections.isNotEmpty(),
onClick = callbacks::addToSelectedGroups
) {
Text(text = stringResource(R.string.AddMembersActivity__done))
}
}
} else {
null
}
}
@Composable
private fun AddToGroupsRecipientPicker(
uiState: AddToGroupsUiState,
callbacks: UiCallbacks,
modifier: Modifier = Modifier
) {
Box(modifier = modifier) {
RecipientPicker(
searchQuery = uiState.searchQuery,
displayModes = setOf(RecipientPicker.DisplayMode.ACTIVE_GROUPS, RecipientPicker.DisplayMode.GROUPS_AFTER_CONTACTS),
selectionLimits = uiState.selectionLimits,
preselectedRecipients = uiState.existingGroupMemberships,
includeRecents = true,
isRefreshing = false,
listBottomPadding = 64.dp,
clipListToPadding = false,
callbacks = RecipientPickerCallbacks(
listActions = callbacks
),
modifier = modifier.fillMaxSize()
)
if (uiState.isMultiSelectEnabled) {
Box(
modifier = Modifier
.align(Alignment.BottomEnd)
.padding(start = 16.dp, end = 16.dp, bottom = 16.dp)
) {
Buttons.MediumTonal(
enabled = uiState.newSelections.isNotEmpty(),
onClick = callbacks::addToSelectedGroups
) {
Text(text = stringResource(R.string.AddMembersActivity__done))
}
}
}
}
RecipientPicker(
searchQuery = uiState.searchQuery,
displayModes = setOf(RecipientPicker.DisplayMode.ACTIVE_GROUPS, RecipientPicker.DisplayMode.GROUPS_AFTER_CONTACTS),
selectionLimits = uiState.selectionLimits,
preselectedRecipients = uiState.existingGroupMemberships,
includeRecents = true,
isRefreshing = false,
listBottomPadding = 64.dp,
clipListToPadding = false,
callbacks = RecipientPickerCallbacks(
listActions = callbacks
),
modifier = modifier.fillMaxSize()
)
}
private interface UiCallbacks : RecipientPickerCallbacks.ListActions {