Input prediction interface and class renames

As part of the aosp/2242040 review, there were multiple issues
raised that we agreed to tackle after the initial release; this
change renames a couple of the methods in MotionPredictor, and
removes references to "Pen" and "Ink".

Bug: 2242040
Test: compiles properly
Relnote: Renamed `recordMovement` to `record`, and `dispose` to `close`
Change-Id: I018c04a32c9129d6559ee85819d9a82773fd376f
diff --git a/input/input-motionprediction/api/current.txt b/input/input-motionprediction/api/current.txt
index a2cdf99..6611119 100644
--- a/input/input-motionprediction/api/current.txt
+++ b/input/input-motionprediction/api/current.txt
@@ -1,11 +1,11 @@
 // Signature format: 4.0
 package androidx.input.motionprediction {
 
-  public interface MotionEventPredictor {
-    method public void dispose();
+  public interface MotionEventPredictor extends java.lang.AutoCloseable {
+    method public void close();
     method public static androidx.input.motionprediction.MotionEventPredictor newInstance(android.view.View);
     method public android.view.MotionEvent? predict();
-    method public void recordMovement(android.view.MotionEvent);
+    method public void record(android.view.MotionEvent);
   }
 
 }
diff --git a/input/input-motionprediction/api/public_plus_experimental_current.txt b/input/input-motionprediction/api/public_plus_experimental_current.txt
index a2cdf99..6611119 100644
--- a/input/input-motionprediction/api/public_plus_experimental_current.txt
+++ b/input/input-motionprediction/api/public_plus_experimental_current.txt
@@ -1,11 +1,11 @@
 // Signature format: 4.0
 package androidx.input.motionprediction {
 
-  public interface MotionEventPredictor {
-    method public void dispose();
+  public interface MotionEventPredictor extends java.lang.AutoCloseable {
+    method public void close();
     method public static androidx.input.motionprediction.MotionEventPredictor newInstance(android.view.View);
     method public android.view.MotionEvent? predict();
-    method public void recordMovement(android.view.MotionEvent);
+    method public void record(android.view.MotionEvent);
   }
 
 }
diff --git a/input/input-motionprediction/api/restricted_current.txt b/input/input-motionprediction/api/restricted_current.txt
index a2cdf99..6611119 100644
--- a/input/input-motionprediction/api/restricted_current.txt
+++ b/input/input-motionprediction/api/restricted_current.txt
@@ -1,11 +1,11 @@
 // Signature format: 4.0
 package androidx.input.motionprediction {
 
-  public interface MotionEventPredictor {
-    method public void dispose();
+  public interface MotionEventPredictor extends java.lang.AutoCloseable {
+    method public void close();
     method public static androidx.input.motionprediction.MotionEventPredictor newInstance(android.view.View);
     method public android.view.MotionEvent? predict();
-    method public void recordMovement(android.view.MotionEvent);
+    method public void record(android.view.MotionEvent);
   }
 
 }
diff --git a/input/input-motionprediction/build.gradle b/input/input-motionprediction/build.gradle
index 9475cdb..8d3d5e2 100644
--- a/input/input-motionprediction/build.gradle
+++ b/input/input-motionprediction/build.gradle
@@ -33,7 +33,7 @@
 
 android {
     defaultConfig {
-        minSdkVersion 16
+        minSdkVersion 19
     }
     namespace "androidx.input.motionprediction"
 }
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/MotionEventPredictor.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/MotionEventPredictor.java
index c27d293..31442ee 100644
--- a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/MotionEventPredictor.java
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/MotionEventPredictor.java
@@ -33,7 +33,7 @@
  * rendered on the display. Once no more predictions are needed, call {@link #dispose()} to stop it
  * and clean up resources.
  */
-public interface MotionEventPredictor {
+public interface MotionEventPredictor extends AutoCloseable {
     /**
      * Record a user's movement to the predictor. You should call this for every
      * {@link android.view.MotionEvent} that is received by the associated
@@ -41,7 +41,7 @@
      * @param event the {@link android.view.MotionEvent} the associated view received and that
      *              needs to be recorded.
      */
-    void recordMovement(@NonNull MotionEvent event);
+    void record(@NonNull MotionEvent event);
 
     /**
      * Compute a prediction
@@ -55,7 +55,8 @@
      * Notify the predictor that no more predictions are needed. Any subsequent call to
      * {@link #predict()} will return null.
      */
-    void dispose();
+    @Override
+    void close();
 
     /**
      * Create a new motion predictor associated to a specific {@link android.view.View}
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanMotionEventPredictor.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanMotionEventPredictor.java
index e5abbd9..df88594 100644
--- a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanMotionEventPredictor.java
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanMotionEventPredictor.java
@@ -31,7 +31,7 @@
 @RestrictTo(LIBRARY)
 public class KalmanMotionEventPredictor implements MotionEventPredictor {
     private MultiPointerPredictor mMultiPointerPredictor;
-    private boolean mDisposed = false;
+    private boolean mClosed = false;
 
     public KalmanMotionEventPredictor() {
         mMultiPointerPredictor = new MultiPointerPredictor();
@@ -43,21 +43,21 @@
     }
 
     @Override
-    public void recordMovement(@NonNull MotionEvent event) {
+    public void record(@NonNull MotionEvent event) {
         mMultiPointerPredictor.onTouchEvent(event);
     }
 
     @Nullable
     @Override
     public MotionEvent predict() {
-        if (mDisposed) {
+        if (mClosed) {
             return null;
         }
         return mMultiPointerPredictor.predict();
     }
 
     @Override
-    public void dispose() {
-        mDisposed = true;
+    public void close() {
+        mClosed = true;
     }
 }
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/InkPredictor.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanPredictor.java
similarity index 97%
rename from input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/InkPredictor.java
rename to input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanPredictor.java
index 98f4a44..f655aec 100644
--- a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/InkPredictor.java
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanPredictor.java
@@ -30,7 +30,7 @@
  * @hide
  */
 @RestrictTo(LIBRARY)
-public interface InkPredictor {
+public interface KalmanPredictor {
 
     /** Gets the current prediction target */
     int getPredictionTarget();
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 c97dd19..c517321 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
@@ -32,11 +32,11 @@
  * @hide
  */
 @RestrictTo(LIBRARY)
-public class MultiPointerPredictor implements InkPredictor {
+public class MultiPointerPredictor implements KalmanPredictor {
     private static final String TAG = "MultiPointerPredictor";
     private static final boolean DEBUG_PREDICTION = Log.isLoggable(TAG, Log.DEBUG);
 
-    private SparseArray<KalmanInkPredictor> mPredictorMap = new SparseArray<>();
+    private SparseArray<SinglePointerPredictor> mPredictorMap = new SparseArray<>();
     private int mPredictionTargetMs = 0;
     private int mReportRateMs = 0;
 
@@ -77,7 +77,7 @@
         int action = event.getActionMasked();
         int pointerId = event.getPointerId(event.getActionIndex());
         if (action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_POINTER_DOWN) {
-            KalmanInkPredictor predictor = new KalmanInkPredictor();
+            SinglePointerPredictor predictor = new SinglePointerPredictor();
             predictor.setPredictionTarget(mPredictionTargetMs);
             if (mReportRateMs > 0) {
                 predictor.setReportRate(mReportRateMs);
@@ -86,14 +86,14 @@
             predictor.onTouchEvent(event);
             mPredictorMap.put(pointerId, predictor);
         } else if (action == MotionEvent.ACTION_UP) {
-            KalmanInkPredictor predictor = mPredictorMap.get(pointerId);
+            SinglePointerPredictor predictor = mPredictorMap.get(pointerId);
             if (predictor != null) {
                 mPredictorMap.remove(pointerId);
                 predictor.onTouchEvent(event);
             }
             mPredictorMap.clear();
         } else if (action == MotionEvent.ACTION_POINTER_UP) {
-            KalmanInkPredictor predictor = mPredictorMap.get(pointerId);
+            SinglePointerPredictor predictor = mPredictorMap.get(pointerId);
             if (predictor != null) {
                 mPredictorMap.remove(pointerId);
                 predictor.onTouchEvent(event);
@@ -126,7 +126,7 @@
             return null;
         }
         if (pointerCount == 1) {
-            KalmanInkPredictor predictor = mPredictorMap.valueAt(0);
+            SinglePointerPredictor predictor = mPredictorMap.valueAt(0);
             MotionEvent predictedEv = predictor.predict();
             if (DEBUG_PREDICTION) {
                 Log.d(TAG, "predict() -> MotionEvent: " + predictedEv);
@@ -139,7 +139,7 @@
         MotionEvent[] singlePointerEvents = new MotionEvent[pointerCount];
         for (int i = 0; i < pointerCount; ++i) {
             pointerIds[i] = mPredictorMap.keyAt(i);
-            KalmanInkPredictor predictor = mPredictorMap.valueAt(i);
+            SinglePointerPredictor predictor = mPredictorMap.valueAt(i);
             singlePointerEvents[i] = predictor.predict();
             // If predictor consumer expect more sample, generate sample where position and
             // pressure are constant
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/PenKalmanFilter.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/PointerKalmanFilter.java
similarity index 97%
rename from input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/PenKalmanFilter.java
rename to input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/PointerKalmanFilter.java
index a70b21e..6a80269 100644
--- a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/PenKalmanFilter.java
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/PointerKalmanFilter.java
@@ -29,7 +29,7 @@
  * @hide
  */
 @RestrictTo(LIBRARY)
-public class PenKalmanFilter {
+public class PointerKalmanFilter {
     private KalmanFilter mXKalman;
     private KalmanFilter mYKalman;
     private KalmanFilter mPKalman;
@@ -54,7 +54,7 @@
      * @param sigmaProcess lower value = more filtering
      * @param sigmaMeasurement higher value = more filtering
      */
-    public PenKalmanFilter(double sigmaProcess, double sigmaMeasurement) {
+    public PointerKalmanFilter(double sigmaProcess, double sigmaMeasurement) {
         mSigmaProcess = sigmaProcess;
         mSigmaMeasurement = sigmaMeasurement;
         mXKalman = createAxisKalmanFilter();
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanInkPredictor.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/SinglePointerPredictor.java
similarity index 98%
rename from input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanInkPredictor.java
rename to input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/SinglePointerPredictor.java
index 73c1f4a..0656734 100644
--- a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/KalmanInkPredictor.java
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/SinglePointerPredictor.java
@@ -34,7 +34,7 @@
  * @hide
  */
 @RestrictTo(LIBRARY)
-public class KalmanInkPredictor implements InkPredictor {
+public class SinglePointerPredictor implements KalmanPredictor {
     private static final String TAG = "KalmanInkPredictor";
 
     // Influence of jank during each prediction sample
@@ -67,7 +67,7 @@
     // The Kalman filter is tuned to smooth noise while maintaining fast reaction to direction
     // changes. The stronger the filter, the smoother the prediction result will be, at the
     // cost of possible prediction errors.
-    private final PenKalmanFilter mKalman = new PenKalmanFilter(0.01, 1.0);
+    private final PointerKalmanFilter mKalman = new PointerKalmanFilter(0.01, 1.0);
 
     private final DVector2 mLastPosition = new DVector2();
     private long mPrevEventTime;
@@ -93,7 +93,7 @@
      * achieving close-to-zero latency, prediction errors can be more visible and the target should
      * be reduced to 20ms.
      */
-    public KalmanInkPredictor() {
+    public SinglePointerPredictor() {
         mKalman.reset();
         mPrevEventTime = 0;
     }