Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 02725535 authored by Yohei Yukawa's avatar Yohei Yukawa Committed by Android (Google) Code Review
Browse files

Merge "Fix inconsistent behavior with the spacebar on the Emoji pallete."

parents ca1c1ddd 0e04c24a
Loading
Loading
Loading
Loading
+58 −24
Original line number Diff line number Diff line
@@ -73,7 +73,7 @@ import java.util.concurrent.TimeUnit;
 * Because of the above reasons, this class doesn't extend {@link KeyboardView}.
 */
public final class EmojiPalettesView extends LinearLayout implements OnTabChangeListener,
        ViewPager.OnPageChangeListener, View.OnTouchListener,
        ViewPager.OnPageChangeListener, View.OnClickListener, View.OnTouchListener,
        EmojiPageKeyboardView.OnKeyEventListener {
    static final String TAG = EmojiPalettesView.class.getSimpleName();
    private static final boolean DEBUG_PAGER = false;
@@ -482,22 +482,35 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
        final LinearLayout actionBar = (LinearLayout)findViewById(R.id.emoji_action_bar);
        mEmojiLayoutParams.setActionBarProperties(actionBar);

        // deleteKey depends only on OnTouchListener.
        final ImageView deleteKey = (ImageView)findViewById(R.id.emoji_keyboard_delete);
        deleteKey.setTag(Constants.CODE_DELETE);
        deleteKey.setOnTouchListener(mDeleteKeyOnTouchListener);

        // alphabetKey depends only on OnTouchListener as it does everything in key-press in
        // ACTION_DOWN.
        final ImageView alphabetKey = (ImageView)findViewById(R.id.emoji_keyboard_alphabet);
        alphabetKey.setBackgroundResource(mEmojiFunctionalKeyBackgroundId);
        alphabetKey.setTag(Constants.CODE_SWITCH_ALPHA_SYMBOL);
        alphabetKey.setOnTouchListener(this);

        // alphabetKey2 depends only on OnTouchListener as it does everything in key-press in
        // ACTION_DOWN.
        final ImageView alphabetKey2 = (ImageView)findViewById(R.id.emoji_keyboard_alphabet2);
        alphabetKey2.setBackgroundResource(mEmojiFunctionalKeyBackgroundId);
        alphabetKey2.setTag(Constants.CODE_SWITCH_ALPHA_SYMBOL);
        alphabetKey2.setOnTouchListener(this);

        // spaceKey depends on {@link View.OnClickListener} as well as {@link View.OnTouchListener}.
        // {@link View.OnTouchListener} is used as the trigger of key-press while
        // {@link View.OnClickListener} is used as the trigger of key-release which may not occur
        // if the event is canceled by moving off the finger from the view.
        final ImageView spaceKey = (ImageView)findViewById(R.id.emoji_keyboard_space);
        spaceKey.setBackgroundResource(mKeyBackgroundId);
        spaceKey.setTag(Constants.CODE_SPACE);
        spaceKey.setOnTouchListener(this);
        spaceKey.setOnClickListener(this);
        mEmojiLayoutParams.setKeyProperties(spaceKey);
        final ImageView alphabetKey2 = (ImageView)findViewById(R.id.emoji_keyboard_alphabet2);
        alphabetKey2.setBackgroundResource(mEmojiFunctionalKeyBackgroundId);
        alphabetKey2.setTag(Constants.CODE_SWITCH_ALPHA_SYMBOL);
        alphabetKey2.setOnTouchListener(this);
    }

    @Override
@@ -507,7 +520,6 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
        updateEmojiCategoryPageIdView();
    }


    @Override
    public void onPageSelected(final int position) {
        final Pair<Integer, Integer> newPos =
@@ -545,40 +557,62 @@ public final class EmojiPalettesView extends LinearLayout implements OnTabChange
        }
    }

    // Called from {@link EmojiPageKeyboardView} through {@link View.OnTouchListener} interface to
    // handle touch events from View-based elements such as the space bar.
    /**
     * Called from {@link EmojiPageKeyboardView} through {@link android.view.View.OnTouchListener}
     * interface to handle touch events from View-based elements such as the space bar.
     * Note that this method is used only for observing {@link MotionEvent#ACTION_DOWN} to trigger
     * {@link KeyboardActionListener#onPressKey}. {@link KeyboardActionListener#onReleaseKey} will
     * be covered by {@link #onClick} as long as the event is not canceled.
     */
    @Override
    public boolean onTouch(final View v, final MotionEvent event) {
        if (event.getActionMasked() != MotionEvent.ACTION_DOWN) {
            return false;
        }
        final Object tag = v.getTag();
        if (!(tag instanceof Integer)) {
            return false;
        }
        final int code = (Integer) tag;
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
        mKeyboardActionListener.onPressKey(
                code, 0 /* repeatCount */, true /* isSinglePointer */);
                break;
            case MotionEvent.ACTION_UP:
        // It's important to return false here. Otherwise, {@link #onClick} and touch-down visual
        // feedback stop working.
        return false;
    }

    /**
     * Called from {@link EmojiPageKeyboardView} through {@link android.view.View.OnClickListener}
     * interface to handle non-canceled touch-up events from View-based elements such as the space
     * bar.
     */
    @Override
    public void onClick(View v) {
        final Object tag = v.getTag();
        if (!(tag instanceof Integer)) {
            return;
        }
        final int code = (Integer) tag;
        mKeyboardActionListener.onCodeInput(code, NOT_A_COORDINATE, NOT_A_COORDINATE);
        mKeyboardActionListener.onReleaseKey(code, false /* withSliding */);
                break;
        }
        return false;
    }

    // Called from {@link EmojiPageKeyboardView} through
    // {@link EmojiPageKeyboardView.OnKeyEventListener} interface to handle touch events from
    // non-View-based elements like typical Emoji characters.
    /**
     * Called from {@link EmojiPageKeyboardView} through
     * {@link com.android.inputmethod.keyboard.internal.EmojiPageKeyboardView.OnKeyEventListener}
     * interface to handle touch events from non-View-based elements such as Emoji buttons.
     */
    @Override
    public void onPressKey(final Key key) {
        final int code = key.getCode();
        mKeyboardActionListener.onPressKey(code, 0 /* repeatCount */, true /* isSinglePointer */);
    }

    // Called from {@link EmojiPageKeyboardView} through
    // {@link EmojiPageKeyboardView.OnKeyEventListener} interface to handle touch events from
    // non-View-based elements like typical Emoji characters.
    /**
     * Called from {@link EmojiPageKeyboardView} through
     * {@link com.android.inputmethod.keyboard.internal.EmojiPageKeyboardView.OnKeyEventListener}
     * interface to handle touch events from non-View-based elements such as Emoji buttons.
     */
    @Override
    public void onReleaseKey(final Key key) {
        mEmojiPalettesAdapter.addRecentKey(key);