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 2172934bd5967d0127f71fd4d66158b18b4e6ceefeTadashi G. Takaokaimport com.android.inputmethod.keyboard.KeyboardSwitcher; 2272934bd5967d0127f71fd4d66158b18b4e6ceefeTadashi G. Takaoka 23889691eca1ad991a85fb721deb37ecba6a913762Tadashi G. Takaokapublic class ModifierKeyState { 24f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka protected static final String TAG = "ModifierKeyState"; 25f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka protected static final boolean DEBUG = KeyboardSwitcher.DEBUG_STATE; 26f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka 27889691eca1ad991a85fb721deb37ecba6a913762Tadashi G. Takaoka protected static final int RELEASING = 0; 28889691eca1ad991a85fb721deb37ecba6a913762Tadashi G. Takaoka protected static final int PRESSING = 1; 29889691eca1ad991a85fb721deb37ecba6a913762Tadashi G. Takaoka protected static final int MOMENTARY = 2; 3040a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka 31f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka protected final String mName; 32889691eca1ad991a85fb721deb37ecba6a913762Tadashi G. Takaoka protected int mState = RELEASING; 3340a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka 34f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka public ModifierKeyState(String name) { 35f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka mName = name; 36f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka } 37f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka 3840a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka public void onPress() { 39f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka final int oldState = mState; 4040a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka mState = PRESSING; 41f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka if (DEBUG) 42f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka Log.d(TAG, mName + ".onPress: " + toString(oldState) + " > " + this); 4340a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka } 4440a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka 4540a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka public void onRelease() { 46f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka final int oldState = mState; 4740a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka mState = RELEASING; 48f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka if (DEBUG) 49f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka Log.d(TAG, mName + ".onRelease: " + toString(oldState) + " > " + this); 5040a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka } 5140a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka 5240a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka public void onOtherKeyPressed() { 53f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka final int oldState = mState; 546769c67987f323008647f5d029c02f8cc95272eeTadashi G. Takaoka if (oldState == PRESSING) 55f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka mState = MOMENTARY; 56f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka if (DEBUG) 57f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka Log.d(TAG, mName + ".onOtherKeyPressed: " + toString(oldState) + " > " + this); 5840a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka } 5940a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka 609e91472285a1b903631f1e3c998f5aa1efd3e98eTadashi G. Takaoka public boolean isPressing() { 619e91472285a1b903631f1e3c998f5aa1efd3e98eTadashi G. Takaoka return mState == PRESSING; 629e91472285a1b903631f1e3c998f5aa1efd3e98eTadashi G. Takaoka } 639e91472285a1b903631f1e3c998f5aa1efd3e98eTadashi G. Takaoka 6445911256fd4e32880e33c42259b19e8d7af70cb1Tadashi G. Takaoka public boolean isReleasing() { 6545911256fd4e32880e33c42259b19e8d7af70cb1Tadashi G. Takaoka return mState == RELEASING; 6645911256fd4e32880e33c42259b19e8d7af70cb1Tadashi G. Takaoka } 6745911256fd4e32880e33c42259b19e8d7af70cb1Tadashi G. Takaoka 6840a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka public boolean isMomentary() { 6940a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka return mState == MOMENTARY; 7040a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka } 71f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka 72f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka @Override 73f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka public String toString() { 74f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka return toString(mState); 75f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka } 76f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka 776769c67987f323008647f5d029c02f8cc95272eeTadashi G. Takaoka protected String toString(int state) { 78f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka switch (state) { 79f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka case RELEASING: return "RELEASING"; 80f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka case PRESSING: return "PRESSING"; 81f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka case MOMENTARY: return "MOMENTARY"; 82f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka default: return "UNKNOWN"; 83f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka } 84f27364600c742509b48857e6b8f17312033e0dc7Tadashi G. Takaoka } 8540a05f62edc6cdedb4365a722b48a72826ef2bf6Tadashi G. Takaoka} 86