From be16c91ad47adebc5cbc5f20342dd3ba99d17ca4 Mon Sep 17 00:00:00 2001 From: Sylvain Berfini Date: Wed, 20 Mar 2019 13:41:22 +0100 Subject: [PATCH] Added option to show SIP URI in chat, if disabled (by default) will show upon clicking on name only --- .../linphone/chat/ChatMessagesFragment.java | 21 ++++- .../linphone/chat/DeviceGroupViewHolder.java | 3 +- .../org/linphone/chat/DevicesAdapter.java | 5 ++ .../org/linphone/chat/GroupInfoAdapter.java | 17 ++++ .../linphone/chat/GroupInfoViewHolder.java | 3 +- .../java/org/linphone/chat/ImdnFragment.java | 84 ++++++++++++++++++- app/src/main/res/layout-land/call.xml | 2 +- app/src/main/res/layout/call.xml | 2 +- app/src/main/res/layout/call_incoming.xml | 2 +- app/src/main/res/layout/call_outgoing.xml | 2 +- app/src/main/res/layout/chat.xml | 8 ++ app/src/main/res/layout/chat_device_group.xml | 28 +++++-- app/src/main/res/layout/chat_imdn_cell.xml | 28 +++++-- app/src/main/res/layout/chat_infos_cell.xml | 28 +++++-- app/src/main/res/layout/history_detail.xml | 2 +- .../main/res/layout/search_contact_cell.xml | 2 +- .../res/layout/side_menu_main_account.xml | 2 +- .../res/values/non_localizable_custom.xml | 1 + app/src/main/res/values/styles.xml | 10 +++ 19 files changed, 218 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java b/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java index 641aaf72f..328d939ee 100644 --- a/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java +++ b/app/src/main/java/org/linphone/chat/ChatMessagesFragment.java @@ -105,7 +105,7 @@ public class ChatMessagesFragment extends Fragment private final Handler mHandler = new Handler(Looper.getMainLooper()); private ImageView mBackButton, mCallButton, mBackToCallButton, mGroupInfosButton; private ImageView mAttachImageButton, mSendMessageButton; - private TextView mRoomLabel, mParticipantsLabel, mRemoteComposing; + private TextView mRoomLabel, mParticipantsLabel, mSipUriLabel, mRemoteComposing; private RichEditText mMessageTextToSend; private LayoutInflater mInflater; private RecyclerView mChatEventsList; @@ -252,6 +252,7 @@ public class ChatMessagesFragment extends Fragment mRoomLabel = view.findViewById(R.id.subject); mParticipantsLabel = view.findViewById(R.id.participants); + mSipUriLabel = view.findViewById(R.id.sipUri); mFilesUploadLayout = view.findViewById(R.id.file_upload_layout); @@ -768,6 +769,22 @@ public class ChatMessagesFragment extends Fragment mGroupInfosButton.setVisibility(View.GONE); mParticipantsLabel.setVisibility(View.GONE); + if (mContext.getResources().getBoolean(R.bool.show_sip_uri_in_chat)) { + mSipUriLabel.setVisibility(View.VISIBLE); + } else { + mSipUriLabel.setVisibility(View.GONE); + mRoomLabel.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + mSipUriLabel.setVisibility( + mSipUriLabel.getVisibility() == View.VISIBLE + ? View.GONE + : View.VISIBLE); + } + }); + } + if (mParticipants.size() == 0) { // Contact not found String displayName = LinphoneUtils.getAddressDisplayName(mRemoteParticipantAddress); @@ -775,11 +792,13 @@ public class ChatMessagesFragment extends Fragment } else { mRoomLabel.setText(mParticipants.get(0).getFullName()); } + mSipUriLabel.setText(mRemoteParticipantAddress.asStringUriOnly()); } else { mCallButton.setVisibility(View.GONE); mGroupInfosButton.setVisibility(View.VISIBLE); mRoomLabel.setText(mChatRoom.getSubject()); mParticipantsLabel.setVisibility(View.VISIBLE); + mSipUriLabel.setVisibility(View.GONE); } mBackToCallButton.setVisibility(View.GONE); diff --git a/app/src/main/java/org/linphone/chat/DeviceGroupViewHolder.java b/app/src/main/java/org/linphone/chat/DeviceGroupViewHolder.java index 332318953..99924dc34 100644 --- a/app/src/main/java/org/linphone/chat/DeviceGroupViewHolder.java +++ b/app/src/main/java/org/linphone/chat/DeviceGroupViewHolder.java @@ -27,12 +27,13 @@ import org.linphone.R; class DeviceGroupViewHolder { public final RelativeLayout avatarLayout; - public final TextView participantName; + public final TextView participantName, sipUri; public final ImageView groupExpander; public DeviceGroupViewHolder(View v) { avatarLayout = v.findViewById(R.id.avatar_layout); participantName = v.findViewById(R.id.name); + sipUri = v.findViewById(R.id.sipUri); groupExpander = v.findViewById(R.id.dropdown); } } diff --git a/app/src/main/java/org/linphone/chat/DevicesAdapter.java b/app/src/main/java/org/linphone/chat/DevicesAdapter.java index 1a2013a36..5d0bf4570 100644 --- a/app/src/main/java/org/linphone/chat/DevicesAdapter.java +++ b/app/src/main/java/org/linphone/chat/DevicesAdapter.java @@ -122,6 +122,11 @@ class DevicesAdapter extends BaseExpandableListAdapter { holder.participantName.setText(displayName); } + holder.sipUri.setText(participantAddress.asStringUriOnly()); + if (!mContext.getResources().getBoolean(R.bool.show_sip_uri_in_chat)) { + holder.sipUri.setVisibility(View.GONE); + } + holder.groupExpander.setImageResource( isExpanded ? R.drawable.chevron_list_open : R.drawable.chevron_list_close); } diff --git a/app/src/main/java/org/linphone/chat/GroupInfoAdapter.java b/app/src/main/java/org/linphone/chat/GroupInfoAdapter.java index 28b1fa08a..e0d515a0a 100644 --- a/app/src/main/java/org/linphone/chat/GroupInfoAdapter.java +++ b/app/src/main/java/org/linphone/chat/GroupInfoAdapter.java @@ -26,6 +26,7 @@ import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; import java.util.List; +import org.linphone.LinphoneActivity; import org.linphone.R; import org.linphone.contacts.ContactAddress; import org.linphone.contacts.LinphoneContact; @@ -70,6 +71,22 @@ class GroupInfoAdapter extends RecyclerView.Adapter { ContactAvatar.displayAvatar(holder.name.getText().toString(), holder.avatarLayout); } + holder.sipUri.setText(ca.getAddressAsDisplayableString()); + + if (!LinphoneActivity.instance().getResources().getBoolean(R.bool.show_sip_uri_in_chat)) { + holder.sipUri.setVisibility(View.GONE); + holder.name.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + holder.sipUri.setVisibility( + holder.sipUri.getVisibility() == View.VISIBLE + ? View.GONE + : View.VISIBLE); + } + }); + } + holder.delete.setOnClickListener( new View.OnClickListener() { @Override diff --git a/app/src/main/java/org/linphone/chat/GroupInfoViewHolder.java b/app/src/main/java/org/linphone/chat/GroupInfoViewHolder.java index 2dc336d30..5f0e2017b 100644 --- a/app/src/main/java/org/linphone/chat/GroupInfoViewHolder.java +++ b/app/src/main/java/org/linphone/chat/GroupInfoViewHolder.java @@ -28,7 +28,7 @@ import androidx.recyclerview.widget.RecyclerView; import org.linphone.R; public class GroupInfoViewHolder extends RecyclerView.ViewHolder { - public final TextView name; + public final TextView name, sipUri; public final RelativeLayout avatarLayout; public final ImageView delete; public final LinearLayout isAdmin; @@ -37,6 +37,7 @@ public class GroupInfoViewHolder extends RecyclerView.ViewHolder { public GroupInfoViewHolder(View view) { super(view); name = view.findViewById(R.id.name); + sipUri = view.findViewById(R.id.sipUri); avatarLayout = view.findViewById(R.id.avatar_layout); delete = view.findViewById(R.id.delete); isAdmin = view.findViewById(R.id.isAdminLayout); diff --git a/app/src/main/java/org/linphone/chat/ImdnFragment.java b/app/src/main/java/org/linphone/chat/ImdnFragment.java index ebe66f959..deb26ceb1 100644 --- a/app/src/main/java/org/linphone/chat/ImdnFragment.java +++ b/app/src/main/java/org/linphone/chat/ImdnFragment.java @@ -186,7 +186,8 @@ public class ImdnFragment extends Fragment { getActivity(), participant.getStateChangeTime(), R.string.messages_date_format)); - ((TextView) v.findViewById(R.id.name)).setText(participantDisplayName); + TextView name = v.findViewById(R.id.name); + name.setText(participantDisplayName); if (participantContact != null) { ContactAvatar.displayAvatar(participantContact, v.findViewById(R.id.avatar_layout)); } else { @@ -194,6 +195,24 @@ public class ImdnFragment extends Fragment { participantDisplayName, v.findViewById(R.id.avatar_layout)); } + final TextView sipUri = v.findViewById(R.id.sipUri); + sipUri.setText(address.asStringUriOnly()); + if (!LinphoneActivity.instance() + .getResources() + .getBoolean(R.bool.show_sip_uri_in_chat)) { + sipUri.setVisibility(View.GONE); + name.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + sipUri.setVisibility( + sipUri.getVisibility() == View.VISIBLE + ? View.GONE + : View.VISIBLE); + } + }); + } + mRead.addView(v); first = false; } @@ -219,7 +238,8 @@ public class ImdnFragment extends Fragment { getActivity(), participant.getStateChangeTime(), R.string.messages_date_format)); - ((TextView) v.findViewById(R.id.name)).setText(participantDisplayName); + TextView name = v.findViewById(R.id.name); + name.setText(participantDisplayName); if (participantContact != null) { ContactAvatar.displayAvatar(participantContact, v.findViewById(R.id.avatar_layout)); } else { @@ -227,6 +247,24 @@ public class ImdnFragment extends Fragment { participantDisplayName, v.findViewById(R.id.avatar_layout)); } + final TextView sipUri = v.findViewById(R.id.sipUri); + sipUri.setText(address.asStringUriOnly()); + if (!LinphoneActivity.instance() + .getResources() + .getBoolean(R.bool.show_sip_uri_in_chat)) { + sipUri.setVisibility(View.GONE); + name.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + sipUri.setVisibility( + sipUri.getVisibility() == View.VISIBLE + ? View.GONE + : View.VISIBLE); + } + }); + } + mDelivered.addView(v); first = false; } @@ -252,7 +290,8 @@ public class ImdnFragment extends Fragment { getActivity(), participant.getStateChangeTime(), R.string.messages_date_format)); - ((TextView) v.findViewById(R.id.name)).setText(participantDisplayName); + TextView name = v.findViewById(R.id.name); + name.setText(participantDisplayName); if (participantContact != null) { ContactAvatar.displayAvatar(participantContact, v.findViewById(R.id.avatar_layout)); } else { @@ -260,6 +299,24 @@ public class ImdnFragment extends Fragment { participantDisplayName, v.findViewById(R.id.avatar_layout)); } + final TextView sipUri = v.findViewById(R.id.sipUri); + sipUri.setText(address.asStringUriOnly()); + if (!LinphoneActivity.instance() + .getResources() + .getBoolean(R.bool.show_sip_uri_in_chat)) { + sipUri.setVisibility(View.GONE); + name.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + sipUri.setVisibility( + sipUri.getVisibility() == View.VISIBLE + ? View.GONE + : View.VISIBLE); + } + }); + } + mSent.addView(v); first = false; } @@ -279,7 +336,8 @@ public class ImdnFragment extends Fragment { View v = mInflater.inflate(R.layout.chat_imdn_cell, mContainer, false); v.findViewById(R.id.separator).setVisibility(first ? View.GONE : View.VISIBLE); - ((TextView) v.findViewById(R.id.name)).setText(participantDisplayName); + TextView name = v.findViewById(R.id.name); + name.setText(participantDisplayName); if (participantContact != null) { ContactAvatar.displayAvatar(participantContact, v.findViewById(R.id.avatar_layout)); } else { @@ -287,6 +345,24 @@ public class ImdnFragment extends Fragment { participantDisplayName, v.findViewById(R.id.avatar_layout)); } + final TextView sipUri = v.findViewById(R.id.sipUri); + sipUri.setText(address.asStringUriOnly()); + if (!LinphoneActivity.instance() + .getResources() + .getBoolean(R.bool.show_sip_uri_in_chat)) { + sipUri.setVisibility(View.GONE); + name.setOnClickListener( + new View.OnClickListener() { + @Override + public void onClick(View v) { + sipUri.setVisibility( + sipUri.getVisibility() == View.VISIBLE + ? View.GONE + : View.VISIBLE); + } + }); + } + mUndelivered.addView(v); first = false; } diff --git a/app/src/main/res/layout-land/call.xml b/app/src/main/res/layout-land/call.xml index 1c39b98c5..255e4b9c7 100644 --- a/app/src/main/res/layout-land/call.xml +++ b/app/src/main/res/layout-land/call.xml @@ -65,7 +65,7 @@ diff --git a/app/src/main/res/layout/call.xml b/app/src/main/res/layout/call.xml index e65360130..e25c933a6 100644 --- a/app/src/main/res/layout/call.xml +++ b/app/src/main/res/layout/call.xml @@ -65,7 +65,7 @@ diff --git a/app/src/main/res/layout/call_incoming.xml b/app/src/main/res/layout/call_incoming.xml index 4cd8bf5a6..a4844dc59 100644 --- a/app/src/main/res/layout/call_incoming.xml +++ b/app/src/main/res/layout/call_incoming.xml @@ -49,7 +49,7 @@ + + - + android:orientation="vertical"> + + + + + + - + android:orientation="vertical"> + + + + + + diff --git a/app/src/main/res/layout/chat_infos_cell.xml b/app/src/main/res/layout/chat_infos_cell.xml index 943fa98cf..ae6cd4b10 100644 --- a/app/src/main/res/layout/chat_infos_cell.xml +++ b/app/src/main/res/layout/chat_infos_cell.xml @@ -100,15 +100,31 @@ android:layout_toLeftOf="@id/adminLayout" android:layout_toRightOf="@id/avatar"> - + android:orientation="vertical"> + + + + + + diff --git a/app/src/main/res/layout/history_detail.xml b/app/src/main/res/layout/history_detail.xml index eb55045ee..a9d4c1192 100644 --- a/app/src/main/res/layout/history_detail.xml +++ b/app/src/main/res/layout/history_detail.xml @@ -84,7 +84,7 @@ diff --git a/app/src/main/res/layout/search_contact_cell.xml b/app/src/main/res/layout/search_contact_cell.xml index 0b0ce2b05..5de123c58 100644 --- a/app/src/main/res/layout/search_contact_cell.xml +++ b/app/src/main/res/layout/search_contact_cell.xml @@ -43,7 +43,7 @@ diff --git a/app/src/main/res/values/non_localizable_custom.xml b/app/src/main/res/values/non_localizable_custom.xml index 43ff4021d..a557374aa 100644 --- a/app/src/main/res/values/non_localizable_custom.xml +++ b/app/src/main/res/values/non_localizable_custom.xml @@ -100,6 +100,7 @@ true true true + false false diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 4e99f5f04..c7cf51ee5 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -89,11 +89,21 @@ 24sp + + + +