fix appearance etc

This commit is contained in:
Evgeny @ SimpleX Chat
2026-05-20 09:19:44 +00:00
parent fe96096dff
commit 25186ee89c
9 changed files with 45 additions and 47 deletions
@@ -1,7 +1,6 @@
package chat.simplex.common.views.usersettings
import SectionBottomSpacer
import SectionDividerSpaced
import SectionSpacer
import SectionView
import android.app.Activity
@@ -77,9 +76,9 @@ fun AppearanceScope.AppearanceLayout(
systemDarkTheme: SharedPreference<String?>,
changeIcon: (AppIcon) -> Unit,
) {
ColumnWithScrollBar {
ColumnWithScrollBar(Modifier.background(canvasColorForCurrentTheme())) {
AppBarTitle(stringResource(MR.strings.appearance_settings))
SectionView(stringResource(MR.strings.settings_section_title_interface), contentPadding = PaddingValues()) {
SectionView(stringResource(MR.strings.settings_section_title_interface), contentPadding = PaddingValues(), card = true) {
val context = LocalContext.current
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// SectionItemWithValue(
@@ -114,21 +113,21 @@ fun AppearanceScope.AppearanceLayout(
}
}
SectionDividerSpaced()
SectionSpacer()
ThemesSection(systemDarkTheme)
SectionDividerSpaced()
SectionSpacer()
AppToolbarsSection()
SectionDividerSpaced()
SectionSpacer()
MessageShapeSection()
SectionDividerSpaced()
SectionSpacer()
ProfileImageSection()
SectionDividerSpaced(maxTopPadding = true)
SectionSpacer()
SectionView(stringResource(MR.strings.settings_section_title_icon), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING_HALF)) {
SectionView(stringResource(MR.strings.settings_section_title_icon), contentPadding = PaddingValues(horizontal = DEFAULT_PADDING_HALF), card = true) {
LazyRow {
items(AppIcon.values().size, { index -> AppIcon.values()[index] }) { index ->
val item = AppIcon.values()[index]
@@ -152,7 +151,7 @@ fun AppearanceScope.AppearanceLayout(
}
}
SectionDividerSpaced(maxTopPadding = true)
SectionSpacer()
FontScaleSection()
SectionBottomSpacer()
@@ -387,7 +387,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), card = true) {}
ProgressView()
}
LaunchedEffect(Unit) {
@@ -397,7 +397,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), card = true) {
SettingsActionItemWithContent(
icon = painterResource(MR.images.ic_download),
text = stringResource(MR.strings.migrate_to_device_repeat_import),
@@ -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) {}
Spacer(Modifier.height(DEFAULT_PADDING_HALF))
}
}
@@ -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) {}
}
}
item {
@@ -495,7 +495,7 @@ 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)
}
@@ -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) {
@@ -5,7 +5,6 @@ import SectionView
import androidx.compose.foundation.layout.*
import androidx.compose.material.MaterialTheme
import androidx.compose.runtime.*
import androidx.compose.foundation.background
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -13,7 +12,7 @@ import androidx.compose.ui.unit.dp
import chat.simplex.common.model.ChatController.appPrefs
import chat.simplex.common.model.ChatModel
import chat.simplex.common.platform.chatModel
import chat.simplex.common.ui.theme.*
import chat.simplex.common.ui.theme.DEFAULT_PADDING
import chat.simplex.common.views.helpers.*
import chat.simplex.common.views.remote.AddingMobileDevice
import chat.simplex.common.views.remote.DeviceNameField
@@ -57,7 +56,7 @@ private fun LinkAMobileLayout(
updateDeviceName: (String) -> Unit,
) {
ModalView({ appPrefs.onboardingStage.set(OnboardingStage.Step1_SimpleXInfo) }) {
Column(Modifier.fillMaxSize().background(canvasColorForCurrentTheme()).padding(top = AppBarHeight * fontSizeSqrtMultiplier)) {
Column(Modifier.fillMaxSize().padding(top = AppBarHeight * fontSizeSqrtMultiplier)) {
Box(Modifier.align(Alignment.CenterHorizontally)) {
AppBarTitle(stringResource(if (remember { chatModel.remoteHosts }.isEmpty()) MR.strings.link_a_mobile else MR.strings.linked_mobiles), overrideTitleColor = MaterialTheme.colors.onBackground)
}
@@ -66,7 +65,7 @@ private fun LinkAMobileLayout(
Modifier.weight(0.3f),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
SectionView(generalGetString(MR.strings.this_device_name), card = true) {
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) {
@@ -1,7 +1,7 @@
package chat.simplex.common.views.remote
import SectionBottomSpacer
import SectionSpacer
import SectionDividerSpaced
import SectionItemView
import SectionItemViewLongClickable
import SectionTextFooter
@@ -90,16 +90,17 @@ fun ConnectMobileLayout(
connectDesktop: () -> Unit,
deleteHost: (RemoteHostInfo) -> Unit,
) {
ColumnWithScrollBar(Modifier.background(canvasColorForCurrentTheme())) {
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), card = true) {
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 { controller.appPrefs.offerRemoteMulticast.state }.value) {
controller.appPrefs.offerRemoteMulticast.set(it)
}
SectionDividerSpaced()
}
SectionTextFooter(generalGetString(MR.strings.this_device_name_shared_with_mobile))
SectionView(stringResource(MR.strings.devices), card = true) {
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) {
@@ -188,7 +189,7 @@ private fun ConnectMobileViewLayout(
if (title != null) {
AppBarTitle(title)
}
SectionView(card = true) {
SectionView {
if (invitation != null && sessionCode == null && port != null) {
Box {
QRCode(invitation)
@@ -214,7 +215,7 @@ private fun ConnectMobileViewLayout(
Spacer(Modifier.height(DEFAULT_PADDING))
}
if (deviceName != null || sessionCode != null) {
SectionView(stringResource(MR.strings.connected_mobile), card = true) {
SectionView(stringResource(MR.strings.connected_mobile)) {
SelectionContainer {
Text(
deviceName ?: stringResource(MR.strings.new_mobile_device),
@@ -227,7 +228,7 @@ private fun ConnectMobileViewLayout(
}
if (sessionCode != null) {
SectionView(stringResource(MR.strings.verify_code_on_mobile), card = true) {
SectionView(stringResource(MR.strings.verify_code_on_mobile)) {
SelectionContainer {
Text(
sessionCode.substring(0, 23),
@@ -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)
}
@@ -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)
}
@@ -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
@@ -1,7 +1,6 @@
package chat.simplex.common.views.usersettings
import SectionBottomSpacer
import SectionDividerSpaced
import SectionSpacer
import SectionTextFooter
import SectionView
@@ -23,7 +22,7 @@ import chat.simplex.common.model.CloseBehavior
import chat.simplex.common.model.SharedPreference
import chat.simplex.common.trayIsAvailable
import chat.simplex.common.platform.*
import chat.simplex.common.ui.theme.DEFAULT_PADDING
import chat.simplex.common.ui.theme.*
import chat.simplex.common.views.helpers.*
import chat.simplex.res.MR
import dev.icerock.moko.resources.compose.stringResource
@@ -43,9 +42,9 @@ fun AppearanceScope.AppearanceLayout(
languagePref: SharedPreference<String?>,
systemDarkTheme: SharedPreference<String?>,
) {
ColumnWithScrollBar {
ColumnWithScrollBar(Modifier.background(canvasColorForCurrentTheme())) {
AppBarTitle(stringResource(MR.strings.appearance_settings))
SectionView(stringResource(MR.strings.settings_section_title_language), contentPadding = PaddingValues()) {
SectionView(stringResource(MR.strings.settings_section_title_language), contentPadding = PaddingValues(), card = true) {
val state = rememberSaveable { mutableStateOf(languagePref.get() ?: "system") }
LangSelector(state) {
state.value = it
@@ -65,27 +64,27 @@ fun AppearanceScope.AppearanceLayout(
SettingsPreferenceItem(icon = null, stringResource(MR.strings.chat_bottom_bar), ChatModel.controller.appPrefs.chatBottomBar)
}
}
SectionDividerSpaced()
SectionSpacer()
ThemesSection(systemDarkTheme)
if (trayIsAvailable) {
SectionDividerSpaced()
SectionSpacer()
MinimizeToTraySection()
}
SectionDividerSpaced()
SectionSpacer()
AppToolbarsSection()
SectionDividerSpaced()
SectionSpacer()
MessageShapeSection()
SectionDividerSpaced()
SectionSpacer()
ProfileImageSection()
SectionDividerSpaced(maxTopPadding = true)
SectionSpacer()
FontScaleSection()
SectionDividerSpaced(maxTopPadding = true)
SectionSpacer()
DensityScaleSection()
SectionBottomSpacer()
@@ -96,7 +95,7 @@ fun AppearanceScope.AppearanceLayout(
private fun MinimizeToTraySection() {
val pref = remember { appPrefs.closeBehavior.state }
val on = pref.value == CloseBehavior.MinimizeToTray
SectionView {
SectionView(card = true) {
PreferenceToggle(
stringResource(MR.strings.appearance_minimize_to_tray),
checked = on,
@@ -110,7 +109,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), card = true) {
Row(Modifier.padding(top = 10.dp), verticalAlignment = Alignment.CenterVertically) {
Box(Modifier.size(50.dp)
.background(MaterialTheme.colors.surface, RoundedCornerShape(percent = 22))