mirror of
https://github.com/NativeScript/NativeScript.git
synced 2025-08-26 20:00:16 +08:00
fix(android): KeyboardType now respects numbers (#9240)
This commit is contained in:

committed by
GitHub

parent
c04e1b59e5
commit
f08fcb17b4
@ -1546,12 +1546,18 @@ export function makeValidator<T>(...values: T[]): (value: any) => value is T {
|
|||||||
return (value: any): value is T => set.has(value);
|
return (value: any): value is T => set.has(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function makeParser<T>(isValid: (value: any) => boolean): (value: any) => T {
|
export function makeParser<T>(isValid: (value: any) => boolean, allowNumbers = false): (value: any) => T {
|
||||||
return (value) => {
|
return (value) => {
|
||||||
const lower = value && value.toLowerCase();
|
const lower = value && value.toLowerCase();
|
||||||
if (isValid(lower)) {
|
if (isValid(lower)) {
|
||||||
return lower;
|
return lower;
|
||||||
} else {
|
} else {
|
||||||
|
if (allowNumbers) {
|
||||||
|
const convNumber = +value;
|
||||||
|
if (!isNaN(convNumber)) {
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
}
|
||||||
throw new Error('Invalid value: ' + value);
|
throw new Error('Invalid value: ' + value);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -48,12 +48,12 @@ export const placeholderColorProperty = new CssProperty<Style, Color>({
|
|||||||
});
|
});
|
||||||
placeholderColorProperty.register(Style);
|
placeholderColorProperty.register(Style);
|
||||||
|
|
||||||
const keyboardTypeConverter = makeParser<KeyboardType>(makeValidator<KeyboardType>('datetime', 'phone', 'number', 'url', 'email', 'integer'));
|
const keyboardTypeConverter = makeParser<KeyboardType>(makeValidator<KeyboardType>('datetime', 'phone', 'number', 'url', 'email', 'integer'), true);
|
||||||
|
|
||||||
export const keyboardTypeProperty = new Property<EditableTextBase, KeyboardType>({ name: 'keyboardType', valueConverter: keyboardTypeConverter });
|
export const keyboardTypeProperty = new Property<EditableTextBase, KeyboardType>({ name: 'keyboardType', valueConverter: keyboardTypeConverter });
|
||||||
keyboardTypeProperty.register(EditableTextBase);
|
keyboardTypeProperty.register(EditableTextBase);
|
||||||
|
|
||||||
const returnKeyTypeConverter = makeParser<ReturnKeyType>(makeValidator<ReturnKeyType>('done', 'next', 'go', 'search', 'send'));
|
const returnKeyTypeConverter = makeParser<ReturnKeyType>(makeValidator<ReturnKeyType>('done', 'next', 'go', 'search', 'send'), true);
|
||||||
|
|
||||||
export const returnKeyTypeProperty = new Property<EditableTextBase, ReturnKeyType>({ name: 'returnKeyType', valueConverter: returnKeyTypeConverter });
|
export const returnKeyTypeProperty = new Property<EditableTextBase, ReturnKeyType>({ name: 'returnKeyType', valueConverter: returnKeyTypeConverter });
|
||||||
returnKeyTypeProperty.register(EditableTextBase);
|
returnKeyTypeProperty.register(EditableTextBase);
|
||||||
@ -68,7 +68,7 @@ editableProperty.register(EditableTextBase);
|
|||||||
export const updateTextTriggerProperty = new Property<EditableTextBase, UpdateTextTrigger>({ name: 'updateTextTrigger', defaultValue: 'textChanged' });
|
export const updateTextTriggerProperty = new Property<EditableTextBase, UpdateTextTrigger>({ name: 'updateTextTrigger', defaultValue: 'textChanged' });
|
||||||
updateTextTriggerProperty.register(EditableTextBase);
|
updateTextTriggerProperty.register(EditableTextBase);
|
||||||
|
|
||||||
const autocapitalizationTypeConverter = makeParser<AutocapitalizationType>(makeValidator<AutocapitalizationType>('none', 'words', 'sentences', 'allcharacters'));
|
const autocapitalizationTypeConverter = makeParser<AutocapitalizationType>(makeValidator<AutocapitalizationType>('none', 'words', 'sentences', 'allcharacters'), true);
|
||||||
|
|
||||||
export const autocapitalizationTypeProperty = new Property<EditableTextBase, AutocapitalizationType>({
|
export const autocapitalizationTypeProperty = new Property<EditableTextBase, AutocapitalizationType>({
|
||||||
name: 'autocapitalizationType',
|
name: 'autocapitalizationType',
|
||||||
|
@ -216,7 +216,7 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
|
|||||||
const nativeView = this.nativeTextViewProtected;
|
const nativeView = this.nativeTextViewProtected;
|
||||||
try {
|
try {
|
||||||
this._changeFromCode = true;
|
this._changeFromCode = true;
|
||||||
nativeView.setInputType(inputType);
|
nativeView.setInputType(parseInt(<any>inputType, 10));
|
||||||
} finally {
|
} finally {
|
||||||
this._changeFromCode = false;
|
this._changeFromCode = false;
|
||||||
}
|
}
|
||||||
@ -281,7 +281,12 @@ export abstract class EditableTextBase extends EditableTextBaseCommon {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
newInputType = value;
|
const inputType = +value;
|
||||||
|
if (!isNaN(inputType)) {
|
||||||
|
newInputType = inputType;
|
||||||
|
} else {
|
||||||
|
newInputType = android.text.InputType.TYPE_CLASS_TEXT;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -27,6 +27,13 @@ export class TextField extends TextFieldBase {
|
|||||||
setSecureAndKeyboardType(): void {
|
setSecureAndKeyboardType(): void {
|
||||||
let inputType: number;
|
let inputType: number;
|
||||||
|
|
||||||
|
// Check for a passed in Number value
|
||||||
|
const value = +this.keyboardType;
|
||||||
|
if (!isNaN(value)) {
|
||||||
|
this._setInputType(value);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// Password variations are supported only for Text and Number classes.
|
// Password variations are supported only for Text and Number classes.
|
||||||
if (this.secure) {
|
if (this.secure) {
|
||||||
if (this.keyboardType === 'number') {
|
if (this.keyboardType === 'number') {
|
||||||
|
Reference in New Issue
Block a user