Make some input prediction library members final

As pointed out in the original code review (aosp/2242040), some
members can be made final. Other than the ones pointed out in
that review, I checked the rest of the files and applied it where
possible. It also has a slight change of logic in the close logic
to free up the predictor resources, and a small documentation
correction.

Bug: 232941452
Test: Compiles successfully
Change-Id: I3fab1ca864250c23d76c3a1e3ca8a1f6abbbb1c3
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 31442ee..39e1c14 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
@@ -28,9 +28,9 @@
  * app; a motion predictor is a utility that provides predicted {@link android.view.MotionEvent}
  * based on the previously received ones. Obtain a new predictor instance using
  * {@link #newInstance(android.view.View)}; put the motion events you receive into it with
- * {@link #recordMovement(android.view.MotionEvent)}, and call {@link #predict()} to retrieve the
+ * {@link #record(android.view.MotionEvent)}, and call {@link #predict()} to retrieve the
  * predicted  {@link android.view.MotionEvent} that would occur at the moment the next frame is
- * rendered on the display. Once no more predictions are needed, call {@link #dispose()} to stop it
+ * rendered on the display. Once no more predictions are needed, call {@link #close()} to stop it
  * and clean up resources.
  */
 public interface MotionEventPredictor extends AutoCloseable {
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 df88594..106c01e4 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
@@ -30,11 +30,9 @@
  */
 @RestrictTo(LIBRARY)
 public class KalmanMotionEventPredictor implements MotionEventPredictor {
-    private MultiPointerPredictor mMultiPointerPredictor;
-    private boolean mClosed = false;
+    private MultiPointerPredictor mMultiPointerPredictor = new MultiPointerPredictor();
 
     public KalmanMotionEventPredictor() {
-        mMultiPointerPredictor = new MultiPointerPredictor();
         // 1 may seem arbitrary, but this basically tells the predictor to
         // just predict the next MotionEvent.
         // This will need to change as we want to build a prediction depending
@@ -44,13 +42,16 @@
 
     @Override
     public void record(@NonNull MotionEvent event) {
+        if (mMultiPointerPredictor == null) {
+            return;
+        }
         mMultiPointerPredictor.onTouchEvent(event);
     }
 
     @Nullable
     @Override
     public MotionEvent predict() {
-        if (mClosed) {
+        if (mMultiPointerPredictor == null) {
             return null;
         }
         return mMultiPointerPredictor.predict();
@@ -58,6 +59,6 @@
 
     @Override
     public void close() {
-        mClosed = true;
+        mMultiPointerPredictor = null;
     }
 }
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 1b0b3cd..f5929e0 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
@@ -36,7 +36,7 @@
     private static final String TAG = "MultiPointerPredictor";
     private static final boolean DEBUG_PREDICTION = Log.isLoggable(TAG, Log.DEBUG);
 
-    private SparseArray<SinglePointerPredictor> mPredictorMap = new SparseArray<>();
+    private final SparseArray<SinglePointerPredictor> mPredictorMap = new SparseArray<>();
     private int mPredictionTargetMs = 0;
     private int mReportRateMs = 0;
 
diff --git a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/PointerKalmanFilter.java b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/PointerKalmanFilter.java
index 6a80269..65d828d 100644
--- a/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/PointerKalmanFilter.java
+++ b/input/input-motionprediction/src/main/java/androidx/input/motionprediction/kalman/PointerKalmanFilter.java
@@ -30,14 +30,14 @@
  */
 @RestrictTo(LIBRARY)
 public class PointerKalmanFilter {
-    private KalmanFilter mXKalman;
-    private KalmanFilter mYKalman;
-    private KalmanFilter mPKalman;
+    private final KalmanFilter mXKalman;
+    private final KalmanFilter mYKalman;
+    private final KalmanFilter mPKalman;
 
-    private DVector2 mPosition = new DVector2();
-    private DVector2 mVelocity = new DVector2();
-    private DVector2 mAcceleration = new DVector2();
-    private DVector2 mJank = new DVector2();
+    private final DVector2 mPosition = new DVector2();
+    private final DVector2 mVelocity = new DVector2();
+    private final DVector2 mAcceleration = new DVector2();
+    private final DVector2 mJank = new DVector2();
     private double mPressure = 0;
     private double mPressureChange = 0;
 
@@ -46,9 +46,9 @@
 
     private int mNumIterations = 0;
 
-    private Matrix mNewX = new Matrix(1, 1);
-    private Matrix mNewY = new Matrix(1, 1);
-    private Matrix mNewP = new Matrix(1, 1);
+    private final Matrix mNewX = new Matrix(1, 1);
+    private final Matrix mNewY = new Matrix(1, 1);
+    private final Matrix mNewP = new Matrix(1, 1);
 
     /**
      * @param sigmaProcess lower value = more filtering