KeyboardUtil.java revision f8ec169d022fbed42fd82091d24c45f3767cdfe7
182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir/*
282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * Copyright (C) 2017 The Android Open Source Project
382d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir *
482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * Licensed under the Apache License, Version 2.0 (the "License");
582d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * you may not use this file except in compliance with the License.
682d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * You may obtain a copy of the License at
782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir *
882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir *      http://www.apache.org/licenses/LICENSE-2.0
982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir *
1082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * Unless required by applicable law or agreed to in writing, software
1182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * distributed under the License is distributed on an "AS IS" BASIS,
1282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1382d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * See the License for the specific language governing permissions and
1482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * limitations under the License.
1582d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir */
1682d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinirpackage android.support.text.emoji.util;
1782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
1882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinirimport android.view.KeyEvent;
19f8ec169d022fbed42fd82091d24c45f3767cdfe7Siyamed Sinirimport android.view.inputmethod.InputConnection;
2082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
2182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir/**
2282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir * Utility class for KeyEvents
2382d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir */
2482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinirpublic class KeyboardUtil {
2582d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    private static final int ALT = KeyEvent.META_ALT_ON | KeyEvent.META_ALT_LEFT_ON;
2682d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    private static final int CTRL = KeyEvent.META_CTRL_ON | KeyEvent.META_CTRL_LEFT_ON;
2782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    private static final int SHIFT = KeyEvent.META_SHIFT_ON | KeyEvent.META_SHIFT_LEFT_ON;
2882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    private static final int FN = KeyEvent.META_FUNCTION_ON;
2982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
3082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    public static KeyEvent zero() {
3182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir        return keyEvent(KeyEvent.KEYCODE_0);
3282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    }
3382d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
3482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    public static KeyEvent del() {
3582d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir        return keyEvent(KeyEvent.KEYCODE_DEL);
3682d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    }
3782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
3882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    public static KeyEvent altDel() {
3982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir        return keyEvent(KeyEvent.KEYCODE_DEL, ALT);
4082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    }
4182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
4282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    public static KeyEvent ctrlDel() {
4382d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir        return keyEvent(KeyEvent.KEYCODE_DEL, CTRL);
4482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    }
4582d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
4682d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    public static KeyEvent shiftDel() {
4782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir        return keyEvent(KeyEvent.KEYCODE_DEL, SHIFT);
4882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    }
4982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
5082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    public static KeyEvent fnDel() {
5182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir        return keyEvent(KeyEvent.KEYCODE_DEL, FN);
5282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    }
5382d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
5482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    public static KeyEvent forwardDel() {
5582d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir        return keyEvent(KeyEvent.KEYCODE_FORWARD_DEL);
5682d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    }
5782d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
5882d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    public static KeyEvent keyEvent(int keycode, int metaState) {
5982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir        final long currentTime = System.currentTimeMillis();
6082d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir        return new KeyEvent(currentTime, currentTime, KeyEvent.ACTION_DOWN, keycode, 0, metaState);
6182d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    }
6282d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir
6382d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    public static KeyEvent keyEvent(int keycode) {
6482d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir        final long currentTime = System.currentTimeMillis();
6582d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir        return new KeyEvent(currentTime, currentTime, KeyEvent.ACTION_DOWN, keycode, 0);
6682d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir    }
67f8ec169d022fbed42fd82091d24c45f3767cdfe7Siyamed Sinir
68f8ec169d022fbed42fd82091d24c45f3767cdfe7Siyamed Sinir    public static void setComposingTextInBatch(InputConnection input, CharSequence text) {
69f8ec169d022fbed42fd82091d24c45f3767cdfe7Siyamed Sinir        input.beginBatchEdit();
70f8ec169d022fbed42fd82091d24c45f3767cdfe7Siyamed Sinir        input.setComposingText(text, 1);
71f8ec169d022fbed42fd82091d24c45f3767cdfe7Siyamed Sinir        input.endBatchEdit();
72f8ec169d022fbed42fd82091d24c45f3767cdfe7Siyamed Sinir    }
73f8ec169d022fbed42fd82091d24c45f3767cdfe7Siyamed Sinir
74f8ec169d022fbed42fd82091d24c45f3767cdfe7Siyamed Sinir    public static void deleteSurrondingText(InputConnection input, int before, int after) {
75f8ec169d022fbed42fd82091d24c45f3767cdfe7Siyamed Sinir        input.beginBatchEdit();
76f8ec169d022fbed42fd82091d24c45f3767cdfe7Siyamed Sinir        input.deleteSurroundingText(before, after);
77f8ec169d022fbed42fd82091d24c45f3767cdfe7Siyamed Sinir        input.endBatchEdit();
78f8ec169d022fbed42fd82091d24c45f3767cdfe7Siyamed Sinir    }
7982d2cc1cf0c2bfdd5121e6d6913dfe9fcaacf439Siyamed Sinir}
80