package com.moez.QKSMS.ui.view;
import android.content.Context;
import android.os.Build;
import android.text.Editable;
import android.text.SpannableStringBuilder;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.TypedValue;
import com.moez.QKSMS.common.FontManager;
import com.moez.QKSMS.common.LiveViewManager;
import com.moez.QKSMS.enums.QKPreference;
import com.moez.QKSMS.ui.ThemeManager;
public class QKEditText extends android.widget.EditText {
public static final String TAG = "QKEditText";
public interface TextChangedListener {
void onTextChanged(CharSequence s);
}
private Context mContext;
private boolean mTextChangedListenerEnabled = true;
public QKEditText(Context context) {
super(context);
if (!isInEditMode()) {
init(context);
}
}
public QKEditText(Context context, AttributeSet attrs) {
super(context, attrs);
if (!isInEditMode()) {
init(context);
}
}
public QKEditText(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
if (!isInEditMode()) {
init(context);
}
}
private void init(Context context) {
mContext = context;
LiveViewManager.registerView(QKPreference.FONT_FAMILY, this, key -> {
setTypeface(FontManager.getFont(mContext));
});
LiveViewManager.registerView(QKPreference.FONT_WEIGHT, this, key -> {
setTypeface(FontManager.getFont(mContext));
});
LiveViewManager.registerView(QKPreference.FONT_SIZE, this, key -> {
setTextSize(TypedValue.COMPLEX_UNIT_SP, FontManager.getTextSize(mContext, FontManager.TEXT_TYPE_PRIMARY));
});
LiveViewManager.registerView(QKPreference.BACKGROUND, this, key -> {
setTextColor(ThemeManager.getTextOnBackgroundPrimary());
setHintTextColor(ThemeManager.getTextOnBackgroundSecondary());
});
setText(getText());
}
@Override
public void setText(CharSequence text, BufferType type) {
if (!TextUtils.isEmpty(text) || Build.VERSION.SDK_INT < 19) {
text = new SpannableStringBuilder(text);
}
super.setText(text, type);
}
public void setTextChangedListenerEnabled(boolean textChangedListenerEnabled) {
mTextChangedListenerEnabled = textChangedListenerEnabled;
}
public void setTextChangedListener(final TextChangedListener listener) {
if (listener != null) {
addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (mTextChangedListenerEnabled) {
listener.onTextChanged(s);
}
}
});
}
}
}