diff --git a/Linphone/Localizable/en.lproj/Localizable.strings b/Linphone/Localizable/en.lproj/Localizable.strings index 78479300d..a8f3001d7 100644 --- a/Linphone/Localizable/en.lproj/Localizable.strings +++ b/Linphone/Localizable/en.lproj/Localizable.strings @@ -188,6 +188,7 @@ "contacts_list_favourites_title" = "Favourites"; "contacts_list_filter_popup_see_all" = "See all"; "contacts_list_filter_popup_see_linphone_only" = "See %@ contacts"; +"contacts_list_filter_popup_see_sip_only" = "See SIP contacts"; "conversation_action_call" = "Call"; "conversation_action_configure_ephemeral_messages" = "Configure ephemeral messages"; "conversation_action_delete" = "Delete conversation"; diff --git a/Linphone/Localizable/fr.lproj/Localizable.strings b/Linphone/Localizable/fr.lproj/Localizable.strings index 58961a458..9d05cf509 100644 --- a/Linphone/Localizable/fr.lproj/Localizable.strings +++ b/Linphone/Localizable/fr.lproj/Localizable.strings @@ -188,6 +188,7 @@ "contacts_list_favourites_title" = "Favoris"; "contacts_list_filter_popup_see_all" = "Tous les contacts"; "contacts_list_filter_popup_see_linphone_only" = "Contacts %@"; +"contacts_list_filter_popup_see_sip_only" = "Contacts SIP"; "conversation_action_call" = "Appeler"; "conversation_action_configure_ephemeral_messages" = "Configurer les messages éphémères"; "conversation_action_delete" = "Supprimer la conversation"; diff --git a/Linphone/UI/Main/Contacts/Fragments/ContactsInnerFragment.swift b/Linphone/UI/Main/Contacts/Fragments/ContactsInnerFragment.swift index 8d6c362d9..dc52c0c62 100644 --- a/Linphone/UI/Main/Contacts/Fragments/ContactsInnerFragment.swift +++ b/Linphone/UI/Main/Contacts/Fragments/ContactsInnerFragment.swift @@ -24,6 +24,7 @@ struct ContactsInnerFragment: View { @ObservedObject var sharedMainViewModel = SharedMainViewModel.shared @ObservedObject var contactsManager = ContactsManager.shared + @ObservedObject var magicSearch = MagicSearchSingleton.shared @EnvironmentObject var contactsListViewModel: ContactsListViewModel @@ -33,76 +34,84 @@ struct ContactsInnerFragment: View { @Binding var text: String var body: some View { - VStack(alignment: .leading) { - if contactsManager.avatarListModel.contains(where: { $0.starred }) { - HStack(alignment: .center) { - Text("contacts_list_favourites_title") - .default_text_style_800(styleSize: 16) - - Spacer() - - Image(isFavoriteOpen ? "caret-up" : "caret-down") - .renderingMode(.template) - .resizable() - .foregroundStyle(Color.grayMain2c600) - .frame(width: 25, height: 25, alignment: .leading) - .padding(.all, 10) - } - .padding(.top, 10) - .padding(.horizontal, 16) - .background(.white) - .onTapGesture { - withAnimation { - isFavoriteOpen.toggle() + ZStack { + VStack(alignment: .leading) { + if contactsManager.avatarListModel.contains(where: { $0.starred }) { + HStack(alignment: .center) { + Text("contacts_list_favourites_title") + .default_text_style_800(styleSize: 16) + + Spacer() + + Image(isFavoriteOpen ? "caret-up" : "caret-down") + .renderingMode(.template) + .resizable() + .foregroundStyle(Color.grayMain2c600) + .frame(width: 25, height: 25, alignment: .leading) + .padding(.all, 10) } - } - - if isFavoriteOpen { - FavoriteContactsListFragment(showingSheet: $showingSheet) - .zIndex(-1) - .transition(.move(edge: .top)) - } - - HStack(alignment: .center) { - Text("contacts_list_all_contacts_title") - .default_text_style_800(styleSize: 16) - - Spacer() - } - .padding(.top, 10) - .padding(.horizontal, 16) - } - - VStack { - List { - ContactsListFragment(showingSheet: $showingSheet, startCallFunc: {_ in })} - .safeAreaInset(edge: .top, content: { - Spacer() - .frame(height: 12) - }) - .listStyle(.plain) - .if(sharedMainViewModel.cardDavFriendsListsCount > 0) { view in - view.refreshable { - contactsManager.refreshCardDavContacts() - } - } - .overlay( - VStack { - if contactsManager.avatarListModel.isEmpty { - Spacer() - Image("illus-belledonne") - .resizable() - .scaledToFit() - .clipped() - .padding(.all) - Text(!text.isEmpty ? "list_filter_no_result_found" : "contacts_list_empty") - .default_text_style_800(styleSize: 16) - Spacer() - Spacer() + .padding(.top, 10) + .padding(.horizontal, 16) + .background(.white) + .onTapGesture { + withAnimation { + isFavoriteOpen.toggle() } } - .padding(.all) - ) + + if isFavoriteOpen { + FavoriteContactsListFragment(showingSheet: $showingSheet) + .zIndex(-1) + .transition(.move(edge: .top)) + } + + HStack(alignment: .center) { + Text("contacts_list_all_contacts_title") + .default_text_style_800(styleSize: 16) + + Spacer() + } + .padding(.top, 10) + .padding(.horizontal, 16) + } + + VStack { + List { + ContactsListFragment(showingSheet: $showingSheet, startCallFunc: {_ in })} + .safeAreaInset(edge: .top, content: { + Spacer() + .frame(height: 12) + }) + .listStyle(.plain) + .if(sharedMainViewModel.cardDavFriendsListsCount > 0) { view in + view.refreshable { + contactsManager.refreshCardDavContacts() + } + } + .overlay( + VStack { + if contactsManager.avatarListModel.isEmpty { + Spacer() + Image("illus-belledonne") + .resizable() + .scaledToFit() + .clipped() + .padding(.all) + Text(!text.isEmpty ? "list_filter_no_result_found" : "contacts_list_empty") + .default_text_style_800(styleSize: 16) + Spacer() + Spacer() + } + } + .padding(.all) + ) + } + } + + if magicSearch.isLoading { + ProgressView() + .controlSize(.large) + .progressViewStyle(CircularProgressViewStyle(tint: .orangeMain500)) } } .navigationBarHidden(true) diff --git a/Linphone/UI/Main/ContentView.swift b/Linphone/UI/Main/ContentView.swift index 3fba105a3..590ec4130 100644 --- a/Linphone/UI/Main/ContentView.swift +++ b/Linphone/UI/Main/ContentView.swift @@ -544,7 +544,7 @@ struct ContentView: View { magicSearch.searchForContacts() } label: { HStack { - Text(String(format: String(localized: "contacts_list_filter_popup_see_linphone_only"), Bundle.main.displayName)) + Text(magicSearch.domainDefaultAccount == "*" ? String(localized: "contacts_list_filter_popup_see_sip_only") : String(format: String(localized: "contacts_list_filter_popup_see_linphone_only"), Bundle.main.displayName)) Spacer() if !magicSearch.allContact { Image("green-check") diff --git a/Linphone/UI/Main/Conversations/Fragments/ConversationForwardMessageFragment.swift b/Linphone/UI/Main/Conversations/Fragments/ConversationForwardMessageFragment.swift index 5a41b038d..403f0a14b 100644 --- a/Linphone/UI/Main/Conversations/Fragments/ConversationForwardMessageFragment.swift +++ b/Linphone/UI/Main/Conversations/Fragments/ConversationForwardMessageFragment.swift @@ -141,50 +141,58 @@ struct ConversationForwardMessageFragment: View { .padding(.vertical) .padding(.horizontal) - ScrollView { - if !conversationForwardMessageViewModel.conversationsList.isEmpty { - HStack(alignment: .center) { - Text("bottom_navigation_conversations_label") - .default_text_style_800(styleSize: 16) + ZStack { + ScrollView { + if !conversationForwardMessageViewModel.conversationsList.isEmpty { + HStack(alignment: .center) { + Text("bottom_navigation_conversations_label") + .default_text_style_800(styleSize: 16) + + Spacer() + } + .padding(.vertical, 10) + .padding(.horizontal, 16) - Spacer() + conversationsList } - .padding(.vertical, 10) + + if !ContactsManager.shared.lastSearch.isEmpty { + HStack(alignment: .center) { + Text("contacts_list_all_contacts_title") + .default_text_style_800(styleSize: 16) + + Spacer() + } + .padding(.vertical, 10) + .padding(.horizontal, 16) + } + + ContactsListFragment(showingSheet: .constant(false), startCallFunc: { addr in + withAnimation { + conversationForwardMessageViewModel.createOneToOneChatRoomWith(remote: addr) + } + + }) .padding(.horizontal, 16) - conversationsList + if !contactsManager.lastSearchSuggestions.isEmpty { + HStack(alignment: .center) { + Text("generic_address_picker_suggestions_list_title") + .default_text_style_800(styleSize: 16) + + Spacer() + } + .padding(.vertical, 10) + .padding(.horizontal, 16) + + suggestionsList + } } - if !ContactsManager.shared.lastSearch.isEmpty { - HStack(alignment: .center) { - Text("contacts_list_all_contacts_title") - .default_text_style_800(styleSize: 16) - - Spacer() - } - .padding(.vertical, 10) - .padding(.horizontal, 16) - } - - ContactsListFragment(showingSheet: .constant(false), startCallFunc: { addr in - withAnimation { - conversationForwardMessageViewModel.createOneToOneChatRoomWith(remote: addr) - } - - }) - .padding(.horizontal, 16) - - if !contactsManager.lastSearchSuggestions.isEmpty { - HStack(alignment: .center) { - Text("generic_address_picker_suggestions_list_title") - .default_text_style_800(styleSize: 16) - - Spacer() - } - .padding(.vertical, 10) - .padding(.horizontal, 16) - - suggestionsList + if magicSearch.isLoading { + ProgressView() + .controlSize(.large) + .progressViewStyle(CircularProgressViewStyle(tint: .orangeMain500)) } } } diff --git a/Linphone/UI/Main/Conversations/Fragments/StartConversationFragment.swift b/Linphone/UI/Main/Conversations/Fragments/StartConversationFragment.swift index 55d5dc64b..2a81a536f 100644 --- a/Linphone/UI/Main/Conversations/Fragments/StartConversationFragment.swift +++ b/Linphone/UI/Main/Conversations/Fragments/StartConversationFragment.swift @@ -170,34 +170,42 @@ struct StartConversationFragment: View { ) } - ScrollView { - if !ContactsManager.shared.lastSearch.isEmpty { - HStack(alignment: .center) { - Text("contacts_list_all_contacts_title") - .default_text_style_800(styleSize: 16) - - Spacer() + ZStack { + ScrollView { + if !ContactsManager.shared.lastSearch.isEmpty { + HStack(alignment: .center) { + Text("contacts_list_all_contacts_title") + .default_text_style_800(styleSize: 16) + + Spacer() + } + .padding(.vertical, 10) + .padding(.horizontal, 16) } - .padding(.vertical, 10) - .padding(.horizontal, 16) - } - - ContactsListFragment(showingSheet: .constant(false), startCallFunc: { addr in + + ContactsListFragment(showingSheet: .constant(false), startCallFunc: { addr in startConversationViewModel.createOneToOneChatRoomWith(remote: addr) - }) - .padding(.horizontal, 16) - - if !contactsManager.lastSearchSuggestions.isEmpty { - HStack(alignment: .center) { - Text("generic_address_picker_suggestions_list_title") - .default_text_style_800(styleSize: 16) - - Spacer() - } - .padding(.vertical, 10) + }) .padding(.horizontal, 16) - suggestionsList + if !contactsManager.lastSearchSuggestions.isEmpty { + HStack(alignment: .center) { + Text("generic_address_picker_suggestions_list_title") + .default_text_style_800(styleSize: 16) + + Spacer() + } + .padding(.vertical, 10) + .padding(.horizontal, 16) + + suggestionsList + } + } + + if magicSearch.isLoading { + ProgressView() + .controlSize(.large) + .progressViewStyle(CircularProgressViewStyle(tint: .orangeMain500)) } } } diff --git a/Linphone/UI/Main/History/Fragments/StartCallFragment.swift b/Linphone/UI/Main/History/Fragments/StartCallFragment.swift index 735f3928a..6e526c32c 100644 --- a/Linphone/UI/Main/History/Fragments/StartCallFragment.swift +++ b/Linphone/UI/Main/History/Fragments/StartCallFragment.swift @@ -235,75 +235,83 @@ struct StartCallFragment: View { ) } - ScrollView { - if !ContactsManager.shared.lastSearch.isEmpty { - HStack(alignment: .center) { - Text("contacts_list_all_contacts_title") - .default_text_style_800(styleSize: 16) - - Spacer() + ZStack { + ScrollView { + if !ContactsManager.shared.lastSearch.isEmpty { + HStack(alignment: .center) { + Text("contacts_list_all_contacts_title") + .default_text_style_800(styleSize: 16) + + Spacer() + } + .padding(.vertical, 10) + .padding(.horizontal, 16) } - .padding(.vertical, 10) - .padding(.horizontal, 16) - } - - ContactsListFragment(showingSheet: .constant(false) - , startCallFunc: { addr in - if callViewModel.isTransferInsteadCall { - showingDialer = false - - startCallViewModel.searchField = "" - magicSearch.currentFilter = "" - - magicSearch.searchForContacts() - - if callViewModel.isTransferInsteadCall == true { - callViewModel.isTransferInsteadCall = false + + ContactsListFragment(showingSheet: .constant(false) + , startCallFunc: { addr in + if callViewModel.isTransferInsteadCall { + showingDialer = false + + startCallViewModel.searchField = "" + magicSearch.currentFilter = "" + + magicSearch.searchForContacts() + + if callViewModel.isTransferInsteadCall == true { + callViewModel.isTransferInsteadCall = false + } + + resetCallView() + + delayColorDismiss() + + withAnimation { + isShowStartCallFragment.toggle() + callViewModel.blindTransferCallTo(toAddress: addr) + } + } else { + showingDialer = false + + startCallViewModel.searchField = "" + magicSearch.currentFilter = "" + + magicSearch.searchForContacts() + + if callViewModel.isTransferInsteadCall == true { + callViewModel.isTransferInsteadCall = false + } + + resetCallView() + + delayColorDismiss() + + withAnimation { + isShowStartCallFragment.toggle() + telecomManager.doCallOrJoinConf(address: addr) + } } - - resetCallView() - - delayColorDismiss() - - withAnimation { - isShowStartCallFragment.toggle() - callViewModel.blindTransferCallTo(toAddress: addr) - } - } else { - showingDialer = false - - startCallViewModel.searchField = "" - magicSearch.currentFilter = "" - - magicSearch.searchForContacts() - - if callViewModel.isTransferInsteadCall == true { - callViewModel.isTransferInsteadCall = false - } - - resetCallView() - - delayColorDismiss() - - withAnimation { - isShowStartCallFragment.toggle() - telecomManager.doCallOrJoinConf(address: addr) - } - } - }) - .padding(.horizontal, 16) - - if !contactsManager.lastSearchSuggestions.isEmpty { - HStack(alignment: .center) { - Text("generic_address_picker_suggestions_list_title") - .default_text_style_800(styleSize: 16) - - Spacer() - } - .padding(.vertical, 10) + }) .padding(.horizontal, 16) - suggestionsList + if !contactsManager.lastSearchSuggestions.isEmpty { + HStack(alignment: .center) { + Text("generic_address_picker_suggestions_list_title") + .default_text_style_800(styleSize: 16) + + Spacer() + } + .padding(.vertical, 10) + .padding(.horizontal, 16) + + suggestionsList + } + } + + if magicSearch.isLoading { + ProgressView() + .controlSize(.large) + .progressViewStyle(CircularProgressViewStyle(tint: .orangeMain500)) } } } diff --git a/Linphone/UI/Main/Meetings/Fragments/AddParticipantsFragment.swift b/Linphone/UI/Main/Meetings/Fragments/AddParticipantsFragment.swift index 92cdfb634..7d2df6c33 100644 --- a/Linphone/UI/Main/Meetings/Fragments/AddParticipantsFragment.swift +++ b/Linphone/UI/Main/Meetings/Fragments/AddParticipantsFragment.swift @@ -167,76 +167,84 @@ struct AddParticipantsFragment: View { .padding(.bottom) .padding(.horizontal) - ScrollView { - ForEach(0..