diff --git a/app/src/main/java/org/linphone/core/CoreContext.kt b/app/src/main/java/org/linphone/core/CoreContext.kt
index 790606bca..056fe30d9 100644
--- a/app/src/main/java/org/linphone/core/CoreContext.kt
+++ b/app/src/main/java/org/linphone/core/CoreContext.kt
@@ -33,7 +33,6 @@ import androidx.emoji2.text.EmojiCompat
import androidx.lifecycle.MutableLiveData
import java.util.*
import org.linphone.BuildConfig
-import org.linphone.LinphoneApplication
import org.linphone.LinphoneApplication.Companion.corePreferences
import org.linphone.contacts.ContactsManager
import org.linphone.core.tools.Log
diff --git a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt
index 40b1e145b..51e56e5c0 100644
--- a/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt
+++ b/app/src/main/java/org/linphone/ui/call/viewmodel/CurrentCallViewModel.kt
@@ -265,10 +265,14 @@ class CurrentCallViewModel @UiThread constructor() : ViewModel() {
// TODO FIXME: Remote is call being transferred, not transferee !
if (state == Call.State.OutgoingProgress) {
- val displayName = coreContext.contactsManager.findDisplayName(transfered.remoteAddress)
+ val displayName = coreContext.contactsManager.findDisplayName(
+ transfered.remoteAddress
+ )
transferInProgressEvent.postValue(Event(displayName))
} else if (LinphoneUtils.isCallEnding(state)) {
- val displayName = coreContext.contactsManager.findDisplayName(transfered.remoteAddress)
+ val displayName = coreContext.contactsManager.findDisplayName(
+ transfered.remoteAddress
+ )
transferFailedEvent.postValue(Event(displayName))
}
}
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 d2420f61e..ccad67dd0 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
@@ -22,18 +22,22 @@ package org.linphone.ui.main.contacts.fragment
import android.content.Intent
import android.os.Bundle
import android.provider.ContactsContract
+import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import android.widget.PopupWindow
import androidx.annotation.UiThread
import androidx.core.content.FileProvider
import androidx.core.view.doOnPreDraw
+import androidx.databinding.DataBindingUtil
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
import java.io.File
import org.linphone.LinphoneApplication.Companion.coreContext
import org.linphone.R
import org.linphone.core.tools.Log
+import org.linphone.databinding.ContactsListFilterPopupMenuBinding
import org.linphone.databinding.ContactsListFragmentBinding
import org.linphone.ui.main.contacts.adapter.ContactsListAdapter
import org.linphone.ui.main.contacts.viewmodel.ContactsListViewModel
@@ -133,8 +137,7 @@ class ContactsListFragment : AbstractTopBarFragment() {
}
binding.setFilterClickListener {
- // TODO FIXME: show context menu first to let user decides which filter to use
- listViewModel.toggleContactsFilter()
+ showFilterPopupMenu(binding.filter)
}
sharedViewModel.defaultAccountChangedEvent.observe(viewLifecycleOwner) {
@@ -230,4 +233,39 @@ class ContactsListFragment : AbstractTopBarFragment() {
val shareIntent = Intent.createChooser(sendIntent, null)
startActivity(shareIntent)
}
+
+ private fun showFilterPopupMenu(view: View) {
+ val popupView: ContactsListFilterPopupMenuBinding = DataBindingUtil.inflate(
+ LayoutInflater.from(requireContext()),
+ R.layout.contacts_list_filter_popup_menu,
+ null,
+ false
+ )
+ popupView.seeAllSelected = listViewModel.areAllContactsDisplayed()
+
+ val popupWindow = PopupWindow(
+ popupView.root,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ true
+ )
+
+ popupView.setNoFilterClickListener {
+ if (!listViewModel.areAllContactsDisplayed()) {
+ listViewModel.changeContactsFilter(onlyLinphoneContacts = false)
+ }
+ popupWindow.dismiss()
+ }
+
+ popupView.setLinphoneOnlyClickListener {
+ if (listViewModel.areAllContactsDisplayed()) {
+ listViewModel.changeContactsFilter(onlyLinphoneContacts = true)
+ }
+ popupWindow.dismiss()
+ }
+
+ // Elevation is for showing a shadow around the popup
+ popupWindow.elevation = 20f
+ popupWindow.showAsDropDown(view, 0, 0, Gravity.BOTTOM)
+ }
}
diff --git a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt
index 28c9c628e..62b7f010a 100644
--- a/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt
+++ b/app/src/main/java/org/linphone/ui/main/contacts/viewmodel/ContactsListViewModel.kt
@@ -120,11 +120,15 @@ class ContactsListViewModel @UiThread constructor() : AbstractTopBarViewModel()
}
@UiThread
- fun toggleContactsFilter() {
- limitSearchToLinphoneAccounts = !limitSearchToLinphoneAccounts
+ fun changeContactsFilter(onlyLinphoneContacts: Boolean) {
+ limitSearchToLinphoneAccounts = onlyLinphoneContacts
applyFilter(currentFilter)
}
+ fun areAllContactsDisplayed(): Boolean {
+ return !limitSearchToLinphoneAccounts
+ }
+
@UiThread
fun toggleFavouritesVisibility() {
showFavourites.value = showFavourites.value == false
diff --git a/app/src/main/res/layout/contacts_list_filter_popup_menu.xml b/app/src/main/res/layout/contacts_list_filter_popup_menu.xml
new file mode 100644
index 000000000..88f061660
--- /dev/null
+++ b/app/src/main/res/layout/contacts_list_filter_popup_menu.xml
@@ -0,0 +1,89 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index f038f8777..35e55c7b1 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -243,6 +243,8 @@
No contact for the moment…
Favourites
All contacts
+ See all
+ See &appName; contacts
New contact
Edit contact