[A]Fix potential crash when calling ClearFocus in SearchBarRenderer (#700)
authorJason Smith <jason.smith@xamarin.com>
Sat, 21 Jan 2017 12:52:26 +0000 (04:52 -0800)
committerKangho Hur <kangho.hur@samsung.com>
Fri, 24 Mar 2017 04:12:24 +0000 (13:12 +0900)
Xamarin.Forms.Platform.Android/Renderers/SearchBarRenderer.cs

index 468710c..48bcf57 100644 (file)
@@ -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<EditText>().FirstOrDefault();