From dc7819b68c9758b99ca0c5f70cab613483d5b10e Mon Sep 17 00:00:00 2001 From: SessionHero01 <180888785+SessionHero01@users.noreply.github.com> Date: Mon, 22 Sep 2025 09:44:04 +0800 Subject: [PATCH 01/12] Bump version to 1.28.0 --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d07e678abf..8ec1aa7156 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -26,8 +26,8 @@ configurations.configureEach { exclude(module = "commons-logging") } -val canonicalVersionCode = 419 -val canonicalVersionName = "1.27.1" +val canonicalVersionCode = 420 +val canonicalVersionName = "1.28.0" val postFixSize = 10 val abiPostFix = mapOf( From b4a40313dac17e1804498754a3ba3dab89e68aad Mon Sep 17 00:00:00 2001 From: SessionHero01 <180888785+SessionHero01@users.noreply.github.com> Date: Mon, 22 Sep 2025 13:38:07 +1000 Subject: [PATCH 02/12] [SES-3869] - Fix community blind request issues (#1526) * Fixed block community request not updated * Fixed name missing after community blind request is accepted --- .../messages/ProfileUpdateHandler.kt | 3 +++ .../MessageRequestResponseHandler.kt | 20 +++++++++++-------- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/session/libsession/messaging/messages/ProfileUpdateHandler.kt b/app/src/main/java/org/session/libsession/messaging/messages/ProfileUpdateHandler.kt index b827c385c1..bddd26a0e5 100644 --- a/app/src/main/java/org/session/libsession/messaging/messages/ProfileUpdateHandler.kt +++ b/app/src/main/java/org/session/libsession/messaging/messages/ProfileUpdateHandler.kt @@ -123,6 +123,9 @@ class ProfileUpdateHandler @Inject constructor( profilePic = updates.pic ?: r.profilePic, blocksCommunityMessagesRequests = updates.blocksCommunityMessageRequests ?: r.blocksCommunityMessagesRequests ) + } else if (updates.blocksCommunityMessageRequests != null && + r.blocksCommunityMessagesRequests != updates.blocksCommunityMessageRequests) { + r.copy(blocksCommunityMessagesRequests = updates.blocksCommunityMessageRequests) } else { r } diff --git a/app/src/main/java/org/session/libsession/messaging/sending_receiving/MessageRequestResponseHandler.kt b/app/src/main/java/org/session/libsession/messaging/sending_receiving/MessageRequestResponseHandler.kt index 43587724d2..73e2872a5c 100644 --- a/app/src/main/java/org/session/libsession/messaging/sending_receiving/MessageRequestResponseHandler.kt +++ b/app/src/main/java/org/session/libsession/messaging/sending_receiving/MessageRequestResponseHandler.kt @@ -60,6 +60,18 @@ class MessageRequestResponseHandler @Inject constructor( !messageSender.isSelf && messageReceiver.isSelf -> { // We received a request response from another user. + // Mark the sender as "approvedMe". + // This process MUST be done before trying to update the profile, + // as profile updating requires the contact to exist + val didApproveMe = configFactory.withMutableUserConfigs { configs -> + configs.contacts.upsertContact(messageSender.address) { + val oldApproveMe = approvedMe + approvedMe = true + oldApproveMe + } + } + + // Process the profile update if any message.profile?.toUpdates()?.let { updates -> profileUpdateHandler.get().handleProfileUpdate( @@ -69,14 +81,6 @@ class MessageRequestResponseHandler @Inject constructor( ) } - // Mark the sender as "approvedMe" - val didApproveMe = configFactory.withMutableUserConfigs { configs -> - configs.contacts.upsertContact(messageSender.address) { - val oldApproveMe = approvedMe - approvedMe = true - oldApproveMe - } - } val threadId by lazy { threadDatabase.getOrCreateThreadIdFor(messageSender.address) From 059f4b675632f3b29f09a64a4205a71ccd452a22 Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Mon, 22 Sep 2025 14:38:03 +1000 Subject: [PATCH 03/12] Rectifying dimension changes --- .../home/startconversation/home/StartConversation.kt | 4 ++++ .../preferences/prosettings/ProSettingsHomeScreen.kt | 4 +++- app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt | 4 ++-- .../java/org/thoughtcrime/securesms/ui/theme/Dimensions.kt | 2 +- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/home/startconversation/home/StartConversation.kt b/app/src/main/java/org/thoughtcrime/securesms/home/startconversation/home/StartConversation.kt index 5fe2aaba9c..06b0e89c2d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/home/startconversation/home/StartConversation.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/home/startconversation/home/StartConversation.kt @@ -74,6 +74,7 @@ internal fun StartConversationScreen( text = annotatedStringResource(newMessageTitleTxt), textStyle = LocalType.current.xl, iconRes = R.drawable.ic_message_square, + iconSize = LocalDimensions.current.iconMedium2, modifier = Modifier.qaTag(R.string.AccessibilityId_messageNew), onClick = { navigateTo(StartConversationDestination.NewMessage) @@ -89,6 +90,7 @@ internal fun StartConversationScreen( text = annotatedStringResource(R.string.groupCreate), textStyle = LocalType.current.xl, iconRes = R.drawable.ic_users_group_custom, + iconSize = LocalDimensions.current.iconMedium2, modifier = Modifier.qaTag(R.string.AccessibilityId_groupCreate), onClick = { navigateTo(StartConversationDestination.CreateGroup) @@ -104,6 +106,7 @@ internal fun StartConversationScreen( text = annotatedStringResource(R.string.communityJoin), textStyle = LocalType.current.xl, iconRes = R.drawable.ic_globe, + iconSize = LocalDimensions.current.iconMedium2, modifier = Modifier.qaTag(R.string.AccessibilityId_communityJoin), onClick = { navigateTo(StartConversationDestination.JoinCommunity) @@ -119,6 +122,7 @@ internal fun StartConversationScreen( text = annotatedStringResource(R.string.sessionInviteAFriend), textStyle = LocalType.current.xl, iconRes = R.drawable.ic_user_round_plus, + iconSize = LocalDimensions.current.iconMedium2, modifier = Modifier.qaTag(R.string.AccessibilityId_sessionInviteAFriendButton), onClick = { navigateTo(StartConversationDestination.InviteFriend) diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/prosettings/ProSettingsHomeScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/prosettings/ProSettingsHomeScreen.kt index 4a9a939d34..5c18b8a783 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/prosettings/ProSettingsHomeScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/prosettings/ProSettingsHomeScreen.kt @@ -254,6 +254,7 @@ fun ProStats( verticalArrangement = Arrangement.spacedBy(LocalDimensions.current.smallSpacing) ){ Row( + verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(LocalDimensions.current.xsSpacing) ) { // groups updated @@ -281,6 +282,7 @@ fun ProStats( } Row( + verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.spacedBy(LocalDimensions.current.xsSpacing) ) { // Pro Badges @@ -324,7 +326,7 @@ fun ProStatItem( Image( painter = painterResource(id = icon), contentDescription = null, - modifier = Modifier.size(LocalDimensions.current.iconRowItem), + modifier = Modifier.size(LocalDimensions.current.iconMedium2), colorFilter = ColorFilter.tint(LocalColors.current.accent) ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt index 5088037aa9..6829dc7ef4 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/ui/Components.kt @@ -264,7 +264,7 @@ fun ItemButton( modifier: Modifier = Modifier, textStyle: TextStyle = LocalType.current.h8, iconTint: Color? = null, - iconSize: Dp = LocalDimensions.current.iconRowItem, + iconSize: Dp = LocalDimensions.current.iconMedium, subtitle: String? = null, @StringRes subtitleQaTag: Int? = null, enabled: Boolean = true, @@ -1058,7 +1058,7 @@ fun IconActionRowItem( textStyle: TextStyle = LocalType.current.h8, subtitleStyle: TextStyle = LocalType.current.small, iconColor: Color = LocalColors.current.text, - iconSize: Dp = LocalDimensions.current.iconRowItem, + iconSize: Dp = LocalDimensions.current.iconMedium, minHeight: Dp = LocalDimensions.current.minItemButtonHeight, paddingValues: PaddingValues = PaddingValues(horizontal = LocalDimensions.current.smallSpacing), ){ diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/theme/Dimensions.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/theme/Dimensions.kt index feca5bc890..745c8aff84 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ui/theme/Dimensions.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/ui/theme/Dimensions.kt @@ -32,7 +32,7 @@ data class Dimensions( val iconSmall: Dp = 20.dp, val iconMedium: Dp = 24.dp, val iconMediumAvatar: Dp = 26.dp, - val iconRowItem: Dp = 24.dp, + val iconMedium2: Dp = 32.dp, val iconLargeAvatar: Dp = 36.dp, val iconLarge: Dp = 46.dp, val iconXLarge: Dp = 60.dp, From b377640bb221c9897abf7975a32c8440acf67f10 Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Mon, 22 Sep 2025 14:49:10 +1000 Subject: [PATCH 04/12] SES-4619 - Special case of disabled color for buttons on bg secondary --- .../startconversation/community/JoinCommunityScreen.kt | 1 + .../home/startconversation/newmessage/NewMessage.kt | 1 + .../org/thoughtcrime/securesms/ui/components/Button.kt | 9 +++++++-- .../thoughtcrime/securesms/ui/components/ButtonType.kt | 7 ++++--- 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/home/startconversation/community/JoinCommunityScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/home/startconversation/community/JoinCommunityScreen.kt index adbdfe7570..34caae50a9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/home/startconversation/community/JoinCommunityScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/home/startconversation/community/JoinCommunityScreen.kt @@ -183,6 +183,7 @@ private fun CommunityScreen( .fillMaxWidth() .qaTag(R.string.AccessibilityId_communityJoin), enabled = state.isJoinButtonEnabled, + disabledColor = LocalColors.current.textSecondary, onClick = { sendCommand(JoinCommunityViewModel.Commands.JoinCommunity( state.communityUrl diff --git a/app/src/main/java/org/thoughtcrime/securesms/home/startconversation/newmessage/NewMessage.kt b/app/src/main/java/org/thoughtcrime/securesms/home/startconversation/newmessage/NewMessage.kt index d4f7d604c3..cf0cff108b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/home/startconversation/newmessage/NewMessage.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/home/startconversation/newmessage/NewMessage.kt @@ -139,6 +139,7 @@ private fun EnterAccountId( .fillMaxWidth() .qaTag(R.string.next), enabled = state.isNextButtonEnabled, + disabledColor = LocalColors.current.textSecondary, onClick = callbacks::onContinue ) { LoadingArcOr(state.loading) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/components/Button.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/components/Button.kt index 1b9f8863a6..2929b24e1b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ui/components/Button.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/ui/components/Button.kt @@ -162,8 +162,13 @@ fun Button( Button(text, onClick, ButtonType.Outline(LocalColors.current.accentText), modifier, enabled, minWidth = minWidth) } -@Composable fun AccentOutlineButton(modifier: Modifier = Modifier, enabled: Boolean = true, onClick: () -> Unit, content: @Composable RowScope.() -> Unit) { - Button(onClick, ButtonType.Outline(LocalColors.current.accentText), modifier, enabled, content = content) +@Composable fun AccentOutlineButton(modifier: Modifier = Modifier, enabled: Boolean = true, + disabledColor: Color = LocalColors.current.disabled, + onClick: () -> Unit, content: @Composable RowScope.() -> Unit) { + Button(onClick, ButtonType.Outline( + contentColor = LocalColors.current.accentText, + disabledColor = disabledColor + ), modifier, enabled, content = content) } @Composable fun SlimOutlineButton(modifier: Modifier = Modifier, color: Color = LocalColors.current.text, enabled: Boolean = true, onClick: () -> Unit, content: @Composable RowScope.() -> Unit) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/components/ButtonType.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/components/ButtonType.kt index 532cd45994..3306511ce5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ui/components/ButtonType.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/ui/components/ButtonType.kt @@ -26,18 +26,19 @@ interface ButtonType { class Outline( private val contentColor: Color, - private val borderColor: Color = contentColor + private val borderColor: Color = contentColor, + private val disabledColor: Color? = null ): ButtonType { @Composable override fun border(enabled: Boolean) = BorderStroke( width = LocalDimensions.current.borderStroke, - color = if (enabled) borderColor else LocalColors.current.disabled + color = if (enabled) borderColor else disabledColor ?: LocalColors.current.disabled ) @Composable override fun buttonColors() = ButtonDefaults.buttonColors( contentColor = contentColor, containerColor = Color.Transparent, - disabledContentColor = LocalColors.current.disabled, + disabledContentColor = disabledColor ?: LocalColors.current.disabled, disabledContainerColor = Color.Transparent ) } From a507d2ffca8288e456cfd6cdfb3e240ef317eee5 Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Mon, 22 Sep 2025 15:19:59 +1000 Subject: [PATCH 05/12] SES-4620 - setting our system bars to match our themes' light/dark value --- .../securesms/ui/components/BottomSheets.kt | 23 ++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/components/BottomSheets.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/components/BottomSheets.kt index ee08945b9e..88bec24042 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ui/components/BottomSheets.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/ui/components/BottomSheets.kt @@ -20,13 +20,17 @@ import androidx.compose.material3.Text import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.material3.rememberStandardBottomSheetState import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect import androidx.compose.ui.Alignment.Companion.CenterVertically import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalView import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter +import androidx.compose.ui.window.DialogWindowProvider +import androidx.core.view.WindowCompat import network.loki.messenger.R import org.thoughtcrime.securesms.ui.qaTag import org.thoughtcrime.securesms.ui.theme.LocalColors @@ -58,9 +62,22 @@ fun BaseBottomSheet( topEnd = LocalDimensions.current.xsSpacing ), dragHandle = dragHandle, - containerColor = LocalColors.current.backgroundSecondary, - content = content - ) + containerColor = LocalColors.current.backgroundSecondary + ){ + // make sure the status and navigation bars follow our theme color's light vs dark + val view = LocalView.current + val isLight = LocalColors.current.isLight + (view.parent as? DialogWindowProvider)?.window?.let { window -> + SideEffect { + // Set status bar color + WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = isLight + // Set navigation bar color + WindowCompat.getInsetsController(window, view).isAppearanceLightNavigationBars = isLight + } + } + + content() + } } From a2f2f16f6e6df61cefffc26f4dbbd851652c6798 Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Mon, 22 Sep 2025 15:40:48 +1000 Subject: [PATCH 06/12] SES-4620 - better sheet theme handling --- .../securesms/ui/components/BottomSheets.kt | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/components/BottomSheets.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/components/BottomSheets.kt index 88bec24042..0b7886b747 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ui/components/BottomSheets.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/ui/components/BottomSheets.kt @@ -1,5 +1,8 @@ package org.thoughtcrime.securesms.ui.components +import android.app.Activity +import android.graphics.Color +import android.os.Build import androidx.annotation.DrawableRes import androidx.annotation.StringRes import androidx.compose.foundation.clickable @@ -20,6 +23,7 @@ import androidx.compose.material3.Text import androidx.compose.material3.rememberModalBottomSheetState import androidx.compose.material3.rememberStandardBottomSheetState import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.SideEffect import androidx.compose.ui.Alignment.Companion.CenterVertically import androidx.compose.ui.Modifier @@ -67,12 +71,20 @@ fun BaseBottomSheet( // make sure the status and navigation bars follow our theme color's light vs dark val view = LocalView.current val isLight = LocalColors.current.isLight - (view.parent as? DialogWindowProvider)?.window?.let { window -> - SideEffect { + + DisposableEffect(Unit) { + val window = (view.parent as? DialogWindowProvider)?.window + if (window != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + val prev = window.isNavigationBarContrastEnforced + window.isNavigationBarContrastEnforced = false // Set status bar color WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = isLight // Set navigation bar color WindowCompat.getInsetsController(window, view).isAppearanceLightNavigationBars = isLight + + onDispose { window.isNavigationBarContrastEnforced = prev } + } else { + onDispose { } } } From 27a9ea9a8168c6dcc7c05111b75e0a3b723b1d72 Mon Sep 17 00:00:00 2001 From: jbsession Date: Mon, 22 Sep 2025 14:05:48 +0800 Subject: [PATCH 07/12] SES-4614 : Read More Indicator Appears Erroneously (#1525) --- .../org/session/libsession/utilities/ViewUtils.kt | 11 ++--------- .../v2/messages/VisibleMessageContentView.kt | 6 +----- 2 files changed, 3 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/org/session/libsession/utilities/ViewUtils.kt b/app/src/main/java/org/session/libsession/utilities/ViewUtils.kt index 6f2379cd99..ba2bbb4c03 100644 --- a/app/src/main/java/org/session/libsession/utilities/ViewUtils.kt +++ b/app/src/main/java/org/session/libsession/utilities/ViewUtils.kt @@ -34,14 +34,7 @@ fun TextView.needsCollapsing( availableWidthPx: Int, maxLines: Int ): Boolean { - // Pick the width the TextView will actually respect before draw - val rawWidth = when { - measuredWidth > 0 -> measuredWidth - // if maxWidth is set, we check it - maxWidth in 1 until Int.MAX_VALUE -> minOf(availableWidthPx, maxWidth) - else -> availableWidthPx - } - val contentWidth = (rawWidth - paddingLeft - paddingRight).coerceAtLeast(0) + val contentWidth = (availableWidthPx - paddingLeft - paddingRight).coerceAtLeast(0) if (contentWidth <= 0 || text.isNullOrEmpty()) return false val textForLayout = transformationMethod?.getTransformation(text, this) ?: text @@ -67,7 +60,7 @@ fun TextView.needsCollapsing( .setAlignment(alignment) .setTextDirection(direction) .setMaxLines(maxLines) // cap at maxLines - .setEllipsize(ellipsize ?: TextUtils.TruncateAt.END) // compute ellipsis + .setEllipsize(ellipsize) // compute ellipsis builder.setJustificationMode(justificationMode) diff --git a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt index d65001d297..aa066227b0 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/conversation/v2/messages/VisibleMessageContentView.kt @@ -356,13 +356,9 @@ class VisibleMessageContentView : ConstraintLayout { } } - val widthCap = binding.bodyTextView.maxWidth - .takeIf { it > 0 && it < Int.MAX_VALUE } - ?: resources.getDimensionPixelSize(R.dimen.max_bubble_width) - // if the text was already manually expanded, we can skip this logic if(!isTextExpanded && binding.bodyTextView.needsCollapsing( - availableWidthPx = widthCap, + availableWidthPx = binding.bodyTextView.maxWidth, maxLines = MAX_COLLAPSED_LINE_COUNT) ){ // show the "Read mode" button From 01618d4258bd17fd506ace6746afb8f47829687a Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Mon, 22 Sep 2025 16:07:37 +1000 Subject: [PATCH 08/12] SES-4616 - removing bad dimming in activity transitions --- .../org/thoughtcrime/securesms/ui/components/BottomSheets.kt | 2 +- app/src/main/res/values/themes.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/components/BottomSheets.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/components/BottomSheets.kt index 0b7886b747..1cfb7701cb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ui/components/BottomSheets.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/ui/components/BottomSheets.kt @@ -81,7 +81,7 @@ fun BaseBottomSheet( WindowCompat.getInsetsController(window, view).isAppearanceLightStatusBars = isLight // Set navigation bar color WindowCompat.getInsetsController(window, view).isAppearanceLightNavigationBars = isLight - + onDispose { window.isNavigationBarContrastEnforced = prev } } else { onDispose { } diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index f2911f726b..0985e4898f 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -16,8 +16,8 @@ @color/gray50 ?colorPrimary @style/Theme.Session.BottomSheet - true - 0.6 + false + 0 @dimen/dialog_corner_radius @style/ThemeOverlay.Session.AlertDialog @style/ThemeOverlay.Session.AlertDialog From 59374ed6aea18a651810b3b20f3b5a8d51ef7875 Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Mon, 22 Sep 2025 16:33:48 +1000 Subject: [PATCH 09/12] SES-4550 - re-using existing logic for inline pro icon --- .../securesms/preferences/SettingsScreen.kt | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsScreen.kt index 7e6057cd7a..0fed5225aa 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsScreen.kt @@ -59,12 +59,14 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp import com.bumptech.glide.integration.compose.ExperimentalGlideComposeApi import com.bumptech.glide.integration.compose.GlideImage import network.loki.messenger.BuildConfig import network.loki.messenger.R import org.session.libsession.utilities.NonTranslatableStringConstants import org.session.libsession.utilities.NonTranslatableStringConstants.NETWORK_NAME +import org.thoughtcrime.securesms.conversation.v2.settings.ConversationSettingsViewModel.Commands.ShowProBadgeCTA import org.thoughtcrime.securesms.debugmenu.DebugActivity import org.thoughtcrime.securesms.home.PathActivity import org.thoughtcrime.securesms.messagerequests.MessageRequestsActivity @@ -107,6 +109,7 @@ import org.thoughtcrime.securesms.ui.ProBadgeText import org.thoughtcrime.securesms.ui.RadioOption import org.thoughtcrime.securesms.ui.components.AcccentOutlineCopyButton import org.thoughtcrime.securesms.ui.components.AccentOutlineButton +import org.thoughtcrime.securesms.ui.components.AnnotatedTextWithIcon import org.thoughtcrime.securesms.ui.components.AppBarCloseIcon import org.thoughtcrime.securesms.ui.components.Avatar import org.thoughtcrime.securesms.ui.components.BaseBottomSheet @@ -116,6 +119,7 @@ import org.thoughtcrime.securesms.ui.components.SessionOutlinedTextField import org.thoughtcrime.securesms.ui.components.SmallCircularProgressIndicator import org.thoughtcrime.securesms.ui.components.annotatedStringResource import org.thoughtcrime.securesms.ui.qaTag +import org.thoughtcrime.securesms.ui.safeContentWidth import org.thoughtcrime.securesms.ui.theme.LocalColors import org.thoughtcrime.securesms.ui.theme.LocalDimensions import org.thoughtcrime.securesms.ui.theme.LocalType @@ -252,8 +256,10 @@ fun Settings( Spacer(modifier = Modifier.height(LocalDimensions.current.spacing)) // name - ProBadgeText( + AnnotatedTextWithIcon( modifier = Modifier.qaTag(R.string.AccessibilityId_displayName) + .fillMaxWidth() + .safeContentWidth() .clickable( interactionSource = remember { MutableInteractionSource() }, indication = null @@ -261,7 +267,10 @@ fun Settings( sendCommand(ShowUsernameDialog) }, text = uiState.username, - showBadge = uiState.showProBadge, + iconRes = if(uiState.showProBadge) R.drawable.ic_pro_badge else null, + onIconClick = null, + iconSize = 58.sp to 24.sp, + style = LocalType.current.h5, ) Spacer(modifier = Modifier.height(LocalDimensions.current.smallSpacing)) From 21b6a344075dcf013ea980bfab3730d021c4ba81 Mon Sep 17 00:00:00 2001 From: ThomasSession Date: Mon, 22 Sep 2025 16:53:56 +1000 Subject: [PATCH 10/12] cleaning up the annotated text with icon --- .../org/thoughtcrime/securesms/preferences/SettingsScreen.kt | 3 +-- .../main/java/org/thoughtcrime/securesms/ui/components/Text.kt | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsScreen.kt b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsScreen.kt index 0fed5225aa..34f97504f5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsScreen.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/preferences/SettingsScreen.kt @@ -66,7 +66,6 @@ import network.loki.messenger.BuildConfig import network.loki.messenger.R import org.session.libsession.utilities.NonTranslatableStringConstants import org.session.libsession.utilities.NonTranslatableStringConstants.NETWORK_NAME -import org.thoughtcrime.securesms.conversation.v2.settings.ConversationSettingsViewModel.Commands.ShowProBadgeCTA import org.thoughtcrime.securesms.debugmenu.DebugActivity import org.thoughtcrime.securesms.home.PathActivity import org.thoughtcrime.securesms.messagerequests.MessageRequestsActivity @@ -269,7 +268,7 @@ fun Settings( text = uiState.username, iconRes = if(uiState.showProBadge) R.drawable.ic_pro_badge else null, onIconClick = null, - iconSize = 58.sp to 24.sp, + iconSize = 53.sp to 24.sp, style = LocalType.current.h5, ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/ui/components/Text.kt b/app/src/main/java/org/thoughtcrime/securesms/ui/components/Text.kt index 45d8bfa897..d72b704dc9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ui/components/Text.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/ui/components/Text.kt @@ -259,7 +259,7 @@ fun AnnotatedTextWithIcon( style: TextStyle = LocalType.current.base, color: Color = Color.Unspecified, iconSize: Pair = 12.sp to 12.sp, - iconPaddingValues: PaddingValues = PaddingValues(1.dp), + iconPaddingValues: PaddingValues = PaddingValues(start = style.lineHeight.value.dp * 0.2f), onIconClick: (() -> Unit)? = null ) { var inlineContent: Map = mapOf() From c5f3eba3645e2fcee2a87abce122b5797a26d795 Mon Sep 17 00:00:00 2001 From: SessionHero01 <180888785+SessionHero01@users.noreply.github.com> Date: Mon, 22 Sep 2025 17:30:34 +1000 Subject: [PATCH 11/12] [SES-3869] Fixed blinded contacts not deleted after accepting blind requests (#1530) * Fixed blinded contacts not deleted after accepting blind requests * Only update once --- .../MessageRequestResponseHandler.kt | 20 +++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/session/libsession/messaging/sending_receiving/MessageRequestResponseHandler.kt b/app/src/main/java/org/session/libsession/messaging/sending_receiving/MessageRequestResponseHandler.kt index 73e2872a5c..c77b955891 100644 --- a/app/src/main/java/org/session/libsession/messaging/sending_receiving/MessageRequestResponseHandler.kt +++ b/app/src/main/java/org/session/libsession/messaging/sending_receiving/MessageRequestResponseHandler.kt @@ -128,16 +128,24 @@ class MessageRequestResponseHandler @Inject constructor( moveConversation(fromThreadId = blindedThreadId, toThreadId = threadId) } - // If we ever have any blinded conversations with this sender, we should make - // sure we have set "approved" to true for them, because when we started the blinded - // conversation, we didn't know their real standard addresses, so we didn't say - // we have approved them, but now that we do, we need to approve them. - if (existingBlindedThreadIDs.isNotEmpty()) { - configFactory.withMutableUserConfigs { configs -> + configFactory.withMutableUserConfigs { configs -> + // If we ever have any blinded conversations with this sender, we should make + // sure we have set "approved" to true for them, because when we started the blinded + // conversation, we didn't know their real standard addresses, so we didn't say + // we have approved them, but now that we do, we need to approve them. + if (existingBlindedThreadIDs.isNotEmpty()) { configs.contacts.updateContact(messageSender.address) { approved = true } } + + // Also remove all blinded contacts + for (address in blindedConversationAddresses) { + configs.contacts.eraseBlinded( + communityServerUrl = address.serverUrl, + blindedId = address.blindedId.address + ) + } } } From 53d34e22b72992c2aa51d68514a8544752757064 Mon Sep 17 00:00:00 2001 From: SessionHero01 <180888785+SessionHero01@users.noreply.github.com> Date: Mon, 22 Sep 2025 17:47:03 +1000 Subject: [PATCH 12/12] Fix user profile update issue (#1529) * Fixed profile name/pic not stored when creating a contact * Revert "Fixed profile name/pic not stored when creating a contact" This reverts commit 8c07cec6f7ea46eca8358fd191551959e79cf4c7. * Fixed profile name/pic not stored when creating a contact --- .../libsession/messaging/messages/ProfileUpdateHandler.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/org/session/libsession/messaging/messages/ProfileUpdateHandler.kt b/app/src/main/java/org/session/libsession/messaging/messages/ProfileUpdateHandler.kt index bddd26a0e5..1ac62e171e 100644 --- a/app/src/main/java/org/session/libsession/messaging/messages/ProfileUpdateHandler.kt +++ b/app/src/main/java/org/session/libsession/messaging/messages/ProfileUpdateHandler.kt @@ -143,8 +143,11 @@ class ProfileUpdateHandler @Inject constructor( lastUpdated: Instant?, newUpdateTime: Instant? ): Boolean { - return (lastUpdated == null && newUpdateTime == null) || - (newUpdateTime != null && lastUpdated != null && newUpdateTime > lastUpdated) + val lastUpdatedTimestamp = lastUpdated?.toEpochSeconds() ?: 0L + val newUpdateTimestamp = newUpdateTime?.toEpochSeconds() ?: 0L + + return (lastUpdatedTimestamp == 0L && newUpdateTimestamp == 0L) || + (newUpdateTimestamp > lastUpdatedTimestamp) } class Updates private constructor(