ios: show chat previews & save last draft toggles (#2940)
* ios: show chat previews & save last draft toggles * better view, toggle name --------- Co-authored-by: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com>
This commit is contained in:
parent
6cf9f0303b
commit
a5940962c7
@ -255,6 +255,8 @@ struct ComposeView: View {
|
|||||||
// this is a workaround to fire an explicit event in certain cases
|
// this is a workaround to fire an explicit event in certain cases
|
||||||
@State private var stopPlayback: Bool = false
|
@State private var stopPlayback: Bool = false
|
||||||
|
|
||||||
|
@AppStorage(DEFAULT_PRIVACY_SAVE_LAST_DRAFT) private var saveLastDraft = true
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
VStack(spacing: 0) {
|
VStack(spacing: 0) {
|
||||||
contextItemView()
|
contextItemView()
|
||||||
@ -445,7 +447,15 @@ struct ComposeView: View {
|
|||||||
} else if (composeState.inProgress) {
|
} else if (composeState.inProgress) {
|
||||||
clearCurrentDraft()
|
clearCurrentDraft()
|
||||||
} else if !composeState.empty {
|
} else if !composeState.empty {
|
||||||
|
if case .recording = composeState.voiceMessageRecordingState {
|
||||||
|
finishVoiceMessageRecording()
|
||||||
|
if let fileName = composeState.voiceMessageRecordingFileName {
|
||||||
|
chatModel.filesToDelete.insert(getAppFilePath(fileName))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if saveLastDraft {
|
||||||
saveCurrentDraft()
|
saveCurrentDraft()
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
cancelCurrentVoiceRecording()
|
cancelCurrentVoiceRecording()
|
||||||
clearCurrentDraft()
|
clearCurrentDraft()
|
||||||
@ -864,12 +874,6 @@ struct ComposeView: View {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func saveCurrentDraft() {
|
private func saveCurrentDraft() {
|
||||||
if case .recording = composeState.voiceMessageRecordingState {
|
|
||||||
finishVoiceMessageRecording()
|
|
||||||
if let fileName = composeState.voiceMessageRecordingFileName {
|
|
||||||
chatModel.filesToDelete.insert(getAppFilePath(fileName))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
chatModel.draft = composeState
|
chatModel.draft = composeState
|
||||||
chatModel.draftChatId = chat.id
|
chatModel.draftChatId = chat.id
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,8 @@ struct ChatPreviewView: View {
|
|||||||
@Environment(\.colorScheme) var colorScheme
|
@Environment(\.colorScheme) var colorScheme
|
||||||
var darkGreen = Color(red: 0, green: 0.5, blue: 0)
|
var darkGreen = Color(red: 0, green: 0.5, blue: 0)
|
||||||
|
|
||||||
|
@AppStorage(DEFAULT_PRIVACY_SHOW_CHAT_PREVIEWS) private var showChatPreviews = true
|
||||||
|
|
||||||
var body: some View {
|
var body: some View {
|
||||||
let cItem = chat.chatItems.last
|
let cItem = chat.chatItems.last
|
||||||
return HStack(spacing: 8) {
|
return HStack(spacing: 8) {
|
||||||
@ -103,12 +105,17 @@ struct ChatPreviewView: View {
|
|||||||
|
|
||||||
private func chatPreviewLayout(_ text: Text) -> some View {
|
private func chatPreviewLayout(_ text: Text) -> some View {
|
||||||
ZStack(alignment: .topTrailing) {
|
ZStack(alignment: .topTrailing) {
|
||||||
text
|
let t = text
|
||||||
.lineLimit(2)
|
.lineLimit(2)
|
||||||
.multilineTextAlignment(.leading)
|
.multilineTextAlignment(.leading)
|
||||||
.frame(maxWidth: .infinity, alignment: .topLeading)
|
.frame(maxWidth: .infinity, alignment: .topLeading)
|
||||||
.padding(.leading, 8)
|
.padding(.leading, 8)
|
||||||
.padding(.trailing, 36)
|
.padding(.trailing, 36)
|
||||||
|
if showChatPreviews {
|
||||||
|
t
|
||||||
|
} else {
|
||||||
|
t.privacySensitive(!showChatPreviews).redacted(reason: .privacy)
|
||||||
|
}
|
||||||
let s = chat.chatStats
|
let s = chat.chatStats
|
||||||
if s.unreadCount > 0 || s.unreadChat {
|
if s.unreadCount > 0 || s.unreadChat {
|
||||||
unreadCountText(s.unreadCount)
|
unreadCountText(s.unreadCount)
|
||||||
|
@ -13,6 +13,8 @@ struct PrivacySettings: View {
|
|||||||
@EnvironmentObject var m: ChatModel
|
@EnvironmentObject var m: ChatModel
|
||||||
@AppStorage(DEFAULT_PRIVACY_ACCEPT_IMAGES) private var autoAcceptImages = true
|
@AppStorage(DEFAULT_PRIVACY_ACCEPT_IMAGES) private var autoAcceptImages = true
|
||||||
@AppStorage(DEFAULT_PRIVACY_LINK_PREVIEWS) private var useLinkPreviews = true
|
@AppStorage(DEFAULT_PRIVACY_LINK_PREVIEWS) private var useLinkPreviews = true
|
||||||
|
@AppStorage(DEFAULT_PRIVACY_SHOW_CHAT_PREVIEWS) private var showChatPreviews = true
|
||||||
|
@AppStorage(DEFAULT_PRIVACY_SAVE_LAST_DRAFT) private var saveLastDraft = true
|
||||||
@State private var simplexLinkMode = privacySimplexLinkModeDefault.get()
|
@State private var simplexLinkMode = privacySimplexLinkModeDefault.get()
|
||||||
@AppStorage(DEFAULT_PRIVACY_PROTECT_SCREEN) private var protectScreen = false
|
@AppStorage(DEFAULT_PRIVACY_PROTECT_SCREEN) private var protectScreen = false
|
||||||
@AppStorage(DEFAULT_PERFORM_LA) private var prefPerformLA = false
|
@AppStorage(DEFAULT_PERFORM_LA) private var prefPerformLA = false
|
||||||
@ -70,6 +72,18 @@ struct PrivacySettings: View {
|
|||||||
settingsRow("network") {
|
settingsRow("network") {
|
||||||
Toggle("Send link previews", isOn: $useLinkPreviews)
|
Toggle("Send link previews", isOn: $useLinkPreviews)
|
||||||
}
|
}
|
||||||
|
settingsRow("message") {
|
||||||
|
Toggle("Show last messages", isOn: $showChatPreviews)
|
||||||
|
}
|
||||||
|
settingsRow("rectangle.and.pencil.and.ellipsis") {
|
||||||
|
Toggle("Message draft", isOn: $saveLastDraft)
|
||||||
|
}
|
||||||
|
.onChange(of: saveLastDraft) { saveDraft in
|
||||||
|
if !saveDraft {
|
||||||
|
m.draft = nil
|
||||||
|
m.draftChatId = nil
|
||||||
|
}
|
||||||
|
}
|
||||||
settingsRow("link") {
|
settingsRow("link") {
|
||||||
Picker("SimpleX links", selection: $simplexLinkMode) {
|
Picker("SimpleX links", selection: $simplexLinkMode) {
|
||||||
ForEach(SimpleXLinkMode.values) { mode in
|
ForEach(SimpleXLinkMode.values) { mode in
|
||||||
|
@ -30,6 +30,8 @@ let DEFAULT_CALL_KIT_CALLS_IN_RECENTS = "callKitCallsInRecents"
|
|||||||
let DEFAULT_PRIVACY_ACCEPT_IMAGES = "privacyAcceptImages"
|
let DEFAULT_PRIVACY_ACCEPT_IMAGES = "privacyAcceptImages"
|
||||||
let DEFAULT_PRIVACY_LINK_PREVIEWS = "privacyLinkPreviews"
|
let DEFAULT_PRIVACY_LINK_PREVIEWS = "privacyLinkPreviews"
|
||||||
let DEFAULT_PRIVACY_SIMPLEX_LINK_MODE = "privacySimplexLinkMode"
|
let DEFAULT_PRIVACY_SIMPLEX_LINK_MODE = "privacySimplexLinkMode"
|
||||||
|
let DEFAULT_PRIVACY_SHOW_CHAT_PREVIEWS = "privacyShowChatPreviews"
|
||||||
|
let DEFAULT_PRIVACY_SAVE_LAST_DRAFT = "privacySaveLastDraft"
|
||||||
let DEFAULT_PRIVACY_PROTECT_SCREEN = "privacyProtectScreen"
|
let DEFAULT_PRIVACY_PROTECT_SCREEN = "privacyProtectScreen"
|
||||||
let DEFAULT_PRIVACY_DELIVERY_RECEIPTS_SET = "privacyDeliveryReceiptsSet"
|
let DEFAULT_PRIVACY_DELIVERY_RECEIPTS_SET = "privacyDeliveryReceiptsSet"
|
||||||
let DEFAULT_EXPERIMENTAL_CALLS = "experimentalCalls"
|
let DEFAULT_EXPERIMENTAL_CALLS = "experimentalCalls"
|
||||||
@ -65,6 +67,8 @@ let appDefaults: [String: Any] = [
|
|||||||
DEFAULT_PRIVACY_ACCEPT_IMAGES: true,
|
DEFAULT_PRIVACY_ACCEPT_IMAGES: true,
|
||||||
DEFAULT_PRIVACY_LINK_PREVIEWS: true,
|
DEFAULT_PRIVACY_LINK_PREVIEWS: true,
|
||||||
DEFAULT_PRIVACY_SIMPLEX_LINK_MODE: SimpleXLinkMode.description.rawValue,
|
DEFAULT_PRIVACY_SIMPLEX_LINK_MODE: SimpleXLinkMode.description.rawValue,
|
||||||
|
DEFAULT_PRIVACY_SHOW_CHAT_PREVIEWS: true,
|
||||||
|
DEFAULT_PRIVACY_SAVE_LAST_DRAFT: true,
|
||||||
DEFAULT_PRIVACY_PROTECT_SCREEN: false,
|
DEFAULT_PRIVACY_PROTECT_SCREEN: false,
|
||||||
DEFAULT_PRIVACY_DELIVERY_RECEIPTS_SET: false,
|
DEFAULT_PRIVACY_DELIVERY_RECEIPTS_SET: false,
|
||||||
DEFAULT_EXPERIMENTAL_CALLS: false,
|
DEFAULT_EXPERIMENTAL_CALLS: false,
|
||||||
|
Loading…
Reference in New Issue
Block a user