From: Jason Smith Date: Sat, 21 Jan 2017 12:52:26 +0000 (-0800) Subject: [A]Fix potential crash when calling ClearFocus in SearchBarRenderer (#700) X-Git-Tag: accepted/tizen/common/20170324.122620~140 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=57d09a7da937379ef300bfed0d6864bd6ac2d469;p=platform%2Fupstream%2Fxamarin-forms.git [A]Fix potential crash when calling ClearFocus in SearchBarRenderer (#700) --- diff --git a/Xamarin.Forms.Platform.Android/Renderers/SearchBarRenderer.cs b/Xamarin.Forms.Platform.Android/Renderers/SearchBarRenderer.cs index 468710c..48bcf57 100644 --- a/Xamarin.Forms.Platform.Android/Renderers/SearchBarRenderer.cs +++ b/Xamarin.Forms.Platform.Android/Renderers/SearchBarRenderer.cs @@ -33,7 +33,7 @@ namespace Xamarin.Forms.Platform.Android bool SearchView.IOnQueryTextListener.OnQueryTextSubmit(string query) { ((ISearchBarController)Element).OnSearchButtonPressed(); - Control.ClearFocus(); + ClearFocus(Control); return true; } @@ -67,7 +67,7 @@ namespace Xamarin.Forms.Platform.Android _inputType = InputTypes.ClassText | InputTypes.TextFlagAutoComplete | InputTypes.TextFlagNoSuggestions; } - searchView.ClearFocus(); + ClearFocus(searchView); UpdatePlaceholder(); UpdateText(); UpdateEnabled(); @@ -113,7 +113,7 @@ namespace Xamarin.Forms.Platform.Android internal override void OnNativeFocusChanged(bool hasFocus) { if (hasFocus && !Element.IsEnabled) - Control.ClearFocus(); + ClearFocus(Control); } void UpdateAlignment() @@ -148,7 +148,7 @@ namespace Xamarin.Forms.Platform.Android SearchView control = Control; if (!model.IsEnabled) { - control.ClearFocus(); + ClearFocus(control); // removes cursor in SearchView control.SetInputType(InputTypes.Null); } @@ -156,6 +156,18 @@ namespace Xamarin.Forms.Platform.Android control.SetInputType(_inputType); } + void ClearFocus(SearchView view) + { + try + { + view.ClearFocus(); + } + catch (Java.Lang.UnsupportedOperationException) + { + // silently catch these as they happen in the previewer due to some bugs in upstread android + } + } + void UpdateFont() { _editText = _editText ?? Control.GetChildrenOfType().FirstOrDefault();