Fix crash when MotionEvent is initialized with more than 2 fingers, and bump
its initial size to allow for up to 5 fingers.
diff --git a/core/java/android/view/MotionEvent.java b/core/java/android/view/MotionEvent.java
index a109db5..e8bfa6a 100644
--- a/core/java/android/view/MotionEvent.java
+++ b/core/java/android/view/MotionEvent.java
@@ -185,7 +185,12 @@
      */
     static public final int NUM_SAMPLE_DATA = 4;
     
-    static private final int BASE_AVAIL_POINTERS = 2;
+    /**
+     * Number of possible pointers.
+     * @hide
+     */
+    static public final int BASE_AVAIL_POINTERS = 5;
+    
     static private final int BASE_AVAIL_SAMPLES = 8;
     
     static private final int MAX_RECYCLED = 10;
@@ -290,8 +295,19 @@
         ev.mNumPointers = pointers;
         ev.mNumSamples = 1;
         
-        System.arraycopy(inPointerIds, 0, ev.mPointerIdentifiers, 0, pointers);
-        System.arraycopy(inData, 0, ev.mDataSamples, 0, pointers * NUM_SAMPLE_DATA);
+        int[] pointerIdentifiers = ev.mPointerIdentifiers;
+        if (pointerIdentifiers.length < pointers) {
+            ev.mPointerIdentifiers = pointerIdentifiers = new int[pointers];
+        }
+        System.arraycopy(inPointerIds, 0, pointerIdentifiers, 0, pointers);
+        
+        final int ND = pointers * NUM_SAMPLE_DATA;
+        float[] dataSamples = ev.mDataSamples;
+        if (dataSamples.length < ND) {
+            ev.mDataSamples = dataSamples = new float[ND];
+        }
+        System.arraycopy(inData, 0, dataSamples, 0, ND);
+        
         ev.mTimeSamples[0] = eventTime;
 
         if (DEBUG_POINTERS) {