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;
}