Browse Source

add full range of keyboard content types.

pull/7781/head
Dan Walmsley 4 years ago
parent
commit
31ee43dccb
  1. 2
      src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxX11TextInputMethod.cs
  2. 7
      src/Avalonia.Input/ApiCompatBaseline.txt
  3. 62
      src/Avalonia.Input/TextInput/TextInputContentType.cs
  4. 14
      src/iOS/Avalonia.iOS/AvaloniaView.Text.cs

2
src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxX11TextInputMethod.cs

@ -111,7 +111,7 @@ namespace Avalonia.FreeDesktop.DBusIme.Fcitx
flags |= FcitxCapabilityFlags.CAPACITY_NUMBER; flags |= FcitxCapabilityFlags.CAPACITY_NUMBER;
else if (options.ContentType == TextInputContentType.Password) else if (options.ContentType == TextInputContentType.Password)
flags |= FcitxCapabilityFlags.CAPACITY_PASSWORD; flags |= FcitxCapabilityFlags.CAPACITY_PASSWORD;
else if (options.ContentType == TextInputContentType.Phone) else if (options.ContentType == TextInputContentType.Digits)
flags |= FcitxCapabilityFlags.CAPACITY_DIALABLE; flags |= FcitxCapabilityFlags.CAPACITY_DIALABLE;
else if (options.ContentType == TextInputContentType.Url) else if (options.ContentType == TextInputContentType.Url)
flags |= FcitxCapabilityFlags.CAPACITY_URL; flags |= FcitxCapabilityFlags.CAPACITY_URL;

7
src/Avalonia.Input/ApiCompatBaseline.txt

@ -19,6 +19,11 @@ InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Input.T
InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetOptions(Avalonia.Input.TextInput.TextInputOptions)' is present in the implementation but not in the contract. InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetOptions(Avalonia.Input.TextInput.TextInputOptions)' is present in the implementation but not in the contract.
InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetOptions(Avalonia.Input.TextInput.TextInputOptionsQueryEventArgs)' is present in the contract but not in the implementation. InterfacesShouldHaveSameMembers : Interface member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetOptions(Avalonia.Input.TextInput.TextInputOptionsQueryEventArgs)' is present in the contract but not in the implementation.
MembersMustExist : Member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetOptions(Avalonia.Input.TextInput.TextInputOptionsQueryEventArgs)' does not exist in the implementation but it does exist in the contract. MembersMustExist : Member 'public void Avalonia.Input.TextInput.ITextInputMethodImpl.SetOptions(Avalonia.Input.TextInput.TextInputOptionsQueryEventArgs)' does not exist in the implementation but it does exist in the contract.
EnumValuesMustMatch : Enum value 'Avalonia.Input.TextInput.TextInputContentType Avalonia.Input.TextInput.TextInputContentType.Email' is (System.Int32)5 in the implementation but (System.Int32)1 in the contract.
EnumValuesMustMatch : Enum value 'Avalonia.Input.TextInput.TextInputContentType Avalonia.Input.TextInput.TextInputContentType.Number' is (System.Int32)4 in the implementation but (System.Int32)3 in the contract.
EnumValuesMustMatch : Enum value 'Avalonia.Input.TextInput.TextInputContentType Avalonia.Input.TextInput.TextInputContentType.Password' is (System.Int32)8 in the implementation but (System.Int32)5 in the contract.
MembersMustExist : Member 'public Avalonia.Input.TextInput.TextInputContentType Avalonia.Input.TextInput.TextInputContentType Avalonia.Input.TextInput.TextInputContentType.Phone' does not exist in the implementation but it does exist in the contract.
EnumValuesMustMatch : Enum value 'Avalonia.Input.TextInput.TextInputContentType Avalonia.Input.TextInput.TextInputContentType.Url' is (System.Int32)6 in the implementation but (System.Int32)4 in the contract.
TypesMustExist : Type 'Avalonia.Input.TextInput.TextInputOptionsQueryEventArgs' does not exist in the implementation but it does exist in the contract. TypesMustExist : Type 'Avalonia.Input.TextInput.TextInputOptionsQueryEventArgs' does not exist in the implementation but it does exist in the contract.
TypesMustExist : Type 'Avalonia.Platform.IStandardCursorFactory' does not exist in the implementation but it does exist in the contract. TypesMustExist : Type 'Avalonia.Platform.IStandardCursorFactory' does not exist in the implementation but it does exist in the contract.
Total Issues: 22 Total Issues: 27

62
src/Avalonia.Input/TextInput/TextInputContentType.cs

@ -1,12 +1,62 @@
namespace Avalonia.Input.TextInput namespace Avalonia.Input.TextInput
{ {
public enum TextInputContentType public enum TextInputContentType
{ {
/// <summary>
/// Default keyboard for the users configured input method.
/// </summary>
Normal = 0, Normal = 0,
Email = 1,
Phone = 2, /// <summary>
Number = 3, /// Display a keyboard that only has alphabetic characters.
Url = 4, /// </summary>
Password = 5 Alpha,
/// <summary>
/// Display a numeric keypad only capable of numbers. i.e. Phone number
/// </summary>
Digits,
/// <summary>
/// Display a numeric keypad for inputting a PIN.
/// </summary>
Pin,
/// <summary>
/// Display a numeric keypad capable of inputting numbers including decimal seperator and sign.
/// </summary>
Number,
/// <summary>
/// Display a keyboard for entering an email address.
/// </summary>
Email,
/// <summary>
/// Display a keyboard for entering a URL.
/// </summary>
Url,
/// <summary>
/// Display a keyboard for entering a persons name.
/// </summary>
Name,
/// <summary>
/// Display a keyboard for entering sensitive data.
/// </summary>
Password,
/// <summary>
/// Display a keyboard suitable for #tag and @mentions.
/// Not available on all platforms, will fallback to a suitable keyboard
/// when not available.
/// </summary>
Social,
/// <summary>
/// Display a keyboard for entering a search keyword.
/// </summary>
Search
} }
} }

14
src/iOS/Avalonia.iOS/AvaloniaView.Text.cs

@ -82,6 +82,8 @@ public partial class AvaloniaView : ITextInputMethodImpl
void ITextInputMethodImpl.SetOptions(TextInputOptions options) void ITextInputMethodImpl.SetOptions(TextInputOptions options)
{ {
IsSecureEntry = false;
switch (options.ContentType) switch (options.ContentType)
{ {
case TextInputContentType.Email: case TextInputContentType.Email:
@ -89,14 +91,19 @@ public partial class AvaloniaView : ITextInputMethodImpl
break; break;
case TextInputContentType.Number: case TextInputContentType.Number:
KeyboardType = UIKeyboardType.PhonePad;
break;
case TextInputContentType.Pin:
KeyboardType = UIKeyboardType.NumberPad; KeyboardType = UIKeyboardType.NumberPad;
IsSecureEntry = true;
break; break;
case TextInputContentType.Password: case TextInputContentType.Password:
IsSecureEntry = true; IsSecureEntry = true;
break; break;
case TextInputContentType.Phone: case TextInputContentType.Digits:
KeyboardType = UIKeyboardType.PhonePad; KeyboardType = UIKeyboardType.PhonePad;
break; break;
@ -108,6 +115,11 @@ public partial class AvaloniaView : ITextInputMethodImpl
KeyboardType = UIKeyboardType.Default; KeyboardType = UIKeyboardType.Default;
break; break;
} }
if (options.IsSensitive)
{
IsSecureEntry = true;
}
} }
void ITextInputMethodImpl.Reset() void ITextInputMethodImpl.Reset()

Loading…
Cancel
Save