EmojiEditTextHelper

public final class EmojiEditTextHelper
extends Object

java.lang.Object
   ↳ androidx.emoji2.viewsintegration.EmojiEditTextHelper


Utility class to enhance custom EditText widgets with EmojiCompat.

 public class MyEmojiEditText extends EditText {
      public MyEmojiEditText(Context context) {
          super(context);
          init();
      }
      // ...
      private void init() {
          super.setKeyListener(getEmojiEditTextHelper().getKeyListener(getKeyListener()));
      }

      @Override
      public void setKeyListener(android.text.method.KeyListener keyListener) {
          super.setKeyListener(getEmojiEditTextHelper().getKeyListener(keyListener));
      }

      @Override
      public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
          InputConnection inputConnection = super.onCreateInputConnection(outAttrs);
          return getEmojiEditTextHelper().onCreateInputConnection(inputConnection, outAttrs);
      }

      private EmojiEditTextHelper getEmojiEditTextHelper() {
          if (mEmojiEditTextHelper == null) {
              mEmojiEditTextHelper = new EmojiEditTextHelper(this);
          }
          return mEmojiEditTextHelper;
      }
 }
 

Summary

Public constructors

EmojiEditTextHelper(EditText editText)

Default constructor.

EmojiEditTextHelper(EditText editText, boolean expectInitializedEmojiCompat)

Allows skipping of all processing until EmojiCompat.init is called.

Public methods

KeyListener getKeyListener(KeyListener keyListener)

Attaches EmojiCompat KeyListener to the widget.

int getMaxEmojiCount()

Returns the maximum number of EmojiSpans to be added to a CharSequence.

boolean isEnabled()

If this helper should add new EmojiSpans to display emoji using the emoji font when text changes.

InputConnection onCreateInputConnection(InputConnection inputConnection, EditorInfo outAttrs)

Updates the InputConnection with emoji support.

void setEnabled(boolean isEnabled)

When helper is enabled, it will process text changes to add appropriate EmojiSpans for display.

void setMaxEmojiCount(int maxEmojiCount)

Set the maximum number of EmojiSpans to be added to a CharSequence.

Inherited methods

Public constructors

EmojiEditTextHelper

public EmojiEditTextHelper (EditText editText)

Default constructor.

Parameters
editText EditText: EditText instance

EmojiEditTextHelper

public EmojiEditTextHelper (EditText editText, 
                boolean expectInitializedEmojiCompat)

Allows skipping of all processing until EmojiCompat.init is called. This is useful when integrating EmojiTextViewHelper into libraries that subclass TextView that do not have control over EmojiCompat initialization by the app that uses the TextView subclass. If this helper is initialized prior to EmojiCompat.init, the TextView it's configuring will not display emoji using EmojiCompat after init is called until the transformation method and filter are updated. The easiest way to do that is call setEnabled(boolean).

Parameters
editText EditText: EditText instance

expectInitializedEmojiCompat boolean: if true, this helper will assume init has been called and throw if it has not. If false, the methods on this helper will have no effect until EmojiCompat.init is called.

Public methods

getKeyListener

public KeyListener getKeyListener (KeyListener keyListener)

Attaches EmojiCompat KeyListener to the widget. Should be called from TextView.setKeyListener(KeyListener). Existing keyListener is wrapped into EmojiCompat KeyListener. When used on devices running API 18 or below, this method returns keyListener that is given as a parameter.

Parameters
keyListener KeyListener: KeyListener passed into TextView.setKeyListener(KeyListener)

Returns
KeyListener a new KeyListener instance that wraps keyListener, or null if passed null.

getMaxEmojiCount

public int getMaxEmojiCount ()

Returns the maximum number of EmojiSpans to be added to a CharSequence.

Returns
int

isEnabled

public boolean isEnabled ()

If this helper should add new EmojiSpans to display emoji using the emoji font when text changes.

Returns
boolean true if the helper will process emoji spans.

onCreateInputConnection

public InputConnection onCreateInputConnection (InputConnection inputConnection, 
                EditorInfo outAttrs)

Updates the InputConnection with emoji support. Should be called from TextView.onCreateInputConnection(EditorInfo). When used on devices running API 18 or below, this method returns inputConnection that is given as a parameter. If inputConnection is null, returns null.

Parameters
inputConnection InputConnection: InputConnection instance created by TextView

outAttrs EditorInfo: EditorInfo passed into TextView.onCreateInputConnection(EditorInfo)

Returns
InputConnection a new InputConnection instance that wraps inputConnection

setEnabled

public void setEnabled (boolean isEnabled)

When helper is enabled, it will process text changes to add appropriate EmojiSpans for display. When helper is disabled, it will not process text changes, but existing spans will not be removed by disabling.

Parameters
isEnabled boolean: if this helper should process spans

setMaxEmojiCount

public void setMaxEmojiCount (int maxEmojiCount)

Set the maximum number of EmojiSpans to be added to a CharSequence. The number of spans in a CharSequence affects the performance of the EditText insert/delete operations. Insert/delete operations slow down as the number of spans increases.

Parameters
maxEmojiCount int: maximum number of EmojiSpans to be added to a single CharSequence, should be equal or greater than 0