Support for decimal and signed numeric keyboard (flutter/engine#4853)

* Support for decimal and signed numeric keyboard

* Comments
This commit is contained in:
Stanislav Baranov
2018-03-26 13:14:38 -07:00
committed by GitHub
parent ee3f5ece99
commit 05943ceb68
2 changed files with 23 additions and 11 deletions

View File

@@ -77,13 +77,20 @@ public class TextInputPlugin implements MethodCallHandler {
}
}
private static int inputTypeFromTextInputType(String inputType,
boolean obscureText,
boolean autocorrect) {
private static int inputTypeFromTextInputType(
JSONObject type, boolean obscureText, boolean autocorrect) throws JSONException {
String inputType = type.getString("name");
if (inputType.equals("TextInputType.datetime"))
return InputType.TYPE_CLASS_DATETIME;
if (inputType.equals("TextInputType.number"))
return InputType.TYPE_CLASS_NUMBER;
if (inputType.equals("TextInputType.number")) {
int textType = InputType.TYPE_CLASS_NUMBER;
if (type.optBoolean("signed"))
textType |= InputType.TYPE_NUMBER_FLAG_SIGNED;
if (type.optBoolean("decimal"))
textType |= InputType.TYPE_NUMBER_FLAG_DECIMAL;
return textType;
}
if (inputType.equals("TextInputType.phone"))
return InputType.TYPE_CLASS_PHONE;
@@ -119,7 +126,7 @@ public class TextInputPlugin implements MethodCallHandler {
return null;
outAttrs.inputType = inputTypeFromTextInputType(
mConfiguration.getString("inputType"),
mConfiguration.getJSONObject("inputType"),
mConfiguration.optBoolean("obscureText"),
mConfiguration.optBoolean("autocorrect", true));
outAttrs.imeOptions = EditorInfo.IME_FLAG_NO_FULLSCREEN;

View File

@@ -9,13 +9,17 @@
static const char _kTextAffinityDownstream[] = "TextAffinity.downstream";
static const char _kTextAffinityUpstream[] = "TextAffinity.upstream";
static UIKeyboardType ToUIKeyboardType(NSString* inputType) {
static UIKeyboardType ToUIKeyboardType(NSDictionary* type) {
NSString* inputType = type[@"name"];
if ([inputType isEqualToString:@"TextInputType.text"])
return UIKeyboardTypeDefault;
if ([inputType isEqualToString:@"TextInputType.multiline"])
return UIKeyboardTypeDefault;
if ([inputType isEqualToString:@"TextInputType.number"])
if ([inputType isEqualToString:@"TextInputType.number"]) {
if ([type[@"signed"] boolValue])
return UIKeyboardTypeNumbersAndPunctuation;
return UIKeyboardTypeDecimalPad;
}
if ([inputType isEqualToString:@"TextInputType.phone"])
return UIKeyboardTypePhonePad;
if ([inputType isEqualToString:@"TextInputType.emailAddress"])
@@ -606,9 +610,10 @@ static UITextAutocapitalizationType ToUITextAutocapitalizationType(NSString* inp
}
- (void)setTextInputClient:(int)client withConfiguration:(NSDictionary*)configuration {
_view.keyboardType = ToUIKeyboardType(configuration[@"inputType"]);
_view.returnKeyType = ToUIReturnKeyType(configuration[@"inputType"]);
_view.autocapitalizationType = ToUITextAutocapitalizationType(configuration[@"inputType"]);
NSDictionary* inputType = configuration[@"inputType"];
_view.keyboardType = ToUIKeyboardType(inputType);
_view.returnKeyType = ToUIReturnKeyType(inputType[@"name"]);
_view.autocapitalizationType = ToUITextAutocapitalizationType(inputType[@"name"]);
_view.secureTextEntry = [configuration[@"obscureText"] boolValue];
NSString* autocorrect = configuration[@"autocorrect"];
_view.autocorrectionType = autocorrect && ![autocorrect boolValue]