package com.ijoomer.customviews; import java.util.Map; import android.content.Context; import android.graphics.Typeface; import android.text.Editable; import android.text.Spannable; import android.text.SpannableStringBuilder; import android.text.method.KeyListener; import android.text.style.ImageSpan; import android.util.AttributeSet; import android.view.KeyEvent; import android.view.View; import android.widget.EditText; import com.ijoomer.common.classes.IjoomerUtilities; import com.ijoomer.common.configuration.IjoomerApplicationConfiguration; /** * This Class Contains All Method Related To IjoomerEditText. * * @author tasol * */ public class IjoomerEditText extends EditText implements KeyListener { private boolean isDecodeEmojis() { return isDecodeEmojis; } public void setDecodeEmojis(boolean decodeEmojis) { isDecodeEmojis = decodeEmojis; } private boolean isDecodeEmojis; public IjoomerEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } public IjoomerEditText(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public IjoomerEditText(Context context) { super(context); init(context); } private void init(Context mContext) { try { if (IjoomerApplicationConfiguration.getFontFace() != null) { setTypeface(IjoomerApplicationConfiguration.getFontFace()); } else { Typeface tf = Typeface.createFromAsset(mContext.getAssets(), IjoomerApplicationConfiguration.getFontNameWithPath()); setTypeface(tf); IjoomerApplicationConfiguration.setFontFace(tf); } } catch (Throwable e) { } if (isDecodeEmojis()) { setKeyListener(this); } } @Override public void setText(CharSequence text, BufferType type) { if (isDecodeEmojis) { if (text != null && text.length() > 0) { try { StringBuffer buffer = new StringBuffer(super.getText().toString()); buffer.insert(super.getSelectionStart(), text); super.setText(getSmiledText(buffer.toString()), type); super.setSelection(super.getText().length()); } catch (Exception e) { super.setText(text, type); } } else { super.setText(text, type); } } else { super.setText(text, type); } } private Spannable getSmiledText(String text) { SpannableStringBuilder builder = new SpannableStringBuilder(text); if (IjoomerUtilities.getEmojisHashMap().size() > 0) { int index; for (index = 0; index < builder.length(); index++) { if (Character.toString(builder.charAt(index)).equals(":")) { for (Map.Entry<String, Integer> entry : IjoomerUtilities.getEmojisHashMap().entrySet()) { int length = entry.getKey().length(); if (index + length > builder.length()) continue; if (builder.subSequence(index, index + length).toString().equals(entry.getKey())) { builder.setSpan(new ImageSpan(getContext(), entry.getValue()), index, index + length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); index += length - 1; break; } } } } } return builder; } @Override public boolean onKeyDown(View view, Editable editable, int keyCode, KeyEvent keyEvent) { if (keyCode == KeyEvent.KEYCODE_DEL) { if (getText().toString().length() >= 3) { if (getSelectionStart() != getText().toString().length() && IjoomerUtilities.getEmojisHashMap().containsKey(getText().toString().substring(getSelectionStart() - 3, getSelectionStart()))) { StringBuffer temp = new StringBuffer(getText().toString().substring(0, getSelectionStart() - 3)); temp.append(getText().toString().substring(getSelectionStart(), getText().toString().length())); setText(temp.toString()); } else { setText(getText().toString().substring(0, getText().toString().length() - 3)); } return true; } else if (getText().toString().length() == 2) { setText(getText().subSequence(0, 1)); return true; } else { setText(""); return true; } } return false; } @Override public boolean onKeyUp(View view, Editable editable, int i, KeyEvent keyEvent) { return false; } @Override public boolean onKeyOther(View view, Editable editable, KeyEvent keyEvent) { return false; } @Override public void clearMetaKeyState(View view, Editable editable, int i) { } }