1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.inputmethod.keyboard.internal;
18 
19 import android.util.Log;
20 
21 public final class AlphabetShiftState {
22     private static final String TAG = AlphabetShiftState.class.getSimpleName();
23     private static final boolean DEBUG = false;
24 
25     private static final int UNSHIFTED = 0;
26     private static final int MANUAL_SHIFTED = 1;
27     private static final int MANUAL_SHIFTED_FROM_AUTO = 2;
28     private static final int AUTOMATIC_SHIFTED = 3;
29     private static final int SHIFT_LOCKED = 4;
30     private static final int SHIFT_LOCK_SHIFTED = 5;
31 
32     private int mState = UNSHIFTED;
33 
setShifted(boolean newShiftState)34     public void setShifted(boolean newShiftState) {
35         final int oldState = mState;
36         if (newShiftState) {
37             switch (oldState) {
38             case UNSHIFTED:
39                 mState = MANUAL_SHIFTED;
40                 break;
41             case AUTOMATIC_SHIFTED:
42                 mState = MANUAL_SHIFTED_FROM_AUTO;
43                 break;
44             case SHIFT_LOCKED:
45                 mState = SHIFT_LOCK_SHIFTED;
46                 break;
47             }
48         } else {
49             switch (oldState) {
50             case MANUAL_SHIFTED:
51             case MANUAL_SHIFTED_FROM_AUTO:
52             case AUTOMATIC_SHIFTED:
53                 mState = UNSHIFTED;
54                 break;
55             case SHIFT_LOCK_SHIFTED:
56                 mState = SHIFT_LOCKED;
57                 break;
58             }
59         }
60         if (DEBUG)
61             Log.d(TAG, "setShifted(" + newShiftState + "): " + toString(oldState) + " > " + this);
62     }
63 
setShiftLocked(boolean newShiftLockState)64     public void setShiftLocked(boolean newShiftLockState) {
65         final int oldState = mState;
66         if (newShiftLockState) {
67             switch (oldState) {
68             case UNSHIFTED:
69             case MANUAL_SHIFTED:
70             case MANUAL_SHIFTED_FROM_AUTO:
71             case AUTOMATIC_SHIFTED:
72                 mState = SHIFT_LOCKED;
73                 break;
74             }
75         } else {
76             mState = UNSHIFTED;
77         }
78         if (DEBUG)
79             Log.d(TAG, "setShiftLocked(" + newShiftLockState + "): " + toString(oldState)
80                     + " > " + this);
81     }
82 
setAutomaticShifted()83     public void setAutomaticShifted() {
84         final int oldState = mState;
85         mState = AUTOMATIC_SHIFTED;
86         if (DEBUG)
87             Log.d(TAG, "setAutomaticShifted: " + toString(oldState) + " > " + this);
88     }
89 
isShiftedOrShiftLocked()90     public boolean isShiftedOrShiftLocked() {
91         return mState != UNSHIFTED;
92     }
93 
isShiftLocked()94     public boolean isShiftLocked() {
95         return mState == SHIFT_LOCKED || mState == SHIFT_LOCK_SHIFTED;
96     }
97 
isShiftLockShifted()98     public boolean isShiftLockShifted() {
99         return mState == SHIFT_LOCK_SHIFTED;
100     }
101 
isAutomaticShifted()102     public boolean isAutomaticShifted() {
103         return mState == AUTOMATIC_SHIFTED;
104     }
105 
isManualShifted()106     public boolean isManualShifted() {
107         return mState == MANUAL_SHIFTED || mState == MANUAL_SHIFTED_FROM_AUTO
108                 || mState == SHIFT_LOCK_SHIFTED;
109     }
110 
isManualShiftedFromAutomaticShifted()111     public boolean isManualShiftedFromAutomaticShifted() {
112         return mState == MANUAL_SHIFTED_FROM_AUTO;
113     }
114 
115     @Override
toString()116     public String toString() {
117         return toString(mState);
118     }
119 
toString(int state)120     private static String toString(int state) {
121         switch (state) {
122         case UNSHIFTED: return "UNSHIFTED";
123         case MANUAL_SHIFTED: return "MANUAL_SHIFTED";
124         case MANUAL_SHIFTED_FROM_AUTO: return "MANUAL_SHIFTED_FROM_AUTO";
125         case AUTOMATIC_SHIFTED: return "AUTOMATIC_SHIFTED";
126         case SHIFT_LOCKED: return "SHIFT_LOCKED";
127         case SHIFT_LOCK_SHIFTED: return "SHIFT_LOCK_SHIFTED";
128         default: return "UNKNOWN";
129         }
130     }
131 }
132