ChooseContactActivity.java

  1package eu.siacs.conversations.ui;
  2
  3import java.util.ArrayList;
  4import java.util.Collections;
  5
  6import android.content.Context;
  7import android.content.Intent;
  8import android.os.Bundle;
  9import android.text.Editable;
 10import android.text.TextWatcher;
 11import android.view.Menu;
 12import android.view.MenuItem;
 13import android.view.View;
 14import android.view.inputmethod.InputMethodManager;
 15import android.widget.AdapterView;
 16import android.widget.ArrayAdapter;
 17import android.widget.EditText;
 18import android.widget.ListView;
 19import eu.siacs.conversations.R;
 20import eu.siacs.conversations.entities.Account;
 21import eu.siacs.conversations.entities.Contact;
 22import eu.siacs.conversations.entities.ListItem;
 23import eu.siacs.conversations.ui.adapter.ListItemAdapter;
 24
 25public class ChooseContactActivity extends XmppActivity {
 26
 27	private ListView mListView;
 28	private ArrayList<ListItem> contacts = new ArrayList<>();
 29	private ArrayAdapter<ListItem> mContactsAdapter;
 30
 31	private EditText mSearchEditText;
 32
 33	private TextWatcher mSearchTextWatcher = new TextWatcher() {
 34
 35		@Override
 36		public void afterTextChanged(Editable editable) {
 37			filterContacts(editable.toString());
 38		}
 39
 40		@Override
 41		public void beforeTextChanged(CharSequence s, int start, int count,
 42				int after) {
 43		}
 44
 45		@Override
 46		public void onTextChanged(CharSequence s, int start, int before,
 47				int count) {
 48		}
 49	};
 50
 51	private MenuItem.OnActionExpandListener mOnActionExpandListener = new MenuItem.OnActionExpandListener() {
 52
 53		@Override
 54		public boolean onMenuItemActionExpand(MenuItem item) {
 55			mSearchEditText.post(new Runnable() {
 56
 57				@Override
 58				public void run() {
 59					mSearchEditText.requestFocus();
 60					InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
 61					imm.showSoftInput(mSearchEditText,
 62							InputMethodManager.SHOW_IMPLICIT);
 63				}
 64			});
 65
 66			return true;
 67		}
 68
 69		@Override
 70		public boolean onMenuItemActionCollapse(MenuItem item) {
 71			InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
 72			imm.hideSoftInputFromWindow(mSearchEditText.getWindowToken(),
 73					InputMethodManager.HIDE_IMPLICIT_ONLY);
 74			mSearchEditText.setText("");
 75			filterContacts(null);
 76			return true;
 77		}
 78	};
 79
 80	@Override
 81	public void onCreate(Bundle savedInstanceState) {
 82		super.onCreate(savedInstanceState);
 83		setContentView(R.layout.activity_choose_contact);
 84		mListView = (ListView) findViewById(R.id.choose_contact_list);
 85		mListView.setFastScrollEnabled(true);
 86		mContactsAdapter = new ListItemAdapter(this, contacts);
 87		mListView.setAdapter(mContactsAdapter);
 88		mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
 89
 90			@Override
 91			public void onItemClick(AdapterView<?> arg0, View arg1,
 92					int position, long arg3) {
 93				InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
 94				imm.hideSoftInputFromWindow(mSearchEditText.getWindowToken(),
 95						InputMethodManager.HIDE_IMPLICIT_ONLY);
 96				Intent request = getIntent();
 97				Intent data = new Intent();
 98				ListItem mListItem = contacts.get(position);
 99				data.putExtra("contact", mListItem.getJid().toString());
100				String account = request.getStringExtra("account");
101				if (account == null && mListItem instanceof Contact) {
102					account = ((Contact) mListItem).getAccount().getJid().toBareJid().toString();
103				}
104				data.putExtra("account", account);
105				data.putExtra("conversation",
106						request.getStringExtra("conversation"));
107				setResult(RESULT_OK, data);
108				finish();
109			}
110		});
111	}
112
113	@Override
114	public boolean onCreateOptionsMenu(Menu menu) {
115		getMenuInflater().inflate(R.menu.choose_contact, menu);
116		MenuItem menuSearchView = menu.findItem(R.id.action_search);
117		View mSearchView = menuSearchView.getActionView();
118		mSearchEditText = (EditText) mSearchView
119				.findViewById(R.id.search_field);
120		mSearchEditText.addTextChangedListener(mSearchTextWatcher);
121		menuSearchView.setOnActionExpandListener(mOnActionExpandListener);
122		return true;
123	}
124
125	@Override
126	void onBackendConnected() {
127		filterContacts(null);
128	}
129
130	protected void filterContacts(String needle) {
131		this.contacts.clear();
132		for (Account account : xmppConnectionService.getAccounts()) {
133			if (account.getStatus() != Account.State.DISABLED) {
134				for (Contact contact : account.getRoster().getContacts()) {
135					if (contact.showInRoster() && contact.match(needle)) {
136						this.contacts.add(contact);
137					}
138				}
139			}
140		}
141		Collections.sort(this.contacts);
142		mContactsAdapter.notifyDataSetChanged();
143	}
144
145}