summaryrefslogtreecommitdiff
path: root/Xamarin.Forms.Platform.Android
diff options
context:
space:
mode:
authorE.Z. Hart <hartez@users.noreply.github.com>2017-03-29 02:52:45 -0600
committerRui Marinho <me@ruimarinho.net>2017-03-29 09:52:45 +0100
commite55efa2a8e1164d805bc76b0f3ce84999d2f1bb8 (patch)
tree62ef93abac6215010ca9fe719ee03fc414e88bfe /Xamarin.Forms.Platform.Android
parent90582e977734d40d2023537186ebcf79f826291e (diff)
downloadxamarin-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.cs23
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()