diff options
Diffstat (limited to 'app/src/main/java/fr/gouv/etalab/mastodon/helper/MastalabAutoCompleteTextView.java')
-rw-r--r-- | app/src/main/java/fr/gouv/etalab/mastodon/helper/MastalabAutoCompleteTextView.java | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/app/src/main/java/fr/gouv/etalab/mastodon/helper/MastalabAutoCompleteTextView.java b/app/src/main/java/fr/gouv/etalab/mastodon/helper/MastalabAutoCompleteTextView.java new file mode 100644 index 000000000..6eb2179c2 --- /dev/null +++ b/app/src/main/java/fr/gouv/etalab/mastodon/helper/MastalabAutoCompleteTextView.java @@ -0,0 +1,113 @@ +package fr.gouv.etalab.mastodon.helper; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.res.TypedArray; +import android.graphics.Paint; +import android.support.annotation.CallSuper; +import android.support.annotation.DimenRes; +import android.support.annotation.Px; +import android.util.AttributeSet; +import android.view.KeyEvent; + +import com.vanniktech.emoji.EmojiEditTextInterface; +import com.vanniktech.emoji.EmojiManager; +import com.vanniktech.emoji.emoji.Emoji; + +import fr.gouv.etalab.mastodon.R; + +public class MastalabAutoCompleteTextView extends android.support.v7.widget.AppCompatAutoCompleteTextView implements EmojiEditTextInterface { + + private float emojiSize; + private boolean emoji; + + public MastalabAutoCompleteTextView(Context context) { + super(context); + } + + public MastalabAutoCompleteTextView(Context context, AttributeSet attrs) { + super(context, attrs); + + final Paint.FontMetrics fontMetrics = getPaint().getFontMetrics(); + final float defaultEmojiSize = fontMetrics.descent - fontMetrics.ascent; + final SharedPreferences sharedpreferences = context.getSharedPreferences(Helper.APP_PREFS, android.content.Context.MODE_PRIVATE); + emoji = sharedpreferences.getBoolean(Helper.SET_DISPLAY_EMOJI, true); + if (attrs == null) { + emojiSize = defaultEmojiSize; + } else { + @SuppressLint("CustomViewStyleable") final TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.EmojiMultiAutoCompleteTextView); + + try { + emojiSize = a.getDimension(R.styleable.EmojiMultiAutoCompleteTextView_emojiSize, defaultEmojiSize); + } finally { + a.recycle(); + } + } + + setText(getText()); + } + + public MastalabAutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + @Override + @CallSuper + protected void onTextChanged(final CharSequence text, final int start, final int lengthBefore, final int lengthAfter) { + final Paint.FontMetrics fontMetrics = getPaint().getFontMetrics(); + final float defaultEmojiSize = fontMetrics.descent - fontMetrics.ascent; + if( emoji) { + EmojiManager.getInstance().replaceWithImages(getContext(), getText(), emojiSize, defaultEmojiSize); + } + } + + @Override + public void backspace() { + final KeyEvent event = new KeyEvent(0, 0, 0, KeyEvent.KEYCODE_DEL, 0, 0, 0, 0, KeyEvent.KEYCODE_ENDCALL); + dispatchKeyEvent(event); + } + + + @Override + public float getEmojiSize() { + return emojiSize; + } + + @Override @CallSuper public void input(final Emoji emoji) { + if (emoji != null) { + final int start = getSelectionStart(); + final int end = getSelectionEnd(); + + if (start < 0) { + append(emoji.getUnicode()); + } else { + getText().replace(Math.min(start, end), Math.max(start, end), emoji.getUnicode(), 0, emoji.getUnicode().length()); + } + } + } + + @Override + public final void setEmojiSize(@Px final int pixels) { + setEmojiSize(pixels, true); + } + + @Override + public final void setEmojiSize(@Px final int pixels, final boolean shouldInvalidate) { + emojiSize = pixels; + + if (shouldInvalidate) { + setText(getText()); + } + } + + @Override + public final void setEmojiSizeRes(@DimenRes final int res) { + setEmojiSizeRes(res, true); + } + + @Override + public final void setEmojiSizeRes(@DimenRes final int res, final boolean shouldInvalidate) { + setEmojiSize(getResources().getDimensionPixelSize(res), shouldInvalidate); + } +} |