Store all phone numbers and SIP addresses in LinphoneFriend + some improvements in the way we handle it
This commit is contained in:
parent
b22b142e5f
commit
6d1f06fe7f
2 changed files with 39 additions and 28 deletions
|
@ -385,7 +385,7 @@ public class ContactEditorFragment extends Fragment {
|
||||||
if (contact != null) {
|
if (contact != null) {
|
||||||
for (LinphoneNumberOrAddress numberOrAddress : contact.getNumbersOrAddresses()) {
|
for (LinphoneNumberOrAddress numberOrAddress : contact.getNumbersOrAddresses()) {
|
||||||
if (!numberOrAddress.isSIPAddress()) {
|
if (!numberOrAddress.isSIPAddress()) {
|
||||||
View view = displayNumberOrAddress(controls, numberOrAddress.getValue());
|
View view = displayNumberOrAddress(controls, numberOrAddress.getValue(), false);
|
||||||
if (view != null)
|
if (view != null)
|
||||||
controls.addView(view);
|
controls.addView(view);
|
||||||
}
|
}
|
||||||
|
@ -395,7 +395,7 @@ public class ContactEditorFragment extends Fragment {
|
||||||
if (newSipOrNumberToAdd != null) {
|
if (newSipOrNumberToAdd != null) {
|
||||||
boolean isSip = LinphoneUtils.isStrictSipAddress(newSipOrNumberToAdd) || !LinphoneUtils.isNumberAddress(newSipOrNumberToAdd);
|
boolean isSip = LinphoneUtils.isStrictSipAddress(newSipOrNumberToAdd) || !LinphoneUtils.isNumberAddress(newSipOrNumberToAdd);
|
||||||
if(!isSip) {
|
if(!isSip) {
|
||||||
View view = displayNumberOrAddress(controls, newSipOrNumberToAdd);
|
View view = displayNumberOrAddress(controls, newSipOrNumberToAdd, false);
|
||||||
if (view != null)
|
if (view != null)
|
||||||
controls.addView(view);
|
controls.addView(view);
|
||||||
}
|
}
|
||||||
|
@ -415,7 +415,7 @@ public class ContactEditorFragment extends Fragment {
|
||||||
if (contact != null) {
|
if (contact != null) {
|
||||||
for (LinphoneNumberOrAddress numberOrAddress : contact.getNumbersOrAddresses()) {
|
for (LinphoneNumberOrAddress numberOrAddress : contact.getNumbersOrAddresses()) {
|
||||||
if (numberOrAddress.isSIPAddress()) {
|
if (numberOrAddress.isSIPAddress()) {
|
||||||
View view = displayNumberOrAddress(controls, numberOrAddress.getValue());
|
View view = displayNumberOrAddress(controls, numberOrAddress.getValue(), true);
|
||||||
if (view != null)
|
if (view != null)
|
||||||
controls.addView(view);
|
controls.addView(view);
|
||||||
}
|
}
|
||||||
|
@ -425,7 +425,7 @@ public class ContactEditorFragment extends Fragment {
|
||||||
if (newSipOrNumberToAdd != null) {
|
if (newSipOrNumberToAdd != null) {
|
||||||
boolean isSip = LinphoneUtils.isStrictSipAddress(newSipOrNumberToAdd) || !LinphoneUtils.isNumberAddress(newSipOrNumberToAdd);
|
boolean isSip = LinphoneUtils.isStrictSipAddress(newSipOrNumberToAdd) || !LinphoneUtils.isNumberAddress(newSipOrNumberToAdd);
|
||||||
if (isSip) {
|
if (isSip) {
|
||||||
View view = displayNumberOrAddress(controls, newSipOrNumberToAdd);
|
View view = displayNumberOrAddress(controls, newSipOrNumberToAdd, true);
|
||||||
if (view != null)
|
if (view != null)
|
||||||
controls.addView(view);
|
controls.addView(view);
|
||||||
}
|
}
|
||||||
|
@ -438,35 +438,33 @@ public class ContactEditorFragment extends Fragment {
|
||||||
return controls;
|
return controls;
|
||||||
}
|
}
|
||||||
|
|
||||||
private View displayNumberOrAddress(final LinearLayout controls, String numberOrAddress) {
|
private View displayNumberOrAddress(final LinearLayout controls, String numberOrAddress, boolean isSIP) {
|
||||||
return displayNumberOrAddress(controls, numberOrAddress, false);
|
return displayNumberOrAddress(controls, numberOrAddress, isSIP, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("InflateParams")
|
@SuppressLint("InflateParams")
|
||||||
private View displayNumberOrAddress(final LinearLayout controls, String numberOrAddress, boolean forceAddNumber) {
|
private View displayNumberOrAddress(final LinearLayout controls, String numberOrAddress, boolean isSIP, boolean forceAddNumber) {
|
||||||
boolean isSip = LinphoneUtils.isStrictSipAddress(numberOrAddress) || !LinphoneUtils.isNumberAddress(numberOrAddress);
|
if (isSIP) {
|
||||||
|
|
||||||
if (isSip) {
|
|
||||||
if (firstSipAddressIndex == -1) {
|
if (firstSipAddressIndex == -1) {
|
||||||
firstSipAddressIndex = controls.getChildCount();
|
firstSipAddressIndex = controls.getChildCount();
|
||||||
}
|
}
|
||||||
numberOrAddress = numberOrAddress.replace("sip:", "");
|
numberOrAddress = numberOrAddress.replace("sip:", "");
|
||||||
}
|
}
|
||||||
if ((getResources().getBoolean(R.bool.hide_phone_numbers_in_editor) && !isSip) || (getResources().getBoolean(R.bool.hide_sip_addresses_in_editor) && isSip)) {
|
if ((getResources().getBoolean(R.bool.hide_phone_numbers_in_editor) && !isSIP) || (getResources().getBoolean(R.bool.hide_sip_addresses_in_editor) && isSIP)) {
|
||||||
if (forceAddNumber)
|
if (forceAddNumber)
|
||||||
isSip = !isSip; // If number can't be displayed because we hide a sort of number, change that category
|
isSIP = !isSIP; // If number can't be displayed because we hide a sort of number, change that category
|
||||||
else
|
else
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
LinphoneNumberOrAddress tempNounoa;
|
LinphoneNumberOrAddress tempNounoa;
|
||||||
if (forceAddNumber) {
|
if (forceAddNumber) {
|
||||||
tempNounoa = new LinphoneNumberOrAddress(null, isSip);
|
tempNounoa = new LinphoneNumberOrAddress(null, isSIP);
|
||||||
} else {
|
} else {
|
||||||
if(isNewContact || newSipOrNumberToAdd != null) {
|
if(isNewContact || newSipOrNumberToAdd != null) {
|
||||||
tempNounoa = new LinphoneNumberOrAddress(numberOrAddress, isSip);
|
tempNounoa = new LinphoneNumberOrAddress(numberOrAddress, isSIP);
|
||||||
} else {
|
} else {
|
||||||
tempNounoa = new LinphoneNumberOrAddress(null, isSip, numberOrAddress);
|
tempNounoa = new LinphoneNumberOrAddress(null, isSIP, numberOrAddress);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
final LinphoneNumberOrAddress nounoa = tempNounoa;
|
final LinphoneNumberOrAddress nounoa = tempNounoa;
|
||||||
|
@ -475,7 +473,7 @@ public class ContactEditorFragment extends Fragment {
|
||||||
final View view = inflater.inflate(R.layout.contact_edit_row, null);
|
final View view = inflater.inflate(R.layout.contact_edit_row, null);
|
||||||
|
|
||||||
final EditText noa = (EditText) view.findViewById(R.id.numoraddr);
|
final EditText noa = (EditText) view.findViewById(R.id.numoraddr);
|
||||||
noa.setInputType(isSip ? InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS : InputType.TYPE_CLASS_PHONE);
|
noa.setInputType(isSIP ? InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS : InputType.TYPE_CLASS_PHONE);
|
||||||
noa.setText(numberOrAddress);
|
noa.setText(numberOrAddress);
|
||||||
noa.addTextChangedListener(new TextWatcher() {
|
noa.addTextChangedListener(new TextWatcher() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -496,7 +494,7 @@ public class ContactEditorFragment extends Fragment {
|
||||||
}
|
}
|
||||||
|
|
||||||
ImageView delete = (ImageView) view.findViewById(R.id.delete_field);
|
ImageView delete = (ImageView) view.findViewById(R.id.delete_field);
|
||||||
if ((getResources().getBoolean(R.bool.allow_only_one_phone_number) && !isSip) || (getResources().getBoolean(R.bool.allow_only_one_sip_address) && isSip)) {
|
if ((getResources().getBoolean(R.bool.allow_only_one_phone_number) && !isSIP) || (getResources().getBoolean(R.bool.allow_only_one_sip_address) && isSIP)) {
|
||||||
delete.setVisibility(View.GONE);
|
delete.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
delete.setOnClickListener(new OnClickListener() {
|
delete.setOnClickListener(new OnClickListener() {
|
||||||
|
|
|
@ -203,12 +203,14 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isLinphoneFriend()) {
|
if (isLinphoneFriend()) {
|
||||||
|
if (noa.isSIPAddress()) {
|
||||||
if (!noa.getOldValue().startsWith("sip:")) {
|
if (!noa.getOldValue().startsWith("sip:")) {
|
||||||
noa.setOldValue("sip:" + noa.getOldValue());
|
noa.setOldValue("sip:" + noa.getOldValue());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
LinphoneNumberOrAddress toRemove = null;
|
LinphoneNumberOrAddress toRemove = null;
|
||||||
for (LinphoneNumberOrAddress address : addresses) {
|
for (LinphoneNumberOrAddress address : addresses) {
|
||||||
if (noa.getOldValue().equals(address.getValue())) {
|
if (noa.getOldValue().equals(address.getValue()) && noa.isSIPAddress() == address.isSIPAddress()) {
|
||||||
toRemove = address;
|
toRemove = address;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -274,15 +276,19 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (isLinphoneFriend()) {
|
if (isLinphoneFriend()) {
|
||||||
|
if (noa.isSIPAddress()) {
|
||||||
if (!noa.getValue().startsWith("sip:")) {
|
if (!noa.getValue().startsWith("sip:")) {
|
||||||
noa.setValue("sip:" + noa.getValue());
|
noa.setValue("sip:" + noa.getValue());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (noa.getOldValue() != null) {
|
if (noa.getOldValue() != null) {
|
||||||
|
if (noa.isSIPAddress()) {
|
||||||
if (!noa.getOldValue().startsWith("sip:")) {
|
if (!noa.getOldValue().startsWith("sip:")) {
|
||||||
noa.setOldValue("sip:" + noa.getOldValue());
|
noa.setOldValue("sip:" + noa.getOldValue());
|
||||||
}
|
}
|
||||||
|
}
|
||||||
for (LinphoneNumberOrAddress address : addresses) {
|
for (LinphoneNumberOrAddress address : addresses) {
|
||||||
if (noa.getOldValue().equals(address.getValue())) {
|
if (noa.getOldValue().equals(address.getValue()) && noa.isSIPAddress() == address.isSIPAddress()) {
|
||||||
address.setValue(noa.getValue());
|
address.setValue(noa.getValue());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -321,10 +327,13 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
for (LinphoneAddress address : friend.getAddresses()) {
|
for (LinphoneAddress address : friend.getAddresses()) {
|
||||||
friend.removeAddress(address);
|
friend.removeAddress(address);
|
||||||
}
|
}
|
||||||
for (LinphoneNumberOrAddress address : addresses) {
|
for (String phone : friend.getPhoneNumbers()) {
|
||||||
if (address.isSIPAddress()) {
|
friend.removePhoneNumber(phone);
|
||||||
|
}
|
||||||
|
for (LinphoneNumberOrAddress noa : addresses) {
|
||||||
|
if (noa.isSIPAddress()) {
|
||||||
try {
|
try {
|
||||||
LinphoneAddress addr = lc.interpretUrl(address.getValue());
|
LinphoneAddress addr = lc.interpretUrl(noa.getValue());
|
||||||
if (addr != null) {
|
if (addr != null) {
|
||||||
friend.addAddress(addr);
|
friend.addAddress(addr);
|
||||||
hasAddr = true;
|
hasAddr = true;
|
||||||
|
@ -332,6 +341,8 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
} catch (LinphoneCoreException e) {
|
} catch (LinphoneCoreException e) {
|
||||||
Log.e(e);
|
Log.e(e);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
friend.addPhoneNumber(noa.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (hasAddr) {
|
if (hasAddr) {
|
||||||
|
@ -400,6 +411,8 @@ public class LinphoneContact implements Serializable, Comparable<LinphoneContact
|
||||||
} catch (LinphoneCoreException e) {
|
} catch (LinphoneCoreException e) {
|
||||||
Log.e(e);
|
Log.e(e);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
friend.addPhoneNumber(noa.getValue());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue