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

@@ -82,7 +82,6 @@ import kotlinx.coroutines.flow.distinctUntilChangedBy
import kotlinx.coroutines.flow.filter
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.concurrent.LifecycleDisposable
import org.signal.core.util.getSerializableCompat
import org.signal.core.util.logging.Log
@@ -105,6 +104,7 @@ import org.thoughtcrime.securesms.components.settings.app.subscription.GooglePay
import org.thoughtcrime.securesms.components.settings.app.subscription.GooglePayRepository
import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaController
import org.thoughtcrime.securesms.components.voice.VoiceNoteMediaControllerOwner
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.conversation.ConversationIntents
import org.thoughtcrime.securesms.conversation.NewConversationActivity
import org.thoughtcrime.securesms.conversation.v2.MotionEventRelay

View File

@@ -27,7 +27,6 @@ import androidx.compose.ui.text.withStyle
import androidx.compose.ui.unit.dp
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.BiometricDeviceAuthentication
import org.thoughtcrime.securesms.BiometricDeviceLockContract
@@ -35,6 +34,7 @@ import org.thoughtcrime.securesms.DevicePinAuthEducationSheet
import org.thoughtcrime.securesms.PassphraseRequiredActivity
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.backup.v2.ui.subscription.EnterKeyScreen
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.util.CommunicationActions
import kotlin.random.Random

View File

@@ -33,8 +33,8 @@ import androidx.core.os.bundleOf
import androidx.fragment.app.FragmentManager
import org.signal.core.ui.compose.BottomSheets
import org.signal.core.ui.compose.Buttons
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Texts
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.getParcelableCompat
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.badges.models.Badge
@@ -42,6 +42,7 @@ import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity
import org.thoughtcrime.securesms.components.settings.app.subscription.BadgeImage112
import org.thoughtcrime.securesms.components.settings.app.subscription.manage.ManageDonationsFragment
import org.thoughtcrime.securesms.compose.ComposeBottomSheetDialogFragment
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.database.InAppPaymentTable
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.util.BottomSheetUtil
@@ -107,7 +108,7 @@ class MonthlyDonationCanceledBottomSheetDialogFragment : ComposeBottomSheetDialo
@Preview(name = "Dark Theme", group = "ShortName", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
fun MonthlyDonationCanceledPreview() {
SignalTheme {
Previews.Preview {
Surface {
MonthlyDonationCanceled(
badge = Badge(

View File

@@ -15,8 +15,8 @@ import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import kotlinx.coroutines.flow.Flow
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.compose.SignalTheme
/**
* A class that can be instantiated with a list of [Flow]s that produce [Banner]s, then applied to a [ComposeView], typically within a [Fragment].

View File

@@ -13,9 +13,9 @@ import androidx.activity.enableEdgeToEdge
import androidx.compose.runtime.remember
import androidx.core.os.bundleOf
import androidx.fragment.app.FragmentActivity
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.getParcelableExtraCompat
import org.thoughtcrime.securesms.calls.links.EditCallLinkNameDialogFragment
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.main.MainNavigationDetailLocation
import org.thoughtcrime.securesms.main.MainNavigationListLocation
import org.thoughtcrime.securesms.main.MainNavigationRouter

View File

@@ -34,10 +34,10 @@ import kotlinx.coroutines.launch
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Dialogs
import org.signal.core.ui.compose.Dividers
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Rows
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.Snackbars
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.concurrent.LifecycleDisposable
import org.signal.ringrtc.CallLinkState.Restrictions
import org.thoughtcrime.securesms.R
@@ -344,7 +344,7 @@ private fun CallLinkDetailsScreenPreview() {
)
}
SignalTheme {
Previews.Preview {
CallLinkDetailsScreen(
CallLinkDetailsState(
false,

View File

@@ -35,12 +35,12 @@ 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.PassphraseRequiredActivity
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.calls.new.NewCallUiState.CallType
import org.thoughtcrime.securesms.calls.new.NewCallUiState.UserMessage
import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.recipients.ui.RecipientLookupFailureMessage
import org.thoughtcrime.securesms.recipients.ui.RecipientPicker
import org.thoughtcrime.securesms.recipients.ui.RecipientPickerCallbacks

View File

@@ -16,7 +16,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.setValue
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.AbstractComposeView
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.util.DynamicTheme
/**

View File

@@ -1,46 +0,0 @@
/*
* Copyright 2025 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/
package org.thoughtcrime.securesms.components.compose
import android.os.Build
import android.view.inputmethod.EditorInfo
import androidx.compose.runtime.Composable
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.platform.InterceptPlatformTextInput
import androidx.compose.ui.platform.PlatformTextInputMethodRequest
/**
* When [enabled]=true, this function sets the [EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING] flag for all text fields within its content to enable the
* incognito keyboard.
*
* This workaround is needed until it's possible to configure granular IME options for a [TextField].
* https://issuetracker.google.com/issues/359257538
*/
@OptIn(ExperimentalComposeUiApi::class)
@Composable
fun ProvideIncognitoKeyboard(
enabled: Boolean,
content: @Composable () -> Unit
) {
if (enabled) {
InterceptPlatformTextInput(
interceptor = { request, nextHandler ->
val modifiedRequest = PlatformTextInputMethodRequest { outAttributes ->
request.createInputConnection(outAttributes).also {
if (Build.VERSION.SDK_INT >= 26) {
outAttributes.imeOptions = outAttributes.imeOptions or EditorInfo.IME_FLAG_NO_PERSONALIZED_LEARNING
}
}
}
nextHandler.startInputMethod(modifiedRequest)
}
) {
content()
}
} else {
content()
}
}

View File

@@ -37,7 +37,7 @@ import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.ui.compose.Previews
import org.thoughtcrime.securesms.R
/**
@@ -105,12 +105,12 @@ fun RoundCheckbox(
@DayNightPreviews
@Composable
private fun RoundCheckboxCheckedPreview() = SignalTheme {
private fun RoundCheckboxCheckedPreview() = Previews.Preview {
RoundCheckbox(checked = true, onCheckedChange = {})
}
@DayNightPreviews
@Composable
private fun RoundCheckboxUncheckedPreview() = SignalTheme {
private fun RoundCheckboxUncheckedPreview() = Previews.Preview {
RoundCheckbox(checked = false, onCheckedChange = {})
}

View File

@@ -50,8 +50,8 @@ import androidx.navigation.fragment.findNavController
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.settings.app.appearance.appicon.util.AppIconPreset
@@ -309,7 +309,7 @@ fun CaveatWarning(onClick: () -> Unit, modifier: Modifier = Modifier) {
@DayNightPreviews
@Composable
private fun MainScreenPreview() {
SignalTheme {
Previews.Preview {
Surface {
IconSelectionScreen(AppIconPreset.DEFAULT, onItemConfirmed = {}, onWarningClick = {})
}

View File

@@ -23,8 +23,8 @@ import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Single
import io.reactivex.rxjava3.schedulers.Schedulers
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.compose.ComposeFragment
@@ -75,7 +75,7 @@ fun LicenseScreen(licenseTextLines: List<String>, modifier: Modifier = Modifier)
@DayNightPreviews
@Composable
fun LicenseFragmentPreview() {
SignalTheme {
Previews.Preview {
LicenseScreen(listOf("Lorem ipsum", "Delor"))
}
}

View File

@@ -27,9 +27,9 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import org.signal.core.ui.compose.Buttons
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Rows
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.settings.app.internal.donor.DonationErrorValueCodeSelector
import org.thoughtcrime.securesms.components.settings.app.internal.donor.DonationErrorValueTypeSelector
@@ -80,7 +80,7 @@ class InternalPendingOneTimeDonationConfigurationFragment : ComposeFragment() {
@Preview
@Composable
private fun ContentPreview() {
SignalTheme {
Previews.Preview {
Surface {
Content(
state = PendingOneTimeDonation.Builder().error(DonationErrorValue()).build(),

View File

@@ -15,9 +15,9 @@ import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Rows
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.compose.ComposeFragment
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.stories.dialogs.StoryDialogs
import org.thoughtcrime.securesms.util.DynamicTheme

View File

@@ -19,8 +19,8 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.navigation.fragment.findNavController
import org.signal.core.ui.compose.Buttons
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Rows
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.components.settings.app.internal.donor.DonationErrorValueCodeSelector
import org.thoughtcrime.securesms.components.settings.app.internal.donor.DonationErrorValueTypeSelector
import org.thoughtcrime.securesms.compose.ComposeFragment
@@ -48,7 +48,7 @@ class InternalTerminalDonationConfigurationFragment : ComposeFragment() {
@Preview
@Composable
private fun InternalTerminalDonationConfigurationContentPreview() {
SignalTheme {
Previews.Preview {
Surface {
InternalTerminalDonationConfigurationContent(
onAddClick = {}

View File

@@ -25,12 +25,12 @@ import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Rows
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.donations.StripeDeclineCode
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.badges.models.Badge
import org.thoughtcrime.securesms.components.settings.app.subscription.errors.UnexpectedSubscriptionCancellation
import org.thoughtcrime.securesms.compose.ComposeFragment
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.util.DynamicTheme
/**

View File

@@ -30,7 +30,7 @@ import androidx.fragment.app.viewModels
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.persistentListOf
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.ui.compose.Previews
import org.thoughtcrime.securesms.compose.ComposeFragment
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.recipients.ui.bottomsheet.RecipientBottomSheetDialogFragment
@@ -110,7 +110,7 @@ fun ResultItem(result: InternalSearchResult, modifier: Modifier = Modifier) {
@DayNightPreviews
@Composable
fun InternalSearchScreenPreview() {
SignalTheme {
Previews.Preview {
InternalSearchFragmentScreen(
query = "",
results = persistentListOf(

View File

@@ -21,12 +21,12 @@ import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.fragment.app.viewModels
import kotlinx.collections.immutable.persistentListOf
import org.signal.core.ui.compose.NightPreview
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Rows
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.compose.ComposeFragment
class InternalSvrPlaygroundFragment : ComposeFragment() {
@@ -116,10 +116,10 @@ fun SvrPlaygroundScreen(
}
}
@Preview
@NightPreview
@Composable
fun SvrPlaygroundScreenLightTheme() {
SignalTheme(isDarkMode = false) {
Previews.Preview {
Surface {
SvrPlaygroundScreen(
state = InternalSvrPlaygroundState(
@@ -130,10 +130,10 @@ fun SvrPlaygroundScreenLightTheme() {
}
}
@Preview
@NightPreview
@Composable
fun SvrPlaygroundScreenDarkTheme() {
SignalTheme(isDarkMode = true) {
Previews.Preview {
Surface {
SvrPlaygroundScreen(
state = InternalSvrPlaygroundState(

View File

@@ -43,7 +43,7 @@ class PrivacySettingsViewModel(
}
fun setIncognitoKeyboard(enabled: Boolean) {
sharedPreferences.edit().putBoolean(TextSecurePreferences.INCOGNITO_KEYBORAD_PREF, enabled).apply()
sharedPreferences.edit().putBoolean(TextSecurePreferences.INCOGNITO_KEYBOARD_PREF, enabled).apply()
refresh()
}

View File

@@ -35,9 +35,9 @@ import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Rows
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.horizontalGutters
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.compose.ComposeFragment
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.groups.ui.GroupChangeFailureReason
import org.thoughtcrime.securesms.groups.ui.GroupErrors
import org.thoughtcrime.securesms.util.DynamicTheme

View File

@@ -28,10 +28,10 @@ import androidx.navigation.fragment.findNavController
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import kotlinx.coroutines.launch
import org.signal.core.ui.compose.Dividers
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Rows
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.Texts
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.compose.ComposeFragment
import org.thoughtcrime.securesms.compose.StatusBarColorNestedScrollConnection
@@ -203,7 +203,7 @@ private fun Screen(
@Preview(name = "Dark Theme", group = "Screen", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ScreenPreviewSharingAndDiscoverable() {
SignalTheme {
Previews.Preview {
Screen(
state = PhoneNumberPrivacySettingsState(
phoneNumberSharing = true,
@@ -217,7 +217,7 @@ private fun ScreenPreviewSharingAndDiscoverable() {
@Preview(name = "Dark Theme", group = "Screen", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ScreenPreviewNotSharingDiscoverable() {
SignalTheme {
Previews.Preview {
Screen(
state = PhoneNumberPrivacySettingsState(
phoneNumberSharing = false,
@@ -231,7 +231,7 @@ private fun ScreenPreviewNotSharingDiscoverable() {
@Preview(name = "Dark Theme", group = "Screen", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ScreenPreviewNotSharingNotDiscoverable() {
SignalTheme {
Previews.Preview {
Screen(
state = PhoneNumberPrivacySettingsState(
phoneNumberSharing = false,

View File

@@ -62,12 +62,12 @@ import org.signal.core.ui.compose.Rows
import org.signal.core.ui.compose.Rows.TextAndLabel
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.Texts
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.bytes
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.billing.upgrade.UpgradeToEnableOptimizedStorageSheet
import org.thoughtcrime.securesms.billing.upgrade.UpgradeToPaidTierBottomSheet
import org.thoughtcrime.securesms.compose.ComposeFragment
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.database.MediaTable
import org.thoughtcrime.securesms.keyvalue.KeepMessagesDuration
import org.thoughtcrime.securesms.keyvalue.SignalStore

View File

@@ -29,8 +29,8 @@ import androidx.navigation.fragment.navArgs
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.Texts
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.badges.Badges
import org.thoughtcrime.securesms.badges.models.Badge
@@ -81,7 +81,7 @@ class DonationPendingBottomSheet : ComposeBottomSheetDialogFragment() {
@DayNightPreviews
@Composable
fun DonationPendingBottomSheetContentPreview() {
SignalTheme {
Previews.Preview {
Surface {
DonationPendingBottomSheetContent(
badge = Badge(

View File

@@ -37,7 +37,7 @@ import androidx.fragment.app.FragmentManager
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.theme.SignalTheme
import org.signal.core.ui.compose.Previews
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.badges.BadgeRepository
import org.thoughtcrime.securesms.badges.models.Badge
@@ -128,7 +128,7 @@ class TerminalDonationBottomSheet : ComposeBottomSheetDialogFragment() {
@DayNightPreviews
@Composable
private fun DonationPaymentFailureBottomSheet() {
SignalTheme {
Previews.Preview {
Surface {
DonationPaymentFailureBottomSheet(
badge = null,
@@ -226,7 +226,7 @@ private fun DonationPaymentFailureBottomSheet(
@DayNightPreviews
@Composable
private fun DonationCompletedSheetContentPreview() {
SignalTheme {
Previews.Preview {
Surface {
DonationCompletedSheetContent(
badge = null,

View File

@@ -50,9 +50,9 @@ import androidx.navigation.fragment.navArgs
import androidx.navigation.navGraphViewModels
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.Scaffolds
import org.signal.core.ui.compose.Texts
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.getParcelableCompat
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.TemporaryScreenshotSecurity
@@ -187,7 +187,7 @@ class BankTransferDetailsFragment : ComposeFragment(), InAppPaymentCheckoutDeleg
@DayNightPreviews
@Composable
private fun BankTransferDetailsContentPreview() {
SignalTheme {
Previews.Preview {
BankTransferDetailsContent(
state = BankTransferDetailsState(
name = "Miles Morales",

View File

@@ -55,6 +55,7 @@ import kotlinx.coroutines.launch
import org.signal.core.ui.compose.Buttons
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Dividers
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Texts
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
@@ -129,7 +130,7 @@ class BankTransferMandateFragment : ComposeFragment() {
@DayNightPreviews
@Composable
fun BankTransferScreenPreview() {
SignalTheme {
Previews.Preview {
BankTransferScreen(
bankMandate = "Test ".repeat(500),
failedToLoadMandate = false,

View File

@@ -37,7 +37,7 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.ui.compose.Previews
import org.thoughtcrime.securesms.R
/**
@@ -165,7 +165,7 @@ fun QrCodeBadge(
@Preview(name = "Dark Theme", group = "ShortName", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun PreviewWithCodeShort() {
SignalTheme {
Previews.Preview {
Surface {
Column {
QrCodeBadge(
@@ -188,7 +188,7 @@ private fun PreviewWithCodeShort() {
@Preview(group = "LongName")
@Composable
private fun PreviewWithCodeLong() {
SignalTheme {
Previews.Preview {
Surface {
Column {
QrCodeBadge(
@@ -212,7 +212,7 @@ private fun PreviewWithCodeLong() {
@Preview(group = "Colors", heightDp = 1500)
@Composable
private fun PreviewAllColorsP1() {
SignalTheme(isDarkMode = false) {
Previews.Preview {
Surface {
Column {
SampleCode(colorScheme = UsernameQrCodeColorScheme.Blue)
@@ -230,7 +230,7 @@ private fun PreviewAllColorsP1() {
@Preview(group = "Colors", heightDp = 1500)
@Composable
private fun PreviewAllColorsP2() {
SignalTheme(isDarkMode = false) {
Previews.Preview {
Surface {
Column {
SampleCode(colorScheme = UsernameQrCodeColorScheme.Pink)
@@ -258,7 +258,7 @@ private fun SampleCode(colorScheme: UsernameQrCodeColorScheme) {
@Preview(name = "Dark Theme", group = "Loading", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun PreviewLoading() {
SignalTheme {
Previews.Preview {
Surface {
QrCodeBadge(
data = QrCodeState.Loading,
@@ -273,7 +273,7 @@ private fun PreviewLoading() {
@Preview(name = "Dark Theme", group = "NotSet", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun PreviewNotSet() {
SignalTheme {
Previews.Preview {
Surface {
QrCodeBadge(
data = QrCodeState.NotSet,

View File

@@ -44,7 +44,7 @@ import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList
import org.signal.core.ui.compose.Buttons
import org.signal.core.ui.compose.DayNightPreviews
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.settings.app.usernamelinks.QrCodeBadge
import org.thoughtcrime.securesms.components.settings.app.usernamelinks.UsernameQrCodeColorScheme
@@ -186,7 +186,7 @@ class UsernameLinkQrColorPickerFragment : ComposeFragment() {
@DayNightPreviews
@Composable
private fun PreviewColorPickerItem() {
SignalTheme {
Previews.Preview {
Surface {
Row(verticalAlignment = Alignment.CenterVertically) {
ColorPickerItem(color = UsernameQrCodeColorScheme.Blue, selected = false, onClick = {})
@@ -199,7 +199,7 @@ class UsernameLinkQrColorPickerFragment : ComposeFragment() {
@DayNightPreviews
@Composable
private fun PreviewColorPicker() {
SignalTheme {
Previews.Preview {
Surface {
ColorPicker(
colors = UsernameQrCodeColorScheme.entries.toImmutableList(),

View File

@@ -64,6 +64,7 @@ import kotlinx.coroutines.CoroutineScope
import org.signal.core.ui.compose.Buttons
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Dialogs
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Snackbars
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.concurrent.LifecycleDisposable
@@ -349,7 +350,7 @@ private fun ResetDialog(onConfirm: () -> Unit, onDismiss: () -> Unit) {
@DayNightPreviews
@Composable
private fun AppBarPreview() {
SignalTheme {
Previews.Preview {
Surface {
Column {
TopAppBarContent(activeTab = ActiveTab.Code)
@@ -362,7 +363,7 @@ private fun AppBarPreview() {
@DayNightPreviews
@Composable
private fun MainScreenPreview() {
SignalTheme {
Previews.Preview {
MainScreen(
state = UsernameLinkSettingsState(
activeTab = ActiveTab.Code,
@@ -378,7 +379,7 @@ private fun MainScreenPreview() {
@DayNightPreviews
@Composable
private fun ResetDialogPreview() {
SignalTheme {
Previews.Preview {
Surface {
ResetDialog(onConfirm = {}, onDismiss = {})
}

View File

@@ -31,7 +31,7 @@ import androidx.core.os.bundleOf
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.setFragmentResult
import org.signal.core.ui.compose.BottomSheets
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.webrtc.requests.CallLinkIncomingRequestSheet
import org.thoughtcrime.securesms.compose.ComposeBottomSheetDialogFragment
@@ -148,7 +148,7 @@ private fun ButtonRow(icon: Painter, text: String, modifier: Modifier = Modifier
@Preview(name = "Dark Theme", group = "content", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ContentPreview() {
SignalTheme {
Previews.Preview {
Surface {
Content(
usernameLink = "https://signal.me#eufzLWmFFUYAOqnVJ4Zlt0KqXf87r59FC1hZ3r7WipjKvgzMBg7DBlY5DB5hQTjsw0"
@@ -161,7 +161,7 @@ private fun ContentPreview() {
@Preview(name = "Dark Theme", group = "button row", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ButtonRowPreview() {
SignalTheme {
Previews.Preview {
Surface {
ButtonRow(icon = painterResource(R.drawable.symbol_share_android_24), text = "Share")
}

View File

@@ -35,7 +35,7 @@ import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import org.signal.core.ui.compose.Buttons
import org.signal.core.ui.compose.Dialogs
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.settings.app.usernamelinks.QrCodeBadge
import org.thoughtcrime.securesms.components.settings.app.usernamelinks.QrCodeData
@@ -67,15 +67,19 @@ fun UsernameLinkShareScreen(
UsernameLinkResetResult.NetworkUnavailable -> {
ResetLinkResultDialog(stringResource(R.string.UsernameLinkSettings_reset_link_result_network_unavailable), onDismiss = onLinkResultHandled)
}
UsernameLinkResetResult.NetworkError -> {
ResetLinkResultDialog(stringResource(R.string.UsernameLinkSettings_reset_link_result_network_error), onDismiss = onLinkResultHandled)
}
UsernameLinkResetResult.UnexpectedError -> {
ResetLinkResultDialog(stringResource(R.string.UsernameLinkSettings_reset_link_result_unknown_error), onDismiss = onLinkResultHandled)
}
is UsernameLinkResetResult.Success -> {
ResetLinkResultDialog(stringResource(R.string.UsernameLinkSettings_reset_link_result_success), onDismiss = onLinkResultHandled)
}
else -> {}
}
@@ -216,7 +220,7 @@ private fun ResetLinkResultDialog(message: String, onDismiss: () -> Unit) {
@Preview(name = "Dark Theme", group = "screen", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ScreenPreview() {
SignalTheme {
Previews.Preview {
Surface {
UsernameLinkShareScreen(
state = previewState(),
@@ -235,7 +239,7 @@ private fun ScreenPreview() {
@Preview(name = "Dark Theme", group = "screen", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ScreenPreviewResetSuccess() {
SignalTheme {
Previews.Preview {
Surface {
UsernameLinkShareScreen(
state = previewState().copy(usernameLinkResetResult = UsernameLinkResetResult.Success(UsernameLinkComponents(Util.getSecretBytes(32), UUID.randomUUID()))),
@@ -254,7 +258,7 @@ private fun ScreenPreviewResetSuccess() {
@Preview(name = "Dark Theme", group = "screen", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ScreenPreviewResetNetworkError() {
SignalTheme {
Previews.Preview {
Surface {
UsernameLinkShareScreen(
state = previewState().copy(usernameLinkResetResult = UsernameLinkResetResult.NetworkError),
@@ -273,7 +277,7 @@ private fun ScreenPreviewResetNetworkError() {
@Preview(name = "Dark Theme", group = "screen", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ScreenPreviewResetNetworkUnavailable() {
SignalTheme {
Previews.Preview {
Surface {
UsernameLinkShareScreen(
state = previewState().copy(usernameLinkResetResult = UsernameLinkResetResult.NetworkUnavailable),
@@ -292,7 +296,7 @@ private fun ScreenPreviewResetNetworkUnavailable() {
@Preview(name = "Dark Theme", group = "screen", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ScreenPreviewResetUnexpectedError() {
SignalTheme {
Previews.Preview {
Surface {
UsernameLinkShareScreen(
state = previewState().copy(usernameLinkResetResult = UsernameLinkResetResult.UnexpectedError),
@@ -311,7 +315,7 @@ private fun ScreenPreviewResetUnexpectedError() {
@Preview(name = "Dark Theme", group = "LinkRow", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun LinkRowPreview() {
SignalTheme {
Previews.Preview {
Surface {
Column(modifier = Modifier.padding(8.dp)) {
LinkRow(

View File

@@ -38,11 +38,10 @@ import com.google.accompanist.permissions.rememberMultiplePermissionsState
import com.google.accompanist.permissions.rememberPermissionState
import io.reactivex.rxjava3.disposables.CompositeDisposable
import org.signal.core.ui.compose.Dialogs
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.concurrent.LifecycleDisposable
import org.signal.core.util.getParcelableExtraCompat
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.settings.app.usernamelinks.main.UsernameQrScannerActivity.Contract
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.permissions.PermissionCompat
import org.thoughtcrime.securesms.permissions.Permissions
import org.thoughtcrime.securesms.recipients.Recipient

View File

@@ -56,13 +56,12 @@ import org.signal.core.ui.compose.Dialogs
import org.signal.core.ui.compose.Dividers
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Rows
import org.signal.core.ui.compose.theme.LocalExtendedColors
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.avatar.fallback.FallbackAvatar
import org.thoughtcrime.securesms.avatar.fallback.FallbackAvatarImage
import org.thoughtcrime.securesms.components.AvatarImageView
import org.thoughtcrime.securesms.components.webrtc.v2.WebRtcCallViewModel
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.conversation.colors.AvatarColor
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.events.CallParticipant
@@ -135,7 +134,7 @@ object CallInfoView {
@Preview
@Composable
private fun CallInfoPreview() {
SignalTheme(isDarkMode = true) {
Previews.Preview {
Surface {
val remoteParticipants = listOf(CallParticipant(recipient = Recipient.UNKNOWN))
CallInfo(
@@ -344,7 +343,7 @@ private fun getCallSheetLabel(state: ParticipantsState): String {
@Preview
@Composable
private fun CallParticipantRowPreview() {
SignalTheme(isDarkMode = true) {
Previews.Preview {
Surface {
CallParticipantRow(
CallParticipant(recipient = Recipient.UNKNOWN),
@@ -357,7 +356,7 @@ private fun CallParticipantRowPreview() {
@Preview
@Composable
private fun HandRaisedRowPreview() {
SignalTheme(isDarkMode = true) {
Previews.Preview {
Surface {
HandRaisedRow(Recipient.UNKNOWN, "Peter Parker", canLowerHand = true)
}
@@ -604,7 +603,7 @@ private fun TwoUnknownAvatars() {
modifier = Modifier
.size(38.dp)
.align(Alignment.CenterEnd)
.border(width = 2.dp, color = LocalExtendedColors.current.colorSurface1, shape = CircleShape)
.border(width = 2.dp, color = SignalTheme.colors.colorSurface1, shape = CircleShape)
)
}
}

View File

@@ -45,10 +45,10 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.map
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.ringrtc.GroupCall
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.webrtc.v2.WebRtcCallViewModel
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.events.CallParticipant
import org.thoughtcrime.securesms.events.GroupCallRaiseHandEvent

View File

@@ -26,7 +26,6 @@ import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import org.signal.core.ui.compose.rememberIsInPipMode
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.components.webrtc.CallParticipantListUpdate
import org.thoughtcrime.securesms.components.webrtc.CallParticipantsState
@@ -35,6 +34,7 @@ import org.thoughtcrime.securesms.components.webrtc.WebRtcControls
import org.thoughtcrime.securesms.components.webrtc.controls.CallInfoView
import org.thoughtcrime.securesms.components.webrtc.controls.ControlsAndInfoViewModel
import org.thoughtcrime.securesms.components.webrtc.controls.RaiseHandSnackbar
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.dependencies.AppDependencies
import org.thoughtcrime.securesms.events.WebRtcViewModel
import org.thoughtcrime.securesms.keyvalue.SignalStore

View File

@@ -12,7 +12,6 @@ import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.compose.ui.unit.dp
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.components.FixedRoundedCornerBottomSheetDialogFragment
import org.thoughtcrime.securesms.util.DynamicTheme

View File

@@ -9,7 +9,6 @@ import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.fragment.app.DialogFragment
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.util.DynamicTheme
/**

View File

@@ -7,7 +7,6 @@ import android.view.ViewGroup
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import androidx.fragment.compose.content
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.LoggingFragment
import org.thoughtcrime.securesms.util.DynamicTheme

View File

@@ -9,7 +9,6 @@ import androidx.compose.ui.platform.ComposeView
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.ViewCompositionStrategy
import androidx.fragment.app.DialogFragment
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.util.DynamicTheme
import org.thoughtcrime.securesms.util.WindowUtil

View File

@@ -0,0 +1,39 @@
/*
* Copyright 2025 Signal Messenger, LLC
* SPDX-License-Identifier: AGPL-3.0-only
*/
package org.thoughtcrime.securesms.compose
import android.content.res.Configuration
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalContext
import org.signal.core.ui.compose.theme.ExtendedColors
import org.thoughtcrime.securesms.util.TextSecurePreferences
private typealias CoreSignalTheme = org.signal.core.ui.compose.theme.SignalTheme
@Composable
fun SignalTheme(
isDarkMode: Boolean = LocalConfiguration.current.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES,
content: @Composable () -> Unit
) {
val context = LocalContext.current
val incognitoKeyboardEnabled = remember {
TextSecurePreferences.isIncognitoKeyboardEnabled(context)
}
org.signal.core.ui.compose.theme.SignalTheme(
isDarkMode = isDarkMode,
incognitoKeyboardEnabled = incognitoKeyboardEnabled,
content = content
)
}
object SignalTheme {
val colors: ExtendedColors
@Composable
get() = CoreSignalTheme.colors
}

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])
}

View File

@@ -48,9 +48,9 @@ import org.signal.core.ui.compose.AllDevicePreviews
import org.signal.core.ui.compose.Buttons
import org.signal.core.ui.compose.Dialogs
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.PassphraseRequiredActivity
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.contacts.SelectedContact
import org.thoughtcrime.securesms.groups.SelectionLimits
import org.thoughtcrime.securesms.groups.ui.creategroup.CreateGroupUiState.NavTarget

View File

@@ -44,11 +44,11 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.getParcelableExtraCompat
import org.thoughtcrime.securesms.PassphraseRequiredActivity
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.avatar.AvatarImage
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.compose.StatusBarColorNestedScrollConnection
import org.thoughtcrime.securesms.recipients.Recipient
import org.thoughtcrime.securesms.recipients.RecipientId

View File

@@ -28,7 +28,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.fragment.app.viewModels
import org.signal.core.ui.compose.BottomSheets
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.ui.compose.Previews
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.compose.ComposeBottomSheetDialogFragment
import org.thoughtcrime.securesms.mediasend.v2.MediaSelectionViewModel
@@ -114,7 +114,7 @@ private fun ButtonLabel(title: String, description: String) {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun PreviewQualitySelectorBottomSheetStandard() {
SignalTheme(isDarkMode = true) {
Previews.Preview {
Content(SentMediaQuality.STANDARD) {}
}
}
@@ -122,7 +122,7 @@ private fun PreviewQualitySelectorBottomSheetStandard() {
@Preview(showBackground = true, uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun PreviewQualitySelectorBottomSheetHigh() {
SignalTheme(isDarkMode = true) {
Previews.Preview {
Content(SentMediaQuality.HIGH) {}
}
}

View File

@@ -49,9 +49,9 @@ import kotlinx.coroutines.withContext
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.IconButtons
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.emoji.Emojifier
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.main.EmptyMegaphoneActionController
import org.thoughtcrime.securesms.megaphone.Megaphones.Event
import org.thoughtcrime.securesms.util.DynamicTheme

View File

@@ -52,11 +52,11 @@ import org.signal.core.ui.compose.Dialogs
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.TextFields
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.getParcelableCompat
import org.thoughtcrime.securesms.PassphraseRequiredActivity
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.avatar.AvatarImage
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.util.DynamicNoActionBarTheme
import org.thoughtcrime.securesms.util.viewModel

View File

@@ -39,7 +39,7 @@ import androidx.core.os.bundleOf
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.theme.SignalTheme
import org.signal.core.ui.compose.Previews
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity
import org.thoughtcrime.securesms.compose.ComposeBottomSheetDialogFragment
@@ -118,7 +118,7 @@ class TurnOnNotificationsBottomSheet private constructor() : ComposeBottomSheetD
@DayNightPreviews
@Composable
private fun TurnOnNotificationsSheetContentPreview() {
SignalTheme {
Previews.Preview {
Surface {
TurnOnNotificationsSheetContent(
titleRes = R.string.TurnOnNotificationsBottomSheet__turn_on_notifications,

View File

@@ -41,7 +41,7 @@ import androidx.core.os.bundleOf
import androidx.core.widget.TextViewCompat
import org.signal.core.ui.compose.BottomSheets
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.ui.compose.Previews
import org.signal.core.util.getParcelableCompat
import org.signal.core.util.isNotNullOrBlank
import org.thoughtcrime.securesms.AvatarPreviewActivity
@@ -407,7 +407,7 @@ private fun AboutRow(
@Preview(name = "Dark Theme", group = "content", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ContentPreviewDefault() {
SignalTheme {
Previews.Preview {
Surface {
Content(
model = AboutModel(
@@ -437,7 +437,7 @@ private fun ContentPreviewDefault() {
@Preview(name = "Dark Theme", group = "content", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ContentPreviewWithUserSetDisplayName() {
SignalTheme {
Previews.Preview {
Surface {
Content(
model = AboutModel(
@@ -467,7 +467,7 @@ private fun ContentPreviewWithUserSetDisplayName() {
@Preview(name = "Dark Theme", group = "content", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ContentPreviewForSelf() {
SignalTheme {
Previews.Preview {
Surface {
Content(
model = AboutModel(
@@ -497,7 +497,7 @@ private fun ContentPreviewForSelf() {
@Preview(name = "Dark Theme", group = "content", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ContentPreviewInContactsNotProfileSharing() {
SignalTheme {
Previews.Preview {
Surface {
Content(
model = AboutModel(
@@ -527,7 +527,7 @@ private fun ContentPreviewInContactsNotProfileSharing() {
@Preview(name = "Dark Theme", group = "content", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ContentPreviewGroupsInCommonNoE164() {
SignalTheme {
Previews.Preview {
Surface {
Content(
model = AboutModel(
@@ -557,7 +557,7 @@ private fun ContentPreviewGroupsInCommonNoE164() {
@Preview(name = "Dark Theme", group = "content", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun ContentPreviewNotAConnection() {
SignalTheme {
Previews.Preview {
Surface {
Content(
model = AboutModel(
@@ -586,7 +586,7 @@ private fun ContentPreviewNotAConnection() {
@DayNightPreviews
@Composable
private fun ContentPreviewNotAConnectionNoGroups() {
SignalTheme {
Previews.Preview {
Surface {
Content(
model = AboutModel(
@@ -616,7 +616,7 @@ private fun ContentPreviewNotAConnectionNoGroups() {
@Preview(name = "Dark Theme", group = "about row", uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun AboutRowPreview() {
SignalTheme {
Previews.Preview {
Surface {
AboutRow(
startIcon = ImageVector.vectorResource(R.drawable.symbol_person_24),

View File

@@ -69,12 +69,12 @@ import org.signal.core.ui.compose.Dividers
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.TextFields
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.E164Util
import org.signal.core.util.getParcelableExtraCompat
import org.thoughtcrime.securesms.PassphraseRequiredActivity
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.settings.app.usernamelinks.main.UsernameQrScannerActivity
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.invites.InviteActions
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberVisualTransformation
import org.thoughtcrime.securesms.recipients.RecipientId

View File

@@ -52,13 +52,13 @@ import org.signal.core.ui.compose.Dialogs
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Texts
import org.signal.core.ui.compose.horizontalGutters
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.logging.Log
import org.thoughtcrime.securesms.BiometricDeviceAuthentication
import org.thoughtcrime.securesms.BiometricDeviceLockContract
import org.thoughtcrime.securesms.MainActivity
import org.thoughtcrime.securesms.PassphraseRequiredActivity
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.devicetransfer.olddevice.OldDeviceTransferActivity
import org.thoughtcrime.securesms.fonts.SignalSymbols
import org.thoughtcrime.securesms.fonts.SignalSymbols.SignalSymbol

View File

@@ -61,13 +61,12 @@ import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Dialogs
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.horizontalGutters
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.settings.app.usernamelinks.QrCode
import org.thoughtcrime.securesms.compose.ComposeFragment
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.registration.ui.RegistrationViewModel
import org.thoughtcrime.securesms.registration.ui.shared.RegistrationScreen
import java.lang.IllegalStateException
/**
* Crude show QR code on link device to allow linking from primary device.

View File

@@ -64,7 +64,6 @@ import org.signal.core.ui.compose.Buttons
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.Dialogs
import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.ThreadUtil
import org.signal.core.util.bytes
import org.thoughtcrime.securesms.BaseActivity
@@ -78,6 +77,7 @@ import org.thoughtcrime.securesms.components.contactsupport.ContactSupportCallba
import org.thoughtcrime.securesms.components.contactsupport.ContactSupportDialog
import org.thoughtcrime.securesms.components.contactsupport.ContactSupportViewModel
import org.thoughtcrime.securesms.components.contactsupport.SendSupportEmailEffect
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.conversation.v2.registerForLifecycle
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.registration.ui.shared.RegistrationScreen

View File

@@ -67,12 +67,12 @@ 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.horizontalGutters
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.registration.proto.RegistrationProvisionMessage
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.settings.app.usernamelinks.QrCode
import org.thoughtcrime.securesms.components.settings.app.usernamelinks.QrCodeData
import org.thoughtcrime.securesms.compose.ComposeFragment
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.registration.data.network.RegisterAccountResult
import org.thoughtcrime.securesms.registration.ui.RegistrationViewModel
import org.thoughtcrime.securesms.registration.ui.shared.RegistrationScreen

View File

@@ -14,7 +14,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import org.signal.core.ui.compose.DayNightPreviews
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.ui.compose.Previews
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.registration.ui.shared.RegistrationScreen
@@ -56,7 +56,7 @@ fun SelectRestoreMethodScreen(
@DayNightPreviews
@Composable
private fun SelectRestoreMethodScreenPreview() {
SignalTheme {
Previews.Preview {
SelectRestoreMethodScreen(listOf(RestoreMethod.FROM_SIGNAL_BACKUPS, RestoreMethod.FROM_OLD_DEVICE, RestoreMethod.FROM_LOCAL_BACKUP_V1))
}
}

View File

@@ -78,11 +78,11 @@ import org.signal.core.ui.compose.copied.androidx.compose.DragAndDropEvent
import org.signal.core.ui.compose.copied.androidx.compose.DraggableItem
import org.signal.core.ui.compose.copied.androidx.compose.dragContainer
import org.signal.core.ui.compose.copied.androidx.compose.rememberDragDropState
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.PassphraseRequiredActivity
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.components.menu.ActionItem
import org.thoughtcrime.securesms.components.menu.SignalBottomActionBar
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs
import org.thoughtcrime.securesms.database.model.StickerPackId

View File

@@ -279,7 +279,7 @@ private fun StickerPackInfo(
@DayNightPreviews
@Composable
private fun StickerPackSectionHeaderPreview() = SignalTheme {
private fun StickerPackSectionHeaderPreview() = Previews.Preview {
StickerPackSectionHeader(
text = "Signal artist series"
)
@@ -287,7 +287,7 @@ private fun StickerPackSectionHeaderPreview() = SignalTheme {
@DayNightPreviews
@Composable
private fun AvailableStickerPackRowPreviewBlessed() = SignalTheme {
private fun AvailableStickerPackRowPreviewBlessed() = Previews.Preview {
AvailableStickerPackRow(
pack = StickerPreviewDataFactory.availablePack(
title = "Swoon / Faces",
@@ -300,7 +300,7 @@ private fun AvailableStickerPackRowPreviewBlessed() = SignalTheme {
@DayNightPreviews
@Composable
private fun AvailableStickerPackRowPreviewNotBlessed() = SignalTheme {
private fun AvailableStickerPackRowPreviewNotBlessed() = Previews.Preview {
AvailableStickerPackRow(
pack = StickerPreviewDataFactory.availablePack(
title = "Day by Day",
@@ -314,7 +314,7 @@ private fun AvailableStickerPackRowPreviewNotBlessed() = SignalTheme {
@DayNightPreviews
@Composable
private fun AvailableStickerPackRowPreviewDownloading() = SignalTheme {
private fun AvailableStickerPackRowPreviewDownloading() = Previews.Preview {
AvailableStickerPackRow(
pack = StickerPreviewDataFactory.availablePack(
title = "Bandit the Cat",
@@ -328,7 +328,7 @@ private fun AvailableStickerPackRowPreviewDownloading() = SignalTheme {
@DayNightPreviews
@Composable
private fun AvailableStickerPackRowPreviewDownloaded() = SignalTheme {
private fun AvailableStickerPackRowPreviewDownloaded() = Previews.Preview {
AvailableStickerPackRow(
pack = StickerPreviewDataFactory.availablePack(
title = "Bandit the Cat",
@@ -342,7 +342,7 @@ private fun AvailableStickerPackRowPreviewDownloaded() = SignalTheme {
@DayNightPreviews
@Composable
private fun InstalledStickerPackRowPreview() = SignalTheme {
private fun InstalledStickerPackRowPreview() = Previews.Preview {
InstalledStickerPackRow(
multiSelectEnabled = false,
menuController = DropdownMenus.MenuController(),
@@ -356,7 +356,7 @@ private fun InstalledStickerPackRowPreview() = SignalTheme {
@DayNightPreviews
@Composable
private fun InstalledStickerPackRowSelectModePreview() = SignalTheme {
private fun InstalledStickerPackRowSelectModePreview() = Previews.Preview {
InstalledStickerPackRow(
multiSelectEnabled = true,
menuController = DropdownMenus.MenuController(),

View File

@@ -51,12 +51,12 @@ 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.Scaffolds
import org.signal.core.ui.compose.theme.SignalTheme
import org.signal.core.util.orNull
import org.signal.core.util.toOptional
import org.thoughtcrime.securesms.PassphraseRequiredActivity
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.compose.GlideImage
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragment
import org.thoughtcrime.securesms.conversation.mutiselect.forward.MultiselectForwardFragmentArgs
import org.thoughtcrime.securesms.database.model.StickerPackId

View File

@@ -37,11 +37,11 @@ import org.signal.core.ui.compose.Previews
import org.signal.core.ui.compose.Rows
import org.signal.core.ui.compose.Scaffolds
import org.signal.core.ui.compose.Texts
import org.signal.core.ui.compose.theme.SignalTheme
import org.thoughtcrime.securesms.R
import org.thoughtcrime.securesms.avatar.AvatarImage
import org.thoughtcrime.securesms.components.WrapperDialogFragment
import org.thoughtcrime.securesms.compose.ComposeFragment
import org.thoughtcrime.securesms.compose.SignalTheme
import org.thoughtcrime.securesms.database.model.DistributionListId
import org.thoughtcrime.securesms.database.model.DistributionListPrivacyMode
import org.thoughtcrime.securesms.database.model.DistributionListRecord

View File

@@ -7,7 +7,6 @@ import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.hardware.Camera.CameraInfo;
import android.net.Uri;
import android.os.Build;
import android.provider.Settings;
import androidx.annotation.ArrayRes;
@@ -92,7 +91,7 @@ public class TextSecurePreferences {
public static final String DIRECT_CAPTURE_CAMERA_ID = "pref_direct_capture_camera_id";
public static final String ALWAYS_RELAY_CALLS_PREF = "pref_turn_only";
public static final String READ_RECEIPTS_PREF = "pref_read_receipts";
public static final String INCOGNITO_KEYBORAD_PREF = "pref_incognito_keyboard";
public static final String INCOGNITO_KEYBOARD_PREF = "pref_incognito_keyboard";
public static final String UNAUTHORIZED_RECEIVED = "pref_unauthorized_received";
private static final String SUCCESSFUL_DIRECTORY_PREF = "pref_successful_directory";
@@ -159,7 +158,7 @@ public class TextSecurePreferences {
private static final String HAS_SEEN_VIDEO_RECORDING_TOOLTIP = "camerax.fragment.has.dismissed.video.recording.tooltip";
private static final String[] booleanPreferencesToBackup = {SCREEN_SECURITY_PREF,
INCOGNITO_KEYBORAD_PREF,
INCOGNITO_KEYBOARD_PREF,
ALWAYS_RELAY_CALLS_PREF,
READ_RECEIPTS_PREF,
TYPING_INDICATORS,
@@ -407,7 +406,7 @@ public class TextSecurePreferences {
}
public static boolean isIncognitoKeyboardEnabled(Context context) {
return getBooleanPreference(context, INCOGNITO_KEYBORAD_PREF, false);
return getBooleanPreference(context, INCOGNITO_KEYBOARD_PREF, false);
}
public static boolean isReadReceiptsEnabled(Context context) {