diff options
author | E.Z. Hart <hartez@users.noreply.github.com> | 2017-03-29 02:52:45 -0600 |
---|---|---|
committer | Rui Marinho <me@ruimarinho.net> | 2017-03-29 09:52:45 +0100 |
commit | e55efa2a8e1164d805bc76b0f3ce84999d2f1bb8 (patch) | |
tree | 62ef93abac6215010ca9fe719ee03fc414e88bfe /Xamarin.Forms.Platform.Android | |
parent | 90582e977734d40d2023537186ebcf79f826291e (diff) | |
download | xamarin-forms-e55efa2a8e1164d805bc76b0f3ce84999d2f1bb8.tar.gz xamarin-forms-e55efa2a8e1164d805bc76b0f3ce84999d2f1bb8.tar.bz2 xamarin-forms-e55efa2a8e1164d805bc76b0f3ce84999d2f1bb8.zip |
Align iOS, Android, Windows handling of tap gesture event bubbling (#842)
* Add test for gesture bubbling behavior on all controls;
Make Windows behavior consistent with other platforms;
* Fix the stepper test
* Make Frame on Android handle tap event bubbling like the other platforms
* Formatting changes and query syntax instead of SelectMany
Diffstat (limited to 'Xamarin.Forms.Platform.Android')
-rw-r--r-- | Xamarin.Forms.Platform.Android/AppCompat/FrameRenderer.cs | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/Xamarin.Forms.Platform.Android/AppCompat/FrameRenderer.cs b/Xamarin.Forms.Platform.Android/AppCompat/FrameRenderer.cs index d0ed345d..16ee0473 100644 --- a/Xamarin.Forms.Platform.Android/AppCompat/FrameRenderer.cs +++ b/Xamarin.Forms.Platform.Android/AppCompat/FrameRenderer.cs @@ -18,6 +18,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat readonly PinchGestureHandler _pinchGestureHandler; readonly Lazy<ScaleGestureDetector> _scaleDetector; readonly TapGestureHandler _tapGestureHandler; + readonly MotionEventHelper _motionEventHelper = new MotionEventHelper(); float _defaultElevation = -1f; float _defaultCornerRadius = -1f; @@ -32,6 +33,7 @@ namespace Xamarin.Forms.Platform.Android.AppCompat NotifyCollectionChangedEventHandler _collectionChangeHandler; bool _inputTransparent; + bool _isEnabled; public FrameRenderer() : base(Forms.Context) { @@ -78,6 +80,11 @@ namespace Xamarin.Forms.Platform.Android.AppCompat return false; } + if (Element.GestureRecognizers.Count == 0) + { + return _motionEventHelper.HandleMotionEvent(Parent); + } + return base.OnTouchEvent(e); } @@ -88,6 +95,12 @@ namespace Xamarin.Forms.Platform.Android.AppCompat bool IOnTouchListener.OnTouch(AView v, MotionEvent e) { + if (!_isEnabled) + return true; + + if (_inputTransparent) + return false; + var handled = false; if (_pinchGestureHandler.IsPinchSupported) { @@ -217,8 +230,11 @@ namespace Xamarin.Forms.Platform.Android.AppCompat UpdateBackgroundColor(); UpdateCornerRadius(); UpdateInputTransparent(); + UpdateIsEnabled(); SubscribeGestureRecognizers(e.NewElement); } + + _motionEventHelper.UpdateElement(e.NewElement); } protected override void OnLayout(bool changed, int left, int top, int right, int bottom) @@ -252,6 +268,13 @@ namespace Xamarin.Forms.Platform.Android.AppCompat UpdateCornerRadius(); else if (e.PropertyName == VisualElement.InputTransparentProperty.PropertyName) UpdateInputTransparent(); + else if (e.PropertyName == VisualElement.IsEnabledProperty.PropertyName) + UpdateIsEnabled(); + } + + void UpdateIsEnabled() + { + _isEnabled = Element.IsEnabled; } void UpdateInputTransparent() |