From af3a159f8dc9df888a4c4e4c9e85b74a1e8bbc0c Mon Sep 17 00:00:00 2001 From: Margaux Clerc Date: Tue, 1 Sep 2015 15:12:21 +0200 Subject: [PATCH] Add new items for chat --- .../chat_attachment_default.png | Bin 0 -> 4044 bytes res/drawable-xhdpi/chat_attachment_over.png | Bin 0 -> 3504 bytes res/drawable-xhdpi/chat_send_default.png | Bin 1286 -> 4263 bytes res/drawable-xhdpi/chat_send_over.png | Bin 3877 -> 3864 bytes ...at_send_picture.xml => chat_send_file.xml} | 4 +- res/drawable/wizard_notok.png | Bin 1209 -> 0 bytes res/drawable/wizard_ok.png | Bin 1172 -> 0 bytes res/layout/chat.xml | 25 +- res/layout/chat_activity.xml | 8 + res/layout/search_contact_cell.xml | 39 ++++ src/org/linphone/ChatActivity.java | 29 ++- src/org/linphone/ChatFragment.java | 215 ++++++++++++++++-- src/org/linphone/ChatListFragment.java | 3 +- 13 files changed, 281 insertions(+), 42 deletions(-) create mode 100644 res/drawable-xhdpi/chat_attachment_default.png create mode 100644 res/drawable-xhdpi/chat_attachment_over.png rename res/drawable/{chat_send_picture.xml => chat_send_file.xml} (57%) delete mode 100644 res/drawable/wizard_notok.png delete mode 100644 res/drawable/wizard_ok.png create mode 100644 res/layout/search_contact_cell.xml diff --git a/res/drawable-xhdpi/chat_attachment_default.png b/res/drawable-xhdpi/chat_attachment_default.png new file mode 100644 index 0000000000000000000000000000000000000000..8cba3b8c9f44e2c423ce3871e1151d0ed26cc41f GIT binary patch literal 4044 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 + android:drawable="@drawable/chat_attachment_over" /> + android:drawable="@drawable/chat_attachment_default" /> diff --git a/res/drawable/wizard_notok.png b/res/drawable/wizard_notok.png deleted file mode 100644 index c174df390d2a07cb3287db48eb71a9f6dbcc8d2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1209 zcmeAS@N?(olHy`uVBq!ia0vp^LO?9Y!3HERME&^*q$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMj}YCWx1pIn-onpXnTn}X2mgi|jlG2|8iZFWg5$}CGwaVyHtRRDY1DigO`EO43! z)tiFbEtWX->H{644~kl(sD=pv(+`LVPq;u1Jn5(A0n>XCFkzoKusW21fl=Gj#WAGf z)|n~0y__8d+Rm@)owT6UuGv?oX7&U(Y1OV-5gkcOUAgi#q&9dwWl|6H_V+Po~;1FfglRhD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb;hUJ8nFkWk z1ncniwerj>E=kNwPW5!LRRWr!mzkMjWom40;ArS(>Sp0$Y-s3e=xA}YCWx1pIn-onpXnTn}X15hEp#nG2|8iZFWg5$}CGwaVyHtRRDY1Die!aTud#E zoGo3Q-7K6fu)77KHwCv_OmMnIALtl;P}CwtHB1PYen3ok!Ub~RNk26YnBI$k30q6- zx(@>bBb%p-V@SoVq(A@v+cTRo2s2M*@P4k9TJ+V6>0_G0HO5C?Vn)1ztdC*?oE;W4 zcltPgQYai@ z*p9dcn2BGpKG7EAY|b*Lui*!iz;EV{ehO*LUEi5LhAZ%~CuOUAEpNObdspDelv;)k z<;EZKlkV^+l(`rmVeFVMa7yWQg9WpD&qGs|=(yRuM@lo2{2ezopBIRkxlOWTcf${U pf%v9fPwW;>Ic4#pOR#}~nc>|wt7Fz#SO0;^2~Sr)mvv4FO#qH~f=U1Y diff --git a/res/layout/chat.xml b/res/layout/chat.xml index 079b67d58..a7f38b995 100644 --- a/res/layout/chat.xml +++ b/res/layout/chat.xml @@ -97,7 +97,7 @@ - + android:src="@drawable/chat_send_file" /> - + - + + + \ No newline at end of file diff --git a/res/layout/chat_activity.xml b/res/layout/chat_activity.xml index b70f9391a..34e3c7ae8 100644 --- a/res/layout/chat_activity.xml +++ b/res/layout/chat_activity.xml @@ -1,8 +1,16 @@ + + \ No newline at end of file diff --git a/res/layout/search_contact_cell.xml b/res/layout/search_contact_cell.xml new file mode 100644 index 000000000..ee8b6a27c --- /dev/null +++ b/res/layout/search_contact_cell.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/src/org/linphone/ChatActivity.java b/src/org/linphone/ChatActivity.java index a29b5ab14..a3114f654 100644 --- a/src/org/linphone/ChatActivity.java +++ b/src/org/linphone/ChatActivity.java @@ -28,32 +28,41 @@ import android.os.Bundle; public class ChatActivity extends Activity { private static final String CHAT_FRAGMENT = "chatFragment"; private ChatFragment chatFragment; + private StatusFragment status; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.chat_activity); - + Bundle extras = new Bundle(); - extras.putString("SipUri", getIntent().getExtras().getString("SipUri")); - extras.putString("DisplayName", getIntent().getExtras().getString("DisplayName")); - extras.putString("PictureUri", getIntent().getExtras().getString("PictureUri")); - extras.putString("ThumbnailUri", getIntent().getExtras().getString("ThumbnailUri")); - + if( getIntent().getExtras() != null) { + extras.putString("SipUri", getIntent().getExtras().getString("SipUri")); + extras.putString("DisplayName", getIntent().getExtras().getString("DisplayName")); + extras.putString("PictureUri", getIntent().getExtras().getString("PictureUri")); + extras.putString("ThumbnailUri", getIntent().getExtras().getString("ThumbnailUri")); + } + ChatFragment fragment = new ChatFragment(); fragment.setArguments(extras); getFragmentManager().beginTransaction().add(R.id.fragmentContainer, fragment, "ChatFragment").commit(); - + FragmentManager fm = getFragmentManager(); chatFragment = (ChatFragment) fm.findFragmentByTag(CHAT_FRAGMENT); - // If the Fragment is non-null, then it is currently being - // retained across a configuration change. + // If the Fragment is non-null, then it is currently being + // retained across a configuration change. if (chatFragment == null) { chatFragment = new ChatFragment(); chatFragment.setArguments(extras); fm.beginTransaction().add(R.id.fragmentContainer, chatFragment, CHAT_FRAGMENT).commit(); - } + } + } + + public void updateStatusFragment(StatusFragment fragment) { + status = fragment; + } + } diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index 75548f3ef..4cf39cdf9 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -25,7 +25,10 @@ import java.io.File; import android.app.Fragment; import android.graphics.Matrix; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import java.util.zip.Inflater; import org.linphone.compatibility.Compatibility; @@ -39,6 +42,8 @@ import org.linphone.core.LinphoneChatMessage.State; import org.linphone.core.LinphoneCoreException; import org.linphone.core.LinphoneCoreFactory; import org.linphone.core.LinphoneCoreListenerBase; +import org.linphone.core.LinphoneFriend; +import org.linphone.core.PresenceActivityType; import org.linphone.mediastream.Log; import org.linphone.ui.BubbleChat; @@ -73,13 +78,18 @@ import android.view.ViewGroup; import android.view.ViewTreeObserver; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; +import android.widget.ArrayAdapter; +import android.widget.AutoCompleteTextView; import android.widget.BaseAdapter; import android.widget.EditText; +import android.widget.Filter; +import android.widget.Filterable; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.ProgressBar; import android.widget.RelativeLayout; +import android.widget.SectionIndexer; import android.widget.TextView; import android.widget.Toast; @@ -100,6 +110,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC private ImageView cancelUpload, edit, selectAll, deselectAll, startCall, delete, sendImage, sendMessage; private TextView contactName, remoteComposing; private ImageView back; + private AutoCompleteTextView searchContactField; private RelativeLayout uploadLayout, textLayout, topBar; private ListView messagesList; @@ -112,6 +123,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC private LinphoneCoreListenerBase mListener; private ByteArrayInputStream mUploadingImageStream; private LinphoneChatMessage currentMessageInFileTransferUploadState; + private boolean newChatConversation = false; public static boolean isInstanciated() { return instance != null; @@ -127,15 +139,21 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC // Retain the fragment across configuration changes setRetainInstance(true); - //Retrieve parameter from intent - sipUri = getArguments().getString("SipUri"); - displayName = getArguments().getString("DisplayName"); - pictureUri = getArguments().getString("PictureUri"); + if(getArguments() == null || getArguments().getString("SipUri") == null) { + newChatConversation = true; + } else { + //Retrieve parameter from intent + sipUri = getArguments().getString("SipUri"); + displayName = getArguments().getString("DisplayName"); + pictureUri = getArguments().getString("PictureUri"); + } //Initialize UI contactName = (TextView) view.findViewById(R.id.contact_name); //contactPicture = (ImageView) view.findViewById(R.id.contactPicture); messagesList = (ListView) view.findViewById(R.id.chatMessageList); + searchContactField = (AutoCompleteTextView) view.findViewById(R.id.searchContactField); + textLayout = (RelativeLayout) view.findViewById(R.id.messageLayout); progressBar = (ProgressBar) view.findViewById(R.id.progressbar); topBar = (RelativeLayout) view.findViewById(R.id.topBar); @@ -164,8 +182,20 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC delete = (ImageView) view.findViewById(R.id.delete); delete.setOnClickListener(this); - - displayChatHeader(displayName, pictureUri); + if (newChatConversation) { + messagesList.setVisibility(View.GONE); + searchContactField.setVisibility(View.VISIBLE); + searchContactField.setAdapter(new SearchContactsListAdapter(ContactsManager.getInstance().getAllContacts(), null, inflater)); + edit.setVisibility(View.INVISIBLE); + startCall.setVisibility(View.INVISIBLE); + } else { + displayChatHeader(displayName, pictureUri); + LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); + if (lc != null) { + chatRoom = lc.getOrCreateChatRoom(sipUri); + chatRoom.markAsRead(); + } + } //Manage multiline message = (EditText) view.findViewById(R.id.message); @@ -210,13 +240,6 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } } }); - - LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); - if (lc != null) { - chatRoom = lc.getOrCreateChatRoom(sipUri); - //Only works if using liblinphone storage - chatRoom.markAsRead(); - } mListener = new LinphoneCoreListenerBase(){ @Override @@ -534,8 +557,11 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC String draft = getArguments().getString("messageDraft"); message.setText(draft); - remoteComposing.setVisibility(chatRoom.isRemoteComposing() ? View.VISIBLE : View.GONE); - dispayMessageList(); + + if(!newChatConversation) { + remoteComposing.setVisibility(chatRoom.isRemoteComposing() ? View.VISIBLE : View.GONE); + dispayMessageList(); + } super.onResume(); } @@ -585,20 +611,52 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC LinphoneCore lc = LinphoneManager.getLcIfManagerNotDestroyedOrNull(); boolean isNetworkReachable = lc == null ? false : lc.isNetworkReachable(); - if (chatRoom != null && messageToSend != null && messageToSend.length() > 0 && isNetworkReachable) { - LinphoneChatMessage message = chatRoom.createLinphoneChatMessage(messageToSend); - chatRoom.sendChatMessage(message); + if(newChatConversation){ + String address = searchContactField.getText().toString(); + if(address != null && !address.equals("")) { + if (!LinphoneUtils.isSipAddress(address)) { + if (LinphoneManager.getLc().getDefaultProxyConfig() == null) { + Log.w("Error"); + } + address = address + "@" + LinphoneManager.getLc().getDefaultProxyConfig().getDomain(); + if (!LinphoneUtils.isStrictSipAddress(address)) { + address = "sip:" + address; + } + } - if (LinphoneActivity.isInstanciated()) { - LinphoneActivity.instance().onMessageSent(sipUri, messageToSend); + Log.w(address); + LinphoneAddress lAddress; + try { + lAddress = LinphoneCoreFactory.instance().createLinphoneAddress(address); + } catch (LinphoneCoreException e) { + Log.e("Cannot display chat",e); + return; + } + + chatRoom = lc.getOrCreateChatRoom(lAddress.toString()); + + if (chatRoom != null && messageToSend != null && messageToSend.length() > 0 && isNetworkReachable) { + LinphoneChatMessage message = chatRoom.createLinphoneChatMessage(messageToSend); + chatRoom.sendChatMessage(message); + LinphoneActivity.instance().displayChat(lAddress.toString()); + } } + } else { - message.setListener(LinphoneManager.getInstance()); + if (chatRoom != null && messageToSend != null && messageToSend.length() > 0 && isNetworkReachable) { + LinphoneChatMessage message = chatRoom.createLinphoneChatMessage(messageToSend); + chatRoom.sendChatMessage(message); - invalidate(); - Log.i("Sent message current status: " + message.getStatus()); - } else if (!isNetworkReachable && LinphoneActivity.isInstanciated()) { - LinphoneActivity.instance().displayCustomToast(getString(R.string.error_network_unreachable), Toast.LENGTH_LONG); + if (LinphoneActivity.isInstanciated()) { + LinphoneActivity.instance().onMessageSent(sipUri, messageToSend); + } + + message.setListener(LinphoneManager.getInstance()); + invalidate(); + Log.i("Sent message current status: " + message.getStatus()); + } else if (!isNetworkReachable && LinphoneActivity.isInstanciated()) { + LinphoneActivity.instance().displayCustomToast(getString(R.string.error_network_unreachable), Toast.LENGTH_LONG); + } } } @@ -810,4 +868,111 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC public void onLinphoneChatMessageFileTransferProgressChanged(LinphoneChatMessage msg, LinphoneContent content, int offset, int total) { progressBar.setProgress(offset * 100 / total); } + + class SearchContactsListAdapter extends BaseAdapter implements Filterable { + private List contacts; + private Cursor cursor; + private LayoutInflater mInflater; + + SearchContactsListAdapter(List contactsList, Cursor c, LayoutInflater inflater) { + cursor = c; + mInflater = inflater; + contacts = new ArrayList(); + for(Contact con: ContactsManager.getInstance().getAllContacts()){ + for(String numberOrAddress : con.getNumbersOrAddresses()){ + contacts.add(new ContactAddress(con,numberOrAddress)); + } + } + } + + @Override + public Filter getFilter() { + return new Filter() { + @Override + protected void publishResults(CharSequence constraint, + FilterResults results) { + if (results.count > 0) { + notifyDataSetChanged(); + } else { + notifyDataSetInvalidated(); + } + } + + @Override + protected FilterResults performFiltering(CharSequence constraint) { + List result = new ArrayList(); + Log.w(constraint); + if(constraint != null) { + for (ContactAddress c : contacts) { + Log.w(c.mAddress); + Log.w(c.mContact.getName()); + if (c.mContact.getName().startsWith(constraint.toString()) || c.mAddress.startsWith(constraint.toString())) { + result.add(c); + } + } + } + FilterResults r = new FilterResults(); + r.values = result; + r.count = result.size(); + return r; + } + }; + } + + class ContactAddress { + public Contact mContact; + public String mAddress; + + ContactAddress(Contact contact, String address){ + mContact = contact; + mAddress = address; + } + } + + public int getCount() { + return contacts.size(); + } + + public Object getItem(int position) { + if (contacts == null || position >= contacts.size()) { + List contacts_list = new ArrayList(); + for(Contact c: ContactsManager.getInstance().getAllContacts()){ + for(String numberOrAddress : c.getNumbersOrAddresses()){ + contacts_list.add(new ContactAddress(c,numberOrAddress)); + } + } + return contacts_list; + } else { + return contacts.get(position); + } + } + + public long getItemId(int position) { + return position; + } + + public View getView(int position, View convertView, ViewGroup parent) { + View view = null; + ContactAddress contact = null; + do { + contact = (ContactAddress) getItem(position); + } while (contact == null); + + if (convertView != null) { + view = convertView; + } else { + view = mInflater.inflate(R.layout.search_contact_cell, parent, false); + } + + TextView name = (TextView) view.findViewById(R.id.Contact_name); + name.setText(contact.mContact.getName()); + + TextView address = (TextView) view.findViewById(R.id.contact_address); + address.setText(contact.mAddress); + + return view; + } + } + + } diff --git a/src/org/linphone/ChatListFragment.java b/src/org/linphone/ChatListFragment.java index 9e28c60d4..f995d7f25 100644 --- a/src/org/linphone/ChatListFragment.java +++ b/src/org/linphone/ChatListFragment.java @@ -234,6 +234,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte hideAndDisplayMessageIfNoChat(); } else if (id == R.id.new_discussion) { + LinphoneActivity.instance().displayChat(null); /*String sipUri = fastNewChat.getText().toString(); if (sipUri.equals("")) { LinphoneActivity.instance().displayContacts(true); @@ -247,7 +248,7 @@ public class ChatListFragment extends Fragment implements OnClickListener, OnIte if (!LinphoneUtils.isStrictSipAddress(sipUri)) { sipUri = "sip:" + sipUri; } - LinphoneActivity.instance().displayChat(sipUri); + }*/ } }