Fixed detail part of sliding pane when removing entry from the master list

This commit is contained in:
Sylvain Berfini 2021-07-13 16:32:12 +02:00
parent 12dcb10485
commit 188800e9bd
7 changed files with 119 additions and 23 deletions

View file

@ -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,

View file

@ -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<ChatRoomMasterFragmentBinding, Ch
}
viewModel.showDeleteButton({
listViewModel.deleteChatRoom(adapter.currentList[viewHolder.adapterPosition].chatRoom)
val deletedChatRoom = adapter.currentList[viewHolder.adapterPosition].chatRoom
listViewModel.deleteChatRoom(deletedChatRoom)
if (!binding.slidingPane.isSlideable &&
deletedChatRoom == sharedViewModel.selectedChatRoom.value) {
Log.i("[Chat] Currently displayed chat room has been deleted, removing detail fragment")
clearDisplayedChatRoom()
}
dialog.dismiss()
}, getString(R.string.dialog_delete))
@ -296,11 +303,21 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
override fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) {
val list = ArrayList<ChatRoom>()
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() {

View file

@ -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<ContactMasterFragmentBinding, Cont
}
viewModel.showDeleteButton({
listViewModel.deleteContact(adapter.currentList[viewHolder.adapterPosition].contactInternal)
val deletedContact = adapter.currentList[viewHolder.adapterPosition].contactInternal
listViewModel.deleteContact(deletedContact)
if (!binding.slidingPane.isSlideable &&
deletedContact == sharedViewModel.selectedContact.value) {
Log.i("[Contacts] Currently displayed contact has been deleted, removing detail fragment")
clearDisplayedContact()
}
dialog.dismiss()
}, getString(R.string.dialog_delete))
@ -258,11 +265,21 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
override fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) {
val list = ArrayList<Contact>()
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(

View file

@ -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<HistoryMasterFragmentBinding, Call
}
viewModel.showDeleteButton({
listViewModel.deleteCallLogGroup(adapter.currentList[viewHolder.adapterPosition])
val deletedCallGroup = adapter.currentList[viewHolder.adapterPosition]
listViewModel.deleteCallLogGroup(deletedCallGroup)
if (!binding.slidingPane.isSlideable &&
deletedCallGroup.lastCallLog.callId == sharedViewModel.selectedCallLogGroup.value?.lastCallLog?.callId) {
Log.i("[History] Currently displayed history has been deleted, removing detail fragment")
clearDisplayedCallHistory()
}
dialog.dismiss()
}, getString(R.string.dialog_delete))
@ -238,11 +245,21 @@ class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, Call
override fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) {
val list = ArrayList<GroupedCallLogData>()
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() {

View file

@ -11,6 +11,9 @@
tools:layout="@layout/empty_fragment"
android:label="EmptyFragment" />
<action android:id="@+id/action_global_emptyChatFragment"
app:destination="@id/emptyChatFragment" />
<fragment
android:id="@+id/detailChatRoomFragment"
android:name="org.linphone.activities.main.chat.fragments.DetailChatRoomFragment"
@ -30,6 +33,10 @@
app:destination="@id/ephemeralFragment" />
</fragment>
<action
android:id="@+id/action_global_detailChatRoomFragment"
app:destination="@id/detailChatRoomFragment" />
<fragment
android:id="@+id/chatRoomCreationFragment"
android:name="org.linphone.activities.main.chat.fragments.ChatRoomCreationFragment"
@ -47,6 +54,10 @@
app:destination="@id/detailChatRoomFragment" />
</fragment>
<action
android:id="@+id/action_global_chatRoomCreationFragment"
app:destination="@id/chatRoomCreationFragment" />
<fragment
android:id="@+id/devicesFragment"
android:name="org.linphone.activities.main.chat.fragments.DevicesFragment"
@ -76,14 +87,6 @@
app:argType="string" />
</fragment>
<action
android:id="@+id/action_global_detailChatRoomFragment"
app:destination="@id/detailChatRoomFragment" />
<action
android:id="@+id/action_global_chatRoomCreationFragment"
app:destination="@id/chatRoomCreationFragment" />
<fragment
android:id="@+id/ephemeralFragment"
android:name="org.linphone.activities.main.chat.fragments.EphemeralFragment"

View file

@ -11,6 +11,9 @@
tools:layout="@layout/empty_fragment"
android:label="EmptyFragment" />
<action android:id="@+id/action_global_emptyContactFragment"
app:destination="@id/emptyContactFragment" />
<fragment
android:id="@+id/detailContactFragment"
android:name="org.linphone.activities.main.contact.fragments.DetailContactFragment"
@ -26,6 +29,10 @@
app:destination="@id/chat_nav_graph.xml" />
</fragment>
<action
android:id="@+id/action_global_detailContactFragment"
app:destination="@id/detailContactFragment" />
<fragment
android:id="@+id/contactEditorFragment"
android:name="org.linphone.activities.main.contact.fragments.ContactEditorFragment"
@ -40,10 +47,6 @@
app:destination="@id/detailContactFragment" />
</fragment>
<action
android:id="@+id/action_global_detailContactFragment"
app:destination="@id/detailContactFragment" />
<action
android:id="@+id/action_global_contactEditorFragment"
app:destination="@id/contactEditorFragment" />

View file

@ -11,6 +11,9 @@
tools:layout="@layout/empty_fragment"
android:label="EmptyFragment" />
<action android:id="@+id/action_global_emptyFragment"
app:destination="@id/emptyFragment" />
<fragment
android:id="@+id/detailCallLogFragment"
android:name="org.linphone.activities.main.history.fragments.DetailCallLogFragment"