[IL7] Move performRecapitalization to InputLogic

Bug: 8636060
Change-Id: I5bf2b1fa2f9338fe28151e66eac1ceda6dbd4a7f
This commit is contained in:
Jean Chalard 2013-12-19 17:43:22 +09:00
parent 40b42b7d84
commit d85e49bf8c
2 changed files with 41 additions and 51 deletions

View file

@ -1799,53 +1799,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
}
}
// TODO[IL]: Move this to InputLogic
public void performRecapitalization() {
if (mInputLogic.mLastSelectionStart == mInputLogic.mLastSelectionEnd) {
return; // No selection
}
// If we have a recapitalize in progress, use it; otherwise, create a new one.
if (!mInputLogic.mRecapitalizeStatus.isActive()
|| !mInputLogic.mRecapitalizeStatus.isSetAt(mInputLogic.mLastSelectionStart,
mInputLogic.mLastSelectionEnd)) {
final CharSequence selectedText =
mInputLogic.mConnection.getSelectedText(0 /* flags, 0 for no styles */);
if (TextUtils.isEmpty(selectedText)) return; // Race condition with the input connection
final SettingsValues currentSettings = mSettings.getCurrent();
mInputLogic.mRecapitalizeStatus.initialize(mInputLogic.mLastSelectionStart,
mInputLogic.mLastSelectionEnd,
selectedText.toString(), currentSettings.mLocale,
currentSettings.mWordSeparators);
// We trim leading and trailing whitespace.
mInputLogic.mRecapitalizeStatus.trim();
// Trimming the object may have changed the length of the string, and we need to
// reposition the selection handles accordingly. As this result in an IPC call,
// only do it if it's actually necessary, in other words if the recapitalize status
// is not set at the same place as before.
if (!mInputLogic.mRecapitalizeStatus.isSetAt(mInputLogic.mLastSelectionStart,
mInputLogic.mLastSelectionEnd)) {
mInputLogic.mLastSelectionStart =
mInputLogic.mRecapitalizeStatus.getNewCursorStart();
mInputLogic.mLastSelectionEnd = mInputLogic.mRecapitalizeStatus.getNewCursorEnd();
}
}
mInputLogic.mConnection.finishComposingText();
mInputLogic.mRecapitalizeStatus.rotate();
final int numCharsDeleted =
mInputLogic.mLastSelectionEnd - mInputLogic.mLastSelectionStart;
mInputLogic.mConnection.setSelection(mInputLogic.mLastSelectionEnd,
mInputLogic.mLastSelectionEnd);
mInputLogic.mConnection.deleteSurroundingText(numCharsDeleted, 0);
mInputLogic.mConnection.commitText(
mInputLogic.mRecapitalizeStatus.getRecapitalizedString(), 0);
mInputLogic.mLastSelectionStart = mInputLogic.mRecapitalizeStatus.getNewCursorStart();
mInputLogic.mLastSelectionEnd = mInputLogic.mRecapitalizeStatus.getNewCursorEnd();
mInputLogic.mConnection.setSelection(mInputLogic.mLastSelectionStart,
mInputLogic.mLastSelectionEnd);
// Match the keyboard to the new state.
mKeyboardSwitcher.updateShiftState();
}
// TODO[IL]: Rename this to avoid using handle*
private void handleClose() {
// TODO: Verify that words are logged properly when IME is closed.

View file

@ -17,6 +17,7 @@
package com.android.inputmethod.latin.inputlogic;
import android.os.SystemClock;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyCharacterMap;
import android.view.KeyEvent;
@ -144,7 +145,7 @@ public final class InputLogic {
if (null != currentKeyboard && currentKeyboard.mId.isAlphabetKeyboard()) {
// TODO: Instead of checking for alphabetic keyboard here, separate keycodes for
// alphabetic shift and shift while in symbol layout.
performRecapitalization();
performRecapitalization(settingsValues, keyboardSwitcher);
}
break;
case Constants.CODE_CAPSLOCK:
@ -614,10 +615,46 @@ public final class InputLogic {
}
/**
* Processes a recapitalize event.
* Performs a recapitalization event.
* @param settingsValues The current settings values.
*/
private void performRecapitalization() {
mLatinIME.performRecapitalization();
public void performRecapitalization(final SettingsValues settingsValues,
// TODO: remove this argument.
final KeyboardSwitcher keyboardSwitcher) {
if (mLastSelectionStart == mLastSelectionEnd) {
return; // No selection
}
// If we have a recapitalize in progress, use it; otherwise, create a new one.
if (!mRecapitalizeStatus.isActive()
|| !mRecapitalizeStatus.isSetAt(mLastSelectionStart, mLastSelectionEnd)) {
final CharSequence selectedText =
mConnection.getSelectedText(0 /* flags, 0 for no styles */);
if (TextUtils.isEmpty(selectedText)) return; // Race condition with the input connection
mRecapitalizeStatus.initialize(mLastSelectionStart, mLastSelectionEnd,
selectedText.toString(),
settingsValues.mLocale, settingsValues.mWordSeparators);
// We trim leading and trailing whitespace.
mRecapitalizeStatus.trim();
// Trimming the object may have changed the length of the string, and we need to
// reposition the selection handles accordingly. As this result in an IPC call,
// only do it if it's actually necessary, in other words if the recapitalize status
// is not set at the same place as before.
if (!mRecapitalizeStatus.isSetAt(mLastSelectionStart, mLastSelectionEnd)) {
mLastSelectionStart = mRecapitalizeStatus.getNewCursorStart();
mLastSelectionEnd = mRecapitalizeStatus.getNewCursorEnd();
}
}
mConnection.finishComposingText();
mRecapitalizeStatus.rotate();
final int numCharsDeleted = mLastSelectionEnd - mLastSelectionStart;
mConnection.setSelection(mLastSelectionEnd, mLastSelectionEnd);
mConnection.deleteSurroundingText(numCharsDeleted, 0);
mConnection.commitText(mRecapitalizeStatus.getRecapitalizedString(), 0);
mLastSelectionStart = mRecapitalizeStatus.getNewCursorStart();
mLastSelectionEnd = mRecapitalizeStatus.getNewCursorEnd();
mConnection.setSelection(mLastSelectionStart, mLastSelectionEnd);
// Match the keyboard to the new state.
keyboardSwitcher.updateShiftState();
}
/**