diff --git a/app/src/main/java/org/linphone/LinphoneManager.java b/app/src/main/java/org/linphone/LinphoneManager.java index 20dfeb4fb..2af3f17a6 100644 --- a/app/src/main/java/org/linphone/LinphoneManager.java +++ b/app/src/main/java/org/linphone/LinphoneManager.java @@ -521,7 +521,7 @@ public class LinphoneManager implements CoreListener, SensorEventListener, Accou if (!to.startsWith("sip:") || !to.contains("@")) { LinphoneContact contact = ContactsManager.getInstance().findContactFromPhoneNumber(to); if (contact != null) { - String alias = contact.getPresenceModelForUriOrTel(to); + String alias = contact.getContactFromPresenceModelForUriOrTel(to); if (alias != null) { to = alias; } diff --git a/app/src/main/java/org/linphone/chat/ChatRoomCreationFragment.java b/app/src/main/java/org/linphone/chat/ChatRoomCreationFragment.java index 4b3399f66..7a65e535d 100644 --- a/app/src/main/java/org/linphone/chat/ChatRoomCreationFragment.java +++ b/app/src/main/java/org/linphone/chat/ChatRoomCreationFragment.java @@ -55,6 +55,7 @@ import org.linphone.core.ChatRoomListenerStub; import org.linphone.core.Core; import org.linphone.core.FriendCapability; import org.linphone.core.ProxyConfig; +import org.linphone.core.SearchResult; import org.linphone.fragments.FragmentsAvailable; import org.linphone.mediastream.Log; import org.linphone.settings.LinphonePreferences; @@ -132,15 +133,9 @@ public class ChatRoomCreationFragment extends Fragment mSearchLayout = view.findViewById(R.id.layoutSearchField); mContactsFetchInProgress = view.findViewById(R.id.contactsFetchInProgress); - mContactsFetchInProgress.setVisibility(View.VISIBLE); + mContactsFetchInProgress.setVisibility(View.GONE); - mSearchAdapter = - new SearchContactsAdapter( - null, - mContactsFetchInProgress, - this, - !mCreateGroupChatRoom, - mChatRoomEncrypted); + mSearchAdapter = new SearchContactsAdapter(this, !mCreateGroupChatRoom, mChatRoomEncrypted); mSearchField = view.findViewById(R.id.searchField); mSearchField.setOnQueryTextListener( @@ -152,7 +147,7 @@ public class ChatRoomCreationFragment extends Fragment @Override public boolean onQueryTextChange(String newText) { - mSearchAdapter.searchContacts(newText, mContactsList); + mSearchAdapter.searchContacts(newText); return true; } }); @@ -216,7 +211,8 @@ public class ChatRoomCreationFragment extends Fragment && savedInstanceState.getStringArrayList("mContactsSelected") != null) { mContactsSelectedLayout.removeAllViews(); // We need to get all contacts not only sip - for (String uri : savedInstanceState.getStringArrayList("mContactsSelected")) { + // TODO + /*for (String uri : savedInstanceState.getStringArrayList("mContactsSelected")) { for (ContactAddress ca : mSearchAdapter.getContactsList()) { if (ca.getAddressAsDisplayableString().compareTo(uri) == 0) { ca.setView(null); @@ -224,7 +220,7 @@ public class ChatRoomCreationFragment extends Fragment break; } } - } + }*/ updateList(); updateListSelected(); } @@ -382,7 +378,7 @@ public class ChatRoomCreationFragment extends Fragment } private void updateList() { - mSearchAdapter.searchContacts(mSearchField.getQuery().toString(), mContactsList); + mSearchAdapter.searchContacts(mSearchField.getQuery().toString()); mSearchAdapter.notifyDataSetChanged(); } @@ -411,7 +407,7 @@ public class ChatRoomCreationFragment extends Fragment private void resetAndResearch() { ContactsManager.getInstance().getMagicSearch().resetSearchCache(); - mSearchAdapter.searchContacts(mSearchField.getQuery().toString(), mContactsList); + mSearchAdapter.searchContacts(mSearchField.getQuery().toString()); } private void addSelectedContactAddress(ContactAddress ca) { @@ -532,7 +528,7 @@ public class ChatRoomCreationFragment extends Fragment } } else if (id == R.id.clearSearchField) { mSearchField.setQuery("", false); - mSearchAdapter.searchContacts("", mContactsList); + mSearchAdapter.searchContacts(""); } else if (id == R.id.contactChatDelete) { ContactAddress ca = (ContactAddress) view.getTag(); addOrRemoveContactFromSelection(ca); @@ -541,21 +537,22 @@ public class ChatRoomCreationFragment extends Fragment @Override public void onItemClicked(int position) { - ContactAddress ca = mSearchAdapter.getContacts().get(position); + SearchResult searchResult = mSearchAdapter.getContacts().get(position); Core lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); ProxyConfig lpc = lc.getDefaultProxyConfig(); boolean createEncryptedChatRoom = mSecurityToggle.isChecked(); - if (createEncryptedChatRoom && !ca.hasCapability(FriendCapability.LimeX3Dh)) { + if (createEncryptedChatRoom && !searchResult.hasCapability(FriendCapability.LimeX3Dh)) { Log.w( "[Chat Room Creation] Contact " - + ca.getContact() + + searchResult.getFriend() + " doesn't have LIME X3DH capability !"); return; - } else if (mCreateGroupChatRoom && !ca.hasCapability(FriendCapability.GroupChat)) { + } else if (mCreateGroupChatRoom + && !searchResult.hasCapability(FriendCapability.GroupChat)) { Log.w( "[Chat Room Creation] Contact " - + ca.getContact() + + searchResult.getFriend() + " doesn't have group chat capability !"); return; } @@ -563,7 +560,8 @@ public class ChatRoomCreationFragment extends Fragment if (lpc == null || lpc.getConferenceFactoryUri() == null || !mCreateGroupChatRoom) { if (createEncryptedChatRoom && lpc != null && lpc.getConferenceFactoryUri() != null) { mChatRoom = - lc.findOneToOneChatRoom(lpc.getIdentityAddress(), ca.getAddress(), true); + lc.findOneToOneChatRoom( + lpc.getIdentityAddress(), searchResult.getAddress(), true); if (mChatRoom != null) { LinphoneActivity.instance() .goToChat(mChatRoom.getPeerAddress().asStringUriOnly(), mShareInfos); @@ -575,7 +573,7 @@ public class ChatRoomCreationFragment extends Fragment createEncryptedChatRoom); mChatRoom.addListener(mChatRoomCreationListener); Address participants[] = new Address[1]; - participants[0] = ca.getAddress(); + participants[0] = searchResult.getAddress(); mChatRoom.addParticipants(participants); } } else { @@ -584,7 +582,7 @@ public class ChatRoomCreationFragment extends Fragment && !LinphonePreferences.instance().useBasicChatRoomFor1To1()) { mChatRoom = lc.findOneToOneChatRoom( - lpc.getIdentityAddress(), ca.getAddress(), false); + lpc.getIdentityAddress(), searchResult.getAddress(), false); if (mChatRoom == null) { mWaitLayout.setVisibility(View.VISIBLE); mChatRoom = @@ -592,7 +590,7 @@ public class ChatRoomCreationFragment extends Fragment getString(R.string.dummy_group_chat_subject), true); mChatRoom.addListener(mChatRoomCreationListener); Address participants[] = new Address[1]; - participants[0] = ca.getAddress(); + participants[0] = searchResult.getAddress(); mChatRoom.addParticipants(participants); } else { LinphoneActivity.instance() @@ -600,13 +598,14 @@ public class ChatRoomCreationFragment extends Fragment mChatRoom.getPeerAddress().asStringUriOnly(), mShareInfos); } } else { - ChatRoom chatRoom = lc.getChatRoom(ca.getAddress()); + ChatRoom chatRoom = lc.getChatRoom(searchResult.getAddress()); LinphoneActivity.instance() .goToChat(chatRoom.getPeerAddress().asStringUriOnly(), mShareInfos); } } } else { - addOrRemoveContactFromSelection(ca); + // TODO + // addOrRemoveContactFromSelection(searchResult); } } diff --git a/app/src/main/java/org/linphone/contacts/ContactAddress.java b/app/src/main/java/org/linphone/contacts/ContactAddress.java index 8a998f0e4..5003ffd2d 100644 --- a/app/src/main/java/org/linphone/contacts/ContactAddress.java +++ b/app/src/main/java/org/linphone/contacts/ContactAddress.java @@ -79,7 +79,7 @@ public class ContactAddress implements Serializable { public Address getAddress() { String presence = - mContact.getPresenceModelForUriOrTel( + mContact.getContactFromPresenceModelForUriOrTel( (mPhoneNumber != null && !mPhoneNumber.isEmpty()) ? mPhoneNumber : mAddress); @@ -115,10 +115,6 @@ public class ContactAddress implements Serializable { return mPhoneNumber; } - public boolean isLinphoneContact() { - return mIsLinphoneContact; - } - public boolean hasCapability(FriendCapability capability) { return mContact.hasFriendCapability(capability); } diff --git a/app/src/main/java/org/linphone/contacts/ContactDetailsFragment.java b/app/src/main/java/org/linphone/contacts/ContactDetailsFragment.java index 75b0b0d36..7071053a8 100644 --- a/app/src/main/java/org/linphone/contacts/ContactDetailsFragment.java +++ b/app/src/main/java/org/linphone/contacts/ContactDetailsFragment.java @@ -276,7 +276,7 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener }); } - String contactAddress = mContact.getPresenceModelForUriOrTel(noa.getValue()); + String contactAddress = mContact.getContactFromPresenceModelForUriOrTel(noa.getValue()); if (!mDisplayChatAddressOnly) { v.findViewById(R.id.contact_call).setOnClickListener(mDialListener); if (contactAddress != null) { @@ -299,8 +299,8 @@ public class ContactDetailsFragment extends Fragment implements OnClickListener } if (v.findViewById(R.id.friendLinphone).getVisibility() == View.VISIBLE - && lpc.getConferenceFactoryUri() != null - && mContact.hasFriendCapability(FriendCapability.LimeX3Dh)) { + && mContact.hasPresenceModelForUriOrTelCapability( + noa.getValue(), FriendCapability.LimeX3Dh)) { v.findViewById(R.id.contact_chat_secured).setVisibility(View.VISIBLE); } else { v.findViewById(R.id.contact_chat_secured).setVisibility(View.GONE); diff --git a/app/src/main/java/org/linphone/contacts/LinphoneContact.java b/app/src/main/java/org/linphone/contacts/LinphoneContact.java index 5ba4ea2a0..9e6c1c37a 100644 --- a/app/src/main/java/org/linphone/contacts/LinphoneContact.java +++ b/app/src/main/java/org/linphone/contacts/LinphoneContact.java @@ -403,13 +403,27 @@ public class LinphoneContact extends AndroidContact return false; } - public String getPresenceModelForUriOrTel(String uri) { + public String getContactFromPresenceModelForUriOrTel(String uri) { if (mFriend != null && mFriend.getPresenceModelForUriOrTel(uri) != null) { return mFriend.getPresenceModelForUriOrTel(uri).getContact(); } return null; } + public PresenceBasicStatus getBasicStatusFromPresenceModelForUriOrTel(String uri) { + if (mFriend != null && mFriend.getPresenceModelForUriOrTel(uri) != null) { + return mFriend.getPresenceModelForUriOrTel(uri).getBasicStatus(); + } + return PresenceBasicStatus.Closed; + } + + public boolean hasPresenceModelForUriOrTelCapability(String uri, FriendCapability capability) { + if (mFriend != null && mFriend.getPresenceModelForUriOrTel(uri) != null) { + return mFriend.getPresenceModelForUriOrTel(uri).hasCapability(capability); + } + return false; + } + private void createFriend() { LinphoneContact contact = new LinphoneContact(); Friend friend = LinphoneManager.getLc().createFriend(); diff --git a/app/src/main/java/org/linphone/contacts/SearchContactsAdapter.java b/app/src/main/java/org/linphone/contacts/SearchContactsAdapter.java index a7fc6512d..5bb02a18e 100644 --- a/app/src/main/java/org/linphone/contacts/SearchContactsAdapter.java +++ b/app/src/main/java/org/linphone/contacts/SearchContactsAdapter.java @@ -22,7 +22,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.ProgressBar; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; @@ -31,21 +30,20 @@ import org.linphone.LinphoneActivity; import org.linphone.LinphoneManager; import org.linphone.R; import org.linphone.core.Address; -import org.linphone.core.Factory; import org.linphone.core.FriendCapability; import org.linphone.core.PresenceBasicStatus; import org.linphone.core.PresenceModel; import org.linphone.core.ProxyConfig; import org.linphone.core.SearchResult; +import org.linphone.mediastream.Log; import org.linphone.views.ContactAvatar; public class SearchContactsAdapter extends RecyclerView.Adapter { @SuppressWarnings("unused") private static final String TAG = SearchContactsAdapter.class.getSimpleName(); - private List mContacts; + private List mContacts; private List mContactsSelected; - private final ProgressBar mProgressBar; private boolean mOnlySipContact = false; private SearchContactViewHolder.ClickListener mListener; private final boolean mIsOnlyOnePersonSelection; @@ -53,21 +51,18 @@ public class SearchContactsAdapter extends RecyclerView.Adapter contactsList, - ProgressBar pB, SearchContactViewHolder.ClickListener clickListener, boolean hideSelectionMark, boolean isSecurityEnabled) { mIsOnlyOnePersonSelection = hideSelectionMark; mListener = clickListener; - mProgressBar = pB; setContactsSelectedList(null); - setContactsList(contactsList); mPreviousSearch = null; mSecurityEnabled = isSecurityEnabled; + mContacts = new ArrayList<>(); } - public List getContacts() { + public List getContacts() { return mContacts; } @@ -91,47 +86,59 @@ public class SearchContactsAdapter extends RecyclerView.Adapter getContactsList() { - List list = new ArrayList<>(); - if (ContactsManager.getInstance().hasContacts()) { - List contacts = - mOnlySipContact - ? ContactsManager.getInstance().getSIPContacts() - : ContactsManager.getInstance().getContacts(); - for (LinphoneContact contact : contacts) { - for (LinphoneNumberOrAddress noa : contact.getNumbersOrAddresses()) { - if (!mOnlySipContact - || (mOnlySipContact - && (noa.isSIPAddress() - || contact.getPresenceModelForUriOrTel(noa.getValue()) - != null))) { - ContactAddress ca = null; - if (noa.isSIPAddress()) { - Address address = LinphoneManager.getLc().interpretUrl(noa.getValue()); - if (address != null) { - ca = - new ContactAddress( - contact, - address.asString(), - "", - contact.isFriend()); - } - } else { - ProxyConfig prx = LinphoneManager.getLc().getDefaultProxyConfig(); - String number = - (prx != null) - ? prx.normalizePhoneNumber(noa.getValue()) - : noa.getValue(); - ca = new ContactAddress(contact, "", number, contact.isFriend()); - } - if (ca != null) list.add(ca); - } - } - } - } - - for (ContactAddress caS : mContactsSelected) { - for (ContactAddress ca : list) { - if (ca.equals(caS)) ca.setSelect(true); - } - } - return list; - } - - private void setContactsList(List contactsList) { - if (contactsList == null) { - mContacts = getContactsList(); - if (mProgressBar != null) mProgressBar.setVisibility(View.GONE); - } else { - mContacts = contactsList; - } - } - - private ContactAddress getItem(int position) { + private SearchResult getItem(int position) { return mContacts.get(position); } @@ -255,8 +209,8 @@ public class SearchContactsAdapter extends RecyclerView.Adapter result = new ArrayList<>(); + public void searchContacts(String search) { + List result = new ArrayList<>(); if (mPreviousSearch != null) { if (mPreviousSearch.length() > search.length()) { @@ -268,77 +222,39 @@ public class SearchContactsAdapter extends RecyclerView.Adapter