122 lines
4.0 KiB
Java
122 lines
4.0 KiB
Java
![]() |
/*
|
||
|
* Copyright (C) 2022 The Android Open Source Project
|
||
|
*
|
||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
|
* you may not use this file except in compliance with the License.
|
||
|
* You may obtain a copy of the License at
|
||
|
*
|
||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||
|
*
|
||
|
* Unless required by applicable law or agreed to in writing, software
|
||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
|
* See the License for the specific language governing permissions and
|
||
|
* limitations under the License.
|
||
|
*/
|
||
|
|
||
|
package android.window;
|
||
|
|
||
|
import android.annotation.FloatRange;
|
||
|
import android.annotation.IntDef;
|
||
|
|
||
|
import java.lang.annotation.Retention;
|
||
|
import java.lang.annotation.RetentionPolicy;
|
||
|
|
||
|
/**
|
||
|
* Object used to report back gesture progress.
|
||
|
* Holds information about the touch event, swipe direction and the animation progress that
|
||
|
* predictive back animations should seek to.
|
||
|
*/
|
||
|
public final class BackEvent {
|
||
|
/** Indicates that the edge swipe starts from the left edge of the screen */
|
||
|
public static final int EDGE_LEFT = 0;
|
||
|
/** Indicates that the edge swipe starts from the right edge of the screen */
|
||
|
public static final int EDGE_RIGHT = 1;
|
||
|
|
||
|
/** @hide */
|
||
|
@IntDef({
|
||
|
EDGE_LEFT,
|
||
|
EDGE_RIGHT,
|
||
|
})
|
||
|
@Retention(RetentionPolicy.SOURCE)
|
||
|
public @interface SwipeEdge{}
|
||
|
|
||
|
private final float mTouchX;
|
||
|
private final float mTouchY;
|
||
|
private final float mProgress;
|
||
|
|
||
|
@SwipeEdge
|
||
|
private final int mSwipeEdge;
|
||
|
|
||
|
/**
|
||
|
* Creates a new {@link BackEvent} instance.
|
||
|
*
|
||
|
* @param touchX Absolute X location of the touch point of this event.
|
||
|
* @param touchY Absolute Y location of the touch point of this event.
|
||
|
* @param progress Value between 0 and 1 on how far along the back gesture is.
|
||
|
* @param swipeEdge Indicates which edge the swipe starts from.
|
||
|
*/
|
||
|
public BackEvent(float touchX, float touchY, float progress, @SwipeEdge int swipeEdge) {
|
||
|
mTouchX = touchX;
|
||
|
mTouchY = touchY;
|
||
|
mProgress = progress;
|
||
|
mSwipeEdge = swipeEdge;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns a value between 0 and 1 on how far along the back gesture is. This value is
|
||
|
* driven by the horizontal location of the touch point, and should be used as the fraction to
|
||
|
* seek the predictive back animation with. Specifically,
|
||
|
* <ol>
|
||
|
* <li>The progress is 0 when the touch is at the starting edge of the screen (left or right),
|
||
|
* and animation should seek to its start state.
|
||
|
* <li>The progress is approximately 1 when the touch is at the opposite side of the screen,
|
||
|
* and animation should seek to its end state. Exact end value may vary depending on
|
||
|
* screen size.
|
||
|
* </ol>
|
||
|
* <li> After the gesture finishes in cancel state, this method keeps getting invoked until the
|
||
|
* progress value animates back to 0.
|
||
|
* </ol>
|
||
|
* In-between locations are linearly interpolated based on horizontal distance from the starting
|
||
|
* edge and smooth clamped to 1 when the distance exceeds a system-wide threshold.
|
||
|
*/
|
||
|
@FloatRange(from = 0, to = 1)
|
||
|
public float getProgress() {
|
||
|
return mProgress;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the absolute X location of the touch point, or NaN if the event is from
|
||
|
* a button press.
|
||
|
*/
|
||
|
public float getTouchX() {
|
||
|
return mTouchX;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the absolute Y location of the touch point, or NaN if the event is from
|
||
|
* a button press.
|
||
|
*/
|
||
|
public float getTouchY() {
|
||
|
return mTouchY;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the screen edge that the swipe starts from.
|
||
|
*/
|
||
|
@SwipeEdge
|
||
|
public int getSwipeEdge() {
|
||
|
return mSwipeEdge;
|
||
|
}
|
||
|
|
||
|
@Override
|
||
|
public String toString() {
|
||
|
return "BackEvent{"
|
||
|
+ "mTouchX=" + mTouchX
|
||
|
+ ", mTouchY=" + mTouchY
|
||
|
+ ", mProgress=" + mProgress
|
||
|
+ ", mSwipeEdge" + mSwipeEdge
|
||
|
+ "}";
|
||
|
}
|
||
|
}
|