package sj.keyboard.widget;
import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.widget.EditText;
import java.util.ArrayList;
import java.util.List;
import sj.keyboard.interfaces.EmoticonFilter;
public class EmoticonsEditText extends EditText {
private List<EmoticonFilter> mFilterList;
public EmoticonsEditText(Context context) {
this(context, null);
}
public EmoticonsEditText(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public EmoticonsEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
try {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
} catch (ArrayIndexOutOfBoundsException e) {
setText(getText().toString());
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
super.onSizeChanged(w, h, oldw, oldh);
if(oldh > 0 && onSizeChangedListener != null){
onSizeChangedListener.onSizeChanged(w, h, oldw, oldh);
}
}
@Override
public void setGravity(int gravity) {
try {
super.setGravity(gravity);
} catch (ArrayIndexOutOfBoundsException e) {
setText(getText().toString());
super.setGravity(gravity);
}
}
@Override
public void setText(CharSequence text, BufferType type) {
try {
super.setText(text, type);
} catch (ArrayIndexOutOfBoundsException e) {
setText(text.toString());
}
}
@Override
protected final void onTextChanged(CharSequence arg0, int start, int lengthBefore, int after) {
super.onTextChanged(arg0, start, lengthBefore, after);
if(mFilterList == null){
return;
}
for(EmoticonFilter emoticonFilter : mFilterList) {
emoticonFilter.filter(this, arg0, start, lengthBefore, after);
}
}
public void addEmoticonFilter(EmoticonFilter emoticonFilter){
if(mFilterList == null){
mFilterList = new ArrayList<>();
}
mFilterList.add(emoticonFilter);
}
public void removedEmoticonFilter(EmoticonFilter emoticonFilter){
if(mFilterList != null && mFilterList.contains(emoticonFilter)){
mFilterList.remove(emoticonFilter);
}
}
@Override
public boolean dispatchKeyEventPreIme(KeyEvent event) {
if(onBackKeyClickListener != null){
onBackKeyClickListener.onBackKeyClick();
}
return super.dispatchKeyEventPreIme(event);
}
public interface OnBackKeyClickListener {
void onBackKeyClick();
}
OnBackKeyClickListener onBackKeyClickListener;
public void setOnBackKeyClickListener(OnBackKeyClickListener i) {
onBackKeyClickListener = i;
}
public interface OnSizeChangedListener {
void onSizeChanged(int w, int h, int oldw, int oldh);
}
OnSizeChangedListener onSizeChangedListener;
public void setOnSizeChangedListener(OnSizeChangedListener i) {
onSizeChangedListener = i;
}
}