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);