Skip to content

Commit

Permalink
Fixed joystick crash on Android if joystick subsystem not initialized.
Browse files Browse the repository at this point in the history
  • Loading branch information
philippwiesemann committed Nov 10, 2013
1 parent 305f64b commit 842a989
Showing 1 changed file with 22 additions and 9 deletions.
31 changes: 22 additions & 9 deletions android-project/src/org/libsdl/app/SDLActivity.java
Expand Up @@ -433,6 +433,10 @@ public static int getJoystickAxes(int joy) {
return mJoystickHandler.getJoystickAxes(joy);
}

/**
* @param devId the device id to get opened joystick id for.
* @return joystick id for device id or -1 if there is none.
*/
public static int getJoyId(int devId) {
return mJoystickHandler.getJoyId(devId);
}
Expand Down Expand Up @@ -606,11 +610,14 @@ else if (event.getAction() == KeyEvent.ACTION_UP) {
} else if ( (event.getSource() & 0x00000401) != 0 || /* API 12: SOURCE_GAMEPAD */
(event.getSource() & InputDevice.SOURCE_DPAD) != 0 ) {
int id = SDLActivity.getJoyId( event.getDeviceId() );
if (event.getAction() == KeyEvent.ACTION_DOWN) {
SDLActivity.onNativePadDown(id, keyCode);
} else if (event.getAction() == KeyEvent.ACTION_UP) {
SDLActivity.onNativePadUp(id, keyCode);
if (id != -1) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
SDLActivity.onNativePadDown(id, keyCode);
} else if (event.getAction() == KeyEvent.ACTION_UP) {
SDLActivity.onNativePadUp(id, keyCode);
}
}
return true;
}

return false;
Expand Down Expand Up @@ -826,8 +833,12 @@ public int getJoystickAxes(int joy) {
return 0;
}

/**
* @param devId the device id to get opened joystick id for.
* @return joystick id for device id or -1 if there is none.
*/
public int getJoyId(int devId) {
return 0;
return -1;
}
}

Expand Down Expand Up @@ -887,10 +898,12 @@ public boolean onGenericMotion(View v, MotionEvent event) {
switch(action) {
case MotionEvent.ACTION_MOVE:
int id = SDLActivity.getJoyId( event.getDeviceId() );
float x = event.getAxisValue(MotionEvent.AXIS_X, actionPointerIndex);
float y = event.getAxisValue(MotionEvent.AXIS_Y, actionPointerIndex);
SDLActivity.onNativeJoy(id, 0, x);
SDLActivity.onNativeJoy(id, 1, y);
if (id != -1) {
float x = event.getAxisValue(MotionEvent.AXIS_X, actionPointerIndex);
float y = event.getAxisValue(MotionEvent.AXIS_Y, actionPointerIndex);
SDLActivity.onNativeJoy(id, 0, x);
SDLActivity.onNativeJoy(id, 1, y);
}
break;
}
}
Expand Down

0 comments on commit 842a989

Please sign in to comment.