From 2ef850574ffe2eaea308c59ffd6152facc2595fd Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Fri, 6 Jul 2012 15:36:15 +0200 Subject: [PATCH] Fix contact display + option to only display nicknames --- res/drawable/chat_icon_over.png | Bin 1669 -> 4416 bytes res/layout/contact.xml | 4 +++- res/layout/contact_control_row.xml | 12 ++++++------ res/values/non_localizable_custom.xml | 1 + src/org/linphone/ChatFragment.java | 9 ++++++++- src/org/linphone/ChatListFragment.java | 7 +++++++ src/org/linphone/ContactFragment.java | 14 +++++++++----- src/org/linphone/HistoryDetailFragment.java | 3 +++ src/org/linphone/HistoryFragment.java | 12 ++++++++++-- src/org/linphone/LinphoneUtils.java | 14 ++++++++++++++ .../linphone/compatibility/ApiFivePlus.java | 2 ++ 11 files changed, 63 insertions(+), 15 deletions(-) diff --git a/res/drawable/chat_icon_over.png b/res/drawable/chat_icon_over.png index fc097d0c76b6b52fe22562cde44061b28d73dfa6..7da46015c5b7505649c4366ad043c7c64ea55501 100644 GIT binary patch delta 3765 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 delta 997 zcmX@0)XKZTjVZ>&+`!q=(Zbou(A?P2(AChw*v-Py#lpQkyEDz!O7r8d?g2)eY(brT&4;*5*oF~12 zvnAQ}HxIocT{ERdbR9$C;B;I%+OPiUg>Hbv31aSihXB^KBvs%)E} zYPK>-TZ#LF=*)~`;OP0)Q z@tMxCC56$jEqKyR9>-MOZ3X5Fob>GYb;O=6md<0~Wy@+{nZdfHUZZD0^)=4Cv~YwzHFm^m}WY)8$12kz_5UCa?Ptb;bUHHFIfWb`iN6`A#$G5Rv| zy&KCE_#A9y9i2>ts+LtXgiTv)qMZ@^DrFJ(6p5bmANa3iR57qf zY%J9<6JR*2=sXc_pK;i6?_;(ZkHrISb<{81d|33N zw4bm%P5WU%}4ieVHMD@oZNA=oxUphC&yu(5%{Gkcy5M?`WOzA}m&-nB60_Y8^S-ye4hewp`z z(PY*#pi=9E&ZMIU1GEG$+jz9JJz + 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);