mirror of
https://github.com/signalapp/Signal-Android.git
synced 2025-12-24 13:08:46 +00:00
Fix recipient search bar configuration for add to groups screen.
This commit is contained in:
@@ -28,12 +28,12 @@ import androidx.compose.ui.graphics.vector.ImageVector
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.res.vectorResource
|
||||
import androidx.compose.ui.text.input.ImeAction
|
||||
import androidx.compose.ui.text.input.KeyboardType
|
||||
import androidx.compose.ui.unit.dp
|
||||
import org.signal.core.ui.compose.DayNightPreviews
|
||||
import org.signal.core.ui.compose.IconButtons.IconButton
|
||||
import org.signal.core.ui.compose.Previews
|
||||
import org.thoughtcrime.securesms.R
|
||||
import org.thoughtcrime.securesms.recipients.ui.RecipientPicker.KeyboardType
|
||||
|
||||
/**
|
||||
* A search input field for finding recipients.
|
||||
@@ -47,15 +47,15 @@ fun RecipientSearchBar(
|
||||
query: String,
|
||||
onQueryChange: (String) -> Unit,
|
||||
onSearch: (String) -> Unit,
|
||||
modifier: Modifier = Modifier
|
||||
modifier: Modifier = Modifier,
|
||||
enabledKeyboardTypes: List<KeyboardType> = listOf(KeyboardType.Text, KeyboardType.Phone)
|
||||
) {
|
||||
val state = rememberSearchBarState()
|
||||
var keyboardOptions by remember {
|
||||
mutableStateOf(
|
||||
KeyboardOptions(
|
||||
keyboardType = KeyboardType.Text,
|
||||
imeAction = ImeAction.Search
|
||||
)
|
||||
var keyboardType by remember(enabledKeyboardTypes) { mutableStateOf(enabledKeyboardTypes.first()) }
|
||||
val keyboardOptions = remember(keyboardType) {
|
||||
KeyboardOptions(
|
||||
keyboardType = keyboardType.wrappedType,
|
||||
imeAction = ImeAction.Search
|
||||
)
|
||||
}
|
||||
|
||||
@@ -87,10 +87,11 @@ fun RecipientSearchBar(
|
||||
onClearQuery = { onQueryChange("") },
|
||||
modifier = modifier
|
||||
)
|
||||
} else {
|
||||
} else if (enabledKeyboardTypes.size > 1) {
|
||||
KeyboardToggleButton(
|
||||
keyboardType = keyboardOptions.keyboardType,
|
||||
onKeyboardTypeChange = { keyboardOptions = keyboardOptions.copy(keyboardType = it) },
|
||||
keyboardType = keyboardType,
|
||||
enabledKeyboardTypes = enabledKeyboardTypes,
|
||||
onKeyboardTypeChange = { keyboardType = it },
|
||||
modifier = modifier
|
||||
)
|
||||
}
|
||||
@@ -104,17 +105,20 @@ fun RecipientSearchBar(
|
||||
@Composable
|
||||
private fun KeyboardToggleButton(
|
||||
keyboardType: KeyboardType,
|
||||
enabledKeyboardTypes: List<KeyboardType>,
|
||||
onKeyboardTypeChange: (KeyboardType) -> Unit = {},
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
val nextTypeMap = remember(enabledKeyboardTypes) {
|
||||
enabledKeyboardTypes.mapIndexed { index, type ->
|
||||
val nextIndex = (index + 1) % enabledKeyboardTypes.size
|
||||
type to enabledKeyboardTypes[nextIndex]
|
||||
}.toMap()
|
||||
}
|
||||
|
||||
IconButton(
|
||||
onClick = {
|
||||
onKeyboardTypeChange(
|
||||
when (keyboardType) {
|
||||
KeyboardType.Text -> KeyboardType.Phone
|
||||
else -> KeyboardType.Text
|
||||
}
|
||||
)
|
||||
onKeyboardTypeChange(nextTypeMap.getValue(keyboardType))
|
||||
},
|
||||
modifier = modifier
|
||||
) {
|
||||
@@ -125,7 +129,7 @@ private fun KeyboardToggleButton(
|
||||
contentDescription = stringResource(R.string.RecipientSearchBar_accessibility_switch_to_numeric_keyboard)
|
||||
)
|
||||
|
||||
else -> Icon(
|
||||
KeyboardType.Phone -> Icon(
|
||||
imageVector = ImageVector.vectorResource(R.drawable.ic_keyboard_24),
|
||||
tint = MaterialTheme.colorScheme.onSurface,
|
||||
contentDescription = stringResource(R.string.RecipientSearchBar_accessibility_switch_to_alphanumeric_keyboard)
|
||||
|
||||
@@ -177,7 +177,9 @@ private fun AddToGroupsRecipientPicker(
|
||||
modifier: Modifier = Modifier
|
||||
) {
|
||||
RecipientPicker(
|
||||
searchBarHint = stringResource(R.string.AddToGroupActivity_search),
|
||||
searchQuery = uiState.searchQuery,
|
||||
enabledKeyboardTypes = listOf(RecipientPicker.KeyboardType.Text),
|
||||
displayModes = setOf(RecipientPicker.DisplayMode.ACTIVE_GROUPS, RecipientPicker.DisplayMode.GROUPS_AFTER_CONTACTS),
|
||||
selectionLimits = uiState.selectionLimits,
|
||||
preselectedRecipients = uiState.existingGroupMemberships,
|
||||
|
||||
@@ -28,6 +28,7 @@ import androidx.compose.ui.focus.focusRequester
|
||||
import androidx.compose.ui.platform.LocalConfiguration
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.platform.LocalFocusManager
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.fragment.compose.rememberFragmentState
|
||||
@@ -55,9 +56,12 @@ import org.thoughtcrime.securesms.recipients.PhoneNumber
|
||||
import org.thoughtcrime.securesms.recipients.Recipient
|
||||
import org.thoughtcrime.securesms.recipients.RecipientId
|
||||
import org.thoughtcrime.securesms.recipients.ui.RecipientPicker.DisplayMode.Companion.flag
|
||||
import org.thoughtcrime.securesms.recipients.ui.RecipientPicker.KeyboardType
|
||||
import java.util.Optional
|
||||
import java.util.function.Consumer
|
||||
|
||||
private typealias AndroidKeyboardType = androidx.compose.ui.text.input.KeyboardType
|
||||
|
||||
/**
|
||||
* Provides a recipient search and selection UI.
|
||||
*/
|
||||
@@ -65,7 +69,9 @@ import java.util.function.Consumer
|
||||
@OptIn(ExperimentalLayoutApi::class)
|
||||
@Composable
|
||||
fun RecipientPicker(
|
||||
searchBarHint: String = stringResource(R.string.RecipientSearchBar__search_name_or_number),
|
||||
searchQuery: String,
|
||||
enabledKeyboardTypes: List<KeyboardType> = listOf(KeyboardType.Text, KeyboardType.Phone),
|
||||
displayModes: Set<RecipientPicker.DisplayMode> = setOf(RecipientPicker.DisplayMode.ALL),
|
||||
selectionLimits: SelectionLimits? = ContactSelectionArguments.Defaults.SELECTION_LIMITS,
|
||||
includeRecents: Boolean = ContactSelectionArguments.Defaults.INCLUDE_RECENTS,
|
||||
@@ -97,9 +103,11 @@ fun RecipientPicker(
|
||||
}
|
||||
|
||||
RecipientSearchBar(
|
||||
hint = searchBarHint,
|
||||
query = searchQuery,
|
||||
onQueryChange = { filter -> callbacks.listActions.onSearchQueryChanged(query = filter) },
|
||||
onSearch = {},
|
||||
enabledKeyboardTypes = enabledKeyboardTypes,
|
||||
modifier = Modifier
|
||||
.focusRequester(focusRequester)
|
||||
.fillMaxWidth()
|
||||
@@ -469,4 +477,11 @@ object RecipientPicker {
|
||||
get() = fold(initial = 0) { acc, displayMode -> acc or displayMode.flag }
|
||||
}
|
||||
}
|
||||
|
||||
enum class KeyboardType(
|
||||
val wrappedType: AndroidKeyboardType
|
||||
) {
|
||||
Text(wrappedType = AndroidKeyboardType.Text),
|
||||
Phone(wrappedType = AndroidKeyboardType.Phone)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1227,11 +1227,11 @@
|
||||
<string name="AddToGroupActivity_add_member">Add member?</string>
|
||||
<string name="AddToGroupActivity_add_s_to_s">Add \"%1$s\" to \"%2$s\"?</string>
|
||||
<string name="AddToGroupActivity_s_added_to_s">\"%1$s\" added to \"%2$s\".</string>
|
||||
<string name="AddToGroupActivity_add_to_group">Add to group</string>
|
||||
<string name="AddToGroupActivity_add_to_groups">Add to groups</string>
|
||||
<string name="AddToGroupActivity_this_person_cant_be_added_to_legacy_groups">This person can\'t be added to legacy groups.</string>
|
||||
<string name="AddToGroupActivity_add">Add</string>
|
||||
<string name="AddToGroupActivity_add_to_a_group">Add to a group</string>
|
||||
<string name="AddToGroupActivity_search">Search</string>
|
||||
|
||||
<!-- ChooseNewAdminActivity -->
|
||||
<string name="ChooseNewAdminActivity_choose_new_admin">Choose new admin</string>
|
||||
|
||||
Reference in New Issue
Block a user