Delete surrogate together.
Stop deleting them one after the other, it makes no sense. We can know in advance if we should delete two of them, so let's use that. Bug: 6526420 Change-Id: Ifa2263cbde8fedc78bb750b84d4acd3f979774eamain
parent
53830bf464
commit
b2d954cad6
|
@ -1923,6 +1923,8 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
// This should never happen.
|
// This should never happen.
|
||||||
Log.e(TAG, "Backspace when we don't know the selection position");
|
Log.e(TAG, "Backspace when we don't know the selection position");
|
||||||
}
|
}
|
||||||
|
final int lengthToDelete = Character.isSupplementaryCodePoint(
|
||||||
|
mConnection.getCodePointBeforeCursor()) ? 2 : 1;
|
||||||
if (mAppWorkAroundsUtils.isBeforeJellyBean()) {
|
if (mAppWorkAroundsUtils.isBeforeJellyBean()) {
|
||||||
// Backward compatibility mode. Before Jelly bean, the keyboard would simulate
|
// Backward compatibility mode. Before Jelly bean, the keyboard would simulate
|
||||||
// a hardware keyboard event on pressing enter or delete. This is bad for many
|
// a hardware keyboard event on pressing enter or delete. This is bad for many
|
||||||
|
@ -1930,15 +1932,18 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
// relying on this behavior so we continue to support it for older apps.
|
// relying on this behavior so we continue to support it for older apps.
|
||||||
sendDownUpKeyEventForBackwardCompatibility(KeyEvent.KEYCODE_DEL);
|
sendDownUpKeyEventForBackwardCompatibility(KeyEvent.KEYCODE_DEL);
|
||||||
} else {
|
} else {
|
||||||
mConnection.deleteSurroundingText(1, 0);
|
mConnection.deleteSurroundingText(lengthToDelete, 0);
|
||||||
}
|
}
|
||||||
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
|
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
|
||||||
ResearchLogger.latinIME_handleBackspace(1, true /* shouldUncommitLogUnit */);
|
ResearchLogger.latinIME_handleBackspace(lengthToDelete,
|
||||||
|
true /* shouldUncommitLogUnit */);
|
||||||
}
|
}
|
||||||
if (mDeleteCount > DELETE_ACCELERATE_AT) {
|
if (mDeleteCount > DELETE_ACCELERATE_AT) {
|
||||||
mConnection.deleteSurroundingText(1, 0);
|
final int lengthToDeleteAgain = Character.isSupplementaryCodePoint(
|
||||||
|
mConnection.getCodePointBeforeCursor()) ? 2 : 1;
|
||||||
|
mConnection.deleteSurroundingText(lengthToDeleteAgain, 0);
|
||||||
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
|
if (ProductionFlag.USES_DEVELOPMENT_ONLY_DIAGNOSTICS) {
|
||||||
ResearchLogger.latinIME_handleBackspace(1,
|
ResearchLogger.latinIME_handleBackspace(lengthToDeleteAgain,
|
||||||
true /* shouldUncommitLogUnit */);
|
true /* shouldUncommitLogUnit */);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2733,17 +2738,6 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Constants.CODE_DELETE == primaryCode) {
|
|
||||||
// This is a stopgap solution to avoid leaving a high surrogate alone in a text view.
|
|
||||||
// In the future, we need to deprecate deteleSurroundingText() and have a surrogate
|
|
||||||
// pair-friendly way of deleting characters in InputConnection.
|
|
||||||
// TODO: use getCodePointBeforeCursor instead to improve performance
|
|
||||||
final CharSequence lastChar = mConnection.getTextBeforeCursor(1, 0);
|
|
||||||
if (!TextUtils.isEmpty(lastChar) && Character.isHighSurrogate(lastChar.charAt(0))) {
|
|
||||||
mConnection.deleteSurroundingText(1, 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hooks for hardware keyboard
|
// Hooks for hardware keyboard
|
||||||
|
|
Loading…
Reference in New Issue