Commit 14ed0d24c8dcf66b961dcccfb551068a5e1dab4f

Sam Lantinga 2017-09-23T12:37:09

Fixed bug 3843 - Android missing some code in SDLHapticHandler Sylvain Some check for android SDK version are missing from https://hg.libsdl.org/SDL/rev/3d7a29a369a0 here's a patch

diff --git a/android-project/src/org/libsdl/app/SDLControllerManager.java b/android-project/src/org/libsdl/app/SDLControllerManager.java
index c050764..ef946ac 100644
--- a/android-project/src/org/libsdl/app/SDLControllerManager.java
+++ b/android-project/src/org/libsdl/app/SDLControllerManager.java
@@ -300,7 +300,7 @@ class SDLHapticHandler {
     public void pollHapticDevices() {
         
         final int deviceId_VIBRATOR_SERVICE = 999999;
-        boolean hasVibrator = false;
+        boolean hasVibratorService = false;
 
         int[] deviceIds = InputDevice.getDeviceIds();
         // It helps processing the device ids in reverse order
@@ -308,37 +308,45 @@ class SDLHapticHandler {
         // so the first controller seen by SDL matches what the receiver
         // considers to be the first controller
 
-        for(int i=deviceIds.length-1; i>-1; i--) {
-            SDLHaptic haptic = getHaptic(deviceIds[i]);
-            if (haptic == null) {
-                InputDevice device = InputDevice.getDevice(deviceIds[i]);
-                Vibrator vib = device.getVibrator();
-                if (vib.hasVibrator()) {
-                    haptic = new SDLHaptic();
-                    haptic.device_id = deviceIds[i];
-                    haptic.name = device.getName();
-                    haptic.vib = vib;
-                    mHaptics.add(haptic);
-                    SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name);
+        if (Build.VERSION.SDK_INT >= 16)
+        {
+            for (int i = deviceIds.length - 1; i > -1; i--) {
+                SDLHaptic haptic = getHaptic(deviceIds[i]);
+                if (haptic == null) {
+                    InputDevice device = InputDevice.getDevice(deviceIds[i]);
+                    Vibrator vib = device.getVibrator();
+                    if (vib.hasVibrator()) {
+                        haptic = new SDLHaptic();
+                        haptic.device_id = deviceIds[i];
+                        haptic.name = device.getName();
+                        haptic.vib = vib;
+                        mHaptics.add(haptic);
+                        SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name);
+                    }
                 }
             }
         }
 
         /* Check VIBRATOR_SERVICE */
-        {
-           Vibrator vib = (Vibrator) SDL.getContext().getSystemService(Context.VIBRATOR_SERVICE);
-           if (vib != null && vib.hasVibrator()) {
-              hasVibrator = true;
-              SDLHaptic haptic = getHaptic(deviceId_VIBRATOR_SERVICE);
-              if (haptic == null) {
-                 haptic = new SDLHaptic();
-                 haptic.device_id = deviceId_VIBRATOR_SERVICE;
-                 haptic.name = "VIBRATOR_SERVICE";
-                 haptic.vib = vib; 
-                 mHaptics.add(haptic);
-                 SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name);
-              }
-           }
+        Vibrator vib = (Vibrator) SDL.getContext().getSystemService(Context.VIBRATOR_SERVICE);
+        if (vib != null) {
+            if (Build.VERSION.SDK_INT >= 11) {
+                hasVibratorService = vib.hasVibrator();
+            } else {
+                hasVibratorService = true;
+            }
+
+            if (hasVibratorService) {
+                SDLHaptic haptic = getHaptic(deviceId_VIBRATOR_SERVICE);
+                if (haptic == null) {
+                    haptic = new SDLHaptic();
+                    haptic.device_id = deviceId_VIBRATOR_SERVICE;
+                    haptic.name = "VIBRATOR_SERVICE";
+                    haptic.vib = vib; 
+                    mHaptics.add(haptic);
+                    SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name);
+                }
+            }
         }
 
         /* Check removed devices */
@@ -350,8 +358,8 @@ class SDLHapticHandler {
                 if (device_id == deviceIds[j]) break;
             }
 
-            if (device_id == deviceId_VIBRATOR_SERVICE && hasVibrator) {
-               // don't remove the vibrator if it is still present
+            if (device_id == deviceId_VIBRATOR_SERVICE && hasVibratorService) {
+                // don't remove the vibrator if it is still present
             } else if (j == deviceIds.length) {
                 removedDevices.add(device_id);
             }