diff --git a/Habitica/res/layout/tavern_chat_new_entry_item.xml b/Habitica/res/layout/tavern_chat_new_entry_item.xml index 2192a483d..2e94288f6 100644 --- a/Habitica/res/layout/tavern_chat_new_entry_item.xml +++ b/Habitica/res/layout/tavern_chat_new_entry_item.xml @@ -34,7 +34,7 @@ app:hintEnabled="false" android:layout_marginBottom="@dimen/spacing_medium" android:layout_marginTop="@dimen/spacing_medium"> - + val start = chatEditText.selectionStart + val end = chatEditText.selectionEnd + if (start < 0) { + chatEditText.append(emojicon.emoji) + } else { + chatEditText.text?.replace(Math.min(start, end), + Math.max(start, end), emojicon.emoji, 0, + emojicon.emoji.length) + } + } + + popup.setOnEmojiconBackspaceClickedListener { + val event = KeyEvent( + 0, 0, 0, KeyEvent.KEYCODE_DEL, 0, 0, 0, 0, KeyEvent.KEYCODE_ENDCALL) + chatEditText.dispatchKeyEvent(event) + } resizeForDrawingUnderNavbar() } @@ -118,4 +157,34 @@ class ChatBarView : FrameLayout { sendAction?.invoke(chatText) } } + + private fun changeEmojiKeyboardIcon(keyboardOpened: Boolean) { + if (keyboardOpened) { + emojiButton.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_keyboard_grey600_24dp)) + } else { + emojiButton.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.ic_emoticon_grey600_24dp)) + } + } + + private inner class EmojiClickListener internal constructor(internal var view: EmojiEditText) : View.OnClickListener { + + override fun onClick(v: View) { + if (!popup.isShowing) { + if (popup.isKeyBoardOpen == true) { + popup.showAtBottom() + changeEmojiKeyboardIcon(true) + } else { + view.isFocusableInTouchMode = true + view.requestFocus() + popup.showAtBottomPending() + val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as? InputMethodManager + inputMethodManager?.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT) + changeEmojiKeyboardIcon(true) + } + } else { + popup.dismiss() + changeEmojiKeyboardIcon(false) + } + } + } }