Only add spaces automatically when appropriate.
Correctly check the variations to determine if we should add automatic spaces (in manual picks and gestures) or not. Bug: 7164981 Change-Id: I19e25af839b4062c217113cd804b1473912f22a5main
parent
66cee1f92d
commit
ec60d60078
|
@ -29,6 +29,7 @@ public final class InputAttributes {
|
|||
final public boolean mInputTypeNoAutoCorrect;
|
||||
final public boolean mIsSettingsSuggestionStripOn;
|
||||
final public boolean mApplicationSpecifiedCompletionOn;
|
||||
final public boolean mShouldInsertSpacesAutomatically;
|
||||
final private int mInputType;
|
||||
|
||||
public InputAttributes(final EditorInfo editorInfo, final boolean isFullscreenMode) {
|
||||
|
@ -54,6 +55,7 @@ public final class InputAttributes {
|
|||
mIsSettingsSuggestionStripOn = false;
|
||||
mInputTypeNoAutoCorrect = false;
|
||||
mApplicationSpecifiedCompletionOn = false;
|
||||
mShouldInsertSpacesAutomatically = false;
|
||||
} else {
|
||||
final int variation = inputType & InputType.TYPE_MASK_VARIATION;
|
||||
final boolean flagNoSuggestions =
|
||||
|
@ -65,6 +67,7 @@ public final class InputAttributes {
|
|||
final boolean flagAutoComplete =
|
||||
0 != (inputType & InputType.TYPE_TEXT_FLAG_AUTO_COMPLETE);
|
||||
|
||||
// TODO: Have a helper method in InputTypeUtils
|
||||
// Make sure that passwords are not displayed in {@link SuggestionStripView}.
|
||||
if (InputTypeUtils.isPasswordInputType(inputType)
|
||||
|| InputTypeUtils.isVisiblePasswordInputType(inputType)
|
||||
|
@ -78,6 +81,8 @@ public final class InputAttributes {
|
|||
mIsSettingsSuggestionStripOn = true;
|
||||
}
|
||||
|
||||
mShouldInsertSpacesAutomatically = InputTypeUtils.isAutoSpaceFriendlyType(inputType);
|
||||
|
||||
// If it's a browser edit field and auto correct is not ON explicitly, then
|
||||
// disable auto correction, but keep suggestions on.
|
||||
// If NO_SUGGESTIONS is set, don't do prediction.
|
||||
|
|
|
@ -29,31 +29,37 @@ public final class InputTypeUtils implements InputType {
|
|||
TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_PASSWORD;
|
||||
private static final int TEXT_VISIBLE_PASSWORD_INPUT_TYPE =
|
||||
TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_VISIBLE_PASSWORD;
|
||||
private static final int[] SUPPRESSING_AUTO_SPACES_FIELD_VARIATION = {
|
||||
InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS,
|
||||
InputType.TYPE_TEXT_VARIATION_PASSWORD,
|
||||
InputType.TYPE_TEXT_VARIATION_URI,
|
||||
InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD,
|
||||
InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD };
|
||||
|
||||
private InputTypeUtils() {
|
||||
// This utility class is not publicly instantiable.
|
||||
}
|
||||
|
||||
private static boolean isWebEditTextInputType(int inputType) {
|
||||
private static boolean isWebEditTextInputType(final int inputType) {
|
||||
return inputType == (TYPE_CLASS_TEXT | TYPE_TEXT_VARIATION_WEB_EDIT_TEXT);
|
||||
}
|
||||
|
||||
private static boolean isWebPasswordInputType(int inputType) {
|
||||
private static boolean isWebPasswordInputType(final int inputType) {
|
||||
return WEB_TEXT_PASSWORD_INPUT_TYPE != 0
|
||||
&& inputType == WEB_TEXT_PASSWORD_INPUT_TYPE;
|
||||
}
|
||||
|
||||
private static boolean isWebEmailAddressInputType(int inputType) {
|
||||
private static boolean isWebEmailAddressInputType(final int inputType) {
|
||||
return WEB_TEXT_EMAIL_ADDRESS_INPUT_TYPE != 0
|
||||
&& inputType == WEB_TEXT_EMAIL_ADDRESS_INPUT_TYPE;
|
||||
}
|
||||
|
||||
private static boolean isNumberPasswordInputType(int inputType) {
|
||||
private static boolean isNumberPasswordInputType(final int inputType) {
|
||||
return NUMBER_PASSWORD_INPUT_TYPE != 0
|
||||
&& inputType == NUMBER_PASSWORD_INPUT_TYPE;
|
||||
}
|
||||
|
||||
private static boolean isTextPasswordInputType(int inputType) {
|
||||
private static boolean isTextPasswordInputType(final int inputType) {
|
||||
return inputType == TEXT_PASSWORD_INPUT_TYPE;
|
||||
}
|
||||
|
||||
|
@ -61,12 +67,12 @@ public final class InputTypeUtils implements InputType {
|
|||
return variation == TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS;
|
||||
}
|
||||
|
||||
public static boolean isEmailVariation(int variation) {
|
||||
public static boolean isEmailVariation(final int variation) {
|
||||
return variation == TYPE_TEXT_VARIATION_EMAIL_ADDRESS
|
||||
|| isWebEmailAddressVariation(variation);
|
||||
}
|
||||
|
||||
public static boolean isWebInputType(int inputType) {
|
||||
public static boolean isWebInputType(final int inputType) {
|
||||
final int maskedInputType =
|
||||
inputType & (TYPE_MASK_CLASS | TYPE_MASK_VARIATION);
|
||||
return isWebEditTextInputType(maskedInputType) || isWebPasswordInputType(maskedInputType)
|
||||
|
@ -74,7 +80,7 @@ public final class InputTypeUtils implements InputType {
|
|||
}
|
||||
|
||||
// Please refer to TextView.isPasswordInputType
|
||||
public static boolean isPasswordInputType(int inputType) {
|
||||
public static boolean isPasswordInputType(final int inputType) {
|
||||
final int maskedInputType =
|
||||
inputType & (TYPE_MASK_CLASS | TYPE_MASK_VARIATION);
|
||||
return isTextPasswordInputType(maskedInputType) || isWebPasswordInputType(maskedInputType)
|
||||
|
@ -82,9 +88,18 @@ public final class InputTypeUtils implements InputType {
|
|||
}
|
||||
|
||||
// Please refer to TextView.isVisiblePasswordInputType
|
||||
public static boolean isVisiblePasswordInputType(int inputType) {
|
||||
public static boolean isVisiblePasswordInputType(final int inputType) {
|
||||
final int maskedInputType =
|
||||
inputType & (TYPE_MASK_CLASS | TYPE_MASK_VARIATION);
|
||||
return maskedInputType == TEXT_VISIBLE_PASSWORD_INPUT_TYPE;
|
||||
}
|
||||
|
||||
public static boolean isAutoSpaceFriendlyType(final int inputType) {
|
||||
if (TYPE_CLASS_TEXT != (TYPE_MASK_CLASS & inputType)) return false;
|
||||
final int variation = TYPE_MASK_VARIATION & inputType;
|
||||
for (final int fieldVariation : SUPPRESSING_AUTO_SPACES_FIELD_VARIATION) {
|
||||
if (variation == fieldVariation) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2257,7 +2257,9 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
|
|||
|
||||
// This essentially inserts a space, and that's it.
|
||||
public void promotePhantomSpace() {
|
||||
sendKeyCodePoint(Keyboard.CODE_SPACE);
|
||||
if (mCurrentSettings.shouldInsertSpacesAutomatically()) {
|
||||
sendKeyCodePoint(Keyboard.CODE_SPACE);
|
||||
}
|
||||
}
|
||||
|
||||
// Used by the RingCharBuffer
|
||||
|
|
|
@ -271,6 +271,10 @@ public final class SettingsValues {
|
|||
return mPhantomSpacePromotingSymbols.contains(String.valueOf((char)code));
|
||||
}
|
||||
|
||||
public boolean shouldInsertSpacesAutomatically() {
|
||||
return mInputAttributes.mShouldInsertSpacesAutomatically;
|
||||
}
|
||||
|
||||
private static boolean isAutoCorrectEnabled(final Resources res,
|
||||
final String currentAutoCorrectionSetting) {
|
||||
final String autoCorrectionOff = res.getString(
|
||||
|
|
Loading…
Reference in New Issue