[IL7] Move performRecapitalization to InputLogic
Bug: 8636060 Change-Id: I5bf2b1fa2f9338fe28151e66eac1ceda6dbd4a7f
This commit is contained in:
parent
40b42b7d84
commit
d85e49bf8c
2 changed files with 41 additions and 51 deletions
|
@ -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*
|
// TODO[IL]: Rename this to avoid using handle*
|
||||||
private void handleClose() {
|
private void handleClose() {
|
||||||
// TODO: Verify that words are logged properly when IME is closed.
|
// TODO: Verify that words are logged properly when IME is closed.
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
package com.android.inputmethod.latin.inputlogic;
|
package com.android.inputmethod.latin.inputlogic;
|
||||||
|
|
||||||
import android.os.SystemClock;
|
import android.os.SystemClock;
|
||||||
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.view.KeyCharacterMap;
|
import android.view.KeyCharacterMap;
|
||||||
import android.view.KeyEvent;
|
import android.view.KeyEvent;
|
||||||
|
@ -144,7 +145,7 @@ public final class InputLogic {
|
||||||
if (null != currentKeyboard && currentKeyboard.mId.isAlphabetKeyboard()) {
|
if (null != currentKeyboard && currentKeyboard.mId.isAlphabetKeyboard()) {
|
||||||
// TODO: Instead of checking for alphabetic keyboard here, separate keycodes for
|
// TODO: Instead of checking for alphabetic keyboard here, separate keycodes for
|
||||||
// alphabetic shift and shift while in symbol layout.
|
// alphabetic shift and shift while in symbol layout.
|
||||||
performRecapitalization();
|
performRecapitalization(settingsValues, keyboardSwitcher);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Constants.CODE_CAPSLOCK:
|
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() {
|
public void performRecapitalization(final SettingsValues settingsValues,
|
||||||
mLatinIME.performRecapitalization();
|
// 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();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue