script-astra/Android/Sdk/sources/android-35/android/window/BackEvent.java
localadmin 4380f00a78 init
2025-01-20 18:15:20 +03:00

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