From a3ed13bc797762c66bdf044971377db6b9cbd347 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Thu, 12 Dec 2024 15:58:53 +0100 Subject: [PATCH] Show starred contacts first in lists --- ...ationsContactsAndSuggestionsListAdapter.kt | 20 +++++++++++++------ .../viewmodel/AddressSelectionViewModel.kt | 13 ++++++++++-- app/src/main/res/values-fr/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 4 files changed, 27 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/linphone/ui/main/adapter/ConversationsContactsAndSuggestionsListAdapter.kt b/app/src/main/java/org/linphone/ui/main/adapter/ConversationsContactsAndSuggestionsListAdapter.kt index e66ffc6f3..000998411 100644 --- a/app/src/main/java/org/linphone/ui/main/adapter/ConversationsContactsAndSuggestionsListAdapter.kt +++ b/app/src/main/java/org/linphone/ui/main/adapter/ConversationsContactsAndSuggestionsListAdapter.kt @@ -47,8 +47,9 @@ class ConversationsContactsAndSuggestionsListAdapter : HeaderAdapter { companion object { private const val CONTACT_TYPE = 0 - private const val SUGGESTION_TYPE = 1 - private const val CONVERSATION_TYPE = 2 + private const val FAVORITE_TYPE = 1 + private const val SUGGESTION_TYPE = 2 + private const val CONVERSATION_TYPE = 3 } val onClickedEvent: MutableLiveData> by lazy { @@ -56,7 +57,7 @@ class ConversationsContactsAndSuggestionsListAdapter : } override fun displayHeaderForPosition(position: Int): Boolean { - if (position == 0) { // Conversations + if (position == 0) { // Always start by a header return true } @@ -74,6 +75,9 @@ class ConversationsContactsAndSuggestionsListAdapter : SUGGESTION_TYPE -> { AppUtils.getString(R.string.generic_address_picker_suggestions_list_title) } + FAVORITE_TYPE -> { + AppUtils.getString(R.string.generic_address_picker_favorites_list_title) + } else -> { AppUtils.getString(R.string.generic_address_picker_contacts_list_title) } @@ -86,7 +90,11 @@ class ConversationsContactsAndSuggestionsListAdapter : return if (model.localAddress != null) { CONVERSATION_TYPE } else if (model.friend != null) { - CONTACT_TYPE + if (model.friend.starred) { + FAVORITE_TYPE + } else { + CONTACT_TYPE + } } else { SUGGESTION_TYPE } @@ -110,7 +118,7 @@ class ConversationsContactsAndSuggestionsListAdapter : } ConversationViewHolder(binding) } - CONTACT_TYPE -> { + CONTACT_TYPE, FAVORITE_TYPE -> { val binding: GenericAddressPickerContactListCellBinding = DataBindingUtil.inflate( LayoutInflater.from(parent.context), R.layout.generic_address_picker_contact_list_cell, @@ -148,7 +156,7 @@ class ConversationsContactsAndSuggestionsListAdapter : override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { when (getItemViewType(position)) { CONVERSATION_TYPE -> (holder as ConversationViewHolder).bind(getItem(position)) - CONTACT_TYPE -> (holder as ContactViewHolder).bind(getItem(position)) + CONTACT_TYPE, FAVORITE_TYPE -> (holder as ContactViewHolder).bind(getItem(position)) else -> (holder as SuggestionViewHolder).bind(getItem(position)) } } diff --git a/app/src/main/java/org/linphone/ui/main/viewmodel/AddressSelectionViewModel.kt b/app/src/main/java/org/linphone/ui/main/viewmodel/AddressSelectionViewModel.kt index 9cfbdc00a..3b8c83c2c 100644 --- a/app/src/main/java/org/linphone/ui/main/viewmodel/AddressSelectionViewModel.kt +++ b/app/src/main/java/org/linphone/ui/main/viewmodel/AddressSelectionViewModel.kt @@ -262,6 +262,7 @@ abstract class AddressSelectionViewModel arrayListOf() } + val favoritesList = arrayListOf() val contactsList = arrayListOf() val suggestionsList = arrayListOf() @@ -289,7 +290,11 @@ abstract class AddressSelectionViewModel ) model.avatarModel.postValue(avatarModel) - contactsList.add(model) + if (friend.starred) { + favoritesList.add(model) + } else { + contactsList.add(model) + } } else { val defaultAccountAddress = coreContext.core.defaultAccount?.params?.identityAddress if (defaultAccountAddress != null && address.weakEqual(defaultAccountAddress)) { @@ -307,6 +312,9 @@ abstract class AddressSelectionViewModel } val collator = Collator.getInstance(Locale.getDefault()) + favoritesList.sortWith { model1, model2 -> + collator.compare(model1.name, model2.name) + } contactsList.sortWith { model1, model2 -> collator.compare(model1.name, model2.name) } @@ -316,12 +324,13 @@ abstract class AddressSelectionViewModel val list = arrayListOf() list.addAll(conversationsList) + list.addAll(favoritesList) list.addAll(contactsList) list.addAll(suggestionsList) modelsList.postValue(list) isEmpty.postValue(list.isEmpty()) Log.i( - "$TAG Processed [${results.size}] results: [${conversationsList.size}] conversations, [${contactsList.size}] contacts and [${suggestionsList.size}] suggestions" + "$TAG Processed [${results.size}] results: [${conversationsList.size}] conversations, [${favoritesList.size}] favorites, [${contactsList.size}] contacts and [${suggestionsList.size}] suggestions" ) } diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index dacd8014d..34fa741af 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -745,6 +745,7 @@ Opération en cours, merci de patienter… Conversations Contacts + Favoris Suggestions La permission de poster des notifications n\'est pas donnée ! diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b60d4e35c..793c630ee 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -783,6 +783,7 @@ Operation in progress, please wait Conversations Contacts + Favorites Suggestions Post notifications permission not granted!