Display toast when user copy adress or delete call logs in History views

This commit is contained in:
Benoit Martins 2023-11-20 17:00:19 +01:00
parent 81a9dd9124
commit 0142a9146b
13 changed files with 73 additions and 44 deletions

View file

@ -46,6 +46,7 @@
D777DBB32AE12C5900565A99 /* ContactsManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D777DBB22AE12C5900565A99 /* ContactsManager.swift */; };
D78290B82ADD3910004AA85C /* ContactsFragment.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78290B72ADD3910004AA85C /* ContactsFragment.swift */; };
D78290BB2ADD40B2004AA85C /* ContactViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D78290BA2ADD40B2004AA85C /* ContactViewModel.swift */; };
D796F2002B0BB61A0041115F /* ToastViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = D796F1FF2B0BB61A0041115F /* ToastViewModel.swift */; };
D7A03FBD2ACC2DB60081A588 /* ContactsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A03FBC2ACC2DB60081A588 /* ContactsView.swift */; };
D7A03FC02ACC2E390081A588 /* HistoryView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A03FBF2ACC2E390081A588 /* HistoryView.swift */; };
D7A03FC62ACC458A0081A588 /* SplashScreen.swift in Sources */ = {isa = PBXBuildFile; fileRef = D7A03FC52ACC458A0081A588 /* SplashScreen.swift */; };
@ -117,6 +118,7 @@
D777DBB22AE12C5900565A99 /* ContactsManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactsManager.swift; sourceTree = "<group>"; };
D78290B72ADD3910004AA85C /* ContactsFragment.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactsFragment.swift; sourceTree = "<group>"; };
D78290BA2ADD40B2004AA85C /* ContactViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactViewModel.swift; sourceTree = "<group>"; };
D796F1FF2B0BB61A0041115F /* ToastViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ToastViewModel.swift; sourceTree = "<group>"; };
D7A03FBC2ACC2DB60081A588 /* ContactsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContactsView.swift; sourceTree = "<group>"; };
D7A03FBF2ACC2E390081A588 /* HistoryView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HistoryView.swift; sourceTree = "<group>"; };
D7A03FC52ACC458A0081A588 /* SplashScreen.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SplashScreen.swift; sourceTree = "<group>"; };
@ -386,6 +388,7 @@
isa = PBXGroup;
children = (
D7A2EDD52AC18115005D90FC /* SharedMainViewModel.swift */,
D796F1FF2B0BB61A0041115F /* ToastViewModel.swift */,
);
path = Viewmodel;
sourceTree = "<group>";
@ -529,6 +532,7 @@
D719ABC92ABC6FD700B41C10 /* CoreContext.swift in Sources */,
D7EAACCF2AD6ED8000AA6A8A /* PermissionsFragment.swift in Sources */,
D777DBB32AE12C5900565A99 /* ContactsManager.swift in Sources */,
D796F2002B0BB61A0041115F /* ToastViewModel.swift in Sources */,
D7C3650A2AF001C300FE6142 /* EditContactFragment.swift in Sources */,
D7A03FBD2ACC2DB60081A588 /* ContactsView.swift in Sources */,
D719ABCF2ABC779A00B41C10 /* AccountLoginViewModel.swift in Sources */,

View file

@ -71,9 +71,11 @@ final class CoreContext: ObservableObject {
self.mCore.publisher?.onConfiguringStatus?.postOnMainQueue { (cbVal: (core: Core, status: Config.ConfiguringState, message: String)) in
NSLog("New configuration state is \(cbVal.status) = \(cbVal.message)\n")
if cbVal.status == Config.ConfiguringState.Successful {
self.sharedMainViewModel.toastMessage = "Successful"
ToastViewModel.shared.toastMessage = "Successful"
ToastViewModel.shared.displayToast.toggle()
} else {
self.sharedMainViewModel.toastMessage = "Failed"
ToastViewModel.shared.toastMessage = "Failed"
ToastViewModel.shared.displayToast.toggle()
}
}
@ -90,7 +92,8 @@ final class CoreContext: ObservableObject {
} else if cbVal.state == .Progress {
self.loggingInProgress = true
} else {
self.sharedMainViewModel.toastMessage = "Registration failed"
ToastViewModel.shared.toastMessage = "Registration failed"
ToastViewModel.shared.displayToast.toggle()
self.loggingInProgress = false
self.loggedIn = false
}

View file

@ -34,7 +34,6 @@ struct LinphoneApp: App {
WelcomeView()
} else if coreContext.defaultAccount == nil || sharedMainViewModel.displayProfileMode {
AssistantView()
.toast(isShowing: $sharedMainViewModel.toastMessage)
} else if coreContext.defaultAccount != nil {
ContentView(
contactViewModel: ContactViewModel(),
@ -42,7 +41,6 @@ struct LinphoneApp: App {
historyViewModel: HistoryViewModel(),
historyListViewModel: HistoryListViewModel()
)
.toast(isShowing: $sharedMainViewModel.toastMessage)
}
} else {
SplashScreen(isActive: $isActive)

View file

@ -55,13 +55,15 @@ struct QrCodeScannerFragment: View {
.edgesIgnoringSafeArea(.all)
.navigationBarHidden(true)
if sharedMainViewModel.toastMessage == "Successful" {
/*
if $isShowToast {
ZStack {
}.onAppear {
dismiss()
}
}
*/
}
}

View file

@ -77,10 +77,12 @@ class Coordinator: NSObject, AVCaptureMetadataOutputObjectsDelegate {
try? core.start()
}
} else {
sharedMainViewModel.toastMessage = "Invalide URI"
ToastViewModel.shared.toastMessage = "Invalide URI"
ToastViewModel.shared.displayToast.toggle()
}
} else {
sharedMainViewModel.toastMessage = "Invalide URI"
ToastViewModel.shared.toastMessage = "Invalide URI"
ToastViewModel.shared.displayToast.toggle()
}
}
}

View file

@ -70,7 +70,8 @@ struct ContactListBottomSheet: View {
dismiss()
}
sharedMainViewModel.toastMessage = "Success_copied_into_clipboard"
ToastViewModel.shared.toastMessage = "Success_copied_into_clipboard"
ToastViewModel.shared.displayToast.toggle()
} label: {
HStack {

View file

@ -26,6 +26,7 @@ struct ContentView: View {
@Environment(\.scenePhase) var scenePhase
@ObservedObject private var coreContext = CoreContext.shared
@ObservedObject private var sharedMainViewModel = SharedMainViewModel.shared
var contactManager = ContactsManager.shared
var magicSearch = MagicSearchSingleton.shared
@ -543,6 +544,9 @@ struct ContentView: View {
historyListViewModel.removeCallLogs()
self.isShowDeleteAllHistoryPopup.toggle()
historyViewModel.displayedCall = nil
ToastViewModel.shared.toastMessage = "Success_remove_call_logs"
ToastViewModel.shared.displayToast.toggle()
})
.background(.black.opacity(0.65))
.zIndex(3)
@ -580,6 +584,11 @@ struct ContentView: View {
self.isShowDismissPopup.toggle()
}
}
//if sharedMainViewModel.displayToast {
ToastView()
.zIndex(3)
//}
}
}
.overlay {

View file

@ -19,31 +19,21 @@
import SwiftUI
struct ToastView: ViewModifier {
struct ToastView: View {
@ObservedObject private var sharedMainViewModel = SharedMainViewModel.shared
@ObservedObject private var toastViewModel = ToastViewModel.shared
@Binding var isShowing: String
func body(content: Content) -> some View {
ZStack {
content
toastView
.padding(.top, 60)
}
}
private var toastView: some View {
var body: some View {
VStack {
if !isShowing.isEmpty {
if toastViewModel.displayToast {
HStack {
Image(isShowing.contains("Success") ? "check" : "warning-circle")
Image(toastViewModel.toastMessage.contains("Success") ? "check" : "warning-circle")
.resizable()
.renderingMode(.template)
.frame(width: 25, height: 25, alignment: .leading)
.foregroundStyle(isShowing.contains("Success") ? Color.greenSuccess500 : Color.redDanger500)
.foregroundStyle(toastViewModel.toastMessage.contains("Success") ? Color.greenSuccess500 : Color.redDanger500)
switch isShowing {
switch toastViewModel.toastMessage {
case "Successful":
Text("QR code validated!")
.multilineTextAlignment(.center)
@ -100,29 +90,30 @@ struct ToastView: ViewModifier {
.overlay(
RoundedRectangle(cornerRadius: 50)
.inset(by: 0.5)
.stroke(isShowing.contains("Success") ? Color.greenSuccess500 : Color.redDanger500, lineWidth: 1)
.stroke(toastViewModel.toastMessage.contains("Success") ? Color.greenSuccess500 : Color.redDanger500, lineWidth: 1)
)
.onTapGesture {
isShowing = ""
withAnimation {
toastViewModel.toastMessage = ""
toastViewModel.displayToast = false
}
}
.onAppear {
DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
isShowing = ""
withAnimation {
toastViewModel.toastMessage = ""
toastViewModel.displayToast = false
}
}
}
Spacer()
}
Spacer()
}
.frame(maxWidth: sharedMainViewModel.maxWidth)
.frame(maxWidth: SharedMainViewModel.shared.maxWidth)
.padding(.horizontal, 16)
.padding(.bottom, 18)
.animation(.linear(duration: 0.3), value: isShowing)
.transition(.opacity)
}
}
extension View {
func toast(isShowing: Binding<String>) -> some View {
self.modifier(ToastView(isShowing: isShowing))
.transition(.move(edge: .top))
.padding(.top, 60)
}
}

View file

@ -132,7 +132,9 @@ struct HistoryContactFragment: View {
)
}
sharedMainViewModel.toastMessage = "Success_copied_into_clipboard"
ToastViewModel.shared.toastMessage = "Success_copied_into_clipboard"
ToastViewModel.shared.displayToast.toggle()
} label: {
HStack {
Text("Copy SIP address")

View file

@ -164,7 +164,8 @@ struct HistoryListBottomSheet: View {
dismiss()
}
sharedMainViewModel.toastMessage = "Success_copied_into_clipboard"
ToastViewModel.shared.toastMessage = "Success_copied_into_clipboard"
ToastViewModel.shared.displayToast.toggle()
} label: {
HStack {

View file

@ -42,7 +42,6 @@ struct HistoryView: View {
)
Button {
SharedMainViewModel.shared.toastMessage = "Success_remove_call_logs"
} label: {
Image("phone-plus")
.padding()

View file

@ -23,8 +23,6 @@ class SharedMainViewModel: ObservableObject {
static let shared = SharedMainViewModel()
@Published var toastMessage: String = ""
@Published var welcomeViewDisplayed = false
@Published var generalTermsAccepted = false
@Published var displayProfileMode = false

View file

@ -0,0 +1,19 @@
//
// ToastViewModel.swift
// Linphone
//
// Created by Benoît Martins on 20/11/2023.
//
import Foundation
class ToastViewModel: ObservableObject {
static let shared = ToastViewModel()
var toastMessage: String = ""
@Published var displayToast = false
private init() {
}
}