/** * Copyright (c) 2012 Todoroo Inc * * See the file "LICENSE" for the full license governing this code. */ package com.todoroo.astrid.ui; import android.app.Activity; import android.content.Context; import android.content.res.TypedArray; import android.text.TextUtils; import android.util.AttributeSet; import android.widget.AutoCompleteTextView; import com.timsu.astrid.R; public class ContactsAutoComplete extends AutoCompleteTextView { private boolean allowMultiple = false; private boolean completeTags = false; public ContactsAutoComplete(final Context context, final AttributeSet attrs, final int defStyle) { super(context, attrs, defStyle); this.setThreshold(0); this.setUpContacts(); } public ContactsAutoComplete(final Context context, final AttributeSet attrs) { super(context, attrs); this.setThreshold(0); this.setUpContacts(); TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ContactsAutoComplete); allowMultiple = a.getBoolean(R.styleable.ContactsAutoComplete_allowMultiple, false); completeTags = a.getBoolean(R.styleable.ContactsAutoComplete_completeTags, false); } public ContactsAutoComplete(final Context context) { super(context); this.setThreshold(0); this.setUpContacts(); } // --- comma separating stuff private String previous = ""; //$NON-NLS-1$ private String seperator = ", "; //$NON-NLS-1$ private ContactListAdapter adapter; /** * This method filters out the existing text till the separator and launched * the filtering process again */ @Override protected void performFiltering(final CharSequence text, final int keyCode) { String filterText = text.toString().trim(); if(allowMultiple) { previous = filterText.substring(0, filterText.lastIndexOf(getSeperator()) + 1); filterText = filterText.substring(filterText.lastIndexOf(getSeperator()) + 1); } if (!TextUtils.isEmpty(filterText)) super.performFiltering(filterText, keyCode); } /** * After a selection, capture the new value and append to the existing text */ @Override protected void replaceText(final CharSequence text) { if(allowMultiple) super.replaceText(previous + text + getSeperator()); else super.replaceText(text); } // --- cursor stuff private void setUpContacts() { try { adapter = new ContactListAdapter((Activity) getContext(), null); adapter.setCompleteSharedTags(completeTags); setAdapter(adapter); } catch (VerifyError ve) { adapter = null; } } // --- getters and setters public boolean isAllowMultiple() { return allowMultiple; } public String getSeperator() { return seperator; } public void setCompleteSharedTags(boolean value) { completeTags = value; if (adapter != null) adapter.setCompleteSharedTags(value); } public void setAllowMultiple(boolean allowMultiple) { this.allowMultiple = allowMultiple; } public void setSeperator(final String seperator) { this.seperator = seperator; } }