From b691e107e3a61d373a80277b3be655da1a151f90 Mon Sep 17 00:00:00 2001 From: Margaux Clerc Date: Thu, 21 Jan 2016 15:03:15 +0100 Subject: [PATCH] Rework new conversation display --- res/layout/chat.xml | 33 +++++--- res/layout/chatlist_cell.xml | 1 - src/org/linphone/ChatFragment.java | 118 ++++++++++++++++------------- 3 files changed, 87 insertions(+), 65 deletions(-) diff --git a/res/layout/chat.xml b/res/layout/chat.xml index 3ccd2829b..293c530f8 100644 --- a/res/layout/chat.xml +++ b/res/layout/chat.xml @@ -132,20 +132,31 @@ android:layout_margin="10dp" android:layout_below="@+id/top_bar"/> - - - + android:visibility="gone" + android:textColor="@android:color/black" + android:background="@drawable/resizable_textfield" + android:gravity="center" + android:layout_margin="5dp" + android:layout_below="@id/top_bar" + android:inputType="textPersonName"/> + + + \ No newline at end of file diff --git a/res/layout/chatlist_cell.xml b/res/layout/chatlist_cell.xml index a388d1503..02d871ac0 100644 --- a/res/layout/chatlist_cell.xml +++ b/res/layout/chatlist_cell.xml @@ -28,7 +28,6 @@ android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceSmall" android:textColor="@color/colorB" - android:text="@string/draft" android:layout_marginLeft="5dp" android:layout_marginRight="5dp" /> diff --git a/src/org/linphone/ChatFragment.java b/src/org/linphone/ChatFragment.java index 22e914742..47d5129c1 100644 --- a/src/org/linphone/ChatFragment.java +++ b/src/org/linphone/ChatFragment.java @@ -73,14 +73,11 @@ import android.view.ViewTreeObserver; import android.view.WindowManager; import android.view.inputmethod.InputMethodManager; import android.widget.AbsListView; -import android.widget.AutoCompleteTextView; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; -import android.widget.Filter; -import android.widget.Filterable; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; @@ -113,10 +110,12 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC private ImageView edit, selectAll, deselectAll, startCall, delete, sendImage, sendMessage, cancel; private TextView contactName, remoteComposing; private ImageView back, backToCall; - private AutoCompleteTextView searchContactField; + private EditText searchContactField; private LinearLayout topBar, editList; private LinearLayout textLayout; - private ListView messagesList; + private SearchContactsListAdapter searchAdapter; + private ListView messagesList, resultContactsSearch; + private LayoutInflater inflater; private boolean isEditMode = false; private Contact contact; @@ -144,6 +143,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC // Retain the fragment across configuration changes setRetainInstance(true); + this.inflater = inflater; + if(getArguments() == null || getArguments().getString("SipUri") == null) { newChatConversation = true; } else { @@ -156,7 +157,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC //Initialize UI contactName = (TextView) view.findViewById(R.id.contact_name); messagesList = (ListView) view.findViewById(R.id.chat_message_list); - searchContactField = (AutoCompleteTextView) view.findViewById(R.id.search_contact_field); + searchContactField = (EditText) view.findViewById(R.id.search_contact_field); + resultContactsSearch = (ListView) view.findViewById(R.id.result_contacts); editList = (LinearLayout) view.findViewById(R.id.edit_list); textLayout = (LinearLayout) view.findViewById(R.id.message_layout); @@ -190,14 +192,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC delete.setOnClickListener(this); if (newChatConversation) { - messagesList.setVisibility(View.GONE); - searchContactField.setVisibility(View.VISIBLE); - searchContactField.setAdapter(new SearchContactsListAdapter(inflater)); - searchContactField.showDropDown(); - searchContactField.requestFocus(); - edit.setVisibility(View.INVISIBLE); - startCall.setVisibility(View.INVISIBLE); - contactName.setVisibility(View.INVISIBLE); + initNewChatConversation(); } //Manage multiline @@ -608,6 +603,8 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC if(!newChatConversation) { initChatRoom(sipUri); + searchContactField.setVisibility(View.GONE); + resultContactsSearch.setVisibility(View.GONE); remoteComposing.setVisibility(chatRoom.isRemoteComposing() ? View.VISIBLE : View.GONE); } super.onResume(); @@ -955,6 +952,7 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC private void exitNewConversationMode(Contact c, String address, String username){ sipUri = address; searchContactField.setVisibility(View.GONE); + resultContactsSearch.setVisibility(View.GONE); messagesList.setVisibility(View.VISIBLE); contactName.setVisibility(View.VISIBLE); edit.setVisibility(View.VISIBLE); @@ -964,6 +962,31 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC initChatRoom(sipUri); } + private void initNewChatConversation(){ + messagesList.setVisibility(View.GONE); + edit.setVisibility(View.INVISIBLE); + startCall.setVisibility(View.INVISIBLE); + contactName.setVisibility(View.INVISIBLE); + + resultContactsSearch.setVisibility(View.VISIBLE); + searchAdapter = new SearchContactsListAdapter(null); + resultContactsSearch.setAdapter(searchAdapter); + searchContactField.setVisibility(View.VISIBLE); + searchContactField.addTextChangedListener(new TextWatcher() { + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) {} + + @Override + public void beforeTextChanged(CharSequence s, int start, int count, + int after) {} + + @Override + public void afterTextChanged(Editable s) { + searchContacts(searchContactField.getText().toString()); + } + }); + } + private class ContactAddress { Contact contact; String address; @@ -974,49 +997,38 @@ public class ChatFragment extends Fragment implements OnClickListener, LinphoneC } } - class SearchContactsListAdapter extends BaseAdapter implements Filterable { + private void searchContacts(String search) { + if (search == null || search.length() == 0) { + resultContactsSearch.setAdapter(new SearchContactsListAdapter(null)); + return; + } + + List result = new ArrayList(); + if(search != null) { + for (ContactAddress c : searchAdapter.contacts) { + String address = c.address; + if(address.startsWith("sip:")) address = address.substring(4); + if (c.contact.getName().toLowerCase().startsWith(search) || address.toLowerCase().startsWith(search)) { + result.add(c); + } + } + } + + resultContactsSearch.setAdapter(new SearchContactsListAdapter(result)); + searchAdapter.notifyDataSetChanged(); + } + + class SearchContactsListAdapter extends BaseAdapter { private List contacts; private LayoutInflater mInflater; - SearchContactsListAdapter(LayoutInflater inflater) { + SearchContactsListAdapter(List contactsList) { mInflater = inflater; - contacts = getContactsList(); - } - - @Override - public Filter getFilter() { - return new Filter() { - @Override - protected void publishResults(CharSequence constraint, FilterResults results) { - if (results.count > 0) { - contacts.clear(); - contacts = (List) results.values; - notifyDataSetChanged(); - } else { - contacts.clear(); - contacts = getContactsList(); - notifyDataSetInvalidated(); - } - } - - @Override - protected FilterResults performFiltering(CharSequence constraint) { - List result = new ArrayList(); - if(constraint != null) { - for (ContactAddress c : contacts) { - String address = c.address; - if(address.startsWith("sip:")) address = address.substring(4); - if (c.contact.getName().toLowerCase().startsWith(constraint.toString()) || address.toLowerCase().startsWith(constraint.toString())) { - result.add(c); - } - } - } - FilterResults r = new FilterResults(); - r.values = result; - r.count = result.size(); - return r; - } - }; + if(contactsList == null){ + contacts = getContactsList(); + } else { + contacts = contactsList; + } } public ListgetContactsList(){