mirror of
https://github.com/simplex-chat/simplex-chat.git
synced 2026-08-27 22:34:51 +00:00
Sections: drop .uppercase() from all section / header titles
Source string resources are already in sentence case (e.g. "Profile images", "Message reception"). The .uppercase() calls forced them to ALL CAPS, which is the Android settings convention but conflicts with the iOS-style facelift. Remove the call everywhere so headers render as in the source.
This commit is contained in:
+2
-2
@@ -576,7 +576,7 @@ fun ChatInfoLayout(
|
||||
SectionSpacer()
|
||||
|
||||
if (customUserProfile != null) {
|
||||
SectionView(generalGetString(MR.strings.incognito).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.incognito)) {
|
||||
SectionItemViewSpaceBetween {
|
||||
Text(generalGetString(MR.strings.incognito_random_profile))
|
||||
Text(customUserProfile.chatViewName, color = Indigo)
|
||||
@@ -627,7 +627,7 @@ fun ChatInfoLayout(
|
||||
}
|
||||
|
||||
if (contact.contactLink != null) {
|
||||
SectionView(stringResource(MR.strings.address_section_title).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.address_section_title)) {
|
||||
SimpleXLinkQRCode(contact.contactLink)
|
||||
val clipboard = LocalClipboardManager.current
|
||||
ShareAddressButton { clipboard.shareText(simplexChatLink(contact.contactLink)) }
|
||||
|
||||
+2
-2
@@ -135,7 +135,7 @@ private fun FeatureSection(
|
||||
)
|
||||
|
||||
SectionView(
|
||||
feature.text.uppercase(),
|
||||
feature.text,
|
||||
icon = feature.iconFilled(),
|
||||
iconTint = if (enabled.forUser) SimplexGreen else if (enabled.forContact) WarningYellow else Color.Red,
|
||||
leadingIcon = true,
|
||||
@@ -170,7 +170,7 @@ private fun TimedMessagesFeatureSection(
|
||||
)
|
||||
|
||||
SectionView(
|
||||
ChatFeature.TimedMessages.text.uppercase(),
|
||||
ChatFeature.TimedMessages.text,
|
||||
icon = ChatFeature.TimedMessages.iconFilled(),
|
||||
iconTint = if (enabled.forUser) SimplexGreen else if (enabled.forContact) WarningYellow else Color.Red,
|
||||
leadingIcon = true,
|
||||
|
||||
+1
-1
@@ -196,7 +196,7 @@ fun AddGroupMembersLayout(
|
||||
InviteSectionFooter(selectedContactsCount = selectedContacts.size, allowModifyMembers, clearSelection)
|
||||
}
|
||||
SectionDividerSpaced(maxTopPadding = true)
|
||||
SectionView(stringResource(MR.strings.select_contacts).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.select_contacts)) {
|
||||
SectionItemView(padding = PaddingValues(start = DEFAULT_PADDING, end = DEFAULT_PADDING_HALF)) {
|
||||
SearchRowView(searchText)
|
||||
}
|
||||
|
||||
+1
-1
@@ -132,7 +132,7 @@ private fun AddGroupRelayLayout(
|
||||
)
|
||||
}
|
||||
SectionDividerSpaced(maxTopPadding = true)
|
||||
SectionView(generalGetString(MR.strings.select_relays).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.select_relays)) {
|
||||
availableRelays.forEach { item ->
|
||||
val selected = item.relayId in selectedRelayIds
|
||||
SectionItemView(
|
||||
|
||||
+1
-1
@@ -44,7 +44,7 @@ fun ChannelMembersView(
|
||||
|
||||
if (groupInfo.isOwner) {
|
||||
val subscriberCount = groupInfo.groupSummary.publicMemberCount ?: (members.size + 1).toLong()
|
||||
SectionView(title = subscriberCountStr(subscriberCount).uppercase()) {
|
||||
SectionView(title = subscriberCountStr(subscriberCount)) {
|
||||
SectionItemView(minHeight = 54.dp, padding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
ChannelMemberRow(groupInfo.membership, user = true, showRole = true)
|
||||
}
|
||||
|
||||
+1
-1
@@ -584,7 +584,7 @@ fun ModalData.GroupChatInfoLayout(
|
||||
SectionSpacer()
|
||||
|
||||
if (groupInfo.useRelays && groupInfo.membership.memberIncognito) {
|
||||
SectionView(generalGetString(MR.strings.incognito).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.incognito)) {
|
||||
SectionItemViewSpaceBetween {
|
||||
Text(generalGetString(MR.strings.incognito_random_profile))
|
||||
Text(groupInfo.membership.chatViewName, color = Indigo)
|
||||
|
||||
+1
-1
@@ -566,7 +566,7 @@ fun GroupMemberInfoLayout(
|
||||
}
|
||||
|
||||
if (member.contactLink != null) {
|
||||
SectionView(stringResource(MR.strings.address_section_title).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.address_section_title)) {
|
||||
SimpleXLinkQRCode(member.contactLink)
|
||||
val clipboard = LocalClipboardManager.current
|
||||
ShareAddressButton { clipboard.shareText(simplexChatLink(member.contactLink)) }
|
||||
|
||||
+17
-17
@@ -152,7 +152,7 @@ enum class PresentedServerType {
|
||||
|
||||
@Composable
|
||||
private fun ServerSessionsView(sess: ServerSessions) {
|
||||
SectionView(generalGetString(MR.strings.servers_info_transport_sessions_section_header).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.servers_info_transport_sessions_section_header)) {
|
||||
InfoRow(
|
||||
generalGetString(MR.strings.servers_info_sessions_connected),
|
||||
numOrDash(sess.ssConnected)
|
||||
@@ -294,7 +294,7 @@ private fun XFTPServersListView(servers: List<XFTPServerSummary>, statsStartedAt
|
||||
|
||||
@Composable
|
||||
private fun SMPStatsView(stats: AgentSMPServerStatsData, statsStartedAt: Instant, remoteHostInfo: RemoteHostInfo?) {
|
||||
SectionView(generalGetString(MR.strings.servers_info_statistics_section_header).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.servers_info_statistics_section_header)) {
|
||||
InfoRow(
|
||||
generalGetString(MR.strings.servers_info_messages_sent),
|
||||
numOrDash(stats._sentDirect + stats._sentViaProxy)
|
||||
@@ -330,7 +330,7 @@ private fun SMPSubscriptionsSection(totals: SMPTotals) {
|
||||
horizontalArrangement = Arrangement.spacedBy(DEFAULT_SPACE_AFTER_ICON * 2)
|
||||
) {
|
||||
Text(
|
||||
generalGetString(MR.strings.servers_info_subscriptions_section_header).uppercase(),
|
||||
generalGetString(MR.strings.servers_info_subscriptions_section_header),
|
||||
color = MaterialTheme.colors.secondary,
|
||||
style = MaterialTheme.typography.body2,
|
||||
fontSize = 12.sp
|
||||
@@ -360,7 +360,7 @@ private fun SMPSubscriptionsSection(subs: SMPServerSubs, summary: SMPServerSumma
|
||||
horizontalArrangement = Arrangement.spacedBy(DEFAULT_SPACE_AFTER_ICON * 2)
|
||||
) {
|
||||
Text(
|
||||
generalGetString(MR.strings.servers_info_subscriptions_section_header).uppercase(),
|
||||
generalGetString(MR.strings.servers_info_subscriptions_section_header),
|
||||
color = MaterialTheme.colors.secondary,
|
||||
style = MaterialTheme.typography.body2,
|
||||
fontSize = 12.sp
|
||||
@@ -416,7 +416,7 @@ private fun reconnectServerAlert(rh: RemoteHostInfo?, server: String) {
|
||||
|
||||
@Composable
|
||||
fun XFTPStatsView(stats: AgentXFTPServerStatsData, statsStartedAt: Instant, rh: RemoteHostInfo?) {
|
||||
SectionView(generalGetString(MR.strings.servers_info_statistics_section_header).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.servers_info_statistics_section_header)) {
|
||||
InfoRow(
|
||||
generalGetString(MR.strings.servers_info_uploaded),
|
||||
prettySize(stats._uploadsSize)
|
||||
@@ -450,7 +450,7 @@ private fun IndentedInfoRow(title: String, desc: String) {
|
||||
|
||||
@Composable
|
||||
fun DetailedSMPStatsLayout(stats: AgentSMPServerStatsData, statsStartedAt: Instant) {
|
||||
SectionView(generalGetString(MR.strings.servers_info_detailed_statistics_sent_messages_header).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.servers_info_detailed_statistics_sent_messages_header)) {
|
||||
InfoRow(generalGetString(MR.strings.servers_info_detailed_statistics_sent_messages_total), numOrDash(stats._sentDirect + stats._sentViaProxy))
|
||||
InfoRowTwoValues(generalGetString(MR.strings.sent_directly), generalGetString(MR.strings.attempts_label), stats._sentDirect, stats._sentDirectAttempts)
|
||||
InfoRowTwoValues(generalGetString(MR.strings.sent_via_proxy), generalGetString(MR.strings.attempts_label), stats._sentViaProxy, stats._sentViaProxyAttempts)
|
||||
@@ -466,7 +466,7 @@ fun DetailedSMPStatsLayout(stats: AgentSMPServerStatsData, statsStartedAt: Insta
|
||||
|
||||
SectionDividerSpaced()
|
||||
|
||||
SectionView(generalGetString(MR.strings.servers_info_detailed_statistics_received_messages_header).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.servers_info_detailed_statistics_received_messages_header)) {
|
||||
InfoRow(generalGetString(MR.strings.servers_info_detailed_statistics_received_total), numOrDash(stats._recvMsgs))
|
||||
SectionItemView {
|
||||
Text(generalGetString(MR.strings.servers_info_detailed_statistics_receive_errors), color = MaterialTheme.colors.onBackground)
|
||||
@@ -484,7 +484,7 @@ fun DetailedSMPStatsLayout(stats: AgentSMPServerStatsData, statsStartedAt: Insta
|
||||
|
||||
SectionDividerSpaced()
|
||||
|
||||
SectionView(generalGetString(MR.strings.connections).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.connections)) {
|
||||
InfoRow(generalGetString(MR.strings.created), numOrDash(stats._connCreated))
|
||||
InfoRow(generalGetString(MR.strings.secured), numOrDash(stats._connSecured))
|
||||
InfoRow(generalGetString(MR.strings.completed), numOrDash(stats._connCompleted))
|
||||
@@ -503,7 +503,7 @@ fun DetailedSMPStatsLayout(stats: AgentSMPServerStatsData, statsStartedAt: Insta
|
||||
|
||||
@Composable
|
||||
fun DetailedXFTPStatsLayout(stats: AgentXFTPServerStatsData, statsStartedAt: Instant) {
|
||||
SectionView(generalGetString(MR.strings.uploaded_files).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.uploaded_files)) {
|
||||
InfoRow(generalGetString(MR.strings.size), prettySize(stats._uploadsSize))
|
||||
InfoRowTwoValues(generalGetString(MR.strings.chunks_uploaded), generalGetString(MR.strings.attempts_label), stats._uploads, stats._uploadAttempts)
|
||||
InfoRow(generalGetString(MR.strings.upload_errors), numOrDash(stats._uploadErrs))
|
||||
@@ -511,7 +511,7 @@ fun DetailedXFTPStatsLayout(stats: AgentXFTPServerStatsData, statsStartedAt: Ins
|
||||
InfoRow(generalGetString(MR.strings.deletion_errors), numOrDash(stats._deleteErrs))
|
||||
}
|
||||
SectionDividerSpaced()
|
||||
SectionView(generalGetString(MR.strings.downloaded_files).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.downloaded_files)) {
|
||||
InfoRow(generalGetString(MR.strings.size), prettySize(stats._downloadsSize))
|
||||
InfoRowTwoValues(generalGetString(MR.strings.chunks_downloaded), generalGetString(MR.strings.attempts_label), stats._downloads, stats._downloadAttempts)
|
||||
SectionItemView {
|
||||
@@ -529,7 +529,7 @@ fun DetailedXFTPStatsLayout(stats: AgentXFTPServerStatsData, statsStartedAt: Ins
|
||||
|
||||
@Composable
|
||||
fun XFTPServerSummaryLayout(summary: XFTPServerSummary, statsStartedAt: Instant, rh: RemoteHostInfo?) {
|
||||
SectionView(generalGetString(MR.strings.server_address).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.server_address)) {
|
||||
SelectionContainer {
|
||||
Text(
|
||||
summary.xftpServer,
|
||||
@@ -557,7 +557,7 @@ fun XFTPServerSummaryLayout(summary: XFTPServerSummary, statsStartedAt: Instant,
|
||||
|
||||
@Composable
|
||||
fun SMPServerSummaryLayout(summary: SMPServerSummary, statsStartedAt: Instant, rh: RemoteHostInfo?) {
|
||||
SectionView(generalGetString(MR.strings.server_address).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.server_address)) {
|
||||
SelectionContainer {
|
||||
Text(
|
||||
summary.smpServer,
|
||||
@@ -840,7 +840,7 @@ fun ModalData.ServersSummaryView(rh: RemoteHostInfo?, serversSummary: MutableSta
|
||||
SMPServersListView(
|
||||
servers = currentlyUsedSMPServers,
|
||||
statsStartedAt = statsStartedAt,
|
||||
header = generalGetString(MR.strings.servers_info_connected_servers_section_header).uppercase(),
|
||||
header = generalGetString(MR.strings.servers_info_connected_servers_section_header),
|
||||
rh = rh
|
||||
)
|
||||
SectionDividerSpaced()
|
||||
@@ -850,7 +850,7 @@ fun ModalData.ServersSummaryView(rh: RemoteHostInfo?, serversSummary: MutableSta
|
||||
SMPServersListView(
|
||||
servers = previouslyUsedSMPServers,
|
||||
statsStartedAt = statsStartedAt,
|
||||
header = generalGetString(MR.strings.servers_info_previously_connected_servers_section_header).uppercase(),
|
||||
header = generalGetString(MR.strings.servers_info_previously_connected_servers_section_header),
|
||||
rh = rh
|
||||
)
|
||||
SectionDividerSpaced()
|
||||
@@ -860,7 +860,7 @@ fun ModalData.ServersSummaryView(rh: RemoteHostInfo?, serversSummary: MutableSta
|
||||
SMPServersListView(
|
||||
servers = proxySMPServers,
|
||||
statsStartedAt = statsStartedAt,
|
||||
header = generalGetString(MR.strings.servers_info_proxied_servers_section_header).uppercase(),
|
||||
header = generalGetString(MR.strings.servers_info_proxied_servers_section_header),
|
||||
footer = generalGetString(MR.strings.servers_info_proxied_servers_section_footer),
|
||||
rh = rh
|
||||
)
|
||||
@@ -887,7 +887,7 @@ fun ModalData.ServersSummaryView(rh: RemoteHostInfo?, serversSummary: MutableSta
|
||||
XFTPServersListView(
|
||||
currentlyUsedXFTPServers,
|
||||
statsStartedAt,
|
||||
generalGetString(MR.strings.servers_info_connected_servers_section_header).uppercase(),
|
||||
generalGetString(MR.strings.servers_info_connected_servers_section_header),
|
||||
rh
|
||||
)
|
||||
SectionDividerSpaced()
|
||||
@@ -897,7 +897,7 @@ fun ModalData.ServersSummaryView(rh: RemoteHostInfo?, serversSummary: MutableSta
|
||||
XFTPServersListView(
|
||||
previouslyUsedXFTPServers,
|
||||
statsStartedAt,
|
||||
generalGetString(MR.strings.servers_info_previously_connected_servers_section_header).uppercase(),
|
||||
generalGetString(MR.strings.servers_info_previously_connected_servers_section_header),
|
||||
rh
|
||||
)
|
||||
SectionDividerSpaced()
|
||||
|
||||
+1
-1
@@ -119,7 +119,7 @@ fun DatabaseEncryptionLayout(
|
||||
ChatStoppedView()
|
||||
SectionSpacer()
|
||||
}
|
||||
SectionView(if (migration) generalGetString(MR.strings.database_passphrase).uppercase() else null) {
|
||||
SectionView(if (migration) generalGetString(MR.strings.database_passphrase) else null) {
|
||||
SavePassphraseSetting(
|
||||
useKeychain.value,
|
||||
initialRandomDBPassphrase.value,
|
||||
|
||||
+2
-2
@@ -170,7 +170,7 @@ fun DatabaseLayout(
|
||||
AppBarTitle(stringResource(MR.strings.your_chat_database))
|
||||
|
||||
if (!chatModel.desktopNoUserNoRemote) {
|
||||
SectionView(stringResource(MR.strings.messages_section_title).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.messages_section_title)) {
|
||||
TtlOptions(chatItemTTL, enabled = rememberUpdatedState(!stopped && !progressIndicator), onChatItemTTLSelected)
|
||||
}
|
||||
SectionTextFooter(
|
||||
@@ -262,7 +262,7 @@ fun DatabaseLayout(
|
||||
}
|
||||
SectionDividerSpaced()
|
||||
|
||||
SectionView(stringResource(MR.strings.files_and_media_section).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.files_and_media_section)) {
|
||||
val deleteFilesDisabled = operationsDisabled || appFilesCountAndSize.value.first == 0
|
||||
SectionItemView(
|
||||
deleteAppFilesAndMedia,
|
||||
|
||||
+12
-12
@@ -182,7 +182,7 @@ private fun SectionByState(
|
||||
@Composable
|
||||
private fun MutableState<MigrationFromState>.ChatStopInProgressView() {
|
||||
Box {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_stopping_chat).uppercase()) {}
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_stopping_chat)) {}
|
||||
ProgressView()
|
||||
}
|
||||
LaunchedEffect(Unit) {
|
||||
@@ -192,7 +192,7 @@ private fun MutableState<MigrationFromState>.ChatStopInProgressView() {
|
||||
|
||||
@Composable
|
||||
private fun MutableState<MigrationFromState>.ChatStopFailedView(reason: String) {
|
||||
SectionView(stringResource(MR.strings.error_stopping_chat).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.error_stopping_chat)) {
|
||||
Text(reason)
|
||||
SectionSpacer()
|
||||
SettingsActionItemWithContent(
|
||||
@@ -226,7 +226,7 @@ private fun MutableState<MigrationFromState>.PassphraseConfirmationView() {
|
||||
ChatStoppedView()
|
||||
SectionSpacer()
|
||||
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_verify_database_passphrase).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_verify_database_passphrase)) {
|
||||
PassphraseField(currentKey, placeholder = stringResource(MR.strings.current_passphrase), Modifier.padding(horizontal = DEFAULT_PADDING), isValid = ::validKey, requestFocus = true)
|
||||
|
||||
SettingsActionItemWithContent(
|
||||
@@ -254,7 +254,7 @@ private fun MutableState<MigrationFromState>.PassphraseConfirmationView() {
|
||||
|
||||
@Composable
|
||||
private fun MutableState<MigrationFromState>.UploadConfirmationView() {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_confirm_upload).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_confirm_upload)) {
|
||||
SettingsActionItemWithContent(
|
||||
icon = painterResource(MR.images.ic_ios_share),
|
||||
text = stringResource(MR.strings.migrate_from_device_archive_and_upload),
|
||||
@@ -268,7 +268,7 @@ private fun MutableState<MigrationFromState>.UploadConfirmationView() {
|
||||
@Composable
|
||||
private fun MutableState<MigrationFromState>.ArchivingView() {
|
||||
Box {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_archiving_database).uppercase()) {}
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_archiving_database)) {}
|
||||
ProgressView()
|
||||
}
|
||||
LaunchedEffect(Unit) {
|
||||
@@ -279,7 +279,7 @@ private fun MutableState<MigrationFromState>.ArchivingView() {
|
||||
@Composable
|
||||
private fun MutableState<MigrationFromState>.DatabaseInitView(tempDatabaseFile: File, totalBytes: Long, archivePath: String) {
|
||||
Box {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_database_init).uppercase()) {}
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_database_init)) {}
|
||||
ProgressView()
|
||||
}
|
||||
LaunchedEffect(Unit) {
|
||||
@@ -298,7 +298,7 @@ private fun MutableState<MigrationFromState>.UploadProgressView(
|
||||
archivePath: String,
|
||||
) {
|
||||
Box {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_uploading_archive).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_uploading_archive)) {
|
||||
val ratio = uploadedBytes.toFloat() / max(totalBytes, 1)
|
||||
LargeProgressView(ratio, "${(ratio * 100).toInt()}%", stringResource(MR.strings.migrate_from_device_bytes_uploaded).format(formatBytes(uploadedBytes)))
|
||||
}
|
||||
@@ -310,7 +310,7 @@ private fun MutableState<MigrationFromState>.UploadProgressView(
|
||||
|
||||
@Composable
|
||||
private fun MutableState<MigrationFromState>.UploadFailedView(totalBytes: Long, archivePath: String, chatReceiver: MigrationFromChatReceiver?) {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_upload_failed).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_upload_failed)) {
|
||||
SettingsActionItemWithContent(
|
||||
icon = painterResource(MR.images.ic_ios_share),
|
||||
text = stringResource(MR.strings.migrate_from_device_repeat_upload),
|
||||
@@ -329,7 +329,7 @@ private fun MutableState<MigrationFromState>.UploadFailedView(totalBytes: Long,
|
||||
@Composable
|
||||
private fun LinkCreationView() {
|
||||
Box {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_creating_archive_link).uppercase()) {}
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_creating_archive_link)) {}
|
||||
ProgressView()
|
||||
}
|
||||
}
|
||||
@@ -365,11 +365,11 @@ private fun MutableState<MigrationFromState>.LinkShownView(fileId: Long, link: S
|
||||
SectionTextFooter(annotatedStringResource(MR.strings.migrate_from_device_archive_will_be_deleted))
|
||||
SectionTextFooter(annotatedStringResource(MR.strings.migrate_from_device_choose_migrate_from_another_device))
|
||||
SectionSpacer()
|
||||
SectionView(stringResource(MR.strings.show_QR_code).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.show_QR_code)) {
|
||||
SimpleXLinkQRCode(link, onShare = {})
|
||||
}
|
||||
SectionSpacer()
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_or_share_this_file_link).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_or_share_this_file_link)) {
|
||||
LinkTextView(link, true)
|
||||
}
|
||||
}
|
||||
@@ -377,7 +377,7 @@ private fun MutableState<MigrationFromState>.LinkShownView(fileId: Long, link: S
|
||||
@Composable
|
||||
private fun MutableState<MigrationFromState>.FinishedView(chatDeletion: Boolean) {
|
||||
Box {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_migration_complete).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.migrate_from_device_migration_complete)) {
|
||||
SettingsActionItemWithContent(
|
||||
icon = painterResource(MR.images.ic_play_arrow_filled),
|
||||
text = stringResource(MR.strings.migrate_from_device_start_chat),
|
||||
|
||||
+14
-14
@@ -201,7 +201,7 @@ private fun MutableState<MigrationToState?>.PasteOrScanLinkView(close: () -> Uni
|
||||
val progressIndicator = remember { mutableStateOf(false) }
|
||||
Column {
|
||||
if (appPlatform.isAndroid) {
|
||||
SectionView(stringResource(MR.strings.scan_QR_code).replace('\n', ' ').uppercase()) {
|
||||
SectionView(stringResource(MR.strings.scan_QR_code).replace('\n', ' ')) {
|
||||
QRCodeScanner(showQRCodeScanner = remember { mutableStateOf(true) }) { text ->
|
||||
checkUserLink(text)
|
||||
}
|
||||
@@ -209,12 +209,12 @@ private fun MutableState<MigrationToState?>.PasteOrScanLinkView(close: () -> Uni
|
||||
SectionSpacer()
|
||||
}
|
||||
|
||||
SectionView(stringResource(if (appPlatform.isAndroid) MR.strings.or_paste_archive_link else MR.strings.paste_archive_link).uppercase()) {
|
||||
SectionView(stringResource(if (appPlatform.isAndroid) MR.strings.or_paste_archive_link else MR.strings.paste_archive_link)) {
|
||||
PasteLinkView()
|
||||
}
|
||||
SectionSpacer()
|
||||
|
||||
SectionView(stringResource(MR.strings.chat_archive).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.chat_archive)) {
|
||||
ArchiveImportView(progressIndicator, close)
|
||||
}
|
||||
}
|
||||
@@ -280,7 +280,7 @@ private fun ModalData.OnionView(link: String, legacyLinkSocksProxy: String?, lin
|
||||
mutableStateOf(getNetCfg().withOnionHosts(onionHosts.value).copy(socksProxy = linkNetworkProxy?.toProxyString() ?: legacyLinkSocksProxy, sessionMode = sessionMode.value))
|
||||
}
|
||||
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_confirm_network_settings).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_confirm_network_settings)) {
|
||||
SettingsActionItemWithContent(
|
||||
icon = painterResource(MR.images.ic_check),
|
||||
text = stringResource(MR.strings.migrate_to_device_apply_onion),
|
||||
@@ -305,7 +305,7 @@ private fun ModalData.OnionView(link: String, legacyLinkSocksProxy: String?, lin
|
||||
val networkProxyPref = SharedPreference(get = { networkProxy.value }, set = {
|
||||
networkProxy.value = it
|
||||
})
|
||||
SectionView(stringResource(MR.strings.network_settings_title).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.network_settings_title)) {
|
||||
OnionRelatedLayout(
|
||||
appPreferences.developerTools.get(),
|
||||
networkUseSocksProxy,
|
||||
@@ -325,7 +325,7 @@ private fun ModalData.OnionView(link: String, legacyLinkSocksProxy: String?, lin
|
||||
@Composable
|
||||
private fun MutableState<MigrationToState?>.DatabaseInitView(link: String, tempDatabaseFile: File, netCfg: NetCfg, networkProxy: NetworkProxy?) {
|
||||
Box {
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_database_init).uppercase()) {}
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_database_init)) {}
|
||||
ProgressView()
|
||||
}
|
||||
LaunchedEffect(Unit) {
|
||||
@@ -345,7 +345,7 @@ private fun MutableState<MigrationToState?>.LinkDownloadingView(
|
||||
networkProxy: NetworkProxy?
|
||||
) {
|
||||
Box {
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_downloading_details).uppercase()) {}
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_downloading_details)) {}
|
||||
ProgressView()
|
||||
}
|
||||
LaunchedEffect(Unit) {
|
||||
@@ -356,7 +356,7 @@ private fun MutableState<MigrationToState?>.LinkDownloadingView(
|
||||
@Composable
|
||||
private fun DownloadProgressView(downloadedBytes: Long, totalBytes: Long) {
|
||||
Box {
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_downloading_archive).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_downloading_archive)) {
|
||||
val ratio = downloadedBytes.toFloat() / max(totalBytes, 1)
|
||||
LargeProgressView(ratio, "${(ratio * 100).toInt()}%", stringResource(MR.strings.migrate_to_device_bytes_downloaded).format(formatBytes(downloadedBytes)))
|
||||
}
|
||||
@@ -365,7 +365,7 @@ private fun DownloadProgressView(downloadedBytes: Long, totalBytes: Long) {
|
||||
|
||||
@Composable
|
||||
private fun MutableState<MigrationToState?>.DownloadFailedView(link: String, chatReceiver: MigrationToChatReceiver?, archivePath: String, netCfg: NetCfg, networkProxy: NetworkProxy?) {
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_download_failed).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_download_failed)) {
|
||||
SettingsActionItemWithContent(
|
||||
icon = painterResource(MR.images.ic_download),
|
||||
text = stringResource(MR.strings.migrate_to_device_repeat_download),
|
||||
@@ -386,7 +386,7 @@ private fun MutableState<MigrationToState?>.DownloadFailedView(link: String, cha
|
||||
@Composable
|
||||
private fun MutableState<MigrationToState?>.ArchiveImportView(archivePath: String, netCfg: NetCfg, networkProxy: NetworkProxy?) {
|
||||
Box {
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_importing_archive).uppercase()) {}
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_importing_archive)) {}
|
||||
ProgressView()
|
||||
}
|
||||
LaunchedEffect(Unit) {
|
||||
@@ -396,7 +396,7 @@ private fun MutableState<MigrationToState?>.ArchiveImportView(archivePath: Strin
|
||||
|
||||
@Composable
|
||||
private fun MutableState<MigrationToState?>.ArchiveImportFailedView(archivePath: String, netCfg: NetCfg, networkProxy: NetworkProxy?) {
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_import_failed).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_import_failed)) {
|
||||
SettingsActionItemWithContent(
|
||||
icon = painterResource(MR.images.ic_download),
|
||||
text = stringResource(MR.strings.migrate_to_device_repeat_import),
|
||||
@@ -417,7 +417,7 @@ private fun MutableState<MigrationToState?>.PassphraseEnteringView(currentKey: S
|
||||
|
||||
Box {
|
||||
val view = LocalMultiplatformView()
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_enter_passphrase).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_enter_passphrase)) {
|
||||
SavePassphraseSetting(
|
||||
useKeychain.value,
|
||||
false,
|
||||
@@ -489,7 +489,7 @@ private fun MutableState<MigrationToState?>.MigrationConfirmationView(status: DB
|
||||
}
|
||||
else -> Tuple4(generalGetString(MR.strings.error), null, generalGetString(MR.strings.unknown_error), null)
|
||||
}
|
||||
SectionView(header.uppercase()) {
|
||||
SectionView(header) {
|
||||
if (button != null && confirmation != null) {
|
||||
SettingsActionItemWithContent(
|
||||
icon = painterResource(MR.images.ic_download),
|
||||
@@ -507,7 +507,7 @@ private fun MutableState<MigrationToState?>.MigrationConfirmationView(status: DB
|
||||
@Composable
|
||||
private fun MigrationView(passphrase: String, confirmation: MigrationConfirmation, useKeychain: Boolean, netCfg: NetCfg, networkProxy: NetworkProxy?, close: () -> Unit) {
|
||||
Box {
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_migrating).uppercase()) {}
|
||||
SectionView(stringResource(MR.strings.migrate_to_device_migrating)) {}
|
||||
ProgressView()
|
||||
}
|
||||
LaunchedEffect(Unit) {
|
||||
|
||||
+1
-1
@@ -130,7 +130,7 @@ private fun ContactConnectionInfoLayout(
|
||||
if (connLink != null && connLink.connFullLink.isNotEmpty() && contactConnection.initiated) {
|
||||
Spacer(Modifier.height(DEFAULT_PADDING))
|
||||
SectionViewWithButton(
|
||||
stringResource(MR.strings.one_time_link).uppercase(),
|
||||
stringResource(MR.strings.one_time_link),
|
||||
titleButton = if (connLink.connShortLink == null) null else {{ ToggleShortLinkButton(showShortLink) }}
|
||||
) {
|
||||
SimpleXCreatedLinkQRCode(connLink, short = showShortLink.value)
|
||||
|
||||
+2
-2
@@ -325,7 +325,7 @@ private fun ModalData.NewChatSheetLayout(
|
||||
item {
|
||||
if (filteredContactChats.isNotEmpty() && searchText.value.text.isEmpty()) {
|
||||
SectionDividerSpaced(maxTopPadding = false, maxBottomPadding = false)
|
||||
SectionView(stringResource(MR.strings.contact_list_header_title).uppercase(), headerBottomPadding = DEFAULT_PADDING_HALF) {
|
||||
SectionView(stringResource(MR.strings.contact_list_header_title), headerBottomPadding = DEFAULT_PADDING_HALF) {
|
||||
filteredContactChats.forEachIndexed { index, chat ->
|
||||
val nextChatSelected = remember(chat.id, filteredContactChats) {
|
||||
derivedStateOf {
|
||||
@@ -410,7 +410,7 @@ private fun ModalData.NewChatSheetLayout(
|
||||
item {
|
||||
if (filteredContactChats.isNotEmpty() && searchText.value.text.isEmpty()) {
|
||||
SectionDividerSpaced()
|
||||
SectionView(stringResource(MR.strings.contact_list_header_title).uppercase(), headerBottomPadding = DEFAULT_PADDING_HALF) {
|
||||
SectionView(stringResource(MR.strings.contact_list_header_title), headerBottomPadding = DEFAULT_PADDING_HALF) {
|
||||
filteredContactChats.forEachIndexed { index, chat ->
|
||||
val nextChatSelected = remember(chat.id, filteredContactChats) {
|
||||
derivedStateOf {
|
||||
|
||||
+5
-5
@@ -495,14 +495,14 @@ private fun InviteView(rhId: Long?, connLinkInvitation: CreatedConnLink, contact
|
||||
)
|
||||
SimpleXCreatedLinkQRCode(connLinkInvitation, short = showShortLink.value, onShare = { chatModel.markShowingInvitationUsed() })
|
||||
} else {
|
||||
SectionView(stringResource(MR.strings.share_this_1_time_link).uppercase(), headerBottomPadding = 5.dp) {
|
||||
SectionView(stringResource(MR.strings.share_this_1_time_link), headerBottomPadding = 5.dp) {
|
||||
LinkTextView(connLinkInvitation.simplexChatUri(short = showShortLink.value), true)
|
||||
}
|
||||
|
||||
Spacer(Modifier.height(DEFAULT_PADDING))
|
||||
|
||||
SectionViewWithButton(
|
||||
stringResource(MR.strings.or_show_this_qr_code).uppercase(),
|
||||
stringResource(MR.strings.or_show_this_qr_code),
|
||||
titleButton = if (connLinkInvitation.connShortLink != null) {{ ToggleShortLinkButton(showShortLink) }} else null
|
||||
) {
|
||||
SimpleXCreatedLinkQRCode(connLinkInvitation, short = showShortLink.value, onShare = { chatModel.markShowingInvitationUsed() })
|
||||
@@ -519,7 +519,7 @@ private fun InviteView(rhId: Long?, connLinkInvitation: CreatedConnLink, contact
|
||||
val currentUser = remember { chatModel.currentUser }.value
|
||||
|
||||
if (currentUser != null) {
|
||||
SectionView(stringResource(MR.strings.new_chat_share_profile).uppercase(), headerBottomPadding = 5.dp) {
|
||||
SectionView(stringResource(MR.strings.new_chat_share_profile), headerBottomPadding = 5.dp) {
|
||||
SectionItemView(
|
||||
padding = PaddingValues(
|
||||
top = 0.dp,
|
||||
@@ -643,14 +643,14 @@ private fun ConnectView(rhId: Long?, showQRCodeScanner: MutableState<Boolean>, p
|
||||
)
|
||||
}
|
||||
|
||||
SectionView(stringResource(MR.strings.paste_the_link_you_received).uppercase(), headerBottomPadding = 5.dp) {
|
||||
SectionView(stringResource(MR.strings.paste_the_link_you_received), headerBottomPadding = 5.dp) {
|
||||
PasteLinkView(rhId, pastedLink, showQRCodeScanner, close)
|
||||
}
|
||||
|
||||
if (appPlatform.isAndroid) {
|
||||
Spacer(Modifier.height(10.dp))
|
||||
|
||||
SectionView(stringResource(MR.strings.or_scan_qr_code).uppercase(), headerBottomPadding = 5.dp) {
|
||||
SectionView(stringResource(MR.strings.or_scan_qr_code), headerBottomPadding = 5.dp) {
|
||||
QRCodeScanner(showQRCodeScanner) { text ->
|
||||
val linkVerified = verifyOnly(text)
|
||||
if (!linkVerified) {
|
||||
|
||||
+1
-1
@@ -373,7 +373,7 @@ private fun ChooseServerOperatorsInfoView() {
|
||||
|
||||
SectionDividerSpaced()
|
||||
|
||||
SectionView(title = stringResource(MR.strings.onboarding_network_about_operators).uppercase()) {
|
||||
SectionView(title = stringResource(MR.strings.onboarding_network_about_operators)) {
|
||||
chatModel.conditions.value.serverOperators.forEach { op ->
|
||||
ServerOperatorRow(op)
|
||||
}
|
||||
|
||||
+1
-1
@@ -65,7 +65,7 @@ private fun LinkAMobileLayout(
|
||||
Modifier.weight(0.3f),
|
||||
verticalArrangement = Arrangement.spacedBy(8.dp)
|
||||
) {
|
||||
SectionView(generalGetString(MR.strings.this_device_name).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.this_device_name)) {
|
||||
DeviceNameField(deviceName.value ?: "") { updateDeviceName(it) }
|
||||
SectionTextFooter(generalGetString(MR.strings.this_device_name_shared_with_mobile))
|
||||
PreferenceToggle(stringResource(MR.strings.multicast_discoverable_via_local_network), checked = remember { ChatModel.controller.appPrefs.offerRemoteMulticast.state }.value) {
|
||||
|
||||
+15
-15
@@ -128,7 +128,7 @@ private fun ConnectDesktopLayout(deviceName: String, close: () -> Unit) {
|
||||
@Composable
|
||||
private fun ConnectDesktop(deviceName: String, remoteCtrls: SnapshotStateList<RemoteCtrlInfo>, sessionAddress: MutableState<String>) {
|
||||
AppBarTitle(stringResource(MR.strings.connect_to_desktop))
|
||||
SectionView(stringResource(MR.strings.this_device_name).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.this_device_name)) {
|
||||
DevicesView(deviceName, remoteCtrls) {
|
||||
if (it != "") {
|
||||
setDeviceName(it)
|
||||
@@ -147,7 +147,7 @@ private fun ConnectDesktop(deviceName: String, remoteCtrls: SnapshotStateList<Re
|
||||
@Composable
|
||||
private fun ConnectingDesktop(session: RemoteCtrlSession, rc: RemoteCtrlInfo?) {
|
||||
AppBarTitle(stringResource(MR.strings.connecting_to_desktop))
|
||||
SectionView(stringResource(MR.strings.connecting_to_desktop).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
SectionView(stringResource(MR.strings.connecting_to_desktop), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
CtrlDeviceNameText(session, rc)
|
||||
Spacer(Modifier.height(DEFAULT_PADDING_HALF))
|
||||
CtrlDeviceVersionText(session)
|
||||
@@ -155,7 +155,7 @@ private fun ConnectingDesktop(session: RemoteCtrlSession, rc: RemoteCtrlInfo?) {
|
||||
|
||||
if (session.sessionCode != null) {
|
||||
SectionSpacer()
|
||||
SectionView(stringResource(MR.strings.session_code).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.session_code)) {
|
||||
SessionCodeText(session.sessionCode!!)
|
||||
}
|
||||
}
|
||||
@@ -188,7 +188,7 @@ private fun ProgressIndicator() {
|
||||
@Composable
|
||||
private fun SearchingDesktop(deviceName: String, remoteCtrls: SnapshotStateList<RemoteCtrlInfo>) {
|
||||
AppBarTitle(stringResource(MR.strings.connecting_to_desktop))
|
||||
SectionView(stringResource(MR.strings.this_device_name).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.this_device_name)) {
|
||||
DevicesView(deviceName, remoteCtrls) {
|
||||
if (it != "") {
|
||||
setDeviceName(it)
|
||||
@@ -197,7 +197,7 @@ private fun SearchingDesktop(deviceName: String, remoteCtrls: SnapshotStateList<
|
||||
}
|
||||
}
|
||||
SectionDividerSpaced()
|
||||
SectionView(stringResource(MR.strings.found_desktop).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
SectionView(stringResource(MR.strings.found_desktop), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
Text(stringResource(MR.strings.waiting_for_desktop), fontStyle = FontStyle.Italic)
|
||||
}
|
||||
SectionSpacer()
|
||||
@@ -215,7 +215,7 @@ private fun FoundDesktop(
|
||||
sessionAddress: MutableState<String>,
|
||||
) {
|
||||
AppBarTitle(stringResource(MR.strings.found_desktop))
|
||||
SectionView(stringResource(MR.strings.this_device_name).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.this_device_name)) {
|
||||
DevicesView(deviceName, remoteCtrls) {
|
||||
if (it != "") {
|
||||
setDeviceName(it)
|
||||
@@ -224,7 +224,7 @@ private fun FoundDesktop(
|
||||
}
|
||||
}
|
||||
SectionDividerSpaced()
|
||||
SectionView(stringResource(MR.strings.found_desktop).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
SectionView(stringResource(MR.strings.found_desktop), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
CtrlDeviceNameText(session, rc)
|
||||
CtrlDeviceVersionText(session)
|
||||
if (!compatible) {
|
||||
@@ -256,7 +256,7 @@ private fun FoundDesktop(
|
||||
@Composable
|
||||
private fun VerifySession(session: RemoteCtrlSession, rc: RemoteCtrlInfo?, sessCode: String, remoteCtrls: SnapshotStateList<RemoteCtrlInfo>) {
|
||||
AppBarTitle(stringResource(MR.strings.verify_connection))
|
||||
SectionView(stringResource(MR.strings.connected_to_desktop).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
SectionView(stringResource(MR.strings.connected_to_desktop), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
CtrlDeviceNameText(session, rc)
|
||||
Spacer(Modifier.height(DEFAULT_PADDING_HALF))
|
||||
CtrlDeviceVersionText(session)
|
||||
@@ -264,7 +264,7 @@ private fun VerifySession(session: RemoteCtrlSession, rc: RemoteCtrlInfo?, sessC
|
||||
|
||||
SectionSpacer()
|
||||
|
||||
SectionView(stringResource(MR.strings.verify_code_with_desktop).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.verify_code_with_desktop)) {
|
||||
SessionCodeText(sessCode)
|
||||
}
|
||||
|
||||
@@ -311,7 +311,7 @@ private fun CtrlDeviceVersionText(session: RemoteCtrlSession) {
|
||||
@Composable
|
||||
private fun ActiveSession(session: RemoteCtrlSession, rc: RemoteCtrlInfo, close: () -> Unit) {
|
||||
AppBarTitle(stringResource(MR.strings.connected_to_desktop))
|
||||
SectionView(stringResource(MR.strings.connected_desktop).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
SectionView(stringResource(MR.strings.connected_desktop), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
Text(rc.deviceViewName)
|
||||
Spacer(Modifier.height(DEFAULT_PADDING_HALF))
|
||||
CtrlDeviceVersionText(session)
|
||||
@@ -319,7 +319,7 @@ private fun ActiveSession(session: RemoteCtrlSession, rc: RemoteCtrlInfo, close:
|
||||
|
||||
if (session.sessionCode != null) {
|
||||
SectionSpacer()
|
||||
SectionView(stringResource(MR.strings.session_code).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.session_code)) {
|
||||
SessionCodeText(session.sessionCode!!)
|
||||
}
|
||||
}
|
||||
@@ -355,7 +355,7 @@ private fun DevicesView(deviceName: String, remoteCtrls: SnapshotStateList<Remot
|
||||
|
||||
@Composable
|
||||
private fun ScanDesktopAddressView(sessionAddress: MutableState<String>) {
|
||||
SectionView(stringResource(MR.strings.scan_qr_code_from_desktop).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.scan_qr_code_from_desktop)) {
|
||||
QRCodeScanner { text ->
|
||||
sessionAddress.value = text
|
||||
connectDesktopAddress(sessionAddress, text)
|
||||
@@ -366,7 +366,7 @@ private fun ScanDesktopAddressView(sessionAddress: MutableState<String>) {
|
||||
@Composable
|
||||
private fun DesktopAddressView(sessionAddress: MutableState<String>) {
|
||||
val clipboard = LocalClipboardManager.current
|
||||
SectionView(stringResource(MR.strings.desktop_address).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.desktop_address)) {
|
||||
if (sessionAddress.value.isEmpty()) {
|
||||
SettingsActionItem(
|
||||
painterResource(MR.images.ic_content_paste),
|
||||
@@ -410,7 +410,7 @@ private fun DesktopAddressView(sessionAddress: MutableState<String>) {
|
||||
private fun LinkedDesktopsView(remoteCtrls: SnapshotStateList<RemoteCtrlInfo>) {
|
||||
ColumnWithScrollBar {
|
||||
AppBarTitle(stringResource(MR.strings.linked_desktops))
|
||||
SectionView(stringResource(MR.strings.desktop_devices).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.desktop_devices)) {
|
||||
remoteCtrls.forEach { rc ->
|
||||
val showMenu = rememberSaveable { mutableStateOf(false) }
|
||||
SectionItemViewLongClickable(click = {}, longClick = { showMenu.value = true }) {
|
||||
@@ -427,7 +427,7 @@ private fun LinkedDesktopsView(remoteCtrls: SnapshotStateList<RemoteCtrlInfo>) {
|
||||
}
|
||||
SectionDividerSpaced()
|
||||
|
||||
SectionView(stringResource(MR.strings.linked_desktop_options).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.linked_desktop_options)) {
|
||||
PreferenceToggle(stringResource(MR.strings.verify_connections), checked = remember { controller.appPrefs.confirmRemoteSessions.state }.value) {
|
||||
controller.appPrefs.confirmRemoteSessions.set(it)
|
||||
}
|
||||
|
||||
+4
-4
@@ -92,7 +92,7 @@ fun ConnectMobileLayout(
|
||||
) {
|
||||
ColumnWithScrollBar {
|
||||
AppBarTitle(stringResource(if (remember { chatModel.remoteHosts }.isEmpty()) MR.strings.link_a_mobile else MR.strings.linked_mobiles))
|
||||
SectionView(generalGetString(MR.strings.this_device_name).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.this_device_name)) {
|
||||
DeviceNameField(deviceName.value ?: "") { updateDeviceName(it) }
|
||||
PreferenceToggle(stringResource(MR.strings.multicast_discoverable_via_local_network), checked = remember { controller.appPrefs.offerRemoteMulticast.state }.value) {
|
||||
controller.appPrefs.offerRemoteMulticast.set(it)
|
||||
@@ -100,7 +100,7 @@ fun ConnectMobileLayout(
|
||||
}
|
||||
SectionTextFooter(generalGetString(MR.strings.this_device_name_shared_with_mobile))
|
||||
SectionDividerSpaced()
|
||||
SectionView(stringResource(MR.strings.devices).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.devices)) {
|
||||
if (chatModel.localUserCreated.value == true) {
|
||||
SettingsActionItemWithContent(text = stringResource(MR.strings.this_device), icon = painterResource(MR.images.ic_desktop), click = connectDesktop) {
|
||||
if (connectedHost.value == null) {
|
||||
@@ -215,7 +215,7 @@ private fun ConnectMobileViewLayout(
|
||||
|
||||
|
||||
if (deviceName != null || sessionCode != null) {
|
||||
SectionView(stringResource(MR.strings.connected_mobile).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.connected_mobile)) {
|
||||
SelectionContainer {
|
||||
Text(
|
||||
deviceName ?: stringResource(MR.strings.new_mobile_device),
|
||||
@@ -228,7 +228,7 @@ private fun ConnectMobileViewLayout(
|
||||
}
|
||||
|
||||
if (sessionCode != null) {
|
||||
SectionView(stringResource(MR.strings.verify_code_on_mobile).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.verify_code_on_mobile)) {
|
||||
SelectionContainer {
|
||||
Text(
|
||||
sessionCode.substring(0, 23),
|
||||
|
||||
+5
-5
@@ -61,7 +61,7 @@ expect fun AppearanceView(m: ChatModel)
|
||||
object AppearanceScope {
|
||||
@Composable
|
||||
fun ProfileImageSection() {
|
||||
SectionView(stringResource(MR.strings.settings_section_title_profile_images).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
SectionView(stringResource(MR.strings.settings_section_title_profile_images), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
val image = remember { chatModel.currentUser }.value?.image
|
||||
Row(Modifier.padding(vertical = 10.dp), horizontalArrangement = Arrangement.Center, verticalAlignment = Alignment.CenterVertically) {
|
||||
val size = 60
|
||||
@@ -94,7 +94,7 @@ object AppearanceScope {
|
||||
@Composable
|
||||
fun AppToolbarsSection() {
|
||||
BoxWithConstraints {
|
||||
SectionView(stringResource(MR.strings.appearance_app_toolbars).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.appearance_app_toolbars)) {
|
||||
SectionItemViewWithoutMinPadding {
|
||||
Box(Modifier.weight(1f)) {
|
||||
Text(
|
||||
@@ -178,7 +178,7 @@ object AppearanceScope {
|
||||
@Composable
|
||||
fun MessageShapeSection() {
|
||||
BoxWithConstraints {
|
||||
SectionView(stringResource(MR.strings.settings_section_title_message_shape).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.settings_section_title_message_shape)) {
|
||||
SectionItemViewWithoutMinPadding {
|
||||
Text(stringResource(MR.strings.settings_message_shape_corner), Modifier.weight(1f))
|
||||
Spacer(Modifier.width(10.dp))
|
||||
@@ -208,7 +208,7 @@ object AppearanceScope {
|
||||
@Composable
|
||||
fun FontScaleSection() {
|
||||
val localFontScale = remember { mutableStateOf(appPrefs.fontScale.get()) }
|
||||
SectionView(stringResource(MR.strings.appearance_font_size).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
SectionView(stringResource(MR.strings.appearance_font_size), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
Row(Modifier.padding(vertical = 10.dp), verticalAlignment = Alignment.CenterVertically) {
|
||||
Box(Modifier.size(50.dp)
|
||||
.background(MaterialTheme.colors.surface, RoundedCornerShape(percent = 22))
|
||||
@@ -656,7 +656,7 @@ object AppearanceScope {
|
||||
}
|
||||
SectionDividerSpaced()
|
||||
|
||||
SectionView(stringResource(MR.strings.settings_section_title_chat_colors).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.settings_section_title_chat_colors)) {
|
||||
WallpaperSetupView(
|
||||
wallpaperType,
|
||||
baseTheme,
|
||||
|
||||
+2
-2
@@ -36,7 +36,7 @@ fun DeveloperView(withAuth: (title: String, desc: String, block: () -> Unit) ->
|
||||
)
|
||||
if (devTools.value) {
|
||||
SectionDividerSpaced(maxTopPadding = true)
|
||||
SectionView(stringResource(MR.strings.developer_options_section).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.developer_options_section)) {
|
||||
SettingsActionItemWithContent(painterResource(MR.images.ic_breaking_news), stringResource(MR.strings.debug_logs)) {
|
||||
DefaultSwitch(
|
||||
checked = remember { appPrefs.logLevel.state }.value <= LogLevel.DEBUG,
|
||||
@@ -60,7 +60,7 @@ fun DeveloperView(withAuth: (title: String, desc: String, block: () -> Unit) ->
|
||||
}
|
||||
}
|
||||
SectionDividerSpaced(maxTopPadding = true)
|
||||
SectionView(stringResource(MR.strings.deprecated_options_section).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.deprecated_options_section)) {
|
||||
val simplexLinkMode = chatModel.controller.appPrefs.simplexLinkMode
|
||||
SimpleXLinkOptions(chatModel.simplexLinkMode, onSelected = {
|
||||
simplexLinkMode.set(it)
|
||||
|
||||
+1
-1
@@ -68,7 +68,7 @@ private fun HiddenProfileLayout(
|
||||
val passwordValid by remember { derivedStateOf { hidePassword.value == hidePassword.value.trim() } }
|
||||
val confirmValid by remember { derivedStateOf { confirmHidePassword.value == "" || hidePassword.value == confirmHidePassword.value } }
|
||||
val saveDisabled by remember { derivedStateOf { hidePassword.value == "" || !passwordValid || confirmHidePassword.value == "" || !confirmValid } }
|
||||
SectionView(stringResource(MR.strings.hidden_profile_password).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.hidden_profile_password)) {
|
||||
SectionItemViewWithoutMinPadding {
|
||||
PassphraseField(hidePassword, generalGetString(MR.strings.password_to_show), isValid = { passwordValid }, showStrength = true)
|
||||
}
|
||||
|
||||
+1
-1
@@ -619,7 +619,7 @@ fun SimplexLockView(
|
||||
}
|
||||
if (performLA.value && laMode.value == LAMode.PASSCODE) {
|
||||
SectionDividerSpaced()
|
||||
SectionView(stringResource(MR.strings.self_destruct_passcode).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.self_destruct_passcode)) {
|
||||
val openInfo = {
|
||||
ModalManager.start.showModal {
|
||||
SelfDestructInfoView()
|
||||
|
||||
+5
-5
@@ -301,12 +301,12 @@ private fun UserAddressLayout(
|
||||
) {
|
||||
if (userAddress == null) {
|
||||
if (!onboarding) {
|
||||
SectionView(generalGetString(MR.strings.for_social_media).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.for_social_media)) {
|
||||
CreateAddressButton(createAddress)
|
||||
}
|
||||
|
||||
SectionDividerSpaced()
|
||||
SectionView(generalGetString(MR.strings.or_to_share_privately).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.or_to_share_privately)) {
|
||||
CreateOneTimeLinkButton()
|
||||
}
|
||||
|
||||
@@ -336,7 +336,7 @@ private fun UserAddressLayout(
|
||||
val savedAddressSettingsState = remember { mutableStateOf(addressSettingsState.value) }
|
||||
|
||||
SectionViewWithButton(
|
||||
stringResource(MR.strings.for_social_media).uppercase(),
|
||||
stringResource(MR.strings.for_social_media),
|
||||
titleButton = if (userAddress.connLinkContact.connShortLink != null) {{ ToggleShortLinkButton(showShortLink) }} else null
|
||||
) {
|
||||
SimpleXCreatedLinkQRCode(userAddress.connLinkContact, short = showShortLink.value)
|
||||
@@ -360,7 +360,7 @@ private fun UserAddressLayout(
|
||||
}
|
||||
|
||||
SectionDividerSpaced(maxTopPadding = addressSettingsState.value.businessAddress)
|
||||
SectionView(generalGetString(MR.strings.or_to_share_privately).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.or_to_share_privately)) {
|
||||
CreateOneTimeLinkButton()
|
||||
}
|
||||
SectionDividerSpaced(maxBottomPadding = false)
|
||||
@@ -513,7 +513,7 @@ private fun ModalData.UserAddressSettings(
|
||||
SectionDividerSpaced()
|
||||
|
||||
SectionView(
|
||||
stringResource(MR.strings.address_welcome_message).uppercase(),
|
||||
stringResource(MR.strings.address_welcome_message),
|
||||
contentPadding = PaddingValues(vertical = DEFAULT_PADDING_HALF),
|
||||
) {
|
||||
AutoReplyEditor(addressSettingsState)
|
||||
|
||||
+3
-3
@@ -236,11 +236,11 @@ fun ModalData.AdvancedNetworkSettingsView(showModal: (@Composable ModalData.() -
|
||||
SectionTextFooter(stringResource(MR.strings.private_routing_explanation))
|
||||
SectionDividerSpaced(maxTopPadding = true)
|
||||
|
||||
SectionView(stringResource(MR.strings.network_session_mode_transport_isolation).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.network_session_mode_transport_isolation)) {
|
||||
SessionModePicker(sessionMode, showModal, updateSessionMode)
|
||||
}
|
||||
SectionDividerSpaced()
|
||||
SectionView(stringResource(MR.strings.network_smp_web_port_section_title).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.network_smp_web_port_section_title)) {
|
||||
ExposedDropDownSettingRow(
|
||||
stringResource(MR.strings.network_smp_web_port_toggle),
|
||||
SMPWebPortServers.entries.map { it to stringResource(it.text) },
|
||||
@@ -253,7 +253,7 @@ fun ModalData.AdvancedNetworkSettingsView(showModal: (@Composable ModalData.() -
|
||||
)
|
||||
SectionDividerSpaced(maxTopPadding = true)
|
||||
|
||||
SectionView(stringResource(MR.strings.network_option_tcp_connection).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.network_option_tcp_connection)) {
|
||||
SectionItemView {
|
||||
TimeoutSettingRow(
|
||||
stringResource(MR.strings.network_option_tcp_connection_timeout), networkTCPConnectTimeoutInteractive,
|
||||
|
||||
+5
-5
@@ -182,7 +182,7 @@ private fun ChatRelayLayout(
|
||||
|
||||
@Composable
|
||||
private fun PresetRelay(relay: MutableState<UserChatRelay>, testing: MutableState<Boolean>) {
|
||||
SectionView(stringResource(MR.strings.preset_relay_address).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.preset_relay_address)) {
|
||||
SelectionContainer {
|
||||
Text(
|
||||
relay.value.address,
|
||||
@@ -192,7 +192,7 @@ private fun PresetRelay(relay: MutableState<UserChatRelay>, testing: MutableStat
|
||||
}
|
||||
}
|
||||
SectionDividerSpaced()
|
||||
SectionView(stringResource(MR.strings.preset_relay_name).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.preset_relay_name)) {
|
||||
SectionItemView {
|
||||
Text(relay.value.displayName)
|
||||
}
|
||||
@@ -229,7 +229,7 @@ private fun CustomRelay(
|
||||
}
|
||||
|
||||
SectionView(
|
||||
stringResource(MR.strings.your_relay_address).uppercase(),
|
||||
stringResource(MR.strings.your_relay_address),
|
||||
icon = painterResource(MR.images.ic_error),
|
||||
iconTint = if (!validAddress.value) MaterialTheme.colors.error else Color.Transparent,
|
||||
) {
|
||||
@@ -244,7 +244,7 @@ private fun CustomRelay(
|
||||
val iconSize = with(LocalDensity.current) { 21.sp.toDp() }
|
||||
Row(Modifier.padding(start = DEFAULT_PADDING, bottom = 5.dp), verticalAlignment = Alignment.CenterVertically) {
|
||||
Text(
|
||||
stringResource(MR.strings.your_relay_name).uppercase(),
|
||||
stringResource(MR.strings.your_relay_name),
|
||||
color = MaterialTheme.colors.secondary, style = MaterialTheme.typography.body2, fontSize = 12.sp
|
||||
)
|
||||
IconButton(
|
||||
@@ -291,7 +291,7 @@ private fun UseRelaySection(
|
||||
testing: MutableState<Boolean>
|
||||
) {
|
||||
val scope = rememberCoroutineScope()
|
||||
SectionView(stringResource(MR.strings.use_relay).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.use_relay)) {
|
||||
SectionItemViewSpaceBetween(
|
||||
click = {
|
||||
testing.value = true
|
||||
|
||||
+4
-4
@@ -210,7 +210,7 @@ fun ModalData.NetworkAndServersView(closeNetworkAndServers: () -> Unit) {
|
||||
AppBarTitle(stringResource(MR.strings.network_and_servers))
|
||||
// TODO: Review this and socks.
|
||||
if (!chatModel.desktopNoUserNoRemote) {
|
||||
SectionView(generalGetString(MR.strings.network_preset_servers_title).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.network_preset_servers_title)) {
|
||||
userServers.value.forEachIndexed { index, srv ->
|
||||
srv.operator?.let { ServerOperatorRow(index, it, currUserServers, userServers, serverErrors, serverWarnings, currentRemoteHost?.remoteHostId) }
|
||||
}
|
||||
@@ -307,7 +307,7 @@ fun ModalData.NetworkAndServersView(closeNetworkAndServers: () -> Unit) {
|
||||
|
||||
if (appPlatform.isAndroid) {
|
||||
SectionDividerSpaced()
|
||||
SectionView(generalGetString(MR.strings.settings_section_title_network_connection).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.settings_section_title_network_connection)) {
|
||||
val info = remember { chatModel.networkInfo }.value
|
||||
SettingsActionItemWithContent(icon = null, info.networkType.text) {
|
||||
Icon(painterResource(MR.images.ic_circle_filled), stringResource(MR.strings.icon_descr_server_status_connected), tint = if (info.online) Color.Green else MaterialTheme.colors.error)
|
||||
@@ -460,7 +460,7 @@ fun SocksProxySettings(
|
||||
) {
|
||||
ColumnWithScrollBar {
|
||||
AppBarTitle(generalGetString(MR.strings.network_socks_proxy_settings))
|
||||
SectionView(stringResource(MR.strings.network_socks_proxy).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.network_socks_proxy)) {
|
||||
Column(Modifier.padding(horizontal = DEFAULT_PADDING)) {
|
||||
DefaultConfigurableTextField(
|
||||
hostUnsaved,
|
||||
@@ -489,7 +489,7 @@ fun SocksProxySettings(
|
||||
|
||||
SectionDividerSpaced(maxTopPadding = true)
|
||||
|
||||
SectionView(stringResource(MR.strings.network_proxy_auth).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.network_proxy_auth)) {
|
||||
PreferenceToggle(
|
||||
stringResource(MR.strings.network_proxy_random_credentials),
|
||||
checked = proxyAuthRandomUnsaved.value,
|
||||
|
||||
+8
-8
@@ -181,7 +181,7 @@ fun OperatorViewLayout(
|
||||
val duplicateHosts = findDuplicateHosts(serverErrors.value)
|
||||
|
||||
Column {
|
||||
SectionView(generalGetString(MR.strings.operator).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.operator)) {
|
||||
SectionItemView({ ModalManager.start.showModalCloseable { _ -> OperatorInfoView(operator) } }) {
|
||||
Row(
|
||||
Modifier.fillMaxWidth(),
|
||||
@@ -238,7 +238,7 @@ fun OperatorViewLayout(
|
||||
if (userServers.value[operatorIndex].chatRelays.any { !it.deleted }) {
|
||||
val duplicateRelayAddresses = findDuplicateRelayAddresses(serverErrors.value)
|
||||
SectionDividerSpaced()
|
||||
SectionView(generalGetString(MR.strings.chat_relays).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.chat_relays)) {
|
||||
userServers.value[operatorIndex].chatRelays.forEachIndexed { index, relay ->
|
||||
if (!relay.deleted) {
|
||||
ChatRelayViewLink(relay, duplicateRelayAddresses) {
|
||||
@@ -252,7 +252,7 @@ fun OperatorViewLayout(
|
||||
|
||||
if (userServers.value[operatorIndex].smpServers.any { !it.deleted }) {
|
||||
SectionDividerSpaced()
|
||||
SectionView(generalGetString(MR.strings.operator_use_for_messages).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.operator_use_for_messages)) {
|
||||
SectionItemView(padding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
Text(
|
||||
stringResource(MR.strings.operator_use_for_messages_receiving),
|
||||
@@ -306,7 +306,7 @@ fun OperatorViewLayout(
|
||||
// Preset servers can't be deleted
|
||||
if (userServers.value[operatorIndex].smpServers.any { it.preset }) {
|
||||
SectionDividerSpaced()
|
||||
SectionView(generalGetString(MR.strings.message_servers).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.message_servers)) {
|
||||
userServers.value[operatorIndex].smpServers.forEachIndexed { i, server ->
|
||||
if (!server.preset) return@forEachIndexed
|
||||
SectionItemView({ navigateToProtocolView(i, server, ServerProtocol.SMP) }) {
|
||||
@@ -340,7 +340,7 @@ fun OperatorViewLayout(
|
||||
|
||||
if (userServers.value[operatorIndex].smpServers.any { !it.preset && !it.deleted }) {
|
||||
SectionDividerSpaced()
|
||||
SectionView(generalGetString(MR.strings.operator_added_message_servers).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.operator_added_message_servers)) {
|
||||
userServers.value[operatorIndex].smpServers.forEachIndexed { i, server ->
|
||||
if (server.deleted || server.preset) return@forEachIndexed
|
||||
SectionItemView({ navigateToProtocolView(i, server, ServerProtocol.SMP) }) {
|
||||
@@ -356,7 +356,7 @@ fun OperatorViewLayout(
|
||||
|
||||
if (userServers.value[operatorIndex].xftpServers.any { !it.deleted }) {
|
||||
SectionDividerSpaced()
|
||||
SectionView(generalGetString(MR.strings.operator_use_for_files).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.operator_use_for_files)) {
|
||||
SectionItemView(padding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
Text(
|
||||
stringResource(MR.strings.operator_use_for_sending),
|
||||
@@ -389,7 +389,7 @@ fun OperatorViewLayout(
|
||||
// Preset servers can't be deleted
|
||||
if (userServers.value[operatorIndex].xftpServers.any { it.preset }) {
|
||||
SectionDividerSpaced()
|
||||
SectionView(generalGetString(MR.strings.media_and_file_servers).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.media_and_file_servers)) {
|
||||
userServers.value[operatorIndex].xftpServers.forEachIndexed { i, server ->
|
||||
if (!server.preset) return@forEachIndexed
|
||||
SectionItemView({ navigateToProtocolView(i, server, ServerProtocol.XFTP) }) {
|
||||
@@ -423,7 +423,7 @@ fun OperatorViewLayout(
|
||||
|
||||
if (userServers.value[operatorIndex].xftpServers.any { !it.preset && !it.deleted}) {
|
||||
SectionDividerSpaced()
|
||||
SectionView(generalGetString(MR.strings.operator_added_xftp_servers).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.operator_added_xftp_servers)) {
|
||||
userServers.value[operatorIndex].xftpServers.forEachIndexed { i, server ->
|
||||
if (server.deleted || server.preset) return@forEachIndexed
|
||||
SectionItemView({ navigateToProtocolView(i, server, ServerProtocol.XFTP) }) {
|
||||
|
||||
+4
-4
@@ -140,7 +140,7 @@ private fun PresetServer(
|
||||
testing: Boolean,
|
||||
testServer: () -> Unit
|
||||
) {
|
||||
SectionView(stringResource(MR.strings.smp_servers_preset_address).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.smp_servers_preset_address)) {
|
||||
SelectionContainer {
|
||||
Text(
|
||||
server.value.server,
|
||||
@@ -172,7 +172,7 @@ fun CustomServer(
|
||||
}
|
||||
}
|
||||
SectionView(
|
||||
stringResource(MR.strings.smp_servers_your_server_address).uppercase(),
|
||||
stringResource(MR.strings.smp_servers_your_server_address),
|
||||
icon = painterResource(MR.images.ic_error),
|
||||
iconTint = if (!valid.value) MaterialTheme.colors.error else Color.Transparent,
|
||||
padding = PaddingValues(vertical = DEFAULT_PADDING_HALF),
|
||||
@@ -197,7 +197,7 @@ fun CustomServer(
|
||||
|
||||
if (valid.value) {
|
||||
SectionDividerSpaced()
|
||||
SectionView(stringResource(MR.strings.smp_servers_add_to_another_device).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.smp_servers_add_to_another_device)) {
|
||||
QRCode(serverAddress.value, small = true)
|
||||
}
|
||||
}
|
||||
@@ -211,7 +211,7 @@ private fun UseServerSection(
|
||||
testServer: () -> Unit,
|
||||
onDelete: (() -> Unit)? = null,
|
||||
) {
|
||||
SectionView(stringResource(MR.strings.smp_servers_use_server).uppercase()) {
|
||||
SectionView(stringResource(MR.strings.smp_servers_use_server)) {
|
||||
SectionItemViewSpaceBetween(testServer, disabled = !valid || testing) {
|
||||
Text(stringResource(MR.strings.smp_servers_test_server), color = if (valid && !testing) MaterialTheme.colors.onBackground else MaterialTheme.colors.secondary)
|
||||
ShowTestStatus(server.value)
|
||||
|
||||
+3
-3
@@ -86,7 +86,7 @@ fun YourServersViewLayout(
|
||||
Column {
|
||||
if (userServers.value[operatorIndex].chatRelays.any { !it.deleted }) {
|
||||
val duplicateRelayAddresses = findDuplicateRelayAddresses(serverErrors.value)
|
||||
SectionView(generalGetString(MR.strings.chat_relays).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.chat_relays)) {
|
||||
userServers.value[operatorIndex].chatRelays.forEachIndexed { i, relay ->
|
||||
if (relay.deleted) return@forEachIndexed
|
||||
ChatRelayViewLink(relay, duplicateRelayAddresses) {
|
||||
@@ -99,7 +99,7 @@ fun YourServersViewLayout(
|
||||
|
||||
if (userServers.value[operatorIndex].smpServers.any { !it.deleted }) {
|
||||
SectionDividerSpaced()
|
||||
SectionView(generalGetString(MR.strings.message_servers).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.message_servers)) {
|
||||
userServers.value[operatorIndex].smpServers.forEachIndexed { i, server ->
|
||||
if (server.deleted) return@forEachIndexed
|
||||
SectionItemView({ navigateToProtocolView(i, server, ServerProtocol.SMP) }) {
|
||||
@@ -133,7 +133,7 @@ fun YourServersViewLayout(
|
||||
|
||||
if (userServers.value[operatorIndex].xftpServers.any { !it.deleted }) {
|
||||
SectionDividerSpaced()
|
||||
SectionView(generalGetString(MR.strings.media_and_file_servers).uppercase()) {
|
||||
SectionView(generalGetString(MR.strings.media_and_file_servers)) {
|
||||
userServers.value[operatorIndex].xftpServers.forEachIndexed { i, server ->
|
||||
if (server.deleted) return@forEachIndexed
|
||||
SectionItemView({ navigateToProtocolView(i, server, ServerProtocol.XFTP) }) {
|
||||
|
||||
+1
-1
@@ -110,7 +110,7 @@ private fun MinimizeToTraySection() {
|
||||
@Composable
|
||||
fun DensityScaleSection() {
|
||||
val localDensityScale = remember { mutableStateOf(appPrefs.densityScale.get()) }
|
||||
SectionView(stringResource(MR.strings.appearance_zoom).uppercase(), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
SectionView(stringResource(MR.strings.appearance_zoom), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING)) {
|
||||
Row(Modifier.padding(vertical = 10.dp), verticalAlignment = Alignment.CenterVertically) {
|
||||
Box(Modifier.size(50.dp)
|
||||
.background(MaterialTheme.colors.surface, RoundedCornerShape(percent = 22))
|
||||
|
||||
Reference in New Issue
Block a user