Fixed detail part of sliding pane when removing entry from the master list
This commit is contained in:
parent
12dcb10485
commit
188800e9bd
7 changed files with 119 additions and 23 deletions
|
@ -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) {
|
internal fun DetailChatRoomFragment.navigateToContacts(sipUriToAdd: String) {
|
||||||
val deepLink = "linphone-android://contact/new/$sipUriToAdd"
|
val deepLink = "linphone-android://contact/new/$sipUriToAdd"
|
||||||
findMasterNavController().navigate(Uri.parse(deepLink), getLeftToRightAnimationNavOptions())
|
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) {
|
internal fun ContactEditorFragment.navigateToContact(contact: NativeContact) {
|
||||||
val bundle = Bundle()
|
val bundle = Bundle()
|
||||||
bundle.putString("id", contact.nativeId)
|
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?) {
|
internal fun MasterCallLogsFragment.navigateToDialer(args: Bundle?) {
|
||||||
findNavController().navigate(
|
findNavController().navigate(
|
||||||
R.id.action_global_dialerFragment,
|
R.id.action_global_dialerFragment,
|
||||||
|
|
|
@ -32,6 +32,7 @@ import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
import org.linphone.activities.GenericActivity
|
import org.linphone.activities.GenericActivity
|
||||||
|
import org.linphone.activities.clearDisplayedChatRoom
|
||||||
import org.linphone.activities.main.MainActivity
|
import org.linphone.activities.main.MainActivity
|
||||||
import org.linphone.activities.main.chat.adapters.ChatRoomsListAdapter
|
import org.linphone.activities.main.chat.adapters.ChatRoomsListAdapter
|
||||||
import org.linphone.activities.main.chat.viewmodels.ChatRoomsListViewModel
|
import org.linphone.activities.main.chat.viewmodels.ChatRoomsListViewModel
|
||||||
|
@ -163,7 +164,13 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
|
||||||
}
|
}
|
||||||
|
|
||||||
viewModel.showDeleteButton({
|
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()
|
dialog.dismiss()
|
||||||
}, getString(R.string.dialog_delete))
|
}, getString(R.string.dialog_delete))
|
||||||
|
|
||||||
|
@ -296,11 +303,21 @@ class MasterChatRoomsFragment : MasterFragment<ChatRoomMasterFragmentBinding, Ch
|
||||||
|
|
||||||
override fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) {
|
override fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) {
|
||||||
val list = ArrayList<ChatRoom>()
|
val list = ArrayList<ChatRoom>()
|
||||||
|
var closeSlidingPane = false
|
||||||
for (index in indexesOfItemToDelete) {
|
for (index in indexesOfItemToDelete) {
|
||||||
val chatRoomViewModel = adapter.currentList[index]
|
val chatRoomViewModel = adapter.currentList[index]
|
||||||
list.add(chatRoomViewModel.chatRoom)
|
list.add(chatRoomViewModel.chatRoom)
|
||||||
|
|
||||||
|
if (chatRoomViewModel.chatRoom == sharedViewModel.selectedChatRoom.value) {
|
||||||
|
closeSlidingPane = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
listViewModel.deleteChatRooms(list)
|
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() {
|
private fun scrollToTop() {
|
||||||
|
|
|
@ -32,6 +32,7 @@ import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
|
import org.linphone.activities.clearDisplayedContact
|
||||||
import org.linphone.activities.main.MainActivity
|
import org.linphone.activities.main.MainActivity
|
||||||
import org.linphone.activities.main.contact.adapters.ContactsListAdapter
|
import org.linphone.activities.main.contact.adapters.ContactsListAdapter
|
||||||
import org.linphone.activities.main.contact.viewmodels.ContactsListViewModel
|
import org.linphone.activities.main.contact.viewmodels.ContactsListViewModel
|
||||||
|
@ -147,7 +148,13 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
|
||||||
}
|
}
|
||||||
|
|
||||||
viewModel.showDeleteButton({
|
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()
|
dialog.dismiss()
|
||||||
}, getString(R.string.dialog_delete))
|
}, getString(R.string.dialog_delete))
|
||||||
|
|
||||||
|
@ -258,11 +265,21 @@ class MasterContactsFragment : MasterFragment<ContactMasterFragmentBinding, Cont
|
||||||
|
|
||||||
override fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) {
|
override fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) {
|
||||||
val list = ArrayList<Contact>()
|
val list = ArrayList<Contact>()
|
||||||
|
var closeSlidingPane = false
|
||||||
for (index in indexesOfItemToDelete) {
|
for (index in indexesOfItemToDelete) {
|
||||||
val contact = adapter.currentList[index].contactInternal
|
val contact = adapter.currentList[index].contactInternal
|
||||||
list.add(contact)
|
list.add(contact)
|
||||||
|
|
||||||
|
if (contact == sharedViewModel.selectedContact.value) {
|
||||||
|
closeSlidingPane = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
listViewModel.deleteContacts(list)
|
listViewModel.deleteContacts(list)
|
||||||
|
|
||||||
|
if (!binding.slidingPane.isSlideable && closeSlidingPane) {
|
||||||
|
Log.i("[Contacts] Currently displayed contact has been deleted, removing detail fragment")
|
||||||
|
clearDisplayedContact()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onRequestPermissionsResult(
|
override fun onRequestPermissionsResult(
|
||||||
|
|
|
@ -31,6 +31,7 @@ import androidx.recyclerview.widget.RecyclerView
|
||||||
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
import androidx.slidingpanelayout.widget.SlidingPaneLayout
|
||||||
import org.linphone.LinphoneApplication.Companion.coreContext
|
import org.linphone.LinphoneApplication.Companion.coreContext
|
||||||
import org.linphone.R
|
import org.linphone.R
|
||||||
|
import org.linphone.activities.clearDisplayedCallHistory
|
||||||
import org.linphone.activities.main.fragments.MasterFragment
|
import org.linphone.activities.main.fragments.MasterFragment
|
||||||
import org.linphone.activities.main.history.adapters.CallLogsListAdapter
|
import org.linphone.activities.main.history.adapters.CallLogsListAdapter
|
||||||
import org.linphone.activities.main.history.data.GroupedCallLogData
|
import org.linphone.activities.main.history.data.GroupedCallLogData
|
||||||
|
@ -148,7 +149,13 @@ class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, Call
|
||||||
}
|
}
|
||||||
|
|
||||||
viewModel.showDeleteButton({
|
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()
|
dialog.dismiss()
|
||||||
}, getString(R.string.dialog_delete))
|
}, getString(R.string.dialog_delete))
|
||||||
|
|
||||||
|
@ -238,11 +245,21 @@ class MasterCallLogsFragment : MasterFragment<HistoryMasterFragmentBinding, Call
|
||||||
|
|
||||||
override fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) {
|
override fun deleteItems(indexesOfItemToDelete: ArrayList<Int>) {
|
||||||
val list = ArrayList<GroupedCallLogData>()
|
val list = ArrayList<GroupedCallLogData>()
|
||||||
|
var closeSlidingPane = false
|
||||||
for (index in indexesOfItemToDelete) {
|
for (index in indexesOfItemToDelete) {
|
||||||
val callLogGroup = adapter.currentList[index]
|
val callLogGroup = adapter.currentList[index]
|
||||||
list.add(callLogGroup)
|
list.add(callLogGroup)
|
||||||
|
|
||||||
|
if (callLogGroup.lastCallLog.callId == sharedViewModel.selectedCallLogGroup.value?.lastCallLog?.callId) {
|
||||||
|
closeSlidingPane = true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
listViewModel.deleteCallLogGroups(list)
|
listViewModel.deleteCallLogGroups(list)
|
||||||
|
|
||||||
|
if (!binding.slidingPane.isSlideable && closeSlidingPane) {
|
||||||
|
Log.i("[History] Currently displayed history has been deleted, removing detail fragment")
|
||||||
|
clearDisplayedCallHistory()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun scrollToTop() {
|
private fun scrollToTop() {
|
||||||
|
|
|
@ -11,6 +11,9 @@
|
||||||
tools:layout="@layout/empty_fragment"
|
tools:layout="@layout/empty_fragment"
|
||||||
android:label="EmptyFragment" />
|
android:label="EmptyFragment" />
|
||||||
|
|
||||||
|
<action android:id="@+id/action_global_emptyChatFragment"
|
||||||
|
app:destination="@id/emptyChatFragment" />
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/detailChatRoomFragment"
|
android:id="@+id/detailChatRoomFragment"
|
||||||
android:name="org.linphone.activities.main.chat.fragments.DetailChatRoomFragment"
|
android:name="org.linphone.activities.main.chat.fragments.DetailChatRoomFragment"
|
||||||
|
@ -30,6 +33,10 @@
|
||||||
app:destination="@id/ephemeralFragment" />
|
app:destination="@id/ephemeralFragment" />
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_global_detailChatRoomFragment"
|
||||||
|
app:destination="@id/detailChatRoomFragment" />
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/chatRoomCreationFragment"
|
android:id="@+id/chatRoomCreationFragment"
|
||||||
android:name="org.linphone.activities.main.chat.fragments.ChatRoomCreationFragment"
|
android:name="org.linphone.activities.main.chat.fragments.ChatRoomCreationFragment"
|
||||||
|
@ -47,6 +54,10 @@
|
||||||
app:destination="@id/detailChatRoomFragment" />
|
app:destination="@id/detailChatRoomFragment" />
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_global_chatRoomCreationFragment"
|
||||||
|
app:destination="@id/chatRoomCreationFragment" />
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/devicesFragment"
|
android:id="@+id/devicesFragment"
|
||||||
android:name="org.linphone.activities.main.chat.fragments.DevicesFragment"
|
android:name="org.linphone.activities.main.chat.fragments.DevicesFragment"
|
||||||
|
@ -76,14 +87,6 @@
|
||||||
app:argType="string" />
|
app:argType="string" />
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
<action
|
|
||||||
android:id="@+id/action_global_detailChatRoomFragment"
|
|
||||||
app:destination="@id/detailChatRoomFragment" />
|
|
||||||
|
|
||||||
<action
|
|
||||||
android:id="@+id/action_global_chatRoomCreationFragment"
|
|
||||||
app:destination="@id/chatRoomCreationFragment" />
|
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/ephemeralFragment"
|
android:id="@+id/ephemeralFragment"
|
||||||
android:name="org.linphone.activities.main.chat.fragments.EphemeralFragment"
|
android:name="org.linphone.activities.main.chat.fragments.EphemeralFragment"
|
||||||
|
|
|
@ -11,6 +11,9 @@
|
||||||
tools:layout="@layout/empty_fragment"
|
tools:layout="@layout/empty_fragment"
|
||||||
android:label="EmptyFragment" />
|
android:label="EmptyFragment" />
|
||||||
|
|
||||||
|
<action android:id="@+id/action_global_emptyContactFragment"
|
||||||
|
app:destination="@id/emptyContactFragment" />
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/detailContactFragment"
|
android:id="@+id/detailContactFragment"
|
||||||
android:name="org.linphone.activities.main.contact.fragments.DetailContactFragment"
|
android:name="org.linphone.activities.main.contact.fragments.DetailContactFragment"
|
||||||
|
@ -26,6 +29,10 @@
|
||||||
app:destination="@id/chat_nav_graph.xml" />
|
app:destination="@id/chat_nav_graph.xml" />
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_global_detailContactFragment"
|
||||||
|
app:destination="@id/detailContactFragment" />
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/contactEditorFragment"
|
android:id="@+id/contactEditorFragment"
|
||||||
android:name="org.linphone.activities.main.contact.fragments.ContactEditorFragment"
|
android:name="org.linphone.activities.main.contact.fragments.ContactEditorFragment"
|
||||||
|
@ -40,10 +47,6 @@
|
||||||
app:destination="@id/detailContactFragment" />
|
app:destination="@id/detailContactFragment" />
|
||||||
</fragment>
|
</fragment>
|
||||||
|
|
||||||
<action
|
|
||||||
android:id="@+id/action_global_detailContactFragment"
|
|
||||||
app:destination="@id/detailContactFragment" />
|
|
||||||
|
|
||||||
<action
|
<action
|
||||||
android:id="@+id/action_global_contactEditorFragment"
|
android:id="@+id/action_global_contactEditorFragment"
|
||||||
app:destination="@id/contactEditorFragment" />
|
app:destination="@id/contactEditorFragment" />
|
||||||
|
|
|
@ -11,6 +11,9 @@
|
||||||
tools:layout="@layout/empty_fragment"
|
tools:layout="@layout/empty_fragment"
|
||||||
android:label="EmptyFragment" />
|
android:label="EmptyFragment" />
|
||||||
|
|
||||||
|
<action android:id="@+id/action_global_emptyFragment"
|
||||||
|
app:destination="@id/emptyFragment" />
|
||||||
|
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/detailCallLogFragment"
|
android:id="@+id/detailCallLogFragment"
|
||||||
android:name="org.linphone.activities.main.history.fragments.DetailCallLogFragment"
|
android:name="org.linphone.activities.main.history.fragments.DetailCallLogFragment"
|
||||||
|
|
Loading…
Reference in a new issue