Merge Android 24Q1 Release (ab/11220357)

Bug: 319669529
Merged-In: Iabc61a3a2d982af20f66d959713f92a5b7f12532
Change-Id: I4b2711b4392ca6ddd1609bb765b9c3ca0773da35
diff --git a/android/WALT/app/build.gradle b/android/WALT/app/build.gradle
index d3fd5ae..98c9f23 100644
--- a/android/WALT/app/build.gradle
+++ b/android/WALT/app/build.gradle
@@ -9,8 +9,8 @@
         applicationId "org.chromium.latency.walt"
         minSdkVersion 21
         targetSdkVersion 29
-        versionCode 9
-        versionName "0.1.9"
+        versionCode 10
+        versionName "0.1.10"
     }
 
     externalNativeBuild.ndkBuild {
diff --git a/android/WALT/app/src/main/java/org/chromium/latency/walt/TouchCatcherView.java b/android/WALT/app/src/main/java/org/chromium/latency/walt/TouchCatcherView.java
index 9e04056..7683612 100644
--- a/android/WALT/app/src/main/java/org/chromium/latency/walt/TouchCatcherView.java
+++ b/android/WALT/app/src/main/java/org/chromium/latency/walt/TouchCatcherView.java
@@ -28,6 +28,7 @@
 public class TouchCatcherView extends View {
 
     private Paint linePaint = new Paint();
+    private Paint centerLinePaint = new Paint(); // for positioning the laser
     private WaltDevice waltDevice;
     private boolean isAnimated = false;
 
@@ -54,8 +55,11 @@
     private void initialisePaint() {
         float density = getResources().getDisplayMetrics().density;
         float lineWidth = 10f * density;
+        float centerLineWidth = 3f * density;
         linePaint.setColor(Color.GREEN);
         linePaint.setStrokeWidth(lineWidth);
+        centerLinePaint.setColor(Color.GREEN);
+        centerLinePaint.setStrokeWidth(centerLineWidth);
     }
 
     public static double markerPosition(long t_us, int period_us) {
@@ -88,11 +92,15 @@
         int h = getHeight();
         double normPos = markerPosition(waltDevice.clock.micros(), animationPeriod_us);
         int pos = (int) (h * (0.5 + animationAmplitude * normPos));
+        int centerPos = (int) (h * 0.5);
         // Log.i("AnimatedView", "Pos is " + pos);
         int w = getWidth();
 
         int lineStart = (int) (w * (1 - lineLength) / 2);
         int lineEnd   = (int) (w * (1 + lineLength) / 2);
+
+        canvas.drawLine(0, centerPos, lineStart, centerPos, centerLinePaint);
+        canvas.drawLine(lineEnd, centerPos, w - 1, centerPos, centerLinePaint);
         canvas.drawLine(lineStart, pos, lineEnd, pos, linePaint);
 
         // Run every frame
diff --git a/android/WALT/app/src/main/java/org/chromium/latency/walt/UsMotionEvent.java b/android/WALT/app/src/main/java/org/chromium/latency/walt/UsMotionEvent.java
index f68e461..2882ca0 100644
--- a/android/WALT/app/src/main/java/org/chromium/latency/walt/UsMotionEvent.java
+++ b/android/WALT/app/src/main/java/org/chromium/latency/walt/UsMotionEvent.java
@@ -108,6 +108,31 @@
         return "UNKNOWN_ACTION";
     }
 
+    private long getEventTimeNanos(MotionEvent event, boolean preAndroidU) {
+        long t_nanos = -1;
+        final String methodName = preAndroidU ? "getEventTimeNano" : "getEventTimeNanos";
+        try {
+            Class<?> cls = Class.forName("android.view.MotionEvent");
+            Method myTimeGetter = cls.getMethod(methodName);
+            t_nanos = (long) myTimeGetter.invoke(event);
+        } catch (Exception e) {
+        }
+        return t_nanos;
+    }
+
+    private long getHistoricalEventTimeNanos(MotionEvent event, int pos, boolean preAndroidU) {
+        long t_nanos = -1;
+        final String methodName =
+                preAndroidU ? "getHistoricalEventTimeNano" : "getHistoricalEventTimeNanos";
+        try {
+            Class<?> cls = Class.forName("android.view.MotionEvent");
+            Method myTimeGetter = cls.getMethod(methodName, new Class[]{int.class});
+            t_nanos = (long) myTimeGetter.invoke(event, new Object[]{pos});
+        } catch (Exception e) {
+        }
+        return t_nanos;
+    }
+
     /**
      MotionEvent.getEventTime() function only provides millisecond resolution.
      There is a MotionEvent.getEventTimeNano() function but for some reason it
@@ -119,27 +144,25 @@
      */
     private long getEventTimeMicro(MotionEvent event) {
         long t_nanos = -1;
-        try {
-            Class<?> cls = Class.forName("android.view.MotionEvent");
-            Method myTimeGetter = cls.getMethod("getEventTimeNano");
-            t_nanos = (long) myTimeGetter.invoke(event);
-        } catch (Exception e) {
-            Log.i("WALT.MsMotionEvent", e.getMessage());
+        t_nanos = getEventTimeNanos(event, false);
+        if (t_nanos == -1) {
+            t_nanos = getEventTimeNanos(event, true);
+            if (t_nanos == -1) {
+                Log.i("WALT.UsMotionEvent", "getEventTimeNanos failed.");
+            }
         }
-
         return t_nanos / 1000;
     }
 
     private long getHistoricalEventTimeMicro(MotionEvent event, int pos) {
         long t_nanos = -1;
-        try {
-            Class<?> cls = Class.forName("android.view.MotionEvent");
-            Method myTimeGetter = cls.getMethod("getHistoricalEventTimeNano", new Class[] {int.class});
-            t_nanos = (long) myTimeGetter.invoke(event, new Object[]{pos});
-        } catch (Exception e) {
-            Log.i("WALT.MsMotionEvent", e.getMessage());
+        t_nanos = getHistoricalEventTimeNanos(event, pos, false);
+        if (t_nanos == -1) {
+            t_nanos = getHistoricalEventTimeNanos(event, pos, true);
+            if (t_nanos == -1) {
+                Log.i("WALT.UsMotionEvent", "getHistoricalEventTimeNanos failed.");
+            }
         }
-
         return t_nanos / 1000;
     }
 
diff --git a/android/WALT/app/src/main/res/values/strings.xml b/android/WALT/app/src/main/res/values/strings.xml
index bc83273..1b453bf 100644
--- a/android/WALT/app/src/main/res/values/strings.xml
+++ b/android/WALT/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
 <resources>
-    <string name="app_name">WALT</string>
+    <string name="app_name">WALT v0.1.10</string>
 
     <string name="title_activity_crash_log">Crash Log</string>
     <string name="protocol_version_mismatch">WALT reports protocol version %1$s, which is not