From a10f416f15e4b4fd0aedf795fe2ebf4e3363b152 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 18 Aug 2023 14:26:37 +0200 Subject: [PATCH] Added navigation from call log to contact --- .../linphone/ui/main/calls/fragment/CallFragment.kt | 10 +++++++++- .../org/linphone/ui/main/calls/model/CallLogModel.kt | 4 ++++ .../ui/main/contacts/fragment/ContactsFragment.kt | 9 +++++++++ .../main/contacts/fragment/ContactsListFragment.kt | 2 +- .../ui/main/viewmodel/SharedMainViewModel.kt | 4 ++++ app/src/main/res/layout/call_fragment.xml | 12 ++++++------ 6 files changed, 33 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallFragment.kt b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallFragment.kt index 3d0a76178..0ab9d2f84 100644 --- a/app/src/main/java/org/linphone/ui/main/calls/fragment/CallFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/fragment/CallFragment.kt @@ -137,10 +137,18 @@ class CallFragment : GenericFragment() { popupView.setAddToContactsListener { // TODO: go to new contact fragment + sharedViewModel.navigateToContactsEvent.value = Event(true) + sharedViewModel.showNewContactEvent.value = Event(true) + popupWindow.dismiss() } popupView.setGoToContactListener { - // TODO: go to contact fragment + val friendRefKey = viewModel.callLogModel.value?.friendRefKey + if (!friendRefKey.isNullOrEmpty()) { + sharedViewModel.navigateToContactsEvent.value = Event(true) + sharedViewModel.showContactEvent.value = Event(friendRefKey) + } + popupWindow.dismiss() } popupView.setDeleteAllHistoryClickListener { diff --git a/app/src/main/java/org/linphone/ui/main/calls/model/CallLogModel.kt b/app/src/main/java/org/linphone/ui/main/calls/model/CallLogModel.kt index 690be3b88..9677cc7f0 100644 --- a/app/src/main/java/org/linphone/ui/main/calls/model/CallLogModel.kt +++ b/app/src/main/java/org/linphone/ui/main/calls/model/CallLogModel.kt @@ -25,6 +25,8 @@ class CallLogModel(private val callLog: CallLog) { val dateTime = MutableLiveData() + val friendRefKey: String? + var friendExists: Boolean = false init { @@ -43,11 +45,13 @@ class CallLogModel(private val callLog: CallLog) { val friend = coreContext.core.findFriend(address) if (friend != null) { + friendRefKey = friend.refKey avatarModel = ContactAvatarModel(friend) friendExists = true } else { val fakeFriend = coreContext.core.createFriend() fakeFriend.address = address + friendRefKey = null avatarModel = ContactAvatarModel(fakeFriend) friendExists = false } diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsFragment.kt index 25352d70d..62f5ebd37 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsFragment.kt @@ -91,6 +91,15 @@ class ContactsFragment : GenericFragment() { } } + sharedViewModel.showNewContactEvent.observe( + viewLifecycleOwner + ) { + it.consume { + val navController = binding.contactsLeftNavContainer.findNavController() + navController.navigate(R.id.action_global_newContactFragment) + } + } + sharedViewModel.navigateToConversationsEvent.observe(viewLifecycleOwner) { it.consume { if (findNavController().currentDestination?.id == R.id.contactsFragment) { diff --git a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt index 2689a63d0..c143eb1b9 100644 --- a/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt +++ b/app/src/main/java/org/linphone/ui/main/contacts/fragment/ContactsListFragment.kt @@ -112,7 +112,7 @@ class ContactsListFragment : GenericFragment() { } binding.setOnNewContactClicked { - findNavController().navigate(R.id.action_global_newContactFragment) + sharedViewModel.showNewContactEvent.value = Event(true) } } diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt index 2b921dee7..79df5acb5 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/SharedMainViewModel.kt @@ -62,6 +62,10 @@ class SharedMainViewModel : ViewModel() { MutableLiveData>() } + val showNewContactEvent: MutableLiveData> by lazy { + MutableLiveData>() + } + /* Call logs related */ val showCallLogEvent: MutableLiveData> by lazy { diff --git a/app/src/main/res/layout/call_fragment.xml b/app/src/main/res/layout/call_fragment.xml index 0f3b1fdad..937a5db9e 100644 --- a/app/src/main/res/layout/call_fragment.xml +++ b/app/src/main/res/layout/call_fragment.xml @@ -33,19 +33,19 @@ android:onClick="@{backClickListener}" android:visibility="@{viewModel.showBackButton ? View.VISIBLE : View.GONE}" android:src="@drawable/back" - app:layout_constraintBottom_toBottomOf="@id/invisible_title" + app:layout_constraintBottom_toBottomOf="@id/title" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="@id/invisible_title"/> + app:layout_constraintTop_toTopOf="@id/title"/> + app:layout_constraintTop_toTopOf="@id/title" />