diff --git a/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift b/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift
index da15ab98a5..d9db16b559 100644
--- a/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift
+++ b/apps/ios/Shared/Views/Chat/Group/GroupPreferencesView.swift
@@ -50,8 +50,21 @@ struct GroupPreferencesView: View {
featureSection(.history, $preferences.history.enable)
featureSection(.support, $preferences.support.enable, disabled: true)
} else {
- // hidden until message signing is user-facing (recipient-only stage)
-// featureSection(.signMessages, $preferences.signMessages.enable)
+ featureSection(.signMessages, $preferences.signMessages.enable)
+ .onChange(of: preferences.signMessages.enable) { enable in
+ if enable == .on {
+ showAlert(
+ NSLocalizedString("Sign messages?", comment: "alert title"),
+ message: NSLocalizedString("Messages sent before will show \"signature missing\" to subscribers who join later.", comment: "alert message"),
+ actions: {[
+ UIAlertAction(title: NSLocalizedString("Enable", comment: "alert button"), style: .default) { _ in },
+ UIAlertAction(title: NSLocalizedString("Cancel", comment: "alert button"), style: .cancel) { _ in
+ preferences.signMessages.enable = .off
+ }
+ ]}
+ )
+ }
+ }
featureSection(.timedMessages, $preferences.timedMessages.enable)
featureSection(.fullDelete, $preferences.fullDelete.enable)
featureSection(.reactions, $preferences.reactions.enable)
diff --git a/apps/ios/SimpleXChat/ChatTypes.swift b/apps/ios/SimpleXChat/ChatTypes.swift
index c77811f969..68300193d5 100644
--- a/apps/ios/SimpleXChat/ChatTypes.swift
+++ b/apps/ios/SimpleXChat/ChatTypes.swift
@@ -3158,7 +3158,7 @@ public enum MsgVerified: Decodable, Equatable, Hashable {
switch self {
case .sigMissing: return (
NSLocalizedString("Signature missing", comment: "alert title"),
- NSLocalizedString("The channel required this message to be signed, but the signature is missing.", comment: "alert message")
+ NSLocalizedString("This channel requires signed messages, but this message has no signature. It may have been sent before signing was required, or a relay may have forwarded it without one.", comment: "alert message")
)
default: return nil
}
diff --git a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt
index bd3af10c37..2be256d074 100644
--- a/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt
+++ b/apps/multiplatform/common/src/commonMain/kotlin/chat/simplex/common/views/chat/group/GroupPreferences.kt
@@ -178,10 +178,14 @@ private fun GroupPreferencesLayout(
}
}
}
- @Composable fun SignMessagesPreference() {
+ @Composable fun SignMessagesPreference(onEnable: ((() -> Unit) -> Unit)? = null) {
val enableSignMessages = remember(preferences) { mutableStateOf(preferences.signMessages.enable) }
FeatureSection(GroupFeature.SignMessages, enableSignMessages, null, groupInfo, preferences, onTTLUpdated) { enable, _ ->
applyPrefs(preferences.copy(signMessages = GroupPreference(enable = enable)))
+ if (enable == GroupFeatureEnabled.ON) onEnable?.invoke {
+ enableSignMessages.value = GroupFeatureEnabled.OFF
+ applyPrefs(preferences.copy(signMessages = GroupPreference(enable = GroupFeatureEnabled.OFF)))
+ }
}
}
ColumnWithScrollBar {
@@ -216,9 +220,16 @@ private fun GroupPreferencesLayout(
SectionDividerSpaced()
SupportPreference(disabled = true)
} else {
- // hidden until message signing is user-facing (recipient-only stage)
-// SignMessagesPreference()
-// SectionDividerSpaced()
+ SignMessagesPreference(onEnable = { revert ->
+ AlertManager.shared.showAlertDialog(
+ title = generalGetString(MR.strings.sign_messages_question),
+ text = generalGetString(MR.strings.sign_messages_alert_desc),
+ confirmText = generalGetString(MR.strings.sign_messages_enable),
+ onDismiss = revert,
+ onDismissRequest = revert,
+ )
+ })
+ SectionDividerSpaced()
TimedMessagesPreference()
SectionDividerSpaced()
FullDeletePreference()
diff --git a/apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml b/apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml
index cd80492607..793d72244b 100644
--- a/apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml
+++ b/apps/multiplatform/common/src/commonMain/moko-resources/base/strings.xml
@@ -787,10 +787,13 @@
Do not require signing messages.
Message signing is required.
Message signing is not required.
+ Sign messages?
+ Messages sent before will show "signature missing" to subscribers who join later.
+ Enable
Show signature
Show encryption
Signature missing
- The channel required this message to be signed, but the signature is missing.
+ This channel requires signed messages, but this message has no signature. It may have been sent before signing was required, or a relay may have forwarded it without one.
Live message!
Send a live message - it will update for the recipient(s) as you type it
Send