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(){