Bug 1364267 - Prevent Android gamepad from dropping axis values r=ted draft
authorRandall Barker <rbarker@mozilla.com>
Fri, 12 May 2017 10:51:23 -0700
changeset 577029 6d0a819fd87d8068f90d9f0ecc8edab4212030f6
parent 577028 b2f679065b7091a9872ff01cb29ccf96bb66e2c7
child 628399 9f9016c155661b018320693c64374901503a5197
push id58577
push userbmo:rbarker@mozilla.com
push dateFri, 12 May 2017 17:51:56 +0000
reviewersted
bugs1364267
milestone55.0a1
Bug 1364267 - Prevent Android gamepad from dropping axis values r=ted MozReview-Commit-ID: 3G5xwPKD4mq
dom/gamepad/android/AndroidGamepad.cpp
mobile/android/geckoview/src/main/java/org/mozilla/gecko/AndroidGamepadManager.java
widget/android/GeneratedJNIWrappers.h
--- a/dom/gamepad/android/AndroidGamepad.cpp
+++ b/dom/gamepad/android/AndroidGamepad.cpp
@@ -60,17 +60,19 @@ public:
       return;
     }
 
     const auto& valid = aValid->GetElements();
     const auto& values = aValues->GetElements();
     MOZ_ASSERT(valid.Length() == values.Length());
 
     for (size_t i = 0; i < values.Length(); i++) {
-      service->NewAxisMoveEvent(aID, i, values[i]);
+      if (valid[i]) {
+        service->NewAxisMoveEvent(aID, i, values[i]);
+      }
     }
   }
 };
 
 void StartGamepadMonitoring()
 {
   AndroidGamepadManager::Init();
   java::AndroidGamepadManager::Start();
--- a/mobile/android/geckoview/src/main/java/org/mozilla/gecko/AndroidGamepadManager.java
+++ b/mobile/android/geckoview/src/main/java/org/mozilla/gecko/AndroidGamepadManager.java
@@ -124,21 +124,21 @@ public class AndroidGamepadManager {
                                             MotionEvent.AXIS_GAS};
                 } else {
                     triggerAxes = null;
                 }
             }
         }
     }
 
-    @WrapForJNI(calledFrom = "ui", dispatchTo = "gecko_priority")
+    @WrapForJNI(calledFrom = "ui")
     private static native void onGamepadChange(int id, boolean added);
-    @WrapForJNI(calledFrom = "ui", dispatchTo = "gecko_priority")
+    @WrapForJNI(calledFrom = "ui")
     private static native void onButtonChange(int id, int button, boolean pressed, float value);
-    @WrapForJNI(calledFrom = "ui", dispatchTo = "gecko_priority")
+    @WrapForJNI(calledFrom = "ui")
     private static native void onAxisChange(int id, boolean[] valid, float[] values);
 
     private static boolean sStarted;
     private static final SparseArray<Gamepad> sGamepads = new SparseArray<>();
     private static final SparseArray<List<KeyEvent>> sPendingGamepads = new SparseArray<>();
     private static InputManager.InputDeviceListener sListener;
     private static Timer sPollTimer;
 
@@ -179,17 +179,17 @@ public class AndroidGamepadManager {
         if (sStarted) {
             removeDeviceListener();
             sPendingGamepads.clear();
             sGamepads.clear();
             sStarted = false;
         }
     }
 
-    @WrapForJNI(calledFrom = "gecko")
+    @WrapForJNI
     private static void onGamepadAdded(final int device_id, final int service_id) {
         ThreadUtils.postToUiThread(new Runnable() {
             @Override
             public void run() {
                 handleGamepadAdded(device_id, service_id);
             }
         });
     }
--- a/widget/android/GeneratedJNIWrappers.h
+++ b/widget/android/GeneratedJNIWrappers.h
@@ -31,17 +31,17 @@ public:
         static constexpr char signature[] =
                 "(I[Z[F)V";
         static const bool isStatic = true;
         static const mozilla::jni::ExceptionMode exceptionMode =
                 mozilla::jni::ExceptionMode::ABORT;
         static const mozilla::jni::CallingThread callingThread =
                 mozilla::jni::CallingThread::UI;
         static const mozilla::jni::DispatchTarget dispatchTarget =
-                mozilla::jni::DispatchTarget::GECKO_PRIORITY;
+                mozilla::jni::DispatchTarget::CURRENT;
     };
 
     struct OnButtonChange_t {
         typedef AndroidGamepadManager Owner;
         typedef void ReturnType;
         typedef void SetterType;
         typedef mozilla::jni::Args<
                 int32_t,
@@ -52,34 +52,34 @@ public:
         static constexpr char signature[] =
                 "(IIZF)V";
         static const bool isStatic = true;
         static const mozilla::jni::ExceptionMode exceptionMode =
                 mozilla::jni::ExceptionMode::ABORT;
         static const mozilla::jni::CallingThread callingThread =
                 mozilla::jni::CallingThread::UI;
         static const mozilla::jni::DispatchTarget dispatchTarget =
-                mozilla::jni::DispatchTarget::GECKO_PRIORITY;
+                mozilla::jni::DispatchTarget::CURRENT;
     };
 
     struct OnGamepadAdded_t {
         typedef AndroidGamepadManager Owner;
         typedef void ReturnType;
         typedef void SetterType;
         typedef mozilla::jni::Args<
                 int32_t,
                 int32_t> Args;
         static constexpr char name[] = "onGamepadAdded";
         static constexpr char signature[] =
                 "(II)V";
         static const bool isStatic = true;
         static const mozilla::jni::ExceptionMode exceptionMode =
                 mozilla::jni::ExceptionMode::ABORT;
         static const mozilla::jni::CallingThread callingThread =
-                mozilla::jni::CallingThread::GECKO;
+                mozilla::jni::CallingThread::ANY;
         static const mozilla::jni::DispatchTarget dispatchTarget =
                 mozilla::jni::DispatchTarget::CURRENT;
     };
 
     static auto OnGamepadAdded(int32_t, int32_t) -> void;
 
     struct OnGamepadChange_t {
         typedef AndroidGamepadManager Owner;
@@ -92,17 +92,17 @@ public:
         static constexpr char signature[] =
                 "(IZ)V";
         static const bool isStatic = true;
         static const mozilla::jni::ExceptionMode exceptionMode =
                 mozilla::jni::ExceptionMode::ABORT;
         static const mozilla::jni::CallingThread callingThread =
                 mozilla::jni::CallingThread::UI;
         static const mozilla::jni::DispatchTarget dispatchTarget =
-                mozilla::jni::DispatchTarget::GECKO_PRIORITY;
+                mozilla::jni::DispatchTarget::CURRENT;
     };
 
     struct Start_t {
         typedef AndroidGamepadManager Owner;
         typedef void ReturnType;
         typedef void SetterType;
         typedef mozilla::jni::Args<> Args;
         static constexpr char name[] = "start";