am 183700a0: am ff61da9b: am e2ba6f72: am ecab0379: Merge "Remove useless TestRunner for KeyStoreTests"

* commit '183700a0d616a9576045519f0bd900ee81e30415':
  Remove useless TestRunner for KeyStoreTests
diff --git a/cmds/monkey/src/com/android/commands/monkey/MonkeySourceScript.java b/cmds/monkey/src/com/android/commands/monkey/MonkeySourceScript.java
index b2b9b4f..59aeb55 100644
--- a/cmds/monkey/src/com/android/commands/monkey/MonkeySourceScript.java
+++ b/cmds/monkey/src/com/android/commands/monkey/MonkeySourceScript.java
@@ -71,12 +71,18 @@
 
     private long mLastRecordedEventTime = -1;
 
+    // process scripts in line-by-line mode (true) or batch processing mode (false)
+    private boolean mReadScriptLineByLine = false;
+
     private static final boolean THIS_DEBUG = false;
 
     // a parameter that compensates the difference of real elapsed time and
     // time in theory
     private static final long SLEEP_COMPENSATE_DIFF = 16;
 
+    // if this header is present, scripts are read and processed in line-by-line mode
+    private static final String HEADER_LINE_BY_LINE = "linebyline";
+
     // maximum number of events that we read at one time
     private static final int MAX_ONE_TIME_READS = 100;
 
@@ -147,6 +153,15 @@
 
     BufferedReader mBufferedReader;
 
+    // X and Y coordincates of last touch event. Array Index is the pointerId
+    private float mLastX[] = new float[2];
+
+    private float mLastY[] = new float[2];
+
+    private long mScriptStartTime = -1;
+
+    private long mMonkeyStartTime = -1;
+
     /**
      * Creates a MonkeySourceScript instance.
      *
@@ -207,6 +222,8 @@
                     System.err.println(e);
                     return false;
                 }
+            } else if (line.indexOf(HEADER_LINE_BY_LINE) >= 0) {
+                mReadScriptLineByLine = true;
             } else if (line.indexOf(STARTING_DATA_LINE) >= 0) {
                 return true;
             }
@@ -234,6 +251,21 @@
         return MAX_ONE_TIME_READS;
     }
 
+     /**
+      * Reads one line and processes it.
+      *
+      * @return the number of lines read
+      * @throws IOException If there was an error reading the file.
+      */
+    private int readOneLine() throws IOException {
+        String line = mBufferedReader.readLine();
+        if (line == null) {
+            return 0;
+        }
+        line.trim();
+        processLine(line);
+        return 1;
+    }
 
 
 
@@ -306,6 +338,84 @@
             return;
         }
 
+        // Handle trackball or multi-touch  pointer events. pointer ID is the 13th parameter
+        if ((s.indexOf(EVENT_KEYWORD_POINTER) >= 0 || s.indexOf(EVENT_KEYWORD_TRACKBALL) >= 0)
+                && args.length == 13) {
+            try {
+                long downTime = Long.parseLong(args[0]);
+                long eventTime = Long.parseLong(args[1]);
+                int action = Integer.parseInt(args[2]);
+                float x = Float.parseFloat(args[3]);
+                float y = Float.parseFloat(args[4]);
+                float pressure = Float.parseFloat(args[5]);
+                float size = Float.parseFloat(args[6]);
+                int metaState = Integer.parseInt(args[7]);
+                float xPrecision = Float.parseFloat(args[8]);
+                float yPrecision = Float.parseFloat(args[9]);
+                int device = Integer.parseInt(args[10]);
+                int edgeFlags = Integer.parseInt(args[11]);
+                int pointerId = Integer.parseInt(args[12]);
+
+                MonkeyMotionEvent e;
+                if (s.indexOf("Pointer") > 0) {
+                    if (action == MotionEvent.ACTION_POINTER_DOWN) {
+                        e = new MonkeyTouchEvent(MotionEvent.ACTION_POINTER_DOWN
+                                | (pointerId << MotionEvent.ACTION_POINTER_INDEX_SHIFT))
+                                        .setIntermediateNote(true);
+                    } else {
+                        e = new MonkeyTouchEvent(action);
+                    }
+                    if (mScriptStartTime < 0) {
+                        mMonkeyStartTime = SystemClock.uptimeMillis();
+                        mScriptStartTime = eventTime;
+                    }
+                } else {
+                    e = new MonkeyTrackballEvent(action);
+                }
+
+                if (pointerId == 1) {
+                    e.setDownTime(downTime)
+                            .setEventTime(eventTime)
+                            .setMetaState(metaState)
+                            .setPrecision(xPrecision, yPrecision)
+                            .setDeviceId(device)
+                            .setEdgeFlags(edgeFlags)
+                            .addPointer(0, mLastX[0], mLastY[0], pressure, size)
+                            .addPointer(1, x, y, pressure, size);
+                    mLastX[1] = x;
+                    mLastY[1] = y;
+                } else if (pointerId == 0) {
+                    e.setDownTime(downTime)
+                            .setEventTime(eventTime)
+                            .setMetaState(metaState)
+                            .setPrecision(xPrecision, yPrecision)
+                            .setDeviceId(device)
+                            .setEdgeFlags(edgeFlags)
+                            .addPointer(0, x, y, pressure, size);
+                     if(action == MotionEvent.ACTION_POINTER_UP) {
+                         e.addPointer(1, mLastX[1], mLastY[1]);
+                     }
+                     mLastX[0] = x;
+                     mLastY[0] = y;
+                }
+
+                // Dynamically adjust waiting time to ensure that simulated evnets follow
+                // the time tap specified in the script
+                if (mReadScriptLineByLine) {
+                    long curUpTime = SystemClock.uptimeMillis();
+                    long realElapsedTime = curUpTime - mMonkeyStartTime;
+                    long scriptElapsedTime = eventTime - mScriptStartTime;
+                    if (realElapsedTime < scriptElapsedTime) {
+                        long waitDuration = scriptElapsedTime - realElapsedTime;
+                        mQ.addLast(new MonkeyWaitEvent(waitDuration));
+                    }
+                }
+                mQ.addLast(e);
+            } catch (NumberFormatException e) {
+            }
+            return;
+        }
+
         // Handle screen rotation events
         if ((s.indexOf(EVENT_KEYWORD_ROTATION) >= 0) && args.length == 2) {
             try {
@@ -719,7 +829,11 @@
             readHeader();
         }
 
-        linesRead = readLines();
+        if (mReadScriptLineByLine) {
+            linesRead = readOneLine();
+        } else {
+            linesRead = readLines();
+        }
 
         if (linesRead == 0) {
             closeFile();
diff --git a/testrunner/test_defs.xml b/testrunner/test_defs.xml
index 35aea0f..f3928f1 100644
--- a/testrunner/test_defs.xml
+++ b/testrunner/test_defs.xml
@@ -514,12 +514,6 @@
     build_path="external/skia/tests"
     description="Skia tests." />
 
-<!--  Android STL tests -->
-<test-native name="astl"
-    build_path="external/astl/tests"
-    description="Android STL."
-    extra_build_args="ASTL_TESTS=1" />
-
 <!-- Google Test -->
 <test-native name="gtest"
     build_path="external/gtest"