summaryrefslogtreecommitdiff
path: root/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
diff options
context:
space:
mode:
authorTadashi G. Takaoka <takaoka@google.com>2011-12-08 14:42:12 +0900
committerTadashi G. Takaoka <takaoka@google.com>2011-12-08 17:00:56 +0900
commitcf58f53a1ab53b427a3d9784502b47ba1833b018 (patch)
tree1bcc0e79124ed048a86fc461e20af3f36b9a5283 /java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
parentcce3f791af2cec8f9ab531c97ccabcc19c7b7cd0 (diff)
Move KeyboardLayoutState into KeyboardState
Bug: 5708602 Change-Id: Ieb6b872d0f2cf3ad1fcb69409e2cf49f60427672
Diffstat (limited to 'java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java')
-rw-r--r--java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java59
1 files changed, 59 insertions, 0 deletions
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
index a632a27b1..ee5ef9164 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyboardState.java
@@ -17,11 +17,15 @@
package com.android.inputmethod.keyboard.internal;
import android.text.TextUtils;
+import android.util.Log;
import com.android.inputmethod.keyboard.Keyboard;
// TODO: Add unit tests
public class KeyboardState {
+ private static final String TAG = KeyboardState.class.getSimpleName();
+ private static final boolean DEBUG_STATE = false;
+
public interface SwitchActions {
public void setAlphabetKeyboard();
public static final int UNSHIFT = 0;
@@ -52,6 +56,15 @@ public class KeyboardState {
private final SwitchActions mSwitchActions;
+ private final SavedKeyboardState mSavedKeyboardState = new SavedKeyboardState();
+
+ private static class SavedKeyboardState {
+ public boolean mIsValid;
+ public boolean mIsAlphabetMode;
+ public boolean mIsShiftLocked;
+ public boolean mIsShifted;
+ }
+
public KeyboardState(SwitchActions switchActions) {
mSwitchActions = switchActions;
}
@@ -64,6 +77,52 @@ public class KeyboardState {
mSymbolKeyState.onRelease();
}
+ // TODO: Get rid of isAlphabetMode and isSymbolShifted arguments.
+ public void onSaveKeyboardState(boolean isAlphabetMode, boolean isSymbolShifted) {
+ final SavedKeyboardState state = mSavedKeyboardState;
+ state.mIsAlphabetMode = isAlphabetMode;
+ if (isAlphabetMode) {
+ state.mIsShiftLocked = isShiftLocked();
+ state.mIsShifted = !state.mIsShiftLocked && isShiftedOrShiftLocked();
+ } else {
+ state.mIsShiftLocked = false;
+ state.mIsShifted = isSymbolShifted;
+ }
+ state.mIsValid = true;
+ if (DEBUG_STATE) {
+ Log.d(TAG, "save: alphabet=" + state.mIsAlphabetMode
+ + " shiftLocked=" + state.mIsShiftLocked + " shift=" + state.mIsShifted);
+ }
+ }
+
+ public void onRestoreKeyboardState() {
+ final SavedKeyboardState state = mSavedKeyboardState;
+ if (DEBUG_STATE) {
+ Log.d(TAG, "restore: valid=" + state.mIsValid + " alphabet=" + state.mIsAlphabetMode
+ + " shiftLocked=" + state.mIsShiftLocked + " shift=" + state.mIsShifted);
+ }
+ if (!state.mIsValid || state.mIsAlphabetMode) {
+ mSwitchActions.setAlphabetKeyboard();
+ } else {
+ if (state.mIsShifted) {
+ mSwitchActions.setSymbolsShiftedKeyboard();
+ } else {
+ mSwitchActions.setSymbolsKeyboard();
+ }
+ }
+
+ if (!state.mIsValid) return;
+ state.mIsValid = false;
+
+ if (state.mIsAlphabetMode) {
+ mSwitchActions.setShiftLocked(state.mIsShiftLocked);
+ if (!state.mIsShiftLocked) {
+ mSwitchActions.setShifted(
+ state.mIsShifted ? SwitchActions.MANUAL_SHIFT : SwitchActions.UNSHIFT);
+ }
+ }
+ }
+
// TODO: Get rid of this method
public void onSetKeyboard(boolean isAlphabetMode) {
mSwitchState = isAlphabetMode ? SWITCH_STATE_ALPHA : SWITCH_STATE_SYMBOL_BEGIN;