Index: content/public/android/java/src/org/chromium/content/browser/input/GamepadDevice.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/input/GamepadDevice.java b/content/public/android/java/src/org/chromium/content/browser/input/GamepadDevice.java |
index 3e9ab5ec9ba9e9d527e3fc13cce04e4f1d78a784..ca534bf3ddfce4803bbe36b938dc8d9baad42267 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/input/GamepadDevice.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/input/GamepadDevice.java |
@@ -11,6 +11,7 @@ import android.view.KeyEvent; |
import android.view.MotionEvent; |
import java.util.Arrays; |
+import java.util.List; |
/** |
* Manages information related to each connected gamepad device. |
@@ -29,16 +30,16 @@ class GamepadDevice { |
// All axis values must be linearly normalized to the range [-1.0 .. 1.0]. |
// As appropriate, -1.0 should correspond to "up" or "left", and 1.0 |
// should correspond to "down" or "right". |
- private float[] mAxisValues; |
+ private final float[] mAxisValues = new float[CanonicalAxisIndex.NUM_CANONICAL_AXES]; |
- private float[] mButtonsValues; |
+ private final float[] mButtonsValues = new float[CanonicalButtonIndex.NUM_CANONICAL_BUTTONS];; |
// When the user agent recognizes the attached inputDevice, it is recommended |
// that it be remapped to a canonical ordering when possible. Devices that are |
// not recognized should still be exposed in their raw form. Therefore we must |
// pass the raw Button and raw Axis values. |
- private float[] mRawButtons; |
- private float[] mRawAxes; |
+ private final float[] mRawButtons = new float[256]; |
+ private final float[] mRawAxes = new float[256]; |
// An identification string for the gamepad. |
private String mDeviceName; |
@@ -51,25 +52,15 @@ class GamepadDevice { |
mDeviceId = inputDevice.getId(); |
mDeviceName = inputDevice.getName(); |
mTimestamp = SystemClock.uptimeMillis(); |
- mButtonsValues = new float[CanonicalButtonIndex.NUM_CANONICAL_BUTTONS]; |
- mAxisValues = new float[CanonicalAxisIndex.NUM_CANONICAL_AXES]; |
- mRawButtons = new float[256]; |
- // Get the total number of axes supported by gamepad. |
- int totalAxes = 0; |
- for (MotionRange range : inputDevice.getMotionRanges()) { |
- if ((range.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) { |
- totalAxes++; |
- } |
- } |
// Get axis ids and initialize axes values. |
- mAxes = new int[totalAxes]; |
- mRawAxes = new float[totalAxes]; |
+ final List<MotionRange> ranges = inputDevice.getMotionRanges(); |
+ mAxes = new int[ranges.size()]; |
int i = 0; |
- for (MotionRange range : inputDevice.getMotionRanges()) { |
+ for (MotionRange range : ranges) { |
if ((range.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) { |
- mAxes[i] = range.getAxis(); |
- mRawAxes[i] = 0.0f; |
- i++; |
+ int axis = range.getAxis(); |
+ assert axis < 256; |
+ mAxes[i++] = axis; |
} |
} |
} |
@@ -157,10 +148,10 @@ class GamepadDevice { |
if (!GamepadList.isGamepadEvent(event)) return false; |
// Update axes values. |
for (int i = 0; i < mAxes.length; i++) { |
- mRawAxes[i] = event.getAxisValue(mAxes[i]); |
+ int axis = mAxes[i]; |
+ mRawAxes[axis] = event.getAxisValue(axis); |
} |
mTimestamp = event.getEventTime(); |
return true; |
} |
- |
} |