diff --git a/Linphone/GeneratedGit.swift b/Linphone/GeneratedGit.swift index 0f258ee5e..29b5b3fed 100644 --- a/Linphone/GeneratedGit.swift +++ b/Linphone/GeneratedGit.swift @@ -2,6 +2,6 @@ import Foundation public enum AppGitInfo { public static let branch = "master" - public static let commit = "65e685101" + public static let commit = "c01f79dd2" public static let tag = "6.1.0-alpha" } diff --git a/Linphone/Localizable/en.lproj/Localizable.strings b/Linphone/Localizable/en.lproj/Localizable.strings index 2f9a11fc8..cbc327642 100644 --- a/Linphone/Localizable/en.lproj/Localizable.strings +++ b/Linphone/Localizable/en.lproj/Localizable.strings @@ -221,8 +221,8 @@ "conversation_editing_message_title" = "Message being edited"; "conversation_message_edited_label" = "Edited"; "conversation_dialog_delete_chat_message_title" = "Delete this message?"; -"conversation_dialog_delete_locally_label" = "For me"; -"conversation_dialog_delete_for_everyone_label" = "For everyone"; +"conversation_dialog_delete_locally_label" = "Delete for me"; +"conversation_dialog_delete_for_everyone_label" = "Delete for everyone"; "conversation_message_content_deleted_label" = "This message has been deleted"; "conversation_message_content_deleted_by_us_label" = "You have deleted this message"; "conversation_end_to_end_encrypted_bottom_sheet_link" = "https://linphone.org/en/features/#security"; diff --git a/Linphone/Localizable/fr.lproj/Localizable.strings b/Linphone/Localizable/fr.lproj/Localizable.strings index 6c40dbec1..9a9ab3ea0 100644 --- a/Linphone/Localizable/fr.lproj/Localizable.strings +++ b/Linphone/Localizable/fr.lproj/Localizable.strings @@ -221,8 +221,8 @@ "conversation_editing_message_title" = "Modification du message"; "conversation_message_edited_label" = "Modifié"; "conversation_dialog_delete_chat_message_title" = "Supprimer le message ?"; -"conversation_dialog_delete_locally_label" = "Pour moi"; -"conversation_dialog_delete_for_everyone_label" = "Pour tout le monde"; +"conversation_dialog_delete_locally_label" = "Supprimer pour moi"; +"conversation_dialog_delete_for_everyone_label" = "Supprimer pour tout le monde"; "conversation_message_content_deleted_label" = "Le message a été supprimé"; "conversation_message_content_deleted_by_us_label" = "Vous avez supprimé le message"; "conversation_end_to_end_encrypted_bottom_sheet_link" = "https://linphone.org/en/features/#security"; diff --git a/Linphone/UI/Main/ContentView.swift b/Linphone/UI/Main/ContentView.swift index 139f0bd8d..6d757c7a2 100644 --- a/Linphone/UI/Main/ContentView.swift +++ b/Linphone/UI/Main/ContentView.swift @@ -1694,6 +1694,7 @@ struct ContentView: View { } } + /* if isShowDeleteMessagePopup { PopupView( isShowPopup: $isShowDeleteMessagePopup, @@ -1718,6 +1719,7 @@ struct ContentView: View { self.isShowDeleteMessagePopup.toggle() } } + */ if isShowConversationInfoPopup { PopupViewWithTextField( diff --git a/Linphone/UI/Main/Conversations/Fragments/ConversationDeleteMessageBottomSheet.swift b/Linphone/UI/Main/Conversations/Fragments/ConversationDeleteMessageBottomSheet.swift new file mode 100644 index 000000000..8117bf904 --- /dev/null +++ b/Linphone/UI/Main/Conversations/Fragments/ConversationDeleteMessageBottomSheet.swift @@ -0,0 +1,133 @@ +/* + * Copyright (c) 2010-2023 Belledonne Communications SARL. + * + * This file is part of linphone-iphone + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +import SwiftUI +import linphonesw + +struct ConversationDeleteMessageBottomSheet: View { + + @Environment(\.dismiss) var dismiss + + private var idiom: UIUserInterfaceIdiom { UIDevice.current.userInterfaceIdiom } + + @State private var orientation = UIDevice.current.orientation + + @Binding var showingSheet: Bool + + var body: some View { + VStack(alignment: .leading) { + if idiom != .pad && (orientation == .landscapeLeft + || orientation == .landscapeRight + || UIScreen.main.bounds.size.width > UIScreen.main.bounds.size.height) { + Spacer() + HStack { + Spacer() + Button("dialog_close") { + if #available(iOS 16.0, *) { + showingSheet.toggle() + } else { + showingSheet.toggle() + dismiss() + } + } + } + .padding(.trailing) + } + + Spacer() + + Button { + NotificationCenter.default.post(name: NSNotification.Name("DeleteMessageForEveryone"), object: nil) + + if #available(iOS 16.0, *) { + if idiom != .pad { + showingSheet.toggle() + } else { + showingSheet.toggle() + dismiss() + } + } else { + showingSheet.toggle() + dismiss() + } + } label: { + HStack { + Image("trash-simple") + .renderingMode(.template) + .resizable() + .foregroundStyle(Color.redDanger500) + .frame(width: 25, height: 25, alignment: .leading) + Text("conversation_dialog_delete_for_everyone_label") + .foregroundStyle(Color.redDanger500) + .default_text_style(styleSize: 16) + Spacer() + } + .frame(maxHeight: .infinity) + } + .padding(.horizontal, 30) + .background(Color.gray100) + + VStack { + Divider() + } + .frame(maxWidth: .infinity) + + Button { + NotificationCenter.default.post(name: NSNotification.Name("DeleteMessageForMe"), object: nil) + + if #available(iOS 16.0, *) { + if idiom != .pad { + showingSheet.toggle() + } else { + showingSheet.toggle() + dismiss() + } + } else { + showingSheet.toggle() + dismiss() + } + } label: { + HStack { + Image("trash-simple") + .renderingMode(.template) + .resizable() + .foregroundStyle(Color.redDanger500) + .frame(width: 25, height: 25, alignment: .leading) + Text("conversation_dialog_delete_locally_label") + .foregroundStyle(Color.redDanger500) + .default_text_style(styleSize: 16) + Spacer() + } + .frame(maxHeight: .infinity) + } + .padding(.horizontal, 30) + .background(Color.gray100) + } + .padding(.bottom) + .background(Color.gray100) + .frame(maxWidth: .infinity) + .onRotate { newOrientation in + orientation = newOrientation + } + } +} + +#Preview { + ConversationsListBottomSheet(showingSheet: .constant(true)) +} diff --git a/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift b/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift index aaab69720..4ea522deb 100644 --- a/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift +++ b/Linphone/UI/Main/Conversations/Fragments/ConversationFragment.swift @@ -133,6 +133,15 @@ struct ConversationFragment: View { .presentationDetents([.medium]) .presentationDragIndicator(.visible) }) + .sheet(isPresented: $isShowDeleteMessagePopup, onDismiss: { + isShowDeleteMessagePopup = false + }, content: { + ConversationDeleteMessageBottomSheet( + showingSheet: $isShowDeleteMessagePopup + ) + .presentationDetents([.fraction(0.15)]) + .ignoresSafeArea(.all) + }) .sheet(isPresented: $isShowPhotoLibrary, onDismiss: { isShowPhotoLibrary = false }, content: { @@ -213,6 +222,13 @@ struct ConversationFragment: View { } onDismiss: { conversationViewModel.isShowSelectedMessageToDisplayDetails = false } + .halfSheet(showSheet: $isShowDeleteMessagePopup) { + ConversationDeleteMessageBottomSheet( + showingSheet: $isShowDeleteMessagePopup + ) + } onDismiss: { + isShowDeleteMessagePopup = false + } .sheet(isPresented: $isShowPhotoLibrary, onDismiss: { isShowPhotoLibrary = false }, content: { diff --git a/LinphoneApp.xcodeproj/project.pbxproj b/LinphoneApp.xcodeproj/project.pbxproj index 9e8cc70fc..c2d9fe18f 100644 --- a/LinphoneApp.xcodeproj/project.pbxproj +++ b/LinphoneApp.xcodeproj/project.pbxproj @@ -198,6 +198,7 @@ D7D24D162AC1B4E800C6F35B /* NotoSans-SemiBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7D24D102AC1B4E800C6F35B /* NotoSans-SemiBold.ttf */; }; D7D24D172AC1B4E800C6F35B /* NotoSans-Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7D24D112AC1B4E800C6F35B /* NotoSans-Bold.ttf */; }; D7D24D182AC1B4E800C6F35B /* NotoSans-ExtraBold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = D7D24D122AC1B4E800C6F35B /* NotoSans-ExtraBold.ttf */; }; + D7D3007A2F684EAF00836032 /* ConversationDeleteMessageBottomSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7D300792F684EAE00836032 /* ConversationDeleteMessageBottomSheet.swift */; }; D7D5AD7F2DD34F0E00016721 /* AppAuth in Frameworks */ = {isa = PBXBuildFile; productRef = D7D5AD7E2DD34F0E00016721 /* AppAuth */; }; D7D5AD812DD34F1A00016721 /* FirebaseAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = D7D5AD802DD34F1A00016721 /* FirebaseAnalytics */; }; D7D5AD832DD34F2300016721 /* FirebaseCrashlytics in Frameworks */ = {isa = PBXBuildFile; productRef = D7D5AD822DD34F2300016721 /* FirebaseCrashlytics */; }; @@ -471,6 +472,7 @@ D7D24D102AC1B4E800C6F35B /* NotoSans-SemiBold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NotoSans-SemiBold.ttf"; sourceTree = ""; }; D7D24D112AC1B4E800C6F35B /* NotoSans-Bold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NotoSans-Bold.ttf"; sourceTree = ""; }; D7D24D122AC1B4E800C6F35B /* NotoSans-ExtraBold.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "NotoSans-ExtraBold.ttf"; sourceTree = ""; }; + D7D300792F684EAE00836032 /* ConversationDeleteMessageBottomSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ConversationDeleteMessageBottomSheet.swift; sourceTree = ""; }; D7D67B682F601F6100DD9976 /* Base */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Base; path = Base.lproj/AppIntentVocabulary.plist; sourceTree = ""; }; D7D67B6C2F601F6C00DD9976 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = en; path = en.lproj/AppIntentVocabulary.plist; sourceTree = ""; }; D7D67B6D2F601F6D00DD9976 /* eu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = eu; path = eu.lproj/AppIntentVocabulary.plist; sourceTree = ""; }; @@ -1137,6 +1139,7 @@ D7CEE0392B7A232200FD79B7 /* Fragments */ = { isa = PBXGroup; children = ( + D7D300792F684EAE00836032 /* ConversationDeleteMessageBottomSheet.swift */, D7AEB9732F324A6E00298546 /* ConversationDocumentsListFragment.swift */, D7AEB9712F324A5C00298546 /* ConversationMediaListFragment.swift */, D7EFD1E32CD11F53005E67CD /* EphemeralFragment.swift */, @@ -1624,6 +1627,7 @@ D74C9CF82ACACECE0021626A /* WelcomePage1Fragment.swift in Sources */, 66E56BCE2BA9A1F8006CE56F /* MeetingModel.swift in Sources */, D7DC09712CFDBF9A00A6D47C /* AccountProfileViewModel.swift in Sources */, + D7D3007A2F684EAF00836032 /* ConversationDeleteMessageBottomSheet.swift in Sources */, D7E6D0552AEBFCCE00A57AAF /* ContactsInnerFragment.swift in Sources */, D72343362AD037AF009AA24E /* ToastView.swift in Sources */, D711B1302E8FCEDE00DF8C71 /* CardDavViewModel.swift in Sources */,