ソースを参照

Bug 2358 - [Android] Sort joystick axes - Fix by David Brady

Gabriel Jacobo 11 年 前
コミット
e78be5dafd
1 ファイル変更14 行追加2 行削除
  1. 14 2
      android-project/src/org/libsdl/app/SDLActivity.java

+ 14 - 2
android-project/src/org/libsdl/app/SDLActivity.java

@@ -2,6 +2,9 @@ package org.libsdl.app;
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
 
 import android.app.*;
 import android.content.*;
@@ -922,6 +925,13 @@ class SDLJoystickHandler_API12 extends SDLJoystickHandler {
         public String name;
         public ArrayList<InputDevice.MotionRange> axes;
     }
+    class RangeComparator implements Comparator<InputDevice.MotionRange>
+    {
+        @Override
+        public int compare(InputDevice.MotionRange arg0, InputDevice.MotionRange arg1) {
+            return arg0.getAxis() - arg1.getAxis();
+        }
+    }
     
     private ArrayList<SDLJoystick> mJoysticks;
     
@@ -948,8 +958,10 @@ class SDLJoystickHandler_API12 extends SDLJoystickHandler {
                     joystick.name = joystickDevice.getName();
                     joystick.axes = new ArrayList<InputDevice.MotionRange>();
                     
-                    for (InputDevice.MotionRange range : joystickDevice.getMotionRanges()) {
-                         if ( (range.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
+                    List<InputDevice.MotionRange> ranges = joystickDevice.getMotionRanges();
+                    Collections.sort(ranges, new RangeComparator());
+                    for (InputDevice.MotionRange range : ranges ) {
+                        if ( (range.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0 ) {
                             joystick.axes.add(range);
                          }
                     }