Skip to content
Snippets Groups Projects
Commit ec60d600 authored by Jean Chalard's avatar Jean Chalard
Browse files

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: I19e25af839b4062c217113cd804b1473912f22a5
parent 66cee1f9
No related branches found
No related tags found
No related merge requests found
......@@ -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,8 +2257,10 @@ public final class LatinIME extends InputMethodService implements KeyboardAction
// This essentially inserts a space, and that's it.
public void promotePhantomSpace() {
if (mCurrentSettings.shouldInsertSpacesAutomatically()) {
sendKeyCodePoint(Keyboard.CODE_SPACE);
}
}
// Used by the RingCharBuffer
public boolean isWordSeparator(final int code) {
......
......@@ -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(
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment