Refactor shift state and caps lock state handling code.

Move setShifted and setShifLocked methods to KeyboardSwitcher, then
delegate to LatinKeyboardView.

Bug: 2910379

Change-Id: I5dba70ec0dfc7a1ed67f1e05d54a2bd92252ed24
main
Tadashi G. Takaoka 2010-08-19 18:20:09 +09:00
parent 103634dd8d
commit f95e947223
3 changed files with 56 additions and 31 deletions

View File

@ -24,6 +24,7 @@ import android.content.Context;
import android.content.SharedPreferences;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.inputmethodservice.Keyboard;
import android.preference.PreferenceManager;
import android.view.InflateException;
@ -343,6 +344,18 @@ public class KeyboardSwitcher implements SharedPreferences.OnSharedPreferenceCha
return false;
}
void setShifted(boolean shifted) {
if (mInputView != null) {
mInputView.setShifted(shifted);
}
}
void setShiftLocked(boolean shiftLocked) {
if (mInputView != null) {
mInputView.setShiftLocked(shiftLocked);
}
}
void toggleShift() {
if (mCurrentId.equals(mSymbolsId)) {
LatinKeyboard symbolsKeyboard = getKeyboard(mSymbolsId);

View File

@ -195,6 +195,7 @@ public class LatinIME extends InputMethodService
private boolean mAutoCorrectEnabled;
private boolean mBigramSuggestionEnabled;
private boolean mAutoCorrectOn;
// TODO move this state variable outside LatinIME
private boolean mCapsLock;
private boolean mPasswordText;
private boolean mVibrateOn;
@ -967,10 +968,8 @@ public class LatinIME extends InputMethodService
public void updateShiftKeyState(EditorInfo attr) {
InputConnection ic = getCurrentInputConnection();
if (attr != null && mKeyboardSwitcher.getInputView() != null
&& mKeyboardSwitcher.isAlphabetMode() && ic != null) {
mKeyboardSwitcher.getInputView().setShifted(
mCapsLock || getCursorCapsMode(ic, attr) != 0);
if (attr != null && mKeyboardSwitcher.isAlphabetMode() && ic != null) {
mKeyboardSwitcher.setShifted(mCapsLock || getCursorCapsMode(ic, attr) != 0);
}
}
@ -1106,11 +1105,7 @@ public class LatinIME extends InputMethodService
toggleLanguage(false, false);
break;
case LatinKeyboardView.KEYCODE_SHIFT_LONGPRESS:
if (mCapsLock) {
handleShift();
} else {
toggleCapsLock();
}
handleCapsLock();
break;
case Keyboard.KEYCODE_MODE_CHANGE:
changeKeyboardMode();
@ -1235,13 +1230,35 @@ public class LatinIME extends InputMethodService
private void handleShift() {
mHandler.removeMessages(MSG_UPDATE_SHIFT_STATE);
if (mKeyboardSwitcher.isAlphabetMode()) {
// Alphabet keyboard
checkToggleCapsLock();
mKeyboardSwitcher.getInputView().setShifted(mCapsLock
|| !mKeyboardSwitcher.getInputView().isShifted());
KeyboardSwitcher switcher = mKeyboardSwitcher;
LatinKeyboardView inputView = switcher.getInputView();
if (switcher.isAlphabetMode()) {
if (mCapsLock) {
mCapsLock = false;
switcher.setShifted(false);
} else if (inputView != null) {
if (inputView.isShifted()) {
mCapsLock = true;
switcher.setShiftLocked(true);
} else {
mKeyboardSwitcher.toggleShift();
switcher.setShifted(true);
}
}
} else {
switcher.toggleShift();
}
}
private void handleCapsLock() {
mHandler.removeMessages(MSG_UPDATE_SHIFT_STATE);
KeyboardSwitcher switcher = mKeyboardSwitcher;
if (switcher.isAlphabetMode()) {
mCapsLock = !mCapsLock;
if (mCapsLock) {
switcher.setShiftLocked(true);
} else {
switcher.setShifted(false);
}
}
}
@ -1405,20 +1422,6 @@ public class LatinIME extends InputMethodService
mWordHistory.add(entry);
}
private void checkToggleCapsLock() {
if (mKeyboardSwitcher.getInputView().getKeyboard().isShifted()) {
toggleCapsLock();
}
}
private void toggleCapsLock() {
mCapsLock = !mCapsLock;
if (mKeyboardSwitcher.isAlphabetMode()) {
((LatinKeyboard) mKeyboardSwitcher.getInputView().getKeyboard()).setShiftLocked(
mCapsLock);
}
}
private void postUpdateSuggestions() {
mHandler.removeMessages(MSG_UPDATE_SUGGESTIONS);
mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_UPDATE_SUGGESTIONS), 100);
@ -2414,8 +2417,7 @@ public class LatinIME extends InputMethodService
private void changeKeyboardMode() {
mKeyboardSwitcher.toggleSymbols();
if (mCapsLock && mKeyboardSwitcher.isAlphabetMode()) {
((LatinKeyboard) mKeyboardSwitcher.getInputView().getKeyboard()).setShiftLocked(
mCapsLock);
mKeyboardSwitcher.setShiftLocked(mCapsLock);
}
updateShiftKeyState(getCurrentInputEditorInfo());

View File

@ -124,6 +124,16 @@ public class LatinKeyboardView extends LatinKeyboardBaseView {
return label;
}
public boolean setShiftLocked(boolean shiftLocked) {
Keyboard keyboard = getKeyboard();
if (keyboard != null && keyboard instanceof LatinKeyboard) {
((LatinKeyboard)keyboard).setShiftLocked(shiftLocked);
invalidateAllKeys();
return true;
}
return false;
}
/**
* This function checks to see if we need to handle any sudden jumps in the pointer location
* that could be due to a multi-touch being treated as a move by the firmware or hardware.