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