annotate android/src/org/libsdl/app/SDLControllerManager.java @ 1839:78abbabfd58d

Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
author Michael Pavone <pavone@retrodev.com>
date Sun, 14 Apr 2019 23:37:11 -0700
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1839
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
1 package org.libsdl.app;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
2
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
3 import java.util.ArrayList;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
4 import java.util.Collections;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
5 import java.util.Comparator;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
6 import java.util.List;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
7 import java.util.Objects;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
8
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
9 import android.content.Context;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
10 import android.os.*;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
11 import android.view.*;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
12 import android.util.Log;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
13
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
14
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
15 public class SDLControllerManager
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
16 {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
17
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
18 public static native int nativeSetupJNI();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
19
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
20 public static native int nativeAddJoystick(int device_id, String name, String desc,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
21 int is_accelerometer, int nbuttons,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
22 int naxes, int nhats, int nballs);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
23 public static native int nativeRemoveJoystick(int device_id);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
24 public static native int nativeAddHaptic(int device_id, String name);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
25 public static native int nativeRemoveHaptic(int device_id);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
26 public static native int onNativePadDown(int device_id, int keycode);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
27 public static native int onNativePadUp(int device_id, int keycode);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
28 public static native void onNativeJoy(int device_id, int axis,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
29 float value);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
30 public static native void onNativeHat(int device_id, int hat_id,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
31 int x, int y);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
32
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
33 protected static SDLJoystickHandler mJoystickHandler;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
34 protected static SDLHapticHandler mHapticHandler;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
35
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
36 private static final String TAG = "SDLControllerManager";
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
37
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
38 public static void initialize() {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
39 mJoystickHandler = null;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
40 mHapticHandler = null;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
41
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
42 SDLControllerManager.setup();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
43 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
44
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
45 public static void setup() {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
46 if (Build.VERSION.SDK_INT >= 16) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
47 mJoystickHandler = new SDLJoystickHandler_API16();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
48 } else if (Build.VERSION.SDK_INT >= 12) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
49 mJoystickHandler = new SDLJoystickHandler_API12();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
50 } else {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
51 mJoystickHandler = new SDLJoystickHandler();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
52 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
53 mHapticHandler = new SDLHapticHandler();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
54 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
55
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
56 // Joystick glue code, just a series of stubs that redirect to the SDLJoystickHandler instance
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
57 public static boolean handleJoystickMotionEvent(MotionEvent event) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
58 return mJoystickHandler.handleMotionEvent(event);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
59 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
60
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
61 /**
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
62 * This method is called by SDL using JNI.
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
63 */
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
64 public static void pollInputDevices() {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
65 mJoystickHandler.pollInputDevices();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
66 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
67
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
68 /**
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
69 * This method is called by SDL using JNI.
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
70 */
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
71 public static void pollHapticDevices() {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
72 mHapticHandler.pollHapticDevices();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
73 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
74
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
75 /**
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
76 * This method is called by SDL using JNI.
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
77 */
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
78 public static void hapticRun(int device_id, int length) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
79 mHapticHandler.run(device_id, length);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
80 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
81
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
82 // Check if a given device is considered a possible SDL joystick
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
83 public static boolean isDeviceSDLJoystick(int deviceId) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
84 InputDevice device = InputDevice.getDevice(deviceId);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
85 // We cannot use InputDevice.isVirtual before API 16, so let's accept
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
86 // only nonnegative device ids (VIRTUAL_KEYBOARD equals -1)
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
87 if ((device == null) || (deviceId < 0)) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
88 return false;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
89 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
90 int sources = device.getSources();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
91
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
92 if ((sources & InputDevice.SOURCE_CLASS_JOYSTICK) == InputDevice.SOURCE_CLASS_JOYSTICK) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
93 Log.v(TAG, "Input device " + device.getName() + " is a joystick.");
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
94 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
95 if ((sources & InputDevice.SOURCE_DPAD) == InputDevice.SOURCE_DPAD) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
96 Log.v(TAG, "Input device " + device.getName() + " is a dpad.");
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
97 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
98 if ((sources & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
99 Log.v(TAG, "Input device " + device.getName() + " is a gamepad.");
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
100 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
101
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
102 return (((sources & InputDevice.SOURCE_CLASS_JOYSTICK) == InputDevice.SOURCE_CLASS_JOYSTICK) ||
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
103 ((sources & InputDevice.SOURCE_DPAD) == InputDevice.SOURCE_DPAD) ||
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
104 ((sources & InputDevice.SOURCE_GAMEPAD) == InputDevice.SOURCE_GAMEPAD)
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
105 );
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
106 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
107
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
108 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
109
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
110 /* A null joystick handler for API level < 12 devices (the accelerometer is handled separately) */
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
111 class SDLJoystickHandler {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
112
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
113 /**
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
114 * Handles given MotionEvent.
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
115 * @param event the event to be handled.
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
116 * @return if given event was processed.
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
117 */
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
118 public boolean handleMotionEvent(MotionEvent event) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
119 return false;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
120 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
121
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
122 /**
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
123 * Handles adding and removing of input devices.
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
124 */
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
125 public void pollInputDevices() {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
126 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
127 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
128
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
129 /* Actual joystick functionality available for API >= 12 devices */
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
130 class SDLJoystickHandler_API12 extends SDLJoystickHandler {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
131
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
132 static class SDLJoystick {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
133 public int device_id;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
134 public String name;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
135 public String desc;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
136 public ArrayList<InputDevice.MotionRange> axes;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
137 public ArrayList<InputDevice.MotionRange> hats;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
138 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
139 static class RangeComparator implements Comparator<InputDevice.MotionRange> {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
140 @Override
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
141 public int compare(InputDevice.MotionRange arg0, InputDevice.MotionRange arg1) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
142 return arg0.getAxis() - arg1.getAxis();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
143 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
144 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
145
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
146 private ArrayList<SDLJoystick> mJoysticks;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
147
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
148 public SDLJoystickHandler_API12() {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
149
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
150 mJoysticks = new ArrayList<SDLJoystick>();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
151 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
152
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
153 @Override
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
154 public void pollInputDevices() {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
155 int[] deviceIds = InputDevice.getDeviceIds();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
156 // It helps processing the device ids in reverse order
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
157 // For example, in the case of the XBox 360 wireless dongle,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
158 // so the first controller seen by SDL matches what the receiver
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
159 // considers to be the first controller
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
160
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
161 for(int i=deviceIds.length-1; i>-1; i--) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
162 SDLJoystick joystick = getJoystick(deviceIds[i]);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
163 if (joystick == null) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
164 joystick = new SDLJoystick();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
165 InputDevice joystickDevice = InputDevice.getDevice(deviceIds[i]);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
166 if (SDLControllerManager.isDeviceSDLJoystick(deviceIds[i])) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
167 joystick.device_id = deviceIds[i];
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
168 joystick.name = joystickDevice.getName();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
169 joystick.desc = getJoystickDescriptor(joystickDevice);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
170 joystick.axes = new ArrayList<InputDevice.MotionRange>();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
171 joystick.hats = new ArrayList<InputDevice.MotionRange>();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
172
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
173 List<InputDevice.MotionRange> ranges = joystickDevice.getMotionRanges();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
174 Collections.sort(ranges, new RangeComparator());
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
175 for (InputDevice.MotionRange range : ranges ) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
176 if ((range.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
177 if (range.getAxis() == MotionEvent.AXIS_HAT_X ||
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
178 range.getAxis() == MotionEvent.AXIS_HAT_Y) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
179 joystick.hats.add(range);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
180 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
181 else {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
182 joystick.axes.add(range);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
183 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
184 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
185 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
186
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
187 mJoysticks.add(joystick);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
188 SDLControllerManager.nativeAddJoystick(joystick.device_id, joystick.name, joystick.desc, 0, -1,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
189 joystick.axes.size(), joystick.hats.size()/2, 0);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
190 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
191 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
192 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
193
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
194 /* Check removed devices */
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
195 ArrayList<Integer> removedDevices = new ArrayList<Integer>();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
196 for(int i=0; i < mJoysticks.size(); i++) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
197 int device_id = mJoysticks.get(i).device_id;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
198 int j;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
199 for (j=0; j < deviceIds.length; j++) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
200 if (device_id == deviceIds[j]) break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
201 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
202 if (j == deviceIds.length) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
203 removedDevices.add(Integer.valueOf(device_id));
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
204 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
205 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
206
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
207 for(int i=0; i < removedDevices.size(); i++) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
208 int device_id = removedDevices.get(i).intValue();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
209 SDLControllerManager.nativeRemoveJoystick(device_id);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
210 for (int j=0; j < mJoysticks.size(); j++) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
211 if (mJoysticks.get(j).device_id == device_id) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
212 mJoysticks.remove(j);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
213 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
214 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
215 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
216 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
217 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
218
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
219 protected SDLJoystick getJoystick(int device_id) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
220 for(int i=0; i < mJoysticks.size(); i++) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
221 if (mJoysticks.get(i).device_id == device_id) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
222 return mJoysticks.get(i);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
223 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
224 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
225 return null;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
226 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
227
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
228 @Override
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
229 public boolean handleMotionEvent(MotionEvent event) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
230 if ((event.getSource() & InputDevice.SOURCE_JOYSTICK) != 0) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
231 int actionPointerIndex = event.getActionIndex();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
232 int action = event.getActionMasked();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
233 switch(action) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
234 case MotionEvent.ACTION_MOVE:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
235 SDLJoystick joystick = getJoystick(event.getDeviceId());
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
236 if ( joystick != null ) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
237 for (int i = 0; i < joystick.axes.size(); i++) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
238 InputDevice.MotionRange range = joystick.axes.get(i);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
239 /* Normalize the value to -1...1 */
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
240 float value = ( event.getAxisValue( range.getAxis(), actionPointerIndex) - range.getMin() ) / range.getRange() * 2.0f - 1.0f;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
241 SDLControllerManager.onNativeJoy(joystick.device_id, i, value );
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
242 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
243 for (int i = 0; i < joystick.hats.size(); i+=2) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
244 int hatX = Math.round(event.getAxisValue( joystick.hats.get(i).getAxis(), actionPointerIndex ) );
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
245 int hatY = Math.round(event.getAxisValue( joystick.hats.get(i+1).getAxis(), actionPointerIndex ) );
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
246 SDLControllerManager.onNativeHat(joystick.device_id, i/2, hatX, hatY );
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
247 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
248 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
249 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
250 default:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
251 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
252 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
253 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
254 return true;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
255 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
256
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
257 public String getJoystickDescriptor(InputDevice joystickDevice) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
258 return joystickDevice.getName();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
259 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
260 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
261
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
262
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
263 class SDLJoystickHandler_API16 extends SDLJoystickHandler_API12 {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
264
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
265 @Override
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
266 public String getJoystickDescriptor(InputDevice joystickDevice) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
267 String desc = joystickDevice.getDescriptor();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
268
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
269 if (desc != null && !Objects.equals(desc, "")) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
270 return desc;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
271 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
272
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
273 return super.getJoystickDescriptor(joystickDevice);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
274 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
275 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
276
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
277 class SDLHapticHandler {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
278
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
279 class SDLHaptic {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
280 public int device_id;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
281 public String name;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
282 public Vibrator vib;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
283 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
284
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
285 private ArrayList<SDLHaptic> mHaptics;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
286
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
287 public SDLHapticHandler() {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
288 mHaptics = new ArrayList<SDLHaptic>();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
289 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
290
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
291 public void run(int device_id, int length) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
292 SDLHaptic haptic = getHaptic(device_id);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
293 if (haptic != null) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
294 haptic.vib.vibrate (length);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
295 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
296 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
297
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
298 public void pollHapticDevices() {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
299
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
300 final int deviceId_VIBRATOR_SERVICE = 999999;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
301 boolean hasVibratorService = false;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
302
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
303 int[] deviceIds = InputDevice.getDeviceIds();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
304 // It helps processing the device ids in reverse order
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
305 // For example, in the case of the XBox 360 wireless dongle,
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
306 // so the first controller seen by SDL matches what the receiver
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
307 // considers to be the first controller
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
308
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
309 if (Build.VERSION.SDK_INT >= 16)
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
310 {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
311 for (int i = deviceIds.length - 1; i > -1; i--) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
312 SDLHaptic haptic = getHaptic(deviceIds[i]);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
313 if (haptic == null) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
314 InputDevice device = InputDevice.getDevice(deviceIds[i]);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
315 Vibrator vib = device.getVibrator();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
316 if (vib.hasVibrator()) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
317 haptic = new SDLHaptic();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
318 haptic.device_id = deviceIds[i];
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
319 haptic.name = device.getName();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
320 haptic.vib = vib;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
321 mHaptics.add(haptic);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
322 SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
323 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
324 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
325 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
326 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
327
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
328 /* Check VIBRATOR_SERVICE */
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
329 Vibrator vib = (Vibrator) SDL.getContext().getSystemService(Context.VIBRATOR_SERVICE);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
330 if (vib != null) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
331 if (Build.VERSION.SDK_INT >= 11) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
332 hasVibratorService = vib.hasVibrator();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
333 } else {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
334 hasVibratorService = true;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
335 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
336
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
337 if (hasVibratorService) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
338 SDLHaptic haptic = getHaptic(deviceId_VIBRATOR_SERVICE);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
339 if (haptic == null) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
340 haptic = new SDLHaptic();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
341 haptic.device_id = deviceId_VIBRATOR_SERVICE;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
342 haptic.name = "VIBRATOR_SERVICE";
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
343 haptic.vib = vib;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
344 mHaptics.add(haptic);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
345 SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
346 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
347 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
348 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
349
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
350 /* Check removed devices */
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
351 ArrayList<Integer> removedDevices = new ArrayList<Integer>();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
352 for(int i=0; i < mHaptics.size(); i++) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
353 int device_id = mHaptics.get(i).device_id;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
354 int j;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
355 for (j=0; j < deviceIds.length; j++) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
356 if (device_id == deviceIds[j]) break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
357 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
358
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
359 if (device_id == deviceId_VIBRATOR_SERVICE && hasVibratorService) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
360 // don't remove the vibrator if it is still present
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
361 } else if (j == deviceIds.length) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
362 removedDevices.add(device_id);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
363 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
364 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
365
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
366 for(int i=0; i < removedDevices.size(); i++) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
367 int device_id = removedDevices.get(i);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
368 SDLControllerManager.nativeRemoveHaptic(device_id);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
369 for (int j=0; j < mHaptics.size(); j++) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
370 if (mHaptics.get(j).device_id == device_id) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
371 mHaptics.remove(j);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
372 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
373 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
374 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
375 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
376 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
377
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
378 protected SDLHaptic getHaptic(int device_id) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
379 for(int i=0; i < mHaptics.size(); i++) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
380 if (mHaptics.get(i).device_id == device_id) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
381 return mHaptics.get(i);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
382 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
383 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
384 return null;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
385 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
386 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
387
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
388 class SDLGenericMotionListener_API12 implements View.OnGenericMotionListener {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
389 // Generic Motion (mouse hover, joystick...) events go here
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
390 @Override
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
391 public boolean onGenericMotion(View v, MotionEvent event) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
392 float x, y;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
393 int action;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
394
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
395 switch ( event.getSource() ) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
396 case InputDevice.SOURCE_JOYSTICK:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
397 case InputDevice.SOURCE_GAMEPAD:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
398 case InputDevice.SOURCE_DPAD:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
399 return SDLControllerManager.handleJoystickMotionEvent(event);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
400
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
401 case InputDevice.SOURCE_MOUSE:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
402 if (!SDLActivity.mSeparateMouseAndTouch) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
403 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
404 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
405 action = event.getActionMasked();
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
406 switch (action) {
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
407 case MotionEvent.ACTION_SCROLL:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
408 x = event.getAxisValue(MotionEvent.AXIS_HSCROLL, 0);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
409 y = event.getAxisValue(MotionEvent.AXIS_VSCROLL, 0);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
410 SDLActivity.onNativeMouse(0, action, x, y);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
411 return true;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
412
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
413 case MotionEvent.ACTION_HOVER_MOVE:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
414 x = event.getX(0);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
415 y = event.getY(0);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
416
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
417 SDLActivity.onNativeMouse(0, action, x, y);
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
418 return true;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
419
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
420 default:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
421 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
422 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
423 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
424
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
425 default:
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
426 break;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
427 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
428
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
429 // Event was not managed
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
430 return false;
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
431 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
432 }
78abbabfd58d Get Android build working again and update for SDL 2.0.7 (last version to support older versions of Android)
Michael Pavone <pavone@retrodev.com>
parents:
diff changeset
433