Respect incognito keyboard setting in Compose UIs.

This commit is contained in:
jeffrey-signal
2025-11-17 14:44:57 -05:00
committed by Cody Henthorne
parent d5150d44e3
commit 9f0f8b7cbc
71 changed files with 248 additions and 204 deletions

View File

@@ -41,11 +41,11 @@ import org.signal.core.ui.compose.AllDevicePreviews
import org.signal.core.ui.compose.Dialogs
import org.signal.core.ui.compose.DropdownMenus
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.BlockUnblockDialog
import org.thoughtcrime.securesms.PassphraseRequiredActivity
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.conversation.NewConversationUiState.UserMessage
import org.thoughtcrime.securesms.groups.ui.creategroup.CreateGroupActivity
import org.thoughtcrime.securesms.recipients.Recipient

View File

@@ -49,9 +49,9 @@ import androidx.compose.ui.unit.sp
import org.signal.core.ui.compose.Buttons
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.compose.RoundCheckbox
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.polls.PollOption
import org.thoughtcrime.securesms.polls.PollRecord
@@ -206,6 +206,7 @@ private fun PollOption(
)
}
}
VoteState.PENDING_REMOVE -> {
CircularProgressIndicator(
modifier = Modifier.padding(top = 4.dp, end = 8.dp).size(24.dp),
@@ -213,6 +214,7 @@ private fun PollOption(
color = pollColors.checkbox
)
}
VoteState.ADDED,
VoteState.REMOVED,
VoteState.NONE -> {

View File

@@ -22,11 +22,9 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.input.ImeAction
@@ -34,17 +32,15 @@ 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.theme.SignalTheme
import org.signal.core.ui.compose.Previews
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.compose.ProvideIncognitoKeyboard
import org.thoughtcrime.securesms.util.TextSecurePreferences
/**
* A search input field for finding recipients.
*
* Replaces [org.thoughtcrime.securesms.components.ContactFilterView].
*/
@OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class, ExperimentalComposeUiApi::class)
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun RecipientSearchBar(
hint: String = stringResource(R.string.RecipientSearchBar__search_name_or_number),
@@ -63,50 +59,46 @@ fun RecipientSearchBar(
)
}
ProvideIncognitoKeyboard(
enabled = TextSecurePreferences.isIncognitoKeyboardEnabled(LocalContext.current)
) {
SearchBar(
state = state,
inputField = {
TextField(
value = query,
onValueChange = onQueryChange,
placeholder = { Text(hint) },
singleLine = true,
shape = SearchBarDefaults.inputFieldShape,
colors = TextFieldDefaults.colors(
unfocusedContainerColor = MaterialTheme.colorScheme.surfaceVariant,
focusedContainerColor = MaterialTheme.colorScheme.surfaceVariant,
disabledContainerColor = MaterialTheme.colorScheme.surfaceVariant,
focusedIndicatorColor = Color.Transparent,
disabledIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent
),
keyboardOptions = keyboardOptions,
keyboardActions = KeyboardActions(
onSearch = { onSearch(query) }
),
trailingIcon = {
val modifier = Modifier.padding(end = 4.dp)
if (query.isNotEmpty()) {
ClearQueryButton(
onClearQuery = { onQueryChange("") },
modifier = modifier
)
} else {
KeyboardToggleButton(
keyboardType = keyboardOptions.keyboardType,
onKeyboardTypeChange = { keyboardOptions = keyboardOptions.copy(keyboardType = it) },
modifier = modifier
)
}
SearchBar(
state = state,
inputField = {
TextField(
value = query,
onValueChange = onQueryChange,
placeholder = { Text(hint) },
singleLine = true,
shape = SearchBarDefaults.inputFieldShape,
colors = TextFieldDefaults.colors(
unfocusedContainerColor = MaterialTheme.colorScheme.surfaceVariant,
focusedContainerColor = MaterialTheme.colorScheme.surfaceVariant,
disabledContainerColor = MaterialTheme.colorScheme.surfaceVariant,
focusedIndicatorColor = Color.Transparent,
disabledIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent
),
keyboardOptions = keyboardOptions,
keyboardActions = KeyboardActions(
onSearch = { onSearch(query) }
),
trailingIcon = {
val modifier = Modifier.padding(end = 4.dp)
if (query.isNotEmpty()) {
ClearQueryButton(
onClearQuery = { onQueryChange("") },
modifier = modifier
)
} else {
KeyboardToggleButton(
keyboardType = keyboardOptions.keyboardType,
onKeyboardTypeChange = { keyboardOptions = keyboardOptions.copy(keyboardType = it) },
modifier = modifier
)
}
)
},
modifier = modifier
)
}
}
)
},
modifier = modifier
)
}
@Composable
@@ -161,7 +153,7 @@ private fun ClearQueryButton(
@Composable
@DayNightPreviews
private fun RecipientSearchBarPreview() = SignalTheme {
private fun RecipientSearchBarPreview() = Previews.Preview {
RecipientSearchBar(
query = "",
onQueryChange = {},

View File

@@ -48,6 +48,7 @@ import kotlinx.coroutines.launch
import org.signal.core.ui.compose.BottomSheets
import org.signal.core.ui.compose.Buttons
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.compose.ComposeBottomSheetDialogFragment
@@ -99,7 +100,7 @@ private val tips = listOf(
@DayNightPreviews
@Composable
private fun SafetyTipsContentPreview() {
SignalTheme {
Previews.Preview {
Surface {
SafetyTipsContent()
}
@@ -224,7 +225,7 @@ private fun SafetyTipsContent(forGroup: Boolean = false, modifier: Modifier = Mo
@Preview(name = "Dark Theme", group = "screen", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun SafetyTipPreview() {
SignalTheme {
Previews.Preview {
Surface {
SafetyTip(tips[0])
}