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;
else if (options.ContentType == TextInputContentType.Password)
flags |= FcitxCapabilityFlags.CAPACITY_PASSWORD;
else if (options.ContentType == TextInputContentType.Phone)
else if (options.ContentType == TextInputContentType.Digits)
flags |= FcitxCapabilityFlags.CAPACITY_DIALABLE;
else if (options.ContentType == TextInputContentType.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.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.
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.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
{
{
public enum TextInputContentType
{
/// <summary>
/// Default keyboard for the users configured input method.
/// </summary>
Normal = 0,
Email = 1,
Phone = 2,
Number = 3,
Url = 4,
Password = 5
/// <summary>
/// Display a keyboard that only has alphabetic characters.
/// </summary>
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)
{
IsSecureEntry = false;
switch (options.ContentType)
{
case TextInputContentType.Email:
@ -89,14 +91,19 @@ public partial class AvaloniaView : ITextInputMethodImpl
break;
case TextInputContentType.Number:
KeyboardType = UIKeyboardType.PhonePad;
break;
case TextInputContentType.Pin:
KeyboardType = UIKeyboardType.NumberPad;
IsSecureEntry = true;
break;
case TextInputContentType.Password:
IsSecureEntry = true;
break;
case TextInputContentType.Phone:
case TextInputContentType.Digits:
KeyboardType = UIKeyboardType.PhonePad;
break;
@ -108,6 +115,11 @@ public partial class AvaloniaView : ITextInputMethodImpl
KeyboardType = UIKeyboardType.Default;
break;
}
if (options.IsSensitive)
{
IsSecureEntry = true;
}
}
void ITextInputMethodImpl.Reset()

Loading…
Cancel
Save