|
@@ -300,45 +300,53 @@ public void run(int device_id, int length) { |
|
|
public void pollHapticDevices() { |
|
|
|
|
|
final int deviceId_VIBRATOR_SERVICE = 999999; |
|
|
boolean hasVibrator = false; |
|
|
boolean hasVibratorService = false; |
|
|
|
|
|
int[] deviceIds = InputDevice.getDeviceIds(); |
|
|
// It helps processing the device ids in reverse order |
|
|
// For example, in the case of the XBox 360 wireless dongle, |
|
|
// so the first controller seen by SDL matches what the receiver |
|
|
// considers to be the first controller |
|
|
|
|
|
for(int i=deviceIds.length-1; i>-1; i--) { |
|
|
SDLHaptic haptic = getHaptic(deviceIds[i]); |
|
|
if (haptic == null) { |
|
|
InputDevice device = InputDevice.getDevice(deviceIds[i]); |
|
|
Vibrator vib = device.getVibrator(); |
|
|
if (vib.hasVibrator()) { |
|
|
haptic = new SDLHaptic(); |
|
|
haptic.device_id = deviceIds[i]; |
|
|
haptic.name = device.getName(); |
|
|
haptic.vib = vib; |
|
|
mHaptics.add(haptic); |
|
|
SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name); |
|
|
if (Build.VERSION.SDK_INT >= 16) |
|
|
{ |
|
|
for (int i = deviceIds.length - 1; i > -1; i--) { |
|
|
SDLHaptic haptic = getHaptic(deviceIds[i]); |
|
|
if (haptic == null) { |
|
|
InputDevice device = InputDevice.getDevice(deviceIds[i]); |
|
|
Vibrator vib = device.getVibrator(); |
|
|
if (vib.hasVibrator()) { |
|
|
haptic = new SDLHaptic(); |
|
|
haptic.device_id = deviceIds[i]; |
|
|
haptic.name = device.getName(); |
|
|
haptic.vib = vib; |
|
|
mHaptics.add(haptic); |
|
|
SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
/* Check VIBRATOR_SERVICE */ |
|
|
{ |
|
|
Vibrator vib = (Vibrator) SDL.getContext().getSystemService(Context.VIBRATOR_SERVICE); |
|
|
if (vib != null && vib.hasVibrator()) { |
|
|
hasVibrator = true; |
|
|
SDLHaptic haptic = getHaptic(deviceId_VIBRATOR_SERVICE); |
|
|
if (haptic == null) { |
|
|
haptic = new SDLHaptic(); |
|
|
haptic.device_id = deviceId_VIBRATOR_SERVICE; |
|
|
haptic.name = "VIBRATOR_SERVICE"; |
|
|
haptic.vib = vib; |
|
|
mHaptics.add(haptic); |
|
|
SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name); |
|
|
} |
|
|
} |
|
|
Vibrator vib = (Vibrator) SDL.getContext().getSystemService(Context.VIBRATOR_SERVICE); |
|
|
if (vib != null) { |
|
|
if (Build.VERSION.SDK_INT >= 11) { |
|
|
hasVibratorService = vib.hasVibrator(); |
|
|
} else { |
|
|
hasVibratorService = true; |
|
|
} |
|
|
|
|
|
if (hasVibratorService) { |
|
|
SDLHaptic haptic = getHaptic(deviceId_VIBRATOR_SERVICE); |
|
|
if (haptic == null) { |
|
|
haptic = new SDLHaptic(); |
|
|
haptic.device_id = deviceId_VIBRATOR_SERVICE; |
|
|
haptic.name = "VIBRATOR_SERVICE"; |
|
|
haptic.vib = vib; |
|
|
mHaptics.add(haptic); |
|
|
SDLControllerManager.nativeAddHaptic(haptic.device_id, haptic.name); |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
/* Check removed devices */ |
|
@@ -350,8 +358,8 @@ public void pollHapticDevices() { |
|
|
if (device_id == deviceIds[j]) break; |
|
|
} |
|
|
|
|
|
if (device_id == deviceId_VIBRATOR_SERVICE && hasVibrator) { |
|
|
// don't remove the vibrator if it is still present |
|
|
if (device_id == deviceId_VIBRATOR_SERVICE && hasVibratorService) { |
|
|
// don't remove the vibrator if it is still present |
|
|
} else if (j == deviceIds.length) { |
|
|
removedDevices.add(device_id); |
|
|
} |
|
|