package com.novoda.demo.edittextchips.splitwise;
import com.tokenautocomplete.HintSpan;
import com.tokenautocomplete.TokenCompleteTextView;
import android.content.Context;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
public class TagsView extends TokenCompleteTextView<Tag> {
private final CharSequence suffixHint;
private final HintTextWatcher hintTextWatcher;
private final TagViewAdapter adapter;
public TagsView(Context context, AttributeSet attrs) {
super(context, attrs);
suffixHint = getHint();
HintSpan suffixHintSpannable = new HintSpan(null, hintStyle(), (int) getTextSize(), getHintTextColors(), getHintTextColors());
hintTextWatcher = new HintTextWatcher(this, suffixHint, suffixHintSpannable);
hintTextWatcher.addHint(getText());
addTextChangedListener(hintTextWatcher);
setHint("");
adapter = new TagViewAdapter(context);
}
private int hintStyle() {
Typeface tf = getTypeface();
int style = Typeface.NORMAL;
if (tf != null) {
style = tf.getStyle();
}
return style;
}
@Override
protected View getViewForObject(Tag tag) {
return adapter.getView(tag, (ViewGroup) getParent());
}
@Override
protected Tag defaultObject(String completionText) {
if (completionText.startsWith("#")) {
return new Tag(completionText.replaceFirst("#", ""));
} else {
return new Tag(completionText);
}
}
@Override
public boolean enoughToFilter() {
if (hintTextWatcher.textContainsHint(getText())) {
return false;
}
return super.enoughToFilter();
}
@Override
protected void onSelectionChanged(int selStart, int selEnd) {
super.onSelectionChanged(selStart, selEnd);
if (isHintVisible() && isSelectingHint(selStart)) {
// Don't let users select the hint
setSelection(hintStartPosition());
}
}
private boolean isHintVisible() {
return hintTextWatcher != null && hintTextWatcher.isHintVisible(getText());
}
private boolean isSelectingHint(int selStart) {
return selStart >= hintStartPosition();
}
private int hintStartPosition() {
return getText().length() - suffixHint.length();
}
}