Fixed presence with phone numbers

This commit is contained in:
Sylvain Berfini 2018-02-13 14:15:05 +01:00
parent 62825a6171
commit 1612e4b376
7 changed files with 26 additions and 21 deletions

View file

@ -99,7 +99,6 @@ import org.linphone.core.AuthInfo;
import org.linphone.core.Call; import org.linphone.core.Call;
import org.linphone.core.Call.State; import org.linphone.core.Call.State;
import org.linphone.core.CallLog; import org.linphone.core.CallLog;
import org.linphone.core.Call.Status;
import org.linphone.core.ChatMessage; import org.linphone.core.ChatMessage;
import org.linphone.core.ChatRoom; import org.linphone.core.ChatRoom;
import org.linphone.core.Core; import org.linphone.core.Core;
@ -689,7 +688,7 @@ public class LinphoneActivity extends LinphoneGenericActivity implements OnClick
listUri.add(LinphoneManager.getLc().getDefaultProxyConfig().getIdentityAddress().asStringUriOnly()); listUri.add(LinphoneManager.getLc().getDefaultProxyConfig().getIdentityAddress().asStringUriOnly());
} }
for (ContactAddress ca : list) { for (ContactAddress ca : list) {
listUri.add(ca.getAddress()); listUri.add(ca.getAddressAsDisplayableString());
} }
extras.putStringArrayList("contactsSelected", listUri); extras.putStringArrayList("contactsSelected", listUri);
changeCurrentFragment(FragmentsAvailable.INFO_GROUP_CHAT, extras); changeCurrentFragment(FragmentsAvailable.INFO_GROUP_CHAT, extras);

View file

@ -19,7 +19,6 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
package org.linphone.chat; package org.linphone.chat;
import android.app.Dialog;
import android.app.Fragment; import android.app.Fragment;
import android.os.Bundle; import android.os.Bundle;
import android.text.Editable; import android.text.Editable;
@ -28,7 +27,6 @@ import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.HorizontalScrollView; import android.widget.HorizontalScrollView;
import android.widget.ImageView; import android.widget.ImageView;
@ -45,7 +43,6 @@ import org.linphone.core.Address;
import org.linphone.core.ChatRoom; import org.linphone.core.ChatRoom;
import org.linphone.core.ChatRoomListenerStub; import org.linphone.core.ChatRoomListenerStub;
import org.linphone.core.Core; import org.linphone.core.Core;
import org.linphone.core.Factory;
import org.linphone.mediastream.Log; import org.linphone.mediastream.Log;
import org.linphone.ui.ContactSelectView; import org.linphone.ui.ContactSelectView;
import org.linphone.contacts.ContactsUpdatedListener; import org.linphone.contacts.ContactsUpdatedListener;
@ -143,7 +140,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
// We need to get all contacts not only sip // We need to get all contacts not only sip
for (String uri : savedInstanceState.getStringArrayList("mContactsSelected")) { for (String uri : savedInstanceState.getStringArrayList("mContactsSelected")) {
for (ContactAddress ca : mSearchAdapter.getContactsList()) { for (ContactAddress ca : mSearchAdapter.getContactsList()) {
if (ca.getAddress().compareTo(uri) == 0) { if (ca.getAddressAsDisplayableString().compareTo(uri) == 0) {
ca.setView(null); ca.setView(null);
addSelectedContactAddress(ca); addSelectedContactAddress(ca);
break; break;
@ -210,7 +207,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
private int getIndexOfCa(ContactAddress ca, List<ContactAddress> caList) { private int getIndexOfCa(ContactAddress ca, List<ContactAddress> caList) {
for (int i = 0 ; i < caList.size() ; i++) { for (int i = 0 ; i < caList.size() ; i++) {
if (caList.get(i).getAddress().compareTo(ca.getAddress()) == 0) if (caList.get(i).getAddressAsDisplayableString().compareTo(ca.getAddressAsDisplayableString()) == 0)
return i; return i;
} }
return -1; return -1;
@ -221,7 +218,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
if (ca.getContact() != null) { if (ca.getContact() != null) {
((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getContact().getFullName()); ((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getContact().getFullName());
} else { } else {
((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getAddress()); ((TextView) viewContact.findViewById(R.id.sipUri)).setText(ca.getAddressAsDisplayableString());
} }
View removeContact = viewContact.findViewById(R.id.contactChatDelete); View removeContact = viewContact.findViewById(R.id.contactChatDelete);
removeContact.setTag(ca); removeContact.setTag(ca);
@ -264,7 +261,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
if (mContactsSelected != null && mContactsSelected.size() > 0) { if (mContactsSelected != null && mContactsSelected.size() > 0) {
ArrayList<String> listUri = new ArrayList<String>(); ArrayList<String> listUri = new ArrayList<String>();
for (ContactAddress ca : mContactsSelected) { for (ContactAddress ca : mContactsSelected) {
listUri.add(ca.getAddress()); listUri.add(ca.getAddressAsDisplayableString());
} }
outState.putStringArrayList("mContactsSelected", listUri); outState.putStringArrayList("mContactsSelected", listUri);
} }
@ -300,7 +297,7 @@ public class ChatCreationFragment extends Fragment implements View.OnClickListen
mContactsSelectedLayout.removeAllViews(); mContactsSelectedLayout.removeAllViews();
mWaitLayout.setVisibility(View.VISIBLE); mWaitLayout.setVisibility(View.VISIBLE);
Core lc = LinphoneManager.getLc(); Core lc = LinphoneManager.getLc();
Address participant = Factory.instance().createAddress(mContactsSelected.get(0).getAddress()); Address participant = mContactsSelected.get(0).getAddress();
ChatRoom chatRoom = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant); ChatRoom chatRoom = lc.findOneToOneChatRoom(lc.getDefaultProxyConfig().getContact(), participant);
if (chatRoom == null) { if (chatRoom == null) {
chatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject)); chatRoom = lc.createClientGroupChatRoom(getString(R.string.dummy_group_chat_subject));

View file

@ -190,7 +190,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
Address addresses[] = new Address[mParticipants.size()]; Address addresses[] = new Address[mParticipants.size()];
int index = 0; int index = 0;
for (ContactAddress ca : mParticipants) { for (ContactAddress ca : mParticipants) {
addresses[index] = LinphoneManager.getLc().createAddress(ca.getAddress()); addresses[index] = LinphoneManager.getLc().createAddress(ca.getAddressAsDisplayableString());
index++; index++;
} }
chatRoom.addParticipants(addresses); chatRoom.addParticipants(addresses);
@ -206,7 +206,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
for (Participant p : mChatRoom.getParticipants()) { for (Participant p : mChatRoom.getParticipants()) {
boolean found = false; boolean found = false;
for (ContactAddress c : mParticipants) { for (ContactAddress c : mParticipants) {
if (c.getAddress().equals(p.getAddress().asStringUriOnly())) { if (c.getAddressAsDisplayableString().equals(p.getAddress().asStringUriOnly())) {
found = true; found = true;
break; break;
} }
@ -224,7 +224,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
for (ContactAddress c : mParticipants) { for (ContactAddress c : mParticipants) {
boolean found = false; boolean found = false;
for (Participant p : mChatRoom.getParticipants()) { for (Participant p : mChatRoom.getParticipants()) {
if (p.getAddress().asStringUriOnly().equals(c.getAddress())) { if (p.getAddress().asStringUriOnly().equals(c.getAddressAsDisplayableString())) {
// Admin rights // Admin rights
if (c.isAdmin() != p.isAdmin()) { if (c.isAdmin() != p.isAdmin()) {
mChatRoom.setParticipantAdminStatus(p, c.isAdmin()); mChatRoom.setParticipantAdminStatus(p, c.isAdmin());
@ -234,7 +234,7 @@ public class GroupInfoFragment extends Fragment implements ChatRoomListener {
} }
} }
if (!found) { if (!found) {
Address addr = LinphoneManager.getLc().createAddress(c.getAddress()); Address addr = LinphoneManager.getLc().createAddress(c.getAddressAsDisplayableString());
if (addr != null) { if (addr != null) {
toAdd.add(addr); toAdd.add(addr);
} else { } else {

View file

@ -21,6 +21,9 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
import android.view.View; import android.view.View;
import org.linphone.core.Address;
import org.linphone.core.Factory;
import java.io.Serializable; import java.io.Serializable;
public class ContactAddress implements Serializable { public class ContactAddress implements Serializable {
@ -55,10 +58,15 @@ public class ContactAddress implements Serializable {
return contact; return contact;
} }
public String getAddress() { public String getAddressAsDisplayableString() {
return address; return address;
} }
public Address getAddress() {
String presence = contact.getPresenceModelForUriOrTel(address);
return Factory.instance().createAddress(presence != null ? presence : address);
}
public void setSelect(boolean select) { public void setSelect(boolean select) {
isSelect = select; isSelect = select;
} }
@ -85,7 +93,7 @@ public class ContactAddress implements Serializable {
if (other == null) return false; if (other == null) return false;
if (other == this) return true; if (other == this) return true;
if (!(other instanceof ContactAddress))return false; if (!(other instanceof ContactAddress))return false;
if (((ContactAddress)other).getAddress() == this.getAddress()) return true; if (((ContactAddress)other).getAddressAsDisplayableString() == this.getAddressAsDisplayableString()) return true;
return false; return false;
} }
} }

View file

@ -104,6 +104,7 @@ public class ContactsManager extends ContentObserver {
onChange(selfChange, null); onChange(selfChange, null);
} }
@Override @Override
public void onChange(boolean selfChange, Uri uri) { public void onChange(boolean selfChange, Uri uri) {
fetchContactsSync(); fetchContactsSync();

View file

@ -86,7 +86,7 @@ public class SearchContactsListAdapter extends BaseAdapter {
private boolean contactIsSelected(ContactAddress ca) { private boolean contactIsSelected(ContactAddress ca) {
for (ContactAddress c : contactsSelected) { for (ContactAddress c : contactsSelected) {
if (c.getAddress().compareTo(ca.getAddress()) == 0) return true; if (c.getAddressAsDisplayableString().compareTo(ca.getAddressAsDisplayableString()) == 0) return true;
} }
return false; return false;
} }
@ -167,7 +167,7 @@ public class SearchContactsListAdapter extends BaseAdapter {
boolean searchFound = false; boolean searchFound = false;
if (search != null) { if (search != null) {
for (ContactAddress c : (search.length() < oldSize) ? getContactsList() : getContacts()) { for (ContactAddress c : (search.length() < oldSize) ? getContactsList() : getContacts()) {
String address = c.getAddress(); String address = c.getAddressAsDisplayableString();
if (address.equals(searchAddress)) searchFound = true; if (address.equals(searchAddress)) searchFound = true;
if (address.startsWith("sip:")) address = address.substring(4); if (address.startsWith("sip:")) address = address.substring(4);
if (c.getContact() != null && c.getContact().getFullName() != null if (c.getContact() != null && c.getContact().getFullName() != null
@ -204,7 +204,7 @@ public class SearchContactsListAdapter extends BaseAdapter {
} }
ContactAddress contact = getItem(position); ContactAddress contact = getItem(position);
final String a = contact.getAddress(); final String a = contact.getAddressAsDisplayableString();
LinphoneContact c = contact.getContact(); LinphoneContact c = contact.getContact();
holder.avatar.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap()); holder.avatar.setImageBitmap(ContactsManager.getInstance().getDefaultAvatarBitmap());

View file

@ -49,8 +49,8 @@ public class ContactSelectView extends View {
if (ca.getContact() != null) { if (ca.getContact() != null) {
contactName.setText(ca.getContact().getFirstName()); contactName.setText(ca.getContact().getFirstName());
} else { } else {
LinphoneManager.getLc().createFriendWithAddress(ca.getAddress()).getName(); LinphoneManager.getLc().createFriendWithAddress(ca.getAddressAsDisplayableString()).getName();
contactName.setText(ca.getAddress()); contactName.setText(ca.getAddressAsDisplayableString());
} }
} }