ModifierKeyState.java revision 25971b5a14b378c4821fadd078e3cdaf8e07bb2a
140a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka/* 28632bff2d5a8e1160989008dea6eff4b94b065ddTadashi G. Takaoka * Copyright (C) 2010 The Android Open Source Project 340a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka * 440a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); you may not 540a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka * use this file except in compliance with the License. You may obtain a copy of 640a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka * the License at 740a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka * 840a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 940a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka * 1040a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 1140a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 1240a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the 1340a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka * License for the specific language governing permissions and limitations under 1440a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka * the License. 1540a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka */ 1640a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka 1772934bd5967d0127f71fd4d66158b18b4e6ceefeTadashi G. Takaokapackage com.android.inputmethod.keyboard.internal; 1840a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka 19f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaokaimport android.util.Log; 20f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka 2146831d5a4b135e5c21f2212d1d8aef09806800edTadashi G. Takaoka/* package */ class ModifierKeyState { 2225971b5a14b378c4821fadd078e3cdaf8e07bb2aTadashi G. Takaoka protected static final String TAG = ModifierKeyState.class.getSimpleName(); 23930a55b846a2bdff76bf082879470310ff6eaf36Tadashi G. Takaoka protected static final boolean DEBUG = false; 24f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka 25889691eca1ad991a85fb721deb37ecba6a913762Tadashi G. Takaoka protected static final int RELEASING = 0; 26889691eca1ad991a85fb721deb37ecba6a913762Tadashi G. Takaoka protected static final int PRESSING = 1; 2725971b5a14b378c4821fadd078e3cdaf8e07bb2aTadashi G. Takaoka protected static final int CHORDING = 2; 2840a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka 29f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka protected final String mName; 30889691eca1ad991a85fb721deb37ecba6a913762Tadashi G. Takaoka protected int mState = RELEASING; 3140a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka 32f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka public ModifierKeyState(String name) { 33f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka mName = name; 34f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka } 35f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka 3640a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka public void onPress() { 37f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka final int oldState = mState; 3840a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka mState = PRESSING; 39f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka if (DEBUG) 40f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka Log.d(TAG, mName + ".onPress: " + toString(oldState) + " > " + this); 4140a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka } 4240a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka 4340a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka public void onRelease() { 44f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka final int oldState = mState; 4540a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka mState = RELEASING; 46f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka if (DEBUG) 47f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka Log.d(TAG, mName + ".onRelease: " + toString(oldState) + " > " + this); 4840a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka } 4940a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka 5040a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka public void onOtherKeyPressed() { 51f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka final int oldState = mState; 526769c67987f323008647f5d029c02f8cc95272eeTadashi G. Takaoka if (oldState == PRESSING) 5325971b5a14b378c4821fadd078e3cdaf8e07bb2aTadashi G. Takaoka mState = CHORDING; 54f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka if (DEBUG) 55f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka Log.d(TAG, mName + ".onOtherKeyPressed: " + toString(oldState) + " > " + this); 5640a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka } 5740a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka 589e91472285a1b903631f1e3c998f5aa1efd3e98eTadashi G. Takaoka public boolean isPressing() { 599e91472285a1b903631f1e3c998f5aa1efd3e98eTadashi G. Takaoka return mState == PRESSING; 609e91472285a1b903631f1e3c998f5aa1efd3e98eTadashi G. Takaoka } 619e91472285a1b903631f1e3c998f5aa1efd3e98eTadashi G. Takaoka 6245911256fd4e32880e33c42259b19e8d7af70cb1Tadashi G. Takaoka public boolean isReleasing() { 6345911256fd4e32880e33c42259b19e8d7af70cb1Tadashi G. Takaoka return mState == RELEASING; 6445911256fd4e32880e33c42259b19e8d7af70cb1Tadashi G. Takaoka } 6545911256fd4e32880e33c42259b19e8d7af70cb1Tadashi G. Takaoka 6625971b5a14b378c4821fadd078e3cdaf8e07bb2aTadashi G. Takaoka public boolean isChording() { 6725971b5a14b378c4821fadd078e3cdaf8e07bb2aTadashi G. Takaoka return mState == CHORDING; 6840a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka } 69f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka 70f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka @Override 71f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka public String toString() { 72f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka return toString(mState); 73f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka } 74f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka 756769c67987f323008647f5d029c02f8cc95272eeTadashi G. Takaoka protected String toString(int state) { 76f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka switch (state) { 77f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka case RELEASING: return "RELEASING"; 78f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka case PRESSING: return "PRESSING"; 7925971b5a14b378c4821fadd078e3cdaf8e07bb2aTadashi G. Takaoka case CHORDING: return "CHORDING"; 80f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka default: return "UNKNOWN"; 81f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka } 82f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka } 8340a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka} 84