diff --git a/Linphone/LinphoneApp.swift b/Linphone/LinphoneApp.swift index f4cecd826..1d8899dcd 100644 --- a/Linphone/LinphoneApp.swift +++ b/Linphone/LinphoneApp.swift @@ -131,6 +131,8 @@ struct LinphoneApp: App { @ObservedObject private var coreContext = CoreContext.shared @ObservedObject private var sharedMainViewModel = SharedMainViewModel.shared + @State var index: Int = 0 + @State private var contactViewModel: ContactViewModel? @State private var editContactViewModel: EditContactViewModel? @State private var historyViewModel: HistoryViewModel? @@ -192,10 +194,12 @@ struct LinphoneApp: App { meetingsListViewModel: meetingsListViewModel!, meetingViewModel: meetingViewModel!, conversationForwardMessageViewModel: conversationForwardMessageViewModel!, - accountProfileViewModel: accountProfileViewModel! + accountProfileViewModel: accountProfileViewModel!, + index: $index ) .environmentObject(navigationManager) .onAppear { + index = sharedMainViewModel.indexView // Link the navigation manager to the AppDelegate delegate.navigationManager = navigationManager diff --git a/Linphone/UI/Main/ContentView.swift b/Linphone/UI/Main/ContentView.swift index 7f5c6bc84..3b3651504 100644 --- a/Linphone/UI/Main/ContentView.swift +++ b/Linphone/UI/Main/ContentView.swift @@ -51,7 +51,7 @@ struct ContentView: View { @ObservedObject var conversationForwardMessageViewModel: ConversationForwardMessageViewModel @ObservedObject var accountProfileViewModel: AccountProfileViewModel - @State var index = 0 + @Binding var index: Int @State private var orientation = UIDevice.current.orientation @State var sideMenuIsOpen: Bool = false @@ -143,6 +143,7 @@ struct ContentView: View { Button(action: { self.index = 0 + sharedMainViewModel.changeIndexView(indexViewInt: 0) historyViewModel.displayedCall = nil conversationViewModel.displayedConversation = nil meetingViewModel.displayedMeeting = nil @@ -188,6 +189,7 @@ struct ContentView: View { Button(action: { self.index = 1 + sharedMainViewModel.changeIndexView(indexViewInt: 1) contactViewModel.indexDisplayedFriend = nil conversationViewModel.displayedConversation = nil meetingViewModel.displayedMeeting = nil @@ -237,6 +239,7 @@ struct ContentView: View { Button(action: { self.index = 2 + sharedMainViewModel.changeIndexView(indexViewInt: 2) historyViewModel.displayedCall = nil contactViewModel.indexDisplayedFriend = nil meetingViewModel.displayedMeeting = nil @@ -263,6 +266,7 @@ struct ContentView: View { Button(action: { self.index = 3 + sharedMainViewModel.changeIndexView(indexViewInt: 3) contactViewModel.indexDisplayedFriend = nil historyViewModel.displayedCall = nil conversationViewModel.displayedConversation = nil @@ -733,6 +737,7 @@ struct ContentView: View { Spacer() Button(action: { self.index = 0 + sharedMainViewModel.changeIndexView(indexViewInt: 0) historyViewModel.displayedCall = nil conversationViewModel.displayedConversation = nil meetingViewModel.displayedMeeting = nil @@ -780,6 +785,7 @@ struct ContentView: View { Button(action: { self.index = 1 + sharedMainViewModel.changeIndexView(indexViewInt: 1) contactViewModel.indexDisplayedFriend = nil conversationViewModel.displayedConversation = nil meetingViewModel.displayedMeeting = nil @@ -831,6 +837,7 @@ struct ContentView: View { Button(action: { self.index = 2 + sharedMainViewModel.changeIndexView(indexViewInt: 2) historyViewModel.displayedCall = nil contactViewModel.indexDisplayedFriend = nil meetingViewModel.displayedMeeting = nil @@ -858,6 +865,7 @@ struct ContentView: View { Spacer() Button(action: { self.index = 3 + sharedMainViewModel.changeIndexView(indexViewInt: 3) contactViewModel.indexDisplayedFriend = nil historyViewModel.displayedCall = nil conversationViewModel.displayedConversation = nil @@ -1198,6 +1206,7 @@ struct ContentView: View { contactViewModel.indexDisplayedFriend = nil historyViewModel.displayedCall = nil index = 2 + sharedMainViewModel.changeIndexView(indexViewInt: 2) DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) { withAnimation { self.conversationViewModel.changeDisplayedChatRoom(conversationModel: contactViewModel.displayedConversation!) @@ -1381,6 +1390,7 @@ struct ContentView: View { .onChange(of: navigationManager.selectedCallId) { newCallId in if newCallId != nil { self.index = 2 + sharedMainViewModel.changeIndexView(indexViewInt: 2) } } .onReceive(contactLoaded) { _ in @@ -1454,7 +1464,8 @@ class NavigationManager: ObservableObject { meetingsListViewModel: MeetingsListViewModel(), meetingViewModel: MeetingViewModel(), conversationForwardMessageViewModel: ConversationForwardMessageViewModel(), - accountProfileViewModel: AccountProfileViewModel() + accountProfileViewModel: AccountProfileViewModel(), + index: .constant(0) ) } // swiftlint:enable type_body_length diff --git a/Linphone/UI/Main/Viewmodel/SharedMainViewModel.swift b/Linphone/UI/Main/Viewmodel/SharedMainViewModel.swift index 588994bcf..a6870165e 100644 --- a/Linphone/UI/Main/Viewmodel/SharedMainViewModel.swift +++ b/Linphone/UI/Main/Viewmodel/SharedMainViewModel.swift @@ -27,17 +27,25 @@ class SharedMainViewModel: ObservableObject { @Published var generalTermsAccepted = false @Published var displayProfileMode = false @Published var defaultAvatar: URL? + @Published var indexView: Int = 0 let welcomeViewKey = "welcome_view" let generalTermsKey = "general_terms" let displayProfileModeKey = "display_profile_mode" let defaultAvatarKey = "default_avatar" + let indexViewKey = "index_view" var maxWidth = 600.0 private init() { let preferences = UserDefaults.standard + if preferences.object(forKey: indexViewKey) == nil { + preferences.set(indexView, forKey: indexViewKey) + } else { + indexView = preferences.integer(forKey: indexViewKey) + } + if preferences.object(forKey: welcomeViewKey) == nil { preferences.set(welcomeViewDisplayed, forKey: welcomeViewKey) } else { @@ -99,4 +107,11 @@ class SharedMainViewModel: ObservableObject { defaultAvatar = defaultAvatarURL preferences.set(defaultAvatar, forKey: defaultAvatarKey) } + + func changeIndexView(indexViewInt: Int) { + let preferences = UserDefaults.standard + + indexView = indexViewInt + preferences.set(indexView, forKey: indexViewKey) + } }