diff --git a/res/drawable/chat_icon_over.png b/res/drawable/chat_icon_over.png
index fc097d0c7..7da46015c 100644
Binary files a/res/drawable/chat_icon_over.png and b/res/drawable/chat_icon_over.png differ
diff --git a/res/layout/contact.xml b/res/layout/contact.xml
index 117f9bdcf..d592f06d2 100644
--- a/res/layout/contact.xml
+++ b/res/layout/contact.xml
@@ -39,7 +39,9 @@
android:id="@+id/controls"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingTop="20dp" />
+ android:stretchColumns="*"
+ android:paddingTop="20dp">
+
diff --git a/res/layout/contact_control_row.xml b/res/layout/contact_control_row.xml
index a6e07082d..3a17fba19 100644
--- a/res/layout/contact_control_row.xml
+++ b/res/layout/contact_control_row.xml
@@ -8,18 +8,18 @@
false
true
false
+ true
true
true
diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java
index 03414a04e..463b92801 100644
--- a/src/org/linphone/ChatFragment.java
+++ b/src/org/linphone/ChatFragment.java
@@ -61,7 +61,14 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneO
View view = inflater.inflate(R.layout.chat, container, false);
TextView contactName = (TextView) view.findViewById(R.id.contactName);
- contactName.setText(name == null ? sipUri : name);
+ if (name == null && getResources().getBoolean(R.bool.only_display_username_if_unknown) && LinphoneUtils.isSipAddress(sipUri)) {
+ contactName.setText(LinphoneUtils.getUsernameFromAddress(sipUri));
+ } else if (name == null) {
+ contactName.setText(sipUri);
+ }
+ else {
+ contactName.setText(name);
+ }
ImageView contactPicture = (ImageView) view.findViewById(R.id.contactPicture);
if (pictureUri != null) {
diff --git a/src/org/linphone/ChatListFragment.java b/src/org/linphone/ChatListFragment.java
index 9a7082882..2332cc7a6 100644
--- a/src/org/linphone/ChatListFragment.java
+++ b/src/org/linphone/ChatListFragment.java
@@ -141,6 +141,13 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte
LinphoneUtils.findUriPictureOfContactAndSetDisplayName(address, view.getContext().getContentResolver());
TextView sipUri = (TextView) view.findViewById(R.id.sipUri);
+
+ if (getResources().getBoolean(R.bool.only_display_username_if_unknown) && LinphoneUtils.isSipAddress(address.getDisplayName())) {
+ address.setDisplayName(LinphoneUtils.getUsernameFromAddress(address.getDisplayName()));
+ } else if (getResources().getBoolean(R.bool.only_display_username_if_unknown) && LinphoneUtils.isSipAddress(contact)) {
+ contact = LinphoneUtils.getUsernameFromAddress(contact);
+ }
+
sipUri.setText(address.getDisplayName() == null ? contact : address.getDisplayName());
ImageView delete, detail;
diff --git a/src/org/linphone/ContactFragment.java b/src/org/linphone/ContactFragment.java
index 5c220aad4..14df5fe6e 100644
--- a/src/org/linphone/ContactFragment.java
+++ b/src/org/linphone/ContactFragment.java
@@ -52,16 +52,20 @@ public class ContactFragment extends Fragment {
TableLayout controls = (TableLayout) view.findViewById(R.id.controls);
- for (String numeroOrAddress : contact.getNumerosOrAddresses()) {
+ for (String numberOrAddress : contact.getNumerosOrAddresses()) {
View v = inflater.inflate(R.layout.contact_control_row, null);
- ((TextView) v.findViewById(R.id.numeroOrAddress)).setText(numeroOrAddress);
+ ((TextView) v.findViewById(R.id.numeroOrAddress)).setText(numberOrAddress);
v.findViewById(R.id.dial).setOnClickListener(dialListener);
- v.findViewById(R.id.dial).setTag(numeroOrAddress);
+ v.findViewById(R.id.dial).setTag(numberOrAddress);
- v.findViewById(R.id.chat).setOnClickListener(chatListener);
- v.findViewById(R.id.chat).setTag(numeroOrAddress);
+ if (LinphoneUtils.isSipAddress(numberOrAddress)) {
+ v.findViewById(R.id.chat).setOnClickListener(chatListener);
+ v.findViewById(R.id.chat).setTag(numberOrAddress);
+ } else {
+ v.findViewById(R.id.chat).setVisibility(View.INVISIBLE);
+ }
controls.addView(v);
}
diff --git a/src/org/linphone/HistoryDetailFragment.java b/src/org/linphone/HistoryDetailFragment.java
index 0545e4cb1..20e9d3e60 100644
--- a/src/org/linphone/HistoryDetailFragment.java
+++ b/src/org/linphone/HistoryDetailFragment.java
@@ -65,6 +65,9 @@ public class HistoryDetailFragment extends Fragment implements OnClickListener {
addToContacts.setOnClickListener(this);
contactName = (TextView) view.findViewById(R.id.contactName);
+ if (displayName == null && getResources().getBoolean(R.bool.only_display_username_if_unknown) && LinphoneUtils.isSipAddress(sipUri)) {
+ displayName = LinphoneUtils.getUsernameFromAddress(sipUri);
+ }
contactName.setText(displayName == null ? sipUri : displayName);
dialBackUri = (TextView) view.findViewById(R.id.dialBackUri);
diff --git a/src/org/linphone/HistoryFragment.java b/src/org/linphone/HistoryFragment.java
index 9b29daaed..d2d38e999 100644
--- a/src/org/linphone/HistoryFragment.java
+++ b/src/org/linphone/HistoryFragment.java
@@ -199,9 +199,17 @@ public class HistoryFragment extends Fragment implements OnClickListener, OnItem
String sipUri = address.asStringUriOnly();
if (displayName == null) {
- contact.setText(sipUri);
+ if (getResources().getBoolean(R.bool.only_display_username_if_unknown) && LinphoneUtils.isSipAddress(sipUri)) {
+ contact.setText(LinphoneUtils.getUsernameFromAddress(sipUri));
+ } else {
+ contact.setText(sipUri);
+ }
} else {
- contact.setText(displayName);
+ if (getResources().getBoolean(R.bool.only_display_username_if_unknown) && LinphoneUtils.isSipAddress(address.getDisplayName())) {
+ contact.setText(LinphoneUtils.getUsernameFromAddress(address.getDisplayName()));
+ } else {
+ contact.setText(displayName);
+ }
}
view.setTag(sipUri);
diff --git a/src/org/linphone/LinphoneUtils.java b/src/org/linphone/LinphoneUtils.java
index bb63b5f81..7552972fb 100644
--- a/src/org/linphone/LinphoneUtils.java
+++ b/src/org/linphone/LinphoneUtils.java
@@ -62,6 +62,20 @@ public final class LinphoneUtils {
private static boolean preventVolumeBarToDisplay = false;
+ public static boolean isSipAddress(String numberOrAddress) {
+ return numberOrAddress != null && numberOrAddress.matches("^(sip:)?[a-z0-9]+([_\\.-][a-z0-9]+)*@([a-z0-9]+([\\.-][a-z0-9]+)*)+\\.[a-z]{2,}$");
+ }
+
+ public static String getUsernameFromAddress(String address) {
+ if (address.contains("sip:"))
+ address = address.replace("sip:", "");
+
+ if (address.contains("@"))
+ address = address.split("@")[0];
+
+ return address;
+ }
+
public static boolean onKeyBackGoHome(Activity activity, int keyCode, KeyEvent event) {
if (!(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0)) {
return false; // continue
diff --git a/src/org/linphone/compatibility/ApiFivePlus.java b/src/org/linphone/compatibility/ApiFivePlus.java
index 37625138d..f62b6e54e 100644
--- a/src/org/linphone/compatibility/ApiFivePlus.java
+++ b/src/org/linphone/compatibility/ApiFivePlus.java
@@ -6,6 +6,7 @@ import java.util.List;
import org.linphone.mediastream.Version;
+import android.annotation.TargetApi;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.ContentUris;
@@ -41,6 +42,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
/**
* @author Sylvain Berfini
*/
+@TargetApi(5)
public class ApiFivePlus {
public static void overridePendingTransition(Activity activity, int idAnimIn, int idAnimOut) {
activity.overridePendingTransition(idAnimIn, idAnimOut);