Fix down event time for the multi pointer events

The initial down time was populated in single pointer events, but
not in multi pointer ones, so this change addresses it.

Bug: 232941452
Test: gradlew :input:input-motionprediction:test
Change-Id: Ia91b8c7d17399769fc9b7654af80b37f70b71a2e
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/MultiPointerPredictor.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/MultiPointerPredictor.java
index 895949e..f9fdcfb 100644
--- a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/MultiPointerPredictor.java
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/MultiPointerPredictor.java
@@ -182,7 +182,7 @@
         }
         MotionEvent multiPointerEvent =
                 MotionEvent.obtain(
-                        0 /* down time */,
+                        singlePointerEvents[0].getDownTime() /* down time */,
                         pointerEventTimes[0] /* event time */,
                         MotionEvent.ACTION_MOVE /* action */,
                         pointerCount /* pointer count */,
diff --git a/input/input-motionprediction/src/test/kotlin/androidx/input/motionprediction/MotionEventGenerator.kt b/input/input-motionprediction/src/test/kotlin/androidx/input/motionprediction/MotionEventGenerator.kt
index 1e57a62..574f246 100644
--- a/input/input-motionprediction/src/test/kotlin/androidx/input/motionprediction/MotionEventGenerator.kt
+++ b/input/input-motionprediction/src/test/kotlin/androidx/input/motionprediction/MotionEventGenerator.kt
@@ -33,7 +33,7 @@
             firstPressureGenerator: ((Long) -> Float)?
     ) : this(firstXGenerator, firstYGenerator, firstPressureGenerator, null, null, null)
 
-    private val downEventTime: Long = 0
+    private val downEventTime: Long = System.currentTimeMillis()
     private var currentEventTime: Long = downEventTime
     private val firstStartX = 500f
     private val firstStartY = 500f
diff --git a/input/input-motionprediction/src/test/kotlin/androidx/input/motionprediction/kalman/MultiPointerPredictorTest.kt b/input/input-motionprediction/src/test/kotlin/androidx/input/motionprediction/kalman/MultiPointerPredictorTest.kt
index d6f5230..9987dc8 100644
--- a/input/input-motionprediction/src/test/kotlin/androidx/input/motionprediction/kalman/MultiPointerPredictorTest.kt
+++ b/input/input-motionprediction/src/test/kotlin/androidx/input/motionprediction/kalman/MultiPointerPredictorTest.kt
@@ -16,6 +16,7 @@
 
 package androidx.input.motionprediction.kalman
 
+import android.view.MotionEvent
 import androidx.input.motionprediction.MotionEventGenerator
 import androidx.test.ext.junit.runners.AndroidJUnit4
 import androidx.test.filters.MediumTest
@@ -51,6 +52,31 @@
             assertThat(predicted.getHistoricalEventTime(i)).isEqualTo(historicalTime)
         }
     }
+
+    // Ensures that the down time is properly populated
+    @Test
+    fun downTime() {
+        val predictor = MultiPointerPredictor()
+        val generator = MotionEventGenerator(
+                { delta: Long -> delta.toFloat() },
+                { delta: Long -> delta.toFloat() },
+                null,
+                { delta: Long -> delta.toFloat() },
+                { delta: Long -> delta.toFloat() },
+                null,
+        )
+        var firstEvent: MotionEvent? = null
+        for (i in 1..INITIAL_FEED) {
+            val nextEvent = generator.next()
+            if (firstEvent == null) {
+                firstEvent = nextEvent
+            }
+            predictor.onTouchEvent(nextEvent)
+        }
+        val predicted = predictor.predict(PREDICT_SAMPLE * generator.getRateMs().toInt())!!
+        assertThat(predicted.getPointerCount()).isEqualTo(2)
+        assertThat(predicted.getDownTime()).isEqualTo(firstEvent?.getEventTime())
+    }
 }
 
 private const val PREDICT_SAMPLE = 5;