From 37d4ef770c81d09633384b39df1ce1f13b7238cd Mon Sep 17 00:00:00 2001 From: Stanislav Dmitrenko <7953703+avently@users.noreply.github.com> Date: Sat, 22 Apr 2023 18:38:32 +0300 Subject: [PATCH] android: equal paddings between sections and bottom spacer (#2227) * android: equal paddings between sections and bottom spacer * one more * aligning * paddings * paddings * scream color * switch * background and scrim colors --------- Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> --- .../java/chat/simplex/app/ui/theme/Color.kt | 1 + .../simplex/app/views/chat/ChatInfoView.kt | 11 +++-- .../app/views/chat/ContactPreferences.kt | 15 +++---- .../simplex/app/views/chat/VerifyCodeView.kt | 2 + .../views/chat/group/AddGroupMembersView.kt | 6 +-- .../app/views/chat/group/GroupChatInfoView.kt | 10 ++--- .../app/views/chat/group/GroupLinkView.kt | 9 ++-- .../views/chat/group/GroupMemberInfoView.kt | 7 ++- .../app/views/chat/group/GroupPreferences.kt | 12 ++--- .../app/views/chat/group/GroupProfileView.kt | 3 +- .../views/chat/group/WelcomeMessageView.kt | 2 + .../simplex/app/views/chat/item/CIFileView.kt | 4 +- .../views/chat/item/CIGroupInvitationView.kt | 1 - .../app/views/chatlist/ChatHelpView.kt | 4 -- .../app/views/chatlist/ChatListView.kt | 1 + .../views/chatlist/ContactConnectionView.kt | 1 - .../app/views/chatlist/ContactRequestView.kt | 1 - .../simplex/app/views/chatlist/UserPicker.kt | 2 +- .../app/views/database/ChatArchiveView.kt | 3 +- .../views/database/DatabaseEncryptionView.kt | 9 ++-- .../app/views/database/DatabaseErrorView.kt | 3 +- .../app/views/database/DatabaseView.kt | 17 +++---- .../simplex/app/views/helpers/AlertManager.kt | 10 ++--- .../app/views/helpers/DefaultDropdownMenu.kt | 2 +- .../app/views/helpers/DefaultSwitch.kt | 40 +++++++++++++++++ .../chat/simplex/app/views/helpers/Section.kt | 26 ++++++++--- .../app/views/newchat/AddContactView.kt | 5 ++- .../newchat/ContactConnectionInfoView.kt | 2 + .../app/views/newchat/PasteToConnect.kt | 2 + .../app/views/newchat/ScanToConnectView.kt | 2 + .../app/views/onboarding/HowItWorks.kt | 1 - .../app/views/onboarding/SimpleXInfo.kt | 2 +- .../app/views/onboarding/WhatsNewView.kt | 2 - .../views/usersettings/AcceptRequestsView.kt | 2 + .../usersettings/AdvancedNetworkSettings.kt | 10 ++--- .../app/views/usersettings/Appearance.kt | 7 +-- .../app/views/usersettings/CallSettings.kt | 23 +++++----- .../app/views/usersettings/DeveloperView.kt | 7 ++- .../app/views/usersettings/HelpView.kt | 1 - .../views/usersettings/HiddenProfileView.kt | 5 ++- .../app/views/usersettings/IncognitoView.kt | 2 + .../views/usersettings/MarkdownHelpView.kt | 2 + .../views/usersettings/NetworkAndServers.kt | 20 ++++----- .../usersettings/NotificationsSettingsView.kt | 9 ++-- .../app/views/usersettings/Preferences.kt | 13 +++--- .../app/views/usersettings/PrivacySettings.kt | 17 ++++--- .../views/usersettings/ProtocolServerView.kt | 8 ++-- .../views/usersettings/ProtocolServersView.kt | 7 +-- .../app/views/usersettings/RTCServers.kt | 13 +++--- .../app/views/usersettings/SettingsView.kt | 44 +++++++++---------- .../app/views/usersettings/UserAddressView.kt | 4 +- .../app/views/usersettings/UserProfileView.kt | 3 +- .../views/usersettings/UserProfilesView.kt | 5 ++- .../app/views/usersettings/VersionInfoView.kt | 1 - 54 files changed, 232 insertions(+), 189 deletions(-) create mode 100644 apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultSwitch.kt diff --git a/apps/android/app/src/main/java/chat/simplex/app/ui/theme/Color.kt b/apps/android/app/src/main/java/chat/simplex/app/ui/theme/Color.kt index ee2997b428..e0187c60e4 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/ui/theme/Color.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/ui/theme/Color.kt @@ -13,6 +13,7 @@ val SimplexGreen = Color(77, 218, 103, 255) val SecretColor = Color(0x40808080) val LightGray = Color(241, 242, 246, 255) val DarkGray = Color(43, 44, 46, 255) +val DarkGrayBackground = Color(38, 38, 38, 255) val HighOrLowlight = Color(139, 135, 134, 255) val MessagePreviewDark = Color(179, 175, 174, 255) val MessagePreviewLight = Color(49, 45, 44, 255) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ChatInfoView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ChatInfoView.kt index 3ebb22ea03..5102b92020 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ChatInfoView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ChatInfoView.kt @@ -2,6 +2,7 @@ package chat.simplex.app.views.chat import InfoRow import InfoRowEllipsis +import SectionBottomSpacer import SectionDividerSpaced import SectionItemView import SectionSpacer @@ -168,8 +169,7 @@ fun ChatInfoLayout( Column( Modifier .fillMaxWidth() - .verticalScroll(rememberScrollState()), - horizontalAlignment = Alignment.Start + .verticalScroll(rememberScrollState()) ) { Row( Modifier.fillMaxWidth(), @@ -179,15 +179,14 @@ fun ChatInfoLayout( } LocalAliasEditor(localAlias, updateValue = onLocalAliasChanged) - + SectionSpacer() if (customUserProfile != null) { - SectionSpacer() SectionView(generalGetString(R.string.incognito).uppercase()) { InfoRow(generalGetString(R.string.incognito_random_profile), customUserProfile.chatViewName) } + SectionDividerSpaced() } - SectionSpacer() SectionView { if (connectionCode != null) { VerifyCodeButton(contact.verified, verifyClicked) @@ -230,7 +229,7 @@ fun ChatInfoLayout( InfoRow(stringResource(R.string.info_row_database_id), chat.chatInfo.apiId.toString()) } } - SectionSpacer() + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ContactPreferences.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ContactPreferences.kt index ab9782a4ea..ada642a26d 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/ContactPreferences.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/ContactPreferences.kt @@ -1,6 +1,7 @@ package chat.simplex.app.views.chat import InfoRow +import SectionBottomSpacer import SectionDividerSpaced import SectionItemView import SectionTextFooter @@ -11,7 +12,6 @@ import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource @@ -79,9 +79,7 @@ private fun ContactPreferencesLayout( Column( Modifier .fillMaxWidth() - .verticalScroll(rememberScrollState()) - .padding(bottom = DEFAULT_PADDING), - horizontalAlignment = Alignment.Start, + .verticalScroll(rememberScrollState()), ) { AppBarTitle(stringResource(R.string.contact_preferences)) val timedMessages: MutableState = remember(featuresAllowed) { mutableStateOf(featuresAllowed.timedMessagesAllowed) } @@ -91,27 +89,28 @@ private fun ContactPreferencesLayout( TimedMessagesFeatureSection(featuresAllowed, contact.mergedPreferences.timedMessages, timedMessages, onTTLUpdated) { allowed, ttl -> applyPrefs(featuresAllowed.copy(timedMessagesAllowed = allowed, timedMessagesTTL = ttl ?: currentFeaturesAllowed.timedMessagesTTL)) } - SectionDividerSpaced() + SectionDividerSpaced(true, maxBottomPadding = false) val allowFullDeletion: MutableState = remember(featuresAllowed) { mutableStateOf(featuresAllowed.fullDelete) } FeatureSection(ChatFeature.FullDelete, user.fullPreferences.fullDelete.allow, contact.mergedPreferences.fullDelete, allowFullDeletion) { applyPrefs(featuresAllowed.copy(fullDelete = it)) } - SectionDividerSpaced() + SectionDividerSpaced(true, maxBottomPadding = false) val allowVoice: MutableState = remember(featuresAllowed) { mutableStateOf(featuresAllowed.voice) } FeatureSection(ChatFeature.Voice, user.fullPreferences.voice.allow, contact.mergedPreferences.voice, allowVoice) { applyPrefs(featuresAllowed.copy(voice = it)) } - SectionDividerSpaced() + SectionDividerSpaced(true, maxBottomPadding = false) val allowCalls: MutableState = remember(featuresAllowed) { mutableStateOf(featuresAllowed.calls) } FeatureSection(ChatFeature.Calls, user.fullPreferences.calls.allow, contact.mergedPreferences.calls, allowCalls) { applyPrefs(featuresAllowed.copy(calls = it)) } - SectionDividerSpaced() + SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false) ResetSaveButtons( reset = reset, save = savePrefs, disabled = featuresAllowed == currentFeaturesAllowed ) + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/VerifyCodeView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/VerifyCodeView.kt index 58c13e8bb5..34afdb8a2d 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/VerifyCodeView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/VerifyCodeView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.chat +import SectionBottomSpacer import SectionView import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -126,6 +127,7 @@ private fun VerifyCodeLayout( } } } + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt index 73ddd708fd..706b681ca3 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/AddGroupMembersView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.chat.group +import SectionBottomSpacer import SectionCustomFooter import SectionDividerSpaced import SectionItemView @@ -105,7 +106,6 @@ fun AddGroupMembersLayout( Modifier .fillMaxWidth() .verticalScroll(rememberScrollState()), - horizontalAlignment = Alignment.Start, ) { AppBarTitle(stringResource(R.string.button_add_members)) InfoAboutIncognito( @@ -156,13 +156,13 @@ fun AddGroupMembersLayout( SectionCustomFooter { InviteSectionFooter(selectedContactsCount = selectedContacts.size, allowModifyMembers, clearSelection) } - SectionDividerSpaced() + SectionDividerSpaced(maxTopPadding = true) SectionView(stringResource(R.string.select_contacts)) { ContactList(contacts = contactsToAdd, selectedContacts, groupInfo, allowModifyMembers, addContact, removeContact) } - SectionSpacer() } + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupChatInfoView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupChatInfoView.kt index 0e7c919e49..1b5bd4a2d5 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupChatInfoView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupChatInfoView.kt @@ -1,6 +1,7 @@ package chat.simplex.app.views.chat.group import InfoRow +import SectionBottomSpacer import SectionDividerSpaced import SectionItemView import SectionSpacer @@ -160,8 +161,7 @@ fun GroupChatInfoLayout( Column( Modifier .fillMaxWidth() - .verticalScroll(rememberScrollState()), - horizontalAlignment = Alignment.Start + .verticalScroll(rememberScrollState()) ) { Row( Modifier.fillMaxWidth(), @@ -179,7 +179,7 @@ fun GroupChatInfoLayout( GroupPreferencesButton(openPreferences) } SectionTextFooter(stringResource(R.string.only_group_owners_can_change_prefs)) - SectionDividerSpaced() + SectionDividerSpaced(maxTopPadding = true) SectionView(title = String.format(generalGetString(R.string.group_info_section_title_num_members), members.count() + 1)) { if (groupInfo.canAddMembers) { @@ -198,7 +198,7 @@ fun GroupChatInfoLayout( } MembersList(members, showMemberInfo) } - SectionDividerSpaced() + SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false) SectionView { ClearChatButton(clearChat) if (groupInfo.canDelete) { @@ -216,7 +216,7 @@ fun GroupChatInfoLayout( InfoRow(stringResource(R.string.info_row_database_id), groupInfo.apiId.toString()) } } - SectionSpacer() + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupLinkView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupLinkView.kt index 555c19af73..0a804d2e97 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupLinkView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupLinkView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.chat.group +import SectionBottomSpacer import SectionItemView import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -101,10 +102,7 @@ fun GroupLinkLayout( ) { Column( Modifier - .verticalScroll(rememberScrollState()) - .padding(bottom = DEFAULT_BOTTOM_PADDING), - horizontalAlignment = Alignment.Start, - verticalArrangement = Arrangement.Top + .verticalScroll(rememberScrollState()), ) { AppBarTitle(stringResource(R.string.group_link)) Text( @@ -128,7 +126,7 @@ fun GroupLinkLayout( } initialLaunch = false } - QRCode(groupLink, Modifier.aspectRatio(1f).padding(start = DEFAULT_PADDING, end = DEFAULT_PADDING)) + QRCode(groupLink, Modifier.aspectRatio(1f).padding(horizontal = DEFAULT_PADDING)) Row( horizontalArrangement = Arrangement.spacedBy(10.dp), verticalAlignment = Alignment.CenterVertically, @@ -148,6 +146,7 @@ fun GroupLinkLayout( } } } + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupMemberInfoView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupMemberInfoView.kt index 4884a7ecd9..59f788d18f 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupMemberInfoView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupMemberInfoView.kt @@ -1,6 +1,7 @@ package chat.simplex.app.views.chat.group import InfoRow +import SectionBottomSpacer import SectionDividerSpaced import SectionSpacer import SectionView @@ -151,7 +152,6 @@ fun GroupMemberInfoLayout( Modifier .fillMaxWidth() .verticalScroll(rememberScrollState()), - horizontalAlignment = Alignment.Start ) { Row( Modifier.fillMaxWidth(), @@ -213,7 +213,7 @@ fun GroupMemberInfoLayout( } if (member.canBeRemoved(groupInfo)) { - SectionDividerSpaced() + SectionDividerSpaced(maxBottomPadding = false) SectionView { RemoveMemberButton(removeMember) } @@ -225,9 +225,8 @@ fun GroupMemberInfoLayout( InfoRow(stringResource(R.string.info_row_local_name), member.localDisplayName) InfoRow(stringResource(R.string.info_row_database_id), member.groupMemberId.toString()) } - SectionSpacer() } - SectionSpacer() + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupPreferences.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupPreferences.kt index f2428668e1..5446d6fe85 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupPreferences.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupPreferences.kt @@ -1,6 +1,7 @@ package chat.simplex.app.views.chat.group import InfoRow +import SectionBottomSpacer import SectionDividerSpaced import SectionItemView import SectionTextFooter @@ -11,7 +12,6 @@ import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import chat.simplex.app.R @@ -71,7 +71,6 @@ private fun GroupPreferencesLayout( ) { Column( Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), - horizontalAlignment = Alignment.Start, ) { AppBarTitle(stringResource(R.string.group_preferences)) val timedMessages = remember(preferences) { mutableStateOf(preferences.timedMessages.enable) } @@ -85,29 +84,30 @@ private fun GroupPreferencesLayout( applyPrefs(preferences.copy(timedMessages = TimedMessagesGroupPreference(enable = enable, ttl = currentPreferences.timedMessages.ttl))) } } - SectionDividerSpaced() + SectionDividerSpaced(true, maxBottomPadding = false) val allowDirectMessages = remember(preferences) { mutableStateOf(preferences.directMessages.enable) } FeatureSection(GroupFeature.DirectMessages, allowDirectMessages, groupInfo, preferences, onTTLUpdated) { applyPrefs(preferences.copy(directMessages = GroupPreference(enable = it))) } - SectionDividerSpaced() + SectionDividerSpaced(true, maxBottomPadding = false) val allowFullDeletion = remember(preferences) { mutableStateOf(preferences.fullDelete.enable) } FeatureSection(GroupFeature.FullDelete, allowFullDeletion, groupInfo, preferences, onTTLUpdated) { applyPrefs(preferences.copy(fullDelete = GroupPreference(enable = it))) } - SectionDividerSpaced() + SectionDividerSpaced(true, maxBottomPadding = false) val allowVoice = remember(preferences) { mutableStateOf(preferences.voice.enable) } FeatureSection(GroupFeature.Voice, allowVoice, groupInfo, preferences, onTTLUpdated) { applyPrefs(preferences.copy(voice = GroupPreference(enable = it))) } if (groupInfo.canEdit) { - SectionDividerSpaced() + SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false) ResetSaveButtons( reset = reset, save = savePrefs, disabled = preferences == currentPreferences ) } + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupProfileView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupProfileView.kt index 3ad913d431..42958d061a 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupProfileView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/GroupProfileView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.chat.group +import SectionBottomSpacer import android.content.res.Configuration import android.net.Uri import androidx.compose.foundation.* @@ -167,7 +168,7 @@ fun GroupProfileLayout( } } - Spacer(Modifier.height(DEFAULT_BOTTOM_BUTTON_PADDING)) + SectionBottomSpacer() LaunchedEffect(Unit) { delay(300) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/WelcomeMessageView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/WelcomeMessageView.kt index 285c794238..906a8815e9 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/WelcomeMessageView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/group/WelcomeMessageView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.chat.group +import SectionBottomSpacer import SectionItemView import SectionSpacer import SectionView @@ -70,6 +71,7 @@ private fun GroupWelcomeLayout( save = save, disabled = welcomeText.value == groupInfo.groupProfile.description || (welcomeText.value == "" && groupInfo.groupProfile.description == null) ) + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CIFileView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CIFileView.kt index 01694f6c41..fde5b2148e 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CIFileView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CIFileView.kt @@ -190,9 +190,7 @@ fun CIFileView( else " " if (file != null) { - Column( - horizontalAlignment = Alignment.Start - ) { + Column { Text( file.fileName, maxLines = 1 diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CIGroupInvitationView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CIGroupInvitationView.kt index 3bdd453b41..40c21aa412 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CIGroupInvitationView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chat/item/CIGroupInvitationView.kt @@ -89,7 +89,6 @@ fun CIGroupInvitationView( Modifier .defaultMinSize(minWidth = 220.dp) .padding(bottom = 4.dp), - horizontalAlignment = Alignment.Start ) { groupInfoView() Column(Modifier.padding(top = 2.dp, start = 5.dp)) { diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatHelpView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatHelpView.kt index 4807241cdd..082573b7af 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatHelpView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatHelpView.kt @@ -28,7 +28,6 @@ val bold = SpanStyle(fontWeight = FontWeight.Bold) @Composable fun ChatHelpView(addContact: (() -> Unit)? = null) { Column( - horizontalAlignment = Alignment.Start, verticalArrangement = Arrangement.spacedBy(10.dp) ) { val uriHandler = LocalUriHandler.current @@ -44,7 +43,6 @@ fun ChatHelpView(addContact: (() -> Unit)? = null) { Column( Modifier.padding(top = 24.dp), - horizontalAlignment = Alignment.Start, verticalArrangement = Arrangement.spacedBy(10.dp) ) { Text( @@ -70,7 +68,6 @@ fun ChatHelpView(addContact: (() -> Unit)? = null) { Column( Modifier.padding(top = 24.dp), - horizontalAlignment = Alignment.Start, verticalArrangement = Arrangement.spacedBy(10.dp) ) { Text(stringResource(R.string.to_connect_via_link_title), style = MaterialTheme.typography.h2) @@ -81,7 +78,6 @@ fun ChatHelpView(addContact: (() -> Unit)? = null) { Column( Modifier.padding(vertical = 24.dp), - horizontalAlignment = Alignment.Start, verticalArrangement = Arrangement.spacedBy(10.dp) ) { Text(stringResource(R.string.markdown_in_messages), style = MaterialTheme.typography.h2) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt index f176b11c72..37d32c0ad8 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ChatListView.kt @@ -70,6 +70,7 @@ fun ChatListView(chatModel: ChatModel, setPerformLA: (Boolean, FragmentActivity) Scaffold(topBar = { ChatListToolbar(chatModel, scaffoldState.drawerState, userPickerState, stopped) { searchInList = it.trim() } }, scaffoldState = scaffoldState, drawerContent = { SettingsView(chatModel, setPerformLA) }, + drawerScrimColor = MaterialTheme.colors.onSurface.copy(alpha = if (isInDarkTheme()) 0.16f else 0.32f), floatingActionButton = { if (searchInList.isEmpty()) { FloatingActionButton( diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ContactConnectionView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ContactConnectionView.kt index 31c43ead06..a1b6db80d9 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ContactConnectionView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ContactConnectionView.kt @@ -42,7 +42,6 @@ fun ContactConnectionView(contactConnection: PendingContactConnection) { val ts = getTimestampText(contactConnection.updatedAt) Column( Modifier.fillMaxHeight(), - verticalArrangement = Arrangement.Top ) { Text( ts, diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ContactRequestView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ContactRequestView.kt index f1d6acd20b..064cb4a66a 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ContactRequestView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/ContactRequestView.kt @@ -39,7 +39,6 @@ fun ContactRequestView(chatModelIncognito: Boolean, contactRequest: ChatInfo.Con val ts = getTimestampText(contactRequest.contactRequest.updatedAt) Column( Modifier.fillMaxHeight(), - verticalArrangement = Arrangement.Top ) { Text( ts, diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt index 63492aaf51..2fc9f1de1b 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/chatlist/UserPicker.kt @@ -110,7 +110,7 @@ fun UserPicker( .width(IntrinsicSize.Min) .height(IntrinsicSize.Min) .shadow(8.dp, RoundedCornerShape(corner = CornerSize(25.dp)), clip = true) - .background(if (isInDarkTheme()) Color(0xff222222) else MaterialTheme.colors.background, RoundedCornerShape(corner = CornerSize(25.dp))) + .background(if (isInDarkTheme()) DarkGrayBackground else MaterialTheme.colors.background, RoundedCornerShape(corner = CornerSize(25.dp))) .clip(RoundedCornerShape(corner = CornerSize(25.dp))) ) { Column(Modifier.weight(1f).verticalScroll(rememberScrollState())) { diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/database/ChatArchiveView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/database/ChatArchiveView.kt index 12861c0861..c8a367097c 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/database/ChatArchiveView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/database/ChatArchiveView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.database +import SectionBottomSpacer import SectionTextFooter import SectionView import android.content.Context @@ -55,7 +56,6 @@ fun ChatArchiveLayout( ) { Column( Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.Start, ) { AppBarTitle(title) SectionView(stringResource(R.string.chat_archive_section)) { @@ -78,6 +78,7 @@ fun ChatArchiveLayout( SectionTextFooter( String.format(generalGetString(R.string.archive_created_on_ts), archiveTs) ) + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt index ed82b30d84..2f26648910 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseEncryptionView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.database +import SectionBottomSpacer import SectionItemView import SectionItemViewSpaceBetween import SectionTextFooter @@ -136,7 +137,6 @@ fun DatabaseEncryptionLayout( ) { Column( Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), - horizontalAlignment = Alignment.Start, ) { AppBarTitle(stringResource(R.string.database_passphrase)) SectionView(null) { @@ -236,6 +236,7 @@ fun DatabaseEncryptionLayout( SectionTextFooter(generalGetString(R.string.impossible_to_recover_passphrase)) } } + SectionBottomSpacer() } } @@ -302,13 +303,9 @@ fun SavePassphraseSetting( color = Color.Unspecified ) Spacer(Modifier.fillMaxWidth().weight(1f)) - Switch( + DefaultSwitch( checked = useKeychain, onCheckedChange = onCheckedChange, - colors = SwitchDefaults.colors( - checkedThumbColor = MaterialTheme.colors.primary, - uncheckedThumbColor = HighOrLowlight - ), enabled = !initialRandomDBPassphrase && !progressIndicator ) } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseErrorView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseErrorView.kt index e0673f80d5..410bdea630 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseErrorView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseErrorView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.database +import SectionBottomSpacer import SectionSpacer import SectionView import android.content.Context @@ -79,7 +80,6 @@ fun DatabaseErrorView( Column( Modifier.fillMaxSize().verticalScroll(rememberScrollState()), - horizontalAlignment = Alignment.Start, verticalArrangement = Arrangement.Center, ) { val buttonEnabled = validKey(dbKey.value) && !progressIndicator.value @@ -169,6 +169,7 @@ fun DatabaseErrorView( ) } } + SectionBottomSpacer() } if (progressIndicator.value) { Box( diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseView.kt index f0a1ad8b3d..305db4d71b 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/database/DatabaseView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.database +import SectionBottomSpacer import SectionDividerSpaced import SectionTextFooter import SectionItemView @@ -153,8 +154,7 @@ fun DatabaseLayout( val operationsDisabled = !stopped || progressIndicator Column( - Modifier.fillMaxWidth().verticalScroll(rememberScrollState()).padding(bottom = DEFAULT_BOTTOM_PADDING), - horizontalAlignment = Alignment.Start, + Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), ) { AppBarTitle(stringResource(R.string.your_chat_database)) @@ -172,7 +172,7 @@ fun DatabaseLayout( } } ) - SectionDividerSpaced() + SectionDividerSpaced(maxTopPadding = true) SectionView(stringResource(R.string.run_chat_section)) { RunChatSetting(runChat, stopped, chatDbDeleted, startChat, stopChatAlert) @@ -189,7 +189,7 @@ fun DatabaseLayout( disabled = operationsDisabled ) AppDataBackupPreference(privacyFullBackup, initialRandomDBPassphrase) - SectionDividerSpaced() + SectionDividerSpaced(maxBottomPadding = false) SettingsActionItem( Icons.Outlined.IosShare, stringResource(R.string.export_database), @@ -240,7 +240,7 @@ fun DatabaseLayout( stringResource(R.string.stop_chat_to_enable_database_actions) } ) - SectionDividerSpaced() + SectionDividerSpaced(maxTopPadding = true) SectionView(stringResource(R.string.files_and_media_section).uppercase()) { val deleteFilesDisabled = operationsDisabled || appFilesCountAndSize.value.first == 0 @@ -262,6 +262,7 @@ fun DatabaseLayout( String.format(stringResource(R.string.total_files_count_and_size), count, formatBytes(size)) } ) + SectionBottomSpacer() } } @@ -339,7 +340,7 @@ fun RunChatSetting( text = chatRunningText, iconColor = if (stopped) Color.Red else MaterialTheme.colors.primary, ) { - Switch( + DefaultSwitch( enabled = !chatDbDeleted, checked = runChat, onCheckedChange = { runChatSwitch -> @@ -349,10 +350,6 @@ fun RunChatSetting( stopChatAlert() } }, - colors = SwitchDefaults.colors( - checkedThumbColor = MaterialTheme.colors.primary, - uncheckedThumbColor = HighOrLowlight - ), ) } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/AlertManager.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/AlertManager.kt index bb6f418705..7f07bbe38f 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/AlertManager.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/AlertManager.kt @@ -37,7 +37,7 @@ class AlertManager { ) { showAlert { AlertDialog( - backgroundColor = if (isInDarkTheme()) Color(0xff222222) else MaterialTheme.colors.background, + backgroundColor = if (isInDarkTheme()) DarkGrayBackground else MaterialTheme.colors.background, onDismissRequest = this::hideAlert, title = alertTitle(title), text = alertText(text), @@ -56,7 +56,7 @@ class AlertManager { Dialog(onDismissRequest = this::hideAlert) { Column( Modifier - .background(if (isInDarkTheme()) Color(0xff222222) else MaterialTheme.colors.background, RoundedCornerShape(corner = CornerSize(25.dp))) + .background(if (isInDarkTheme()) DarkGrayBackground else MaterialTheme.colors.background, RoundedCornerShape(corner = CornerSize(25.dp))) .padding(bottom = DEFAULT_PADDING) ) { Text( @@ -106,7 +106,7 @@ class AlertManager { }) { Text(confirmText, color = if (destructive) MaterialTheme.colors.error else Color.Unspecified) } } }, - backgroundColor = if (isInDarkTheme()) Color(0xff222222) else MaterialTheme.colors.background, + backgroundColor = if (isInDarkTheme()) DarkGrayBackground else MaterialTheme.colors.background, shape = RoundedCornerShape(corner = CornerSize(25.dp)) ) } @@ -142,7 +142,7 @@ class AlertManager { }) { Text(confirmText, color = if (destructive) Color.Red else Color.Unspecified, textAlign = TextAlign.End) } } }, - backgroundColor = if (isInDarkTheme()) Color(0xff222222) else MaterialTheme.colors.background, + backgroundColor = if (isInDarkTheme()) DarkGrayBackground else MaterialTheme.colors.background, shape = RoundedCornerShape(corner = CornerSize(25.dp)) ) } @@ -168,7 +168,7 @@ class AlertManager { }) { Text(confirmText, color = Color.Unspecified) } } }, - backgroundColor = if (isInDarkTheme()) Color(0xff222222) else MaterialTheme.colors.background, + backgroundColor = if (isInDarkTheme()) DarkGrayBackground else MaterialTheme.colors.background, shape = RoundedCornerShape(corner = CornerSize(25.dp)) ) } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultDropdownMenu.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultDropdownMenu.kt index 0cb501e7f4..e6ec87e14d 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultDropdownMenu.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultDropdownMenu.kt @@ -19,7 +19,7 @@ fun DefaultDropdownMenu( dropdownMenuItems: (@Composable () -> Unit)? ) { MaterialTheme( - colors = MaterialTheme.colors.copy(surface = if (isInDarkTheme()) Color(0xFF080808) else MaterialTheme.colors.background), + colors = MaterialTheme.colors.copy(surface = if (isInDarkTheme()) Color(0xFF0B0B0B) else MaterialTheme.colors.background), shapes = MaterialTheme.shapes.copy(medium = RoundedCornerShape(corner = CornerSize(25.dp))) ) { DropdownMenu( diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultSwitch.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultSwitch.kt new file mode 100644 index 0000000000..251cb8df30 --- /dev/null +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/DefaultSwitch.kt @@ -0,0 +1,40 @@ +package chat.simplex.app.views.helpers + +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.material.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.geometry.* +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.dp +import chat.simplex.app.ui.theme.HighOrLowlight + +@Composable +fun DefaultSwitch( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, + modifier: Modifier = Modifier, + enabled: Boolean = true, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, + colors: SwitchColors = SwitchDefaults.colors( + checkedThumbColor = MaterialTheme.colors.primary, + uncheckedThumbColor = HighOrLowlight, + checkedTrackAlpha = 0.0f, + uncheckedTrackAlpha = 0.0f, + ) +) { + val color = if (checked) MaterialTheme.colors.primary.copy(alpha = 0.3f) else HighOrLowlight.copy(alpha = 0.3f) + val size = with(LocalDensity.current) { Size(46.dp.toPx(), 28.dp.toPx()) } + val offset = with(LocalDensity.current) { Offset(1.dp.toPx(), 10.dp.toPx()) } + val radius = with(LocalDensity.current) { 28.dp.toPx() } + Switch( + checked = checked, + onCheckedChange = onCheckedChange, + modifier.drawBehind { drawRoundRect(color, size = size, topLeft = offset, cornerRadius = CornerRadius(radius, radius)) }, + colors = colors, + enabled = enabled, + interactionSource = interactionSource, + ) +} \ No newline at end of file diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Section.kt b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Section.kt index 315cbfb10b..a80c4920ad 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Section.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/helpers/Section.kt @@ -83,7 +83,10 @@ fun SectionItemView( minHeight: Dp = 46.dp, disabled: Boolean = false, extraPadding: Boolean = false, - padding: PaddingValues = if (extraPadding) PaddingValues(start = DEFAULT_PADDING * 2, end = DEFAULT_PADDING) else PaddingValues(horizontal = DEFAULT_PADDING), + padding: PaddingValues = if (extraPadding) + PaddingValues(start = DEFAULT_PADDING * 1.7f, end = DEFAULT_PADDING) + else + PaddingValues(horizontal = DEFAULT_PADDING), content: (@Composable RowScope.() -> Unit) ) { val modifier = Modifier @@ -102,7 +105,7 @@ fun SectionItemViewWithIcon( click: (() -> Unit)? = null, minHeight: Dp = 46.dp, disabled: Boolean = false, - padding: PaddingValues = PaddingValues(start = DEFAULT_PADDING * 2, end = DEFAULT_PADDING), + padding: PaddingValues = PaddingValues(start = DEFAULT_PADDING * 1.7f, end = DEFAULT_PADDING), content: (@Composable RowScope.() -> Unit) ) { val modifier = Modifier @@ -195,10 +198,14 @@ fun SectionDivider() { } @Composable -fun SectionDividerSpaced() { - SectionSpacer() - Divider(Modifier.padding(horizontal = DEFAULT_PADDING_HALF)) - SectionSpacer() +fun SectionDividerSpaced(maxTopPadding: Boolean = false, maxBottomPadding: Boolean = true) { + Divider( + Modifier.padding( + start = DEFAULT_PADDING_HALF, + top = if (maxTopPadding) 40.dp else 30.dp, + end = DEFAULT_PADDING_HALF, + bottom = if (maxBottomPadding) 40.dp else 30.dp) + ) } @Composable @@ -206,9 +213,14 @@ fun SectionSpacer() { Spacer(Modifier.height(30.dp)) } +@Composable +fun SectionBottomSpacer() { + Spacer(Modifier.height(DEFAULT_BOTTOM_PADDING)) +} + @Composable fun TextIconSpaced(extraPadding: Boolean = false) { - Spacer(Modifier.padding(horizontal = if (extraPadding) DEFAULT_PADDING else DEFAULT_PADDING_HALF)) + Spacer(Modifier.padding(horizontal = if (extraPadding) 17.dp else DEFAULT_PADDING_HALF)) } @Composable diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/AddContactView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/AddContactView.kt index 091ce162cf..6dad4bc5ef 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/AddContactView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/AddContactView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.newchat +import SectionBottomSpacer import android.content.res.Configuration import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -38,8 +39,7 @@ fun AddContactLayout(connReq: String, connIncognito: Boolean, share: () -> Unit) val screenHeight = maxHeight Column( Modifier - .verticalScroll(rememberScrollState()) - .padding(bottom = DEFAULT_BOTTOM_PADDING), + .verticalScroll(rememberScrollState()), verticalArrangement = Arrangement.SpaceBetween, ) { AppBarTitle(stringResource(R.string.add_contact), false) @@ -82,6 +82,7 @@ fun AddContactLayout(connReq: String, connIncognito: Boolean, share: () -> Unit) ) { SimpleButton(stringResource(R.string.share_invitation_link), icon = Icons.Outlined.Share, click = share) } + SectionBottomSpacer() } } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ContactConnectionInfoView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ContactConnectionInfoView.kt index 365bf7a5c0..9d0d724de3 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ContactConnectionInfoView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ContactConnectionInfoView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.newchat +import SectionBottomSpacer import SectionView import android.content.res.Configuration import androidx.compose.foundation.layout.* @@ -103,6 +104,7 @@ private fun ContactConnectionInfoLayout( } DeleteButton(deleteConnection) } + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/PasteToConnect.kt b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/PasteToConnect.kt index 19f7a7ff99..4c4eb4243e 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/PasteToConnect.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/PasteToConnect.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.newchat +import SectionBottomSpacer import android.content.ClipboardManager import android.content.res.Configuration import android.net.Uri @@ -108,6 +109,7 @@ fun PasteToConnectLayout( } Text(annotatedStringResource(R.string.you_can_also_connect_by_clicking_the_link)) + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ScanToConnectView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ScanToConnectView.kt index eb7558dbf5..4f6e4c41d0 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ScanToConnectView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/newchat/ScanToConnectView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.newchat +import SectionBottomSpacer import android.Manifest import android.content.res.Configuration import android.net.Uri @@ -141,6 +142,7 @@ fun ConnectContactLayout(chatModelIncognito: Boolean, qrCodeScanner: @Composable annotatedStringResource(R.string.if_you_cannot_meet_in_person_scan_QR_in_video_call_or_ask_for_invitation_link), lineHeight = 22.sp ) + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/HowItWorks.kt b/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/HowItWorks.kt index 3ee0118970..5e76c8b095 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/HowItWorks.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/HowItWorks.kt @@ -26,7 +26,6 @@ fun HowItWorks(user: User?, onboardingStage: MutableState? = n Column(Modifier .fillMaxWidth() .padding(horizontal = DEFAULT_PADDING), - horizontalAlignment = Alignment.Start ) { AppBarTitle(stringResource(R.string.how_simplex_works), false) ReadableText(R.string.many_people_asked_how_can_it_deliver) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/SimpleXInfo.kt b/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/SimpleXInfo.kt index 165092aaac..a20a83e7a0 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/SimpleXInfo.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/SimpleXInfo.kt @@ -95,7 +95,7 @@ private fun InfoRow(icon: Painter, @StringRes titleId: Int, @StringRes textId: I Image(icon, contentDescription = null, modifier = Modifier .width(width) .padding(top = 8.dp, start = 8.dp, end = 24.dp)) - Column(horizontalAlignment = Alignment.Start) { + Column { Text(stringResource(titleId), fontWeight = FontWeight.Bold, style = MaterialTheme.typography.h3, lineHeight = 24.sp) Text(stringResource(textId), lineHeight = 24.sp, style = MaterialTheme.typography.body1) } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/WhatsNewView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/WhatsNewView.kt index dc1191e242..cdc5b3545c 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/WhatsNewView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/onboarding/WhatsNewView.kt @@ -40,7 +40,6 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) { } Column( - horizontalAlignment = Alignment.Start, modifier = Modifier.padding(bottom = 12.dp) ) { Row( @@ -112,7 +111,6 @@ fun WhatsNewView(viaSettings: Boolean = false, close: () -> Unit) { .fillMaxSize() .padding(horizontal = DEFAULT_PADDING) .verticalScroll(rememberScrollState()), - horizontalAlignment = Alignment.Start, verticalArrangement = Arrangement.spacedBy(DEFAULT_PADDING) ) { Text( diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/AcceptRequestsView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/AcceptRequestsView.kt index 912116cec8..52c87c6c3b 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/AcceptRequestsView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/AcceptRequestsView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionCustomFooter import SectionView import androidx.compose.foundation.layout.* @@ -92,6 +93,7 @@ private fun AcceptRequestsLayout( } } } + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/AdvancedNetworkSettings.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/AdvancedNetworkSettings.kt index ae2ca28388..9d6c3accfa 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/AdvancedNetworkSettings.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/AdvancedNetworkSettings.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionCustomFooter import SectionItemView import SectionSpacer @@ -140,7 +141,6 @@ fun AdvancedNetworkSettingsView(chatModel: ChatModel) { Modifier .fillMaxWidth() .verticalScroll(rememberScrollState()), - horizontalAlignment = Alignment.Start, ) { AppBarTitle(stringResource(R.string.network_settings_title)) SectionView { @@ -199,7 +199,7 @@ fun AdvancedNetworkSettingsView(chatModel: ChatModel) { SectionCustomFooter { SettingsSectionFooter(revert, save, footerDisabled) } - SectionSpacer() + SectionBottomSpacer() } } @@ -225,13 +225,9 @@ fun EnableKeepAliveSwitch( horizontalArrangement = Arrangement.SpaceBetween ) { Text(stringResource(R.string.network_option_enable_tcp_keep_alive)) - Switch( + DefaultSwitch( checked = networkEnableKeepAlive.value, onCheckedChange = { networkEnableKeepAlive.value = it }, - colors = SwitchDefaults.colors( - checkedThumbColor = MaterialTheme.colors.primary, - uncheckedThumbColor = HighOrLowlight - ), ) } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt index 4b7d9ed212..84ce9b8848 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Appearance.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionCustomFooter import SectionDividerSpaced import SectionItemViewSpaceBetween @@ -85,8 +86,7 @@ fun AppearanceView(m: ChatModel) { editPrimaryColor: (Color) -> Unit, ) { Column( - Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.Start, + Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), ) { AppBarTitle(stringResource(R.string.appearance_settings)) SectionView(stringResource(R.string.settings_section_title_language), padding = PaddingValues()) { @@ -141,7 +141,7 @@ fun AppearanceView(m: ChatModel) { } } - SectionDividerSpaced() + SectionDividerSpaced(maxTopPadding = true) val currentTheme by CurrentColors.collectAsState() SectionView(stringResource(R.string.settings_section_title_themes)) { val darkTheme = isSystemInDarkTheme() @@ -166,6 +166,7 @@ fun AppearanceView(m: ChatModel) { } } } + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/CallSettings.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/CallSettings.kt index 982075c8e2..be9354646d 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/CallSettings.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/CallSettings.kt @@ -1,16 +1,21 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionItemView import SectionTextFooter import SectionView -import androidx.compose.foundation.clickable +import androidx.compose.foundation.* import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.geometry.* import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import chat.simplex.app.R @@ -36,8 +41,7 @@ fun CallSettingsLayout( editIceServers: () -> Unit, ) { Column( - Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.Start, + Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), verticalArrangement = Arrangement.spacedBy(8.dp) ) { AppBarTitle(stringResource(R.string.your_calls)) @@ -56,6 +60,7 @@ fun CallSettingsLayout( generalGetString(R.string.relay_server_if_necessary) } ) + SectionBottomSpacer() } } @@ -86,17 +91,13 @@ fun SharedPreferenceToggle( enabled: Boolean = true, onChange: ((Boolean) -> Unit)? = null, ) { - Switch( + DefaultSwitch( enabled = enabled, checked = remember { preference.state }.value, onCheckedChange = { preference.set(it) onChange?.invoke(it) }, - colors = SwitchDefaults.colors( - checkedThumbColor = MaterialTheme.colors.primary, - uncheckedThumbColor = HighOrLowlight - ) ) } @@ -119,16 +120,12 @@ fun SharedPreferenceToggleWithIcon( tint = MaterialTheme.colors.primary ) Spacer(Modifier.fillMaxWidth().weight(1f)) - Switch( + DefaultSwitch( checked = prefState.value, onCheckedChange = { preference.set(it) prefState.value = it }, - colors = SwitchDefaults.colors( - checkedThumbColor = MaterialTheme.colors.primary, - uncheckedThumbColor = HighOrLowlight - ), enabled = !stopped ) } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/DeveloperView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/DeveloperView.kt index 2f3311321e..29b00b544b 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/DeveloperView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/DeveloperView.kt @@ -1,10 +1,13 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionSpacer import SectionTextFooter import SectionView import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.* import androidx.compose.runtime.* @@ -22,7 +25,7 @@ fun DeveloperView( showCustomModal: (@Composable (ChatModel, () -> Unit) -> Unit) -> (() -> Unit), withAuth: (block: () -> Unit) -> Unit ) { - Column(Modifier.fillMaxWidth()) { + Column(Modifier.fillMaxWidth().verticalScroll(rememberScrollState())) { val uriHandler = LocalUriHandler.current AppBarTitle(stringResource(R.string.settings_developer_tools)) val developerTools = m.controller.appPrefs.developerTools @@ -37,6 +40,6 @@ fun DeveloperView( generalGetString(if (devTools.value) R.string.show_dev_options else R.string.hide_dev_options) + " " + generalGetString(R.string.developer_options) ) - SectionSpacer() + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HelpView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HelpView.kt index 062735a144..79f0ed3348 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HelpView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HelpView.kt @@ -27,7 +27,6 @@ fun HelpLayout(userDisplayName: String) { .fillMaxWidth() .verticalScroll(rememberScrollState()) .padding(horizontal = DEFAULT_PADDING), - horizontalAlignment = Alignment.Start ){ AppBarTitle(String.format(stringResource(R.string.personal_welcome), userDisplayName), false) ChatHelpView() diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HiddenProfileView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HiddenProfileView.kt index 9a2862113f..75017d8478 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HiddenProfileView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/HiddenProfileView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionItemView import SectionItemViewSpaceBetween import SectionSpacer @@ -55,8 +56,7 @@ private fun HiddenProfileLayout( Column( Modifier .fillMaxWidth() - .verticalScroll(rememberScrollState()) - .padding(bottom = DEFAULT_BOTTOM_PADDING), + .verticalScroll(rememberScrollState()), ) { AppBarTitle(stringResource(R.string.hide_profile)) SectionView(padding = PaddingValues(start = 8.dp, end = DEFAULT_PADDING)) { @@ -81,5 +81,6 @@ private fun HiddenProfileLayout( } } SectionTextFooter(stringResource(R.string.to_reveal_profile_enter_password)) + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/IncognitoView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/IncognitoView.kt index 5f49b15091..e138805270 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/IncognitoView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/IncognitoView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import androidx.compose.foundation.* import androidx.compose.foundation.layout.* import androidx.compose.material.* @@ -31,6 +32,7 @@ fun IncognitoLayout() { Text(generalGetString(R.string.incognito_info_allows)) Text(generalGetString(R.string.incognito_info_share)) Text(generalGetString(R.string.incognito_info_find)) + SectionBottomSpacer() } } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/MarkdownHelpView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/MarkdownHelpView.kt index 6a09ba2447..eb9ab5a0ea 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/MarkdownHelpView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/MarkdownHelpView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import android.content.res.Configuration import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -58,6 +59,7 @@ fun MarkdownHelpView() { }) } } + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/NetworkAndServers.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/NetworkAndServers.kt index 0723fe5000..585cd1dcc5 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/NetworkAndServers.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/NetworkAndServers.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionCustomFooter import SectionDividerSpaced import SectionItemView @@ -159,8 +160,7 @@ fun NetworkAndServersView( updateSessionMode: (TransportSessionMode) -> Unit, ) { Column( - Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.Start, + Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), verticalArrangement = Arrangement.spacedBy(8.dp) ) { AppBarTitle(stringResource(R.string.network_and_servers)) @@ -178,11 +178,15 @@ fun NetworkAndServersView( } if (networkUseSocksProxy.value) { SectionCustomFooter { Text(annotatedStringResource(R.string.disable_onion_hosts_when_not_supported)) } + Divider(Modifier.padding(start = DEFAULT_PADDING_HALF, top = 32.dp, end = DEFAULT_PADDING_HALF, bottom = 30.dp)) + } else { + Divider(Modifier.padding(start = DEFAULT_PADDING_HALF, top = 24.dp, end = DEFAULT_PADDING_HALF, bottom = 30.dp)) } - SectionDividerSpaced() + SectionView(generalGetString(R.string.settings_section_title_calls)) { SettingsActionItem(Icons.Outlined.ElectricalServices, stringResource(R.string.webrtc_ice_servers), showModal { RTCServersView(it) }) } + SectionBottomSpacer() } } @@ -234,13 +238,9 @@ fun UseSocksProxySwitch( Text(stringResource(R.string.network_socks_toggle)) } } - Switch( + DefaultSwitch( checked = networkUseSocksProxy.value, onCheckedChange = toggleSocksProxy, - colors = SwitchDefaults.colors( - checkedThumbColor = MaterialTheme.colors.primary, - uncheckedThumbColor = HighOrLowlight - ), ) } } @@ -251,7 +251,6 @@ fun SockProxySettings(m: ChatModel) { Modifier .fillMaxWidth() .verticalScroll(rememberScrollState()) - .padding(bottom = DEFAULT_BOTTOM_PADDING), ) { val defaultHostPort = remember { "localhost:9050" } AppBarTitle(generalGetString(R.string.network_socks_proxy_settings)) @@ -317,6 +316,7 @@ fun SockProxySettings(m: ChatModel) { remember { derivedStateOf { !validPort(portUnsaved.value.text) } }.value ) } + SectionBottomSpacer() } } @@ -339,7 +339,6 @@ private fun UseOnionHosts( val onSelected = showModal { Column( Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.Start, ) { AppBarTitle(stringResource(R.string.network_use_onion_hosts)) SectionViewSelectable(null, onionHosts, values, useOnion) @@ -379,7 +378,6 @@ private fun SessionModePicker( onSelected = showModal { Column( Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.Start, ) { AppBarTitle(stringResource(R.string.network_session_mode_transport_isolation)) SectionViewSelectable(null, sessionMode, values, updateSessionMode) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/NotificationsSettingsView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/NotificationsSettingsView.kt index 414af16444..6d3190ab53 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/NotificationsSettingsView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/NotificationsSettingsView.kt @@ -1,9 +1,12 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionView import SectionViewSelectable import android.os.Build import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material.* import androidx.compose.runtime.* import androidx.compose.ui.Alignment @@ -76,8 +79,7 @@ fun NotificationsSettingsLayout( val previewModes = remember { notificationPreviewModes() } Column( - Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.Start, + Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), ) { AppBarTitle(stringResource(R.string.notifications)) SectionView(null) { @@ -98,6 +100,7 @@ fun NotificationsSettingsLayout( ) } } + SectionBottomSpacer() } } @@ -109,7 +112,6 @@ fun NotificationsModeView( val modes = remember { notificationModes() } Column( Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.Start, ) { AppBarTitle(stringResource(R.string.settings_notifications_mode_title).lowercase().capitalize(Locale.current)) SectionViewSelectable(null, notificationsMode, modes, onNotificationsModeSelected) @@ -124,7 +126,6 @@ fun NotificationPreviewView( val previewModes = remember { notificationPreviewModes() } Column( Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.Start, ) { AppBarTitle(stringResource(R.string.settings_notification_preview_title)) SectionViewSelectable(null, notificationPreviewMode, previewModes, onNotificationPreviewModeSelected) diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Preferences.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Preferences.kt index b123b0c64d..a8fe451c5e 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Preferences.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/Preferences.kt @@ -1,8 +1,8 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionDividerSpaced import SectionItemView -import SectionSpacer import SectionTextFooter import SectionView import androidx.compose.foundation.* @@ -11,7 +11,6 @@ import androidx.compose.material.MaterialTheme import androidx.compose.material.Text import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import chat.simplex.app.R @@ -61,34 +60,34 @@ private fun PreferencesLayout( ) { Column( Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), - horizontalAlignment = Alignment.Start, ) { AppBarTitle(stringResource(R.string.your_preferences)) val timedMessages = remember(preferences) { mutableStateOf(preferences.timedMessages.allow) } TimedMessagesFeatureSection(timedMessages) { applyPrefs(preferences.copy(timedMessages = TimedMessagesPreference(allow = if (it) FeatureAllowed.YES else FeatureAllowed.NO))) } - SectionDividerSpaced() + SectionDividerSpaced(true, maxBottomPadding = false) val allowFullDeletion = remember(preferences) { mutableStateOf(preferences.fullDelete.allow) } FeatureSection(ChatFeature.FullDelete, allowFullDeletion) { applyPrefs(preferences.copy(fullDelete = SimpleChatPreference(allow = it))) } - SectionDividerSpaced() + SectionDividerSpaced(true, maxBottomPadding = false) val allowVoice = remember(preferences) { mutableStateOf(preferences.voice.allow) } FeatureSection(ChatFeature.Voice, allowVoice) { applyPrefs(preferences.copy(voice = SimpleChatPreference(allow = it))) } - SectionDividerSpaced() + SectionDividerSpaced(true, maxBottomPadding = false) val allowCalls = remember(preferences) { mutableStateOf(preferences.calls.allow) } FeatureSection(ChatFeature.Calls, allowCalls) { applyPrefs(preferences.copy(calls = SimpleChatPreference(allow = it))) } - SectionDividerSpaced() + SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false) ResetSaveButtons( reset = reset, save = savePrefs, disabled = preferences == currentPreferences ) + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt index 48d730a3cc..da83185eb4 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/PrivacySettings.kt @@ -1,11 +1,14 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionDividerSpaced import SectionItemView import SectionTextFooter import SectionView import android.view.WindowManager import androidx.compose.foundation.layout.* +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll import androidx.compose.material.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.* @@ -41,8 +44,7 @@ fun PrivacySettingsView( setPerformLA: (Boolean, FragmentActivity) -> Unit ) { Column( - Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.Start + Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), ) { val simplexLinkMode = chatModel.controller.appPrefs.simplexLinkMode AppBarTitle(stringResource(R.string.your_privacy)) @@ -73,6 +75,7 @@ fun PrivacySettingsView( if (chatModel.simplexLinkMode.value == SimplexLinkMode.BROWSER) { SectionTextFooter(stringResource(R.string.simplex_link_mode_browser_warning)) } + SectionBottomSpacer() } } @@ -199,8 +202,7 @@ fun SimplexLockView( } Column( - Modifier.fillMaxWidth(), - horizontalAlignment = Alignment.Start + Modifier.fillMaxWidth().verticalScroll(rememberScrollState()), ) { AppBarTitle(stringResource(R.string.chat_lock)) SectionView { @@ -251,6 +253,7 @@ fun SimplexLockView( } } } + SectionBottomSpacer() } } @@ -264,13 +267,9 @@ private fun EnableLock(performLA: MutableState, onCheckedChange: (Boole .fillMaxWidth() .weight(1F) ) - Switch( + DefaultSwitch( checked = performLA.value, onCheckedChange = onCheckedChange, - colors = SwitchDefaults.colors( - checkedThumbColor = MaterialTheme.colors.primary, - uncheckedThumbColor = HighOrLowlight - ) ) } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/ProtocolServerView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/ProtocolServerView.kt index 519041c1fd..6a4d0927af 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/ProtocolServerView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/ProtocolServerView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionDividerSpaced import SectionItemView import SectionItemViewSpaceBetween @@ -81,7 +82,6 @@ private fun ProtocolServerLayout( Modifier .fillMaxWidth() .verticalScroll(rememberScrollState()) - .padding(bottom = DEFAULT_PADDING) ) { AppBarTitle(stringResource(if (server.preset) R.string.smp_servers_preset_server else R.string.smp_servers_your_server)) @@ -90,6 +90,7 @@ private fun ProtocolServerLayout( } else { CustomServer(testing, server, serverProtocol, testServer, onUpdate, onDelete) } + SectionBottomSpacer() } } @@ -113,7 +114,7 @@ private fun PresetServer( ) } } - SectionDividerSpaced() + SectionDividerSpaced(maxTopPadding = true) UseServerSection(true, testing, server, testServer, onUpdate, onDelete) } @@ -157,10 +158,9 @@ private fun CustomServer( if (valid.value) { SectionDividerSpaced() SectionView(stringResource(R.string.smp_servers_add_to_another_device).uppercase()) { - QRCode(serverAddress.value, Modifier.aspectRatio(1f)) + QRCode(serverAddress.value, Modifier.aspectRatio(1f).padding(horizontal = DEFAULT_PADDING)) } } - SectionSpacer() } @Composable diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/ProtocolServersView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/ProtocolServersView.kt index 019da7ecfa..562e830923 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/ProtocolServersView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/ProtocolServersView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionDividerSpaced import SectionItemView import SectionTextFooter @@ -193,7 +194,6 @@ private fun ProtocolServersLayout( Modifier .fillMaxWidth() .verticalScroll(rememberScrollState()) - .padding(bottom = DEFAULT_PADDING), ) { AppBarTitle(stringResource(if (serverProtocol == ServerProtocol.SMP) R.string.your_SMP_servers else R.string.your_XFTP_servers)) @@ -223,7 +223,7 @@ private fun ProtocolServersLayout( } } ) - SectionDividerSpaced() + SectionDividerSpaced(maxTopPadding = true, maxBottomPadding = false) SectionView { SectionItemView(resetServers, disabled = serversUnchanged) { Text(stringResource(R.string.reset_verb), color = if (!serversUnchanged) MaterialTheme.colors.onBackground else HighOrLowlight) @@ -236,10 +236,11 @@ private fun ProtocolServersLayout( Text(stringResource(R.string.smp_servers_save), color = if (!saveDisabled) MaterialTheme.colors.onBackground else HighOrLowlight) } } - SectionDividerSpaced() + SectionDividerSpaced(maxBottomPadding = false) SectionView { HowToButton() } + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/RTCServers.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/RTCServers.kt index 31a3dd58e8..32b03d5200 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/RTCServers.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/RTCServers.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionItemViewSpaceBetween import androidx.compose.runtime.Composable import androidx.compose.foundation.* @@ -102,18 +103,15 @@ fun RTCServersLayout( Column( Modifier .fillMaxWidth() + .verticalScroll(rememberScrollState()) .padding(horizontal = DEFAULT_PADDING), verticalArrangement = Arrangement.spacedBy(8.dp) ) { SectionItemViewSpaceBetween(padding = PaddingValues()) { Text(stringResource(R.string.configure_ICE_servers), Modifier.padding(end = 24.dp)) - Switch( + DefaultSwitch( checked = isUserRTCServers, onCheckedChange = isUserRTCServersOnOff, - colors = SwitchDefaults.colors( - checkedThumbColor = MaterialTheme.colors.primary, - uncheckedThumbColor = HighOrLowlight - ), ) } @@ -129,7 +127,7 @@ fun RTCServersLayout( horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { - Column(horizontalAlignment = Alignment.Start) { + Column { Row { Text( stringResource(R.string.cancel_verb), @@ -175,7 +173,7 @@ fun RTCServersLayout( horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { - Column(horizontalAlignment = Alignment.Start) { + Column { Text( stringResource(R.string.edit_verb), color = MaterialTheme.colors.primary, @@ -189,6 +187,7 @@ fun RTCServersLayout( } } } + SectionBottomSpacer() } } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt index f18bb1ca7e..c33117d9b0 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/SettingsView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionDividerSpaced import SectionItemView import SectionItemViewWithIcon @@ -139,13 +140,9 @@ fun SettingsLayout( ) { AppBarTitle(stringResource(R.string.your_settings)) - Spacer(Modifier.height(30.dp)) - SectionView(stringResource(R.string.settings_section_title_you)) { - SectionItemView(showCustomModal { chatModel, close -> UserProfileView(chatModel, close) }, 80.dp, disabled = stopped) { - Spacer(Modifier.width(2.dp)) + SectionItemView(showCustomModal { chatModel, close -> UserProfileView(chatModel, close) }, 80.dp, padding = PaddingValues(start = 16.dp, end = DEFAULT_PADDING), disabled = stopped) { ProfilePreview(profile, stopped = stopped) - Spacer(Modifier.width(2.dp)) } val profileHidden = rememberSaveable { mutableStateOf(false) } SettingsActionItem(Icons.Outlined.ManageAccounts, stringResource(R.string.your_chat_profiles), { withAuth { showSettingsModalWithSearch { it, search -> UserProfilesView(it, search, profileHidden) } } }, disabled = stopped, extraPadding = true) @@ -185,6 +182,7 @@ fun SettingsLayout( SettingsActionItem(Icons.Outlined.Code, stringResource(R.string.settings_developer_tools), showSettingsModal { DeveloperView(it, showCustomModal, withAuth) }, extraPadding = true) AppVersionItem(showVersion) } + SectionBottomSpacer() } } } @@ -362,8 +360,8 @@ fun ChatLockItem( @Composable fun ProfilePreview(profileOf: NamedChat, size: Dp = 60.dp, color: Color = MaterialTheme.colors.secondary, stopped: Boolean = false) { ProfileImage(size = size, image = profileOf.image, color = color) - Spacer(Modifier.padding(horizontal = DEFAULT_PADDING_HALF)) - Column { + Spacer(Modifier.padding(horizontal = 8.dp)) + Column(Modifier.height(size), verticalArrangement = Arrangement.Center) { Text( profileOf.displayName, style = MaterialTheme.typography.caption, @@ -372,12 +370,15 @@ fun ChatLockItem( maxLines = 1, overflow = TextOverflow.Ellipsis ) - Text( - profileOf.fullName, - color = if (stopped) HighOrLowlight else Color.Unspecified, - maxLines = 1, - overflow = TextOverflow.Ellipsis - ) + if (profileOf.fullName.isNotEmpty()) { + Text( + profileOf.fullName, + Modifier.padding(vertical = 5.dp), + color = if (stopped) HighOrLowlight else Color.Unspecified, + maxLines = 1, + overflow = TextOverflow.Ellipsis + ) + } } } @@ -395,7 +396,10 @@ fun SettingsActionItemWithContent(icon: ImageVector?, text: String? = null, clic SectionItemView( click, extraPadding = extraPadding, - padding = if (extraPadding && icon != null) PaddingValues(start = DEFAULT_PADDING * 2, end = DEFAULT_PADDING) else PaddingValues(horizontal = DEFAULT_PADDING), + padding = if (extraPadding && icon != null) + PaddingValues(start = DEFAULT_PADDING * 1.7f, end = DEFAULT_PADDING) + else + PaddingValues(horizontal = DEFAULT_PADDING), disabled = disabled ) { if (icon != null) { @@ -446,13 +450,9 @@ fun PreferenceToggle( onChange: (Boolean) -> Unit = {}, ) { SettingsActionItemWithContent(null, text, extraPadding = true,) { - Switch( + DefaultSwitch( checked = checked, onCheckedChange = onChange, - colors = SwitchDefaults.colors( - checkedThumbColor = MaterialTheme.colors.primary, - uncheckedThumbColor = HighOrLowlight - ) ) } } @@ -467,15 +467,11 @@ fun PreferenceToggleWithIcon( onChange: (Boolean) -> Unit = {}, ) { SettingsActionItemWithContent(icon, text, iconColor = iconColor ?: HighOrLowlight, extraPadding = extraPadding) { - Switch( + DefaultSwitch( checked = checked, onCheckedChange = { onChange(it) }, - colors = SwitchDefaults.colors( - checkedThumbColor = MaterialTheme.colors.primary, - uncheckedThumbColor = HighOrLowlight - ) ) } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserAddressView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserAddressView.kt index 7352fda18d..e848b5ecbf 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserAddressView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserAddressView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import android.content.res.Configuration import androidx.compose.foundation.layout.* import androidx.compose.foundation.rememberScrollState @@ -69,8 +70,6 @@ fun UserAddressLayout( ) { Column( Modifier.verticalScroll(rememberScrollState()), - horizontalAlignment = Alignment.Start, - verticalArrangement = Arrangement.Top ) { AppBarTitle(stringResource(R.string.your_contact_address), false) Text( @@ -110,6 +109,7 @@ fun UserAddressLayout( ) } } + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfileView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfileView.kt index b6310c3467..d480b194e1 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfileView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfileView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import android.content.res.Configuration import android.net.Uri import androidx.compose.foundation.* @@ -100,7 +101,6 @@ fun UserProfileLayout( Modifier .verticalScroll(scrollState) .padding(horizontal = DEFAULT_PADDING), - horizontalAlignment = Alignment.Start ) { AppBarTitle(stringResource(R.string.your_current_profile)) ReadableText(generalGetString(R.string.your_profile_is_stored_on_device_and_shared_only_with_contacts_simplex_cannot_see_it), TextAlign.Center) @@ -174,6 +174,7 @@ fun UserProfileLayout( } } } + SectionBottomSpacer() } } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt index 5587cecb30..2f3b606913 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/UserProfilesView.kt @@ -1,5 +1,6 @@ package chat.simplex.app.views.usersettings +import SectionBottomSpacer import SectionDivider import SectionItemView import SectionItemViewSpaceBetween @@ -157,7 +158,6 @@ private fun UserProfilesView( Modifier .fillMaxWidth() .verticalScroll(rememberScrollState()) - .padding(bottom = DEFAULT_PADDING), ) { if (profileHidden.value) { SectionView { @@ -197,6 +197,7 @@ private fun UserProfilesView( ) } } + SectionBottomSpacer() } } @@ -262,7 +263,6 @@ private fun ProfileActionView(action: UserProfileAction, user: User, doAction: ( Modifier .fillMaxWidth() .verticalScroll(rememberScrollState()) - .padding(bottom = DEFAULT_BOTTOM_PADDING), ) { val actionPassword = rememberSaveable { mutableStateOf("") } val passwordValid by remember { derivedStateOf { actionPassword.value == actionPassword.value.trim() } } @@ -300,6 +300,7 @@ private fun ProfileActionView(action: UserProfileAction, user: User, doAction: ( PasswordAndAction(R.string.unhide_chat_profile) } } + SectionBottomSpacer() } } diff --git a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/VersionInfoView.kt b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/VersionInfoView.kt index 64a541a3a8..eb3f061667 100644 --- a/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/VersionInfoView.kt +++ b/apps/android/app/src/main/java/chat/simplex/app/views/usersettings/VersionInfoView.kt @@ -17,7 +17,6 @@ import chat.simplex.app.views.helpers.AppBarTitle fun VersionInfoView(info: CoreVersionInfo) { Column( Modifier.padding(horizontal = DEFAULT_PADDING), - horizontalAlignment = Alignment.Start ) { AppBarTitle(stringResource(R.string.app_version_title), false) Text(String.format(stringResource(R.string.app_version_name), BuildConfig.VERSION_NAME))