diff options
author | Jason Smith <jason.smith@xamarin.com> | 2016-03-26 23:29:45 -0700 |
---|---|---|
committer | Rui Marinho <me@ruimarinho.net> | 2016-03-29 18:15:11 +0100 |
commit | 11dc5a5aca2842346759022fc405e89d1d0132b1 (patch) | |
tree | c587604fc9805b677e94c749788d011a36ce0a41 /Xamarin.Forms.Platform.Android | |
parent | 0e03738adefaa1accd733e817d7730f2c9b82534 (diff) | |
download | xamarin-forms-11dc5a5aca2842346759022fc405e89d1d0132b1.tar.gz xamarin-forms-11dc5a5aca2842346759022fc405e89d1d0132b1.tar.bz2 xamarin-forms-11dc5a5aca2842346759022fc405e89d1d0132b1.zip |
[A]Resolve issue where calling Focus in an unfocus event would fail
Fixes https://bugzilla.xamarin.com/show_bug.cgi?id=39702 without API change. This does cause android to always indicate a focus event was succesful now because we have no way of knowing ahead of time if it will succeed or fail. That said we always already indicated that unfocus was successful because android has no way of reporting such a failure.
Diffstat (limited to 'Xamarin.Forms.Platform.Android')
-rw-r--r-- | Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs | 2 | ||||
-rw-r--r-- | Xamarin.Forms.Platform.Android/PlatformRenderer.cs | 2 | ||||
-rw-r--r-- | Xamarin.Forms.Platform.Android/ViewRenderer.cs | 14 |
3 files changed, 15 insertions, 3 deletions
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs index 7edbffb2..dd1c033d 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/NavigationPageRenderer.cs @@ -625,6 +625,8 @@ namespace Xamarin.Forms.Platform.Android.AppCompat }); } + Context.HideKeyboard(this); + // 200ms is how long the animations are, and they are "reversible" in the sense that starting another one slightly before it's done is fine return tcs.Task; diff --git a/Xamarin.Forms.Platform.Android/PlatformRenderer.cs b/Xamarin.Forms.Platform.Android/PlatformRenderer.cs index 4fbc0293..f31b0702 100644 --- a/Xamarin.Forms.Platform.Android/PlatformRenderer.cs +++ b/Xamarin.Forms.Platform.Android/PlatformRenderer.cs @@ -61,7 +61,7 @@ namespace Xamarin.Forms.Platform.Android break; Context.HideKeyboard(currentView); - RequestFocus(); + ((Activity)Context).Window.DecorView.ClearFocus(); } while (false); return result; diff --git a/Xamarin.Forms.Platform.Android/ViewRenderer.cs b/Xamarin.Forms.Platform.Android/ViewRenderer.cs index f5c094ba..0415ce93 100644 --- a/Xamarin.Forms.Platform.Android/ViewRenderer.cs +++ b/Xamarin.Forms.Platform.Android/ViewRenderer.cs @@ -1,6 +1,7 @@ using System; using System.ComponentModel; using Android.App; +using Android.OS; using Android.Views; using AView = Android.Views.View; @@ -149,11 +150,20 @@ namespace Xamarin.Forms.Platform.Android if (Control == null) return; + e.Result = true; + if (e.Focus) - e.Result = Control.RequestFocus(); + { + // use post being BeginInvokeOnMainThread will not delay on android + Looper looper = Context.MainLooper; + var handler = new Handler(looper); + handler.Post(() => + { + Control?.RequestFocus(); + }); + } else { - e.Result = true; Control.ClearFocus(); } |