Bug 1335895 - part 13: Update APZCTreeManager create AndroidDynamicToolbarAnimator r=kats,botond draft
authorRandall Barker <rbarker@mozilla.com>
Mon, 27 Mar 2017 10:37:08 -0700
changeset 558755 e6670101fe42b936130c40b78c53dd49b2cc9110
parent 558754 b48aa3ea477e6b9e0bb2a2052742d7d5ad1f77f3
child 558756 77b3fedf861f16046ba1c6a9437ad87c90716a86
push id52941
push userbmo:rbarker@mozilla.com
push dateFri, 07 Apr 2017 23:43:33 +0000
reviewerskats, botond
bugs1335895
milestone55.0a1
Bug 1335895 - part 13: Update APZCTreeManager create AndroidDynamicToolbarAnimator r=kats,botond The AndroidDynamicToolbarAnimator intercepts input events in APZCTreeManager::ReceiveInputEvent
gfx/layers/apz/src/APZCTreeManager.cpp
gfx/layers/apz/src/APZCTreeManager.h
--- a/gfx/layers/apz/src/APZCTreeManager.cpp
+++ b/gfx/layers/apz/src/APZCTreeManager.cpp
@@ -174,16 +174,19 @@ APZCTreeManager::APZCTreeManager()
       mApzcTreeLog("apzctree")
 {
   RefPtr<APZCTreeManager> self(this);
   NS_DispatchToMainThread(NS_NewRunnableFunction([self] {
     self->mFlushObserver = new CheckerboardFlushObserver(self);
   }));
   AsyncPanZoomController::InitializeGlobalState();
   mApzcTreeLog.ConditionOnPrefFunction(gfxPrefs::APZPrintTree);
+#if defined(MOZ_WIDGET_ANDROID)
+  mToolbarAnimator = AndroidDynamicToolbarAnimator::Create();
+#endif // (MOZ_WIDGET_ANDROID)
 }
 
 APZCTreeManager::~APZCTreeManager()
 {
 }
 
 /*static*/ void
 APZCTreeManager::InitializeGlobalState()
@@ -710,16 +713,25 @@ APZCTreeManager::FlushApzRepaints(uint64
 
 nsEventStatus
 APZCTreeManager::ReceiveInputEvent(InputData& aEvent,
                                    ScrollableLayerGuid* aOutTargetGuid,
                                    uint64_t* aOutInputBlockId)
 {
   APZThreadUtils::AssertOnControllerThread();
 
+#if defined(MOZ_WIDGET_ANDROID)
+  MOZ_ASSERT(mToolbarAnimator);
+  nsEventStatus isConsumed = mToolbarAnimator->ReceiveInputEvent(aEvent);
+  // Check if the mToolbarAnimator consumed the event.
+  if (isConsumed == nsEventStatus_eConsumeNoDefault) {
+    return isConsumed;
+  }
+#endif // (MOZ_WIDGET_ANDROID)
+
   // Initialize aOutInputBlockId to a sane value, and then later we overwrite
   // it if the input event goes into a block.
   if (aOutInputBlockId) {
     *aOutInputBlockId = InputBlockState::NO_BLOCK_ID;
   }
   nsEventStatus result = nsEventStatus_eIgnore;
   HitTestResult hitResult = HitNothing;
   switch (aEvent.mInputType) {
--- a/gfx/layers/apz/src/APZCTreeManager.h
+++ b/gfx/layers/apz/src/APZCTreeManager.h
@@ -14,16 +14,20 @@
 #include "mozilla/gfx/Matrix.h"         // for Matrix4x4
 #include "mozilla/layers/TouchCounter.h"// for TouchCounter
 #include "mozilla/layers/IAPZCTreeManager.h" // for IAPZCTreeManager
 #include "mozilla/Mutex.h"              // for Mutex
 #include "mozilla/RefPtr.h"             // for RefPtr
 #include "mozilla/TimeStamp.h"          // for mozilla::TimeStamp
 #include "nsCOMPtr.h"                   // for already_AddRefed
 
+#if defined(MOZ_WIDGET_ANDROID)
+#include "mozilla/layers/AndroidDynamicToolbarAnimator.h"
+#endif // defined(MOZ_WIDGET_ANDROID)
+
 
 namespace mozilla {
 class MultiTouchInput;
 
 namespace layers {
 
 class Layer;
 class AsyncPanZoomController;
@@ -520,14 +524,29 @@ private:
    * pref). */
   gfx::TreeLog mApzcTreeLog;
 
   class CheckerboardFlushObserver;
   friend class CheckerboardFlushObserver;
   RefPtr<CheckerboardFlushObserver> mFlushObserver;
 
   static float sDPI;
+
+#if defined(MOZ_WIDGET_ANDROID)
+  RefPtr<AndroidDynamicToolbarAnimator> mToolbarAnimator;
+
+public:
+  void InitializeDynamicToolbarAnimator(const int64_t& aRootLayerTreeId)
+  {
+    MOZ_ASSERT(mToolbarAnimator);
+    mToolbarAnimator->Initialize(aRootLayerTreeId);
+  }
+  AndroidDynamicToolbarAnimator* GetAndroidDynamicToolbarAnimator()
+  {
+    return mToolbarAnimator;
+  }
+#endif // defined(MOZ_WIDGET_ANDROID)
 };
 
 } // namespace layers
 } // namespace mozilla
 
 #endif // mozilla_layers_PanZoomController_h