From 188800e9bd92cbf9680ef7a5d9785e37d6ad3106 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Tue, 13 Jul 2021 16:32:12 +0200 Subject: [PATCH] Fixed detail part of sliding pane when removing entry from the master list --- .../org/linphone/activities/Navigation.kt | 36 +++++++++++++++++++ .../chat/fragments/MasterChatRoomsFragment.kt | 19 +++++++++- .../fragments/MasterContactsFragment.kt | 19 +++++++++- .../fragments/MasterCallLogsFragment.kt | 19 +++++++++- .../main/res/navigation/chat_nav_graph.xml | 29 ++++++++------- .../res/navigation/contacts_nav_graph.xml | 15 ++++---- .../main/res/navigation/history_nav_graph.xml | 5 ++- 7 files changed, 119 insertions(+), 23 deletions(-) diff --git a/app/src/main/java/org/linphone/activities/Navigation.kt b/app/src/main/java/org/linphone/activities/Navigation.kt index 37e98e88d..95657d39f 100644 --- a/app/src/main/java/org/linphone/activities/Navigation.kt +++ b/app/src/main/java/org/linphone/activities/Navigation.kt @@ -309,6 +309,18 @@ internal fun MasterChatRoomsFragment.navigateToChatRoomCreation( } } +internal fun MasterChatRoomsFragment.clearDisplayedChatRoom() { + if (findNavController().currentDestination?.id == R.id.masterChatRoomsFragment) { + val navHostFragment = + childFragmentManager.findFragmentById(R.id.chat_nav_container) as NavHostFragment + navHostFragment.navController.navigate( + R.id.action_global_emptyChatFragment, + null, + popupTo(R.id.emptyChatFragment, true) + ) + } +} + internal fun DetailChatRoomFragment.navigateToContacts(sipUriToAdd: String) { val deepLink = "linphone-android://contact/new/$sipUriToAdd" findMasterNavController().navigate(Uri.parse(deepLink), getLeftToRightAnimationNavOptions()) @@ -465,6 +477,18 @@ internal fun MasterContactsFragment.navigateToContactEditor(sipUriToAdd: String? } } +internal fun MasterContactsFragment.clearDisplayedContact() { + if (findNavController().currentDestination?.id == R.id.masterContactsFragment) { + val navHostFragment = + childFragmentManager.findFragmentById(R.id.contacts_nav_container) as NavHostFragment + navHostFragment.navController.navigate( + R.id.action_global_emptyContactFragment, + null, + popupTo(R.id.emptyContactFragment, true) + ) + } +} + internal fun ContactEditorFragment.navigateToContact(contact: NativeContact) { val bundle = Bundle() bundle.putString("id", contact.nativeId) @@ -515,6 +539,18 @@ internal fun MasterCallLogsFragment.navigateToCallHistory() { } } +internal fun MasterCallLogsFragment.clearDisplayedCallHistory() { + if (findNavController().currentDestination?.id == R.id.masterCallLogsFragment) { + val navHostFragment = + childFragmentManager.findFragmentById(R.id.history_nav_container) as NavHostFragment + navHostFragment.navController.navigate( + R.id.action_global_emptyFragment, + null, + popupTo(R.id.emptyFragment, true) + ) + } +} + internal fun MasterCallLogsFragment.navigateToDialer(args: Bundle?) { findNavController().navigate( R.id.action_global_dialerFragment, diff --git a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt index 8236e13ec..f0c0174dd 100644 --- a/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/chat/fragments/MasterChatRoomsFragment.kt @@ -32,6 +32,7 @@ import androidx.slidingpanelayout.widget.SlidingPaneLayout import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R import org.linphone.activities.GenericActivity +import org.linphone.activities.clearDisplayedChatRoom import org.linphone.activities.main.MainActivity import org.linphone.activities.main.chat.adapters.ChatRoomsListAdapter import org.linphone.activities.main.chat.viewmodels.ChatRoomsListViewModel @@ -163,7 +164,13 @@ class MasterChatRoomsFragment : MasterFragment) { val list = ArrayList() + var closeSlidingPane = false for (index in indexesOfItemToDelete) { val chatRoomViewModel = adapter.currentList[index] list.add(chatRoomViewModel.chatRoom) + + if (chatRoomViewModel.chatRoom == sharedViewModel.selectedChatRoom.value) { + closeSlidingPane = true + } } listViewModel.deleteChatRooms(list) + + if (!binding.slidingPane.isSlideable && closeSlidingPane) { + Log.i("[Chat] Currently displayed chat room has been deleted, removing detail fragment") + clearDisplayedChatRoom() + } } private fun scrollToTop() { diff --git a/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt b/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt index 7c68ad41e..58064fdbb 100644 --- a/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/contact/fragments/MasterContactsFragment.kt @@ -32,6 +32,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.slidingpanelayout.widget.SlidingPaneLayout import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R +import org.linphone.activities.clearDisplayedContact import org.linphone.activities.main.MainActivity import org.linphone.activities.main.contact.adapters.ContactsListAdapter import org.linphone.activities.main.contact.viewmodels.ContactsListViewModel @@ -147,7 +148,13 @@ class MasterContactsFragment : MasterFragment) { val list = ArrayList() + var closeSlidingPane = false for (index in indexesOfItemToDelete) { val contact = adapter.currentList[index].contactInternal list.add(contact) + + if (contact == sharedViewModel.selectedContact.value) { + closeSlidingPane = true + } } listViewModel.deleteContacts(list) + + if (!binding.slidingPane.isSlideable && closeSlidingPane) { + Log.i("[Contacts] Currently displayed contact has been deleted, removing detail fragment") + clearDisplayedContact() + } } override fun onRequestPermissionsResult( diff --git a/app/src/main/java/org/linphone/activities/main/history/fragments/MasterCallLogsFragment.kt b/app/src/main/java/org/linphone/activities/main/history/fragments/MasterCallLogsFragment.kt index 546006c71..b27c14f9f 100644 --- a/app/src/main/java/org/linphone/activities/main/history/fragments/MasterCallLogsFragment.kt +++ b/app/src/main/java/org/linphone/activities/main/history/fragments/MasterCallLogsFragment.kt @@ -31,6 +31,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.slidingpanelayout.widget.SlidingPaneLayout import org.linphone.LinphoneApplication.Companion.coreContext import org.linphone.R +import org.linphone.activities.clearDisplayedCallHistory import org.linphone.activities.main.fragments.MasterFragment import org.linphone.activities.main.history.adapters.CallLogsListAdapter import org.linphone.activities.main.history.data.GroupedCallLogData @@ -148,7 +149,13 @@ class MasterCallLogsFragment : MasterFragment) { val list = ArrayList() + var closeSlidingPane = false for (index in indexesOfItemToDelete) { val callLogGroup = adapter.currentList[index] list.add(callLogGroup) + + if (callLogGroup.lastCallLog.callId == sharedViewModel.selectedCallLogGroup.value?.lastCallLog?.callId) { + closeSlidingPane = true + } } listViewModel.deleteCallLogGroups(list) + + if (!binding.slidingPane.isSlideable && closeSlidingPane) { + Log.i("[History] Currently displayed history has been deleted, removing detail fragment") + clearDisplayedCallHistory() + } } private fun scrollToTop() { diff --git a/app/src/main/res/navigation/chat_nav_graph.xml b/app/src/main/res/navigation/chat_nav_graph.xml index 2a3b2abab..a86d680f7 100644 --- a/app/src/main/res/navigation/chat_nav_graph.xml +++ b/app/src/main/res/navigation/chat_nav_graph.xml @@ -9,13 +9,16 @@ android:id="@+id/emptyChatFragment" android:name="org.linphone.activities.main.fragments.EmptyFragment" tools:layout="@layout/empty_fragment" - android:label="EmptyFragment" /> + android:label="EmptyFragment" /> + + + android:label="DetailChatRoomFragment"> @@ -30,11 +33,15 @@ app:destination="@id/ephemeralFragment" /> + + + android:label="ChatRoomCreationFragment"> + + + android:label="GroupInfoFragment"> @@ -70,20 +81,12 @@ android:id="@+id/imdnFragment" android:name="org.linphone.activities.main.chat.fragments.ImdnFragment" tools:layout="@layout/chat_room_imdn_fragment" - android:label="ImdnFragment" > + android:label="ImdnFragment"> - - - - + android:label="EmptyFragment" /> + + + + + android:label="ContactEditorFragment"> - - diff --git a/app/src/main/res/navigation/history_nav_graph.xml b/app/src/main/res/navigation/history_nav_graph.xml index d10270905..e165871dc 100644 --- a/app/src/main/res/navigation/history_nav_graph.xml +++ b/app/src/main/res/navigation/history_nav_graph.xml @@ -9,7 +9,10 @@ android:id="@+id/emptyFragment" android:name="org.linphone.activities.main.fragments.EmptyFragment" tools:layout="@layout/empty_fragment" - android:label="EmptyFragment"/> + android:label="EmptyFragment" /> + +