ankushsachdeva / emojicon

Android library to show emojicon dialog box over soft keyboard
283 stars 149 forks source link

Popup doesnt work in New android devices #40

Open vinayjayaram opened 9 years ago

vinayjayaram commented 9 years ago

I am working on this code on my Moto X device. It doesn't hide the keyboard. I shows smiley above the keyboard. Request you to fix the issue ASAP screenshot_2015-10-07-11-34-14

Jaymo commented 9 years ago

Solved it by replacing Emojiconpopup.java with the on below: https://github.com/takenet/emojicon/blob/master/emojicon/src/main/java/github/ankushsachdeva/emojicon/EmojiconsPopup.java

vinayjayaram commented 9 years ago

@Jaymo Tried your code, But did not work, It is having same issue

Jaymo commented 9 years ago

Kindly share the code you use to toggle the emoji and keyboard

vinayjayaram commented 9 years ago

@Jaymo import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.KeyEvent; import android.view.View; import android.view.View.OnClickListener; import android.view.inputmethod.InputMethodManager; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.ListView; import android.widget.PopupWindow.OnDismissListener;

import github.ankushsachdeva.emojicon.EmojiconEditText; import github.ankushsachdeva.emojicon.EmojiconGridView.OnEmojiconClickedListener; import github.ankushsachdeva.emojicon.EmojiconsPopup; import github.ankushsachdeva.emojicon.EmojiconsPopup.OnEmojiconBackspaceClickedListener; import github.ankushsachdeva.emojicon.EmojiconsPopup.OnSoftKeyboardOpenCloseListener; import github.ankushsachdeva.emojicon.emoji.Emojicon;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ListView lv = (ListView) findViewById(R.id.lv);
    final ArrayAdapter<String> mAdapter = new ArrayAdapter<>(this, R.layout.listview_row_layout);
    lv.setAdapter(mAdapter);
    final EmojiconEditText emojiconEditText = (EmojiconEditText) findViewById(R.id.emojicon_edit_text);
    final View rootView = findViewById(R.id.root_view);
    final ImageView emojiButton = (ImageView) findViewById(R.id.emoji_btn);
    final ImageView submitButton = (ImageView) findViewById(R.id.submit_btn);

    // Give the topmost view of your activity layout hierarchy. This will be used to measure soft keyboard height
    final EmojiconsPopup popup = new EmojiconsPopup(rootView, this);

    //Will automatically set size according to the soft keyboard size
    popup.setSizeForSoftKeyboard();

    //Set on emojicon click listener
    popup.setOnEmojiconClickedListener(new OnEmojiconClickedListener() {

        @Override
        public void onEmojiconClicked(Emojicon emojicon) {
            emojiconEditText.append(emojicon.getEmoji());
        }
    });

    //Set on backspace click listener
    popup.setOnEmojiconBackspaceClickedListener(new OnEmojiconBackspaceClickedListener() {

        @Override
        public void onEmojiconBackspaceClicked(View v) {
            KeyEvent event = new KeyEvent(
                    0, 0, 0, KeyEvent.KEYCODE_DEL, 0, 0, 0, 0, KeyEvent.KEYCODE_ENDCALL);
            emojiconEditText.dispatchKeyEvent(event);
        }
    });

    //If the emoji popup is dismissed, change emojiButton to smiley icon
    popup.setOnDismissListener(new OnDismissListener() {

        @Override
        public void onDismiss() {
            changeEmojiKeyboardIcon(emojiButton, R.drawable.smiley);
        }
    });

    //If the text keyboard closes, also dismiss the emoji popup
    popup.setOnSoftKeyboardOpenCloseListener(new OnSoftKeyboardOpenCloseListener() {

        @Override
        public void onKeyboardOpen(int keyBoardHeight) {

        }

        @Override
        public void onKeyboardClose() {
            if (popup.isShowing())
                popup.dismiss();
        }
    });

    //On emoji clicked, add it to edittext
    popup.setOnEmojiconClickedListener(new OnEmojiconClickedListener() {

        @Override
        public void onEmojiconClicked(Emojicon emojicon) {
            emojiconEditText.append(emojicon.getEmoji());
        }
    });

    //On backspace clicked, emulate the KEYCODE_DEL key event
    popup.setOnEmojiconBackspaceClickedListener(new OnEmojiconBackspaceClickedListener() {

        @Override
        public void onEmojiconBackspaceClicked(View v) {
            KeyEvent event = new KeyEvent(
                    0, 0, 0, KeyEvent.KEYCODE_DEL, 0, 0, 0, 0, KeyEvent.KEYCODE_ENDCALL);
            emojiconEditText.dispatchKeyEvent(event);
        }
    });

    // To toggle between text keyboard and emoji keyboard keyboard(Popup)
    emojiButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            //If popup is not showing => emoji keyboard is not visible, we need to show it
            if (!popup.isShowing()) {

                //If keyboard is visible, simply show the emoji popup
                if (popup.isKeyBoardOpen()) {
                    popup.showAtBottom();
                    changeEmojiKeyboardIcon(emojiButton, R.drawable.ic_action_keyboard);
                }

                //else, open the text keyboard first and immediately after that show the emoji popup
                else {
                    emojiconEditText.setFocusableInTouchMode(true);
                    emojiconEditText.requestFocus();
                    popup.showAtBottomPending();
                    final InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputMethodManager.showSoftInput(emojiconEditText, InputMethodManager.SHOW_IMPLICIT);
                    changeEmojiKeyboardIcon(emojiButton, R.drawable.ic_action_keyboard);
                }
            }

            //If popup is showing, simply dismiss it to show the undelying text keyboard
            else {
                popup.dismiss();
            }
        }
    });

    //On submit, add the edittext text to listview and clear the edittext
    submitButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            String newText = emojiconEditText.getText().toString();
            emojiconEditText.getText().clear();
            mAdapter.add(newText);
            mAdapter.notifyDataSetChanged();

        }
    });
}

private void changeEmojiKeyboardIcon(ImageView iconToBeChanged, int drawableResourceId) {
    iconToBeChanged.setImageResource(drawableResourceId);
}

}

Jaymo commented 9 years ago

Your code seems alright but I would suggest you use this libraray instead https://github.com/rockerhieu/emojicon its based Ankush Sachdeva's code but its more up updated and a larger community behind it

vinayjayaram commented 9 years ago

@Jaymo will try that. Thanks for your update really appreciate

remon commented 8 years ago

@vinayjayaram , I am facing the same problem , did you fix it ?

vinayjayaram commented 8 years ago

@remon No dude, was unable to solve it. However it is working in majority of phones except mine!

zeeshanworkplains commented 8 years ago

@remon @vinayjayaram have you solved the problem? I'm facing the same issue :(

Max01010101010101 commented 8 years ago

same here ;'(