diff --git a/src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxX11TextInputMethod.cs b/src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxX11TextInputMethod.cs
index 15dc131e4e..0b85965de7 100644
--- a/src/Avalonia.FreeDesktop/DBusIme/Fcitx/FcitxX11TextInputMethod.cs
+++ b/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;
diff --git a/src/Avalonia.Input/ApiCompatBaseline.txt b/src/Avalonia.Input/ApiCompatBaseline.txt
index 529e93fd82..68b4d4754f 100644
--- a/src/Avalonia.Input/ApiCompatBaseline.txt
+++ b/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
diff --git a/src/Avalonia.Input/TextInput/TextInputContentType.cs b/src/Avalonia.Input/TextInput/TextInputContentType.cs
index 5d73fc1552..02a9385354 100644
--- a/src/Avalonia.Input/TextInput/TextInputContentType.cs
+++ b/src/Avalonia.Input/TextInput/TextInputContentType.cs
@@ -1,12 +1,62 @@
namespace Avalonia.Input.TextInput
-{
+{
public enum TextInputContentType
{
+ ///
+ /// Default keyboard for the users configured input method.
+ ///
Normal = 0,
- Email = 1,
- Phone = 2,
- Number = 3,
- Url = 4,
- Password = 5
+
+ ///
+ /// Display a keyboard that only has alphabetic characters.
+ ///
+ Alpha,
+
+ ///
+ /// Display a numeric keypad only capable of numbers. i.e. Phone number
+ ///
+ Digits,
+
+ ///
+ /// Display a numeric keypad for inputting a PIN.
+ ///
+ Pin,
+
+ ///
+ /// Display a numeric keypad capable of inputting numbers including decimal seperator and sign.
+ ///
+ Number,
+
+ ///
+ /// Display a keyboard for entering an email address.
+ ///
+ Email,
+
+ ///
+ /// Display a keyboard for entering a URL.
+ ///
+ Url,
+
+ ///
+ /// Display a keyboard for entering a persons name.
+ ///
+ Name,
+
+ ///
+ /// Display a keyboard for entering sensitive data.
+ ///
+ Password,
+
+ ///
+ /// Display a keyboard suitable for #tag and @mentions.
+ /// Not available on all platforms, will fallback to a suitable keyboard
+ /// when not available.
+ ///
+ Social,
+
+ ///
+ /// Display a keyboard for entering a search keyword.
+ ///
+ Search
}
}
diff --git a/src/iOS/Avalonia.iOS/AvaloniaView.Text.cs b/src/iOS/Avalonia.iOS/AvaloniaView.Text.cs
index 85d984229f..4f4b917a78 100644
--- a/src/iOS/Avalonia.iOS/AvaloniaView.Text.cs
+++ b/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()