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