summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorJaineel Mehta <jaineelm@google.com>2020-03-12 18:23:14 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2020-03-12 18:23:14 +0000
commit1a183578537ad82023b2acdaf97e97ad185cefb2 (patch)
tree60d763aa21a1353e674550b604a5499c42cc0a10 /core/java
parent1eb9db6ab8e11814069cb1e2534b872edabad6b5 (diff)
parent5e7097b21ea3841550044b933238f273be7cf2b6 (diff)
Merge "Revert "WindowInsetsController: Address API feedback"" into rvc-dev
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/view/InsetsController.java62
-rw-r--r--core/java/android/view/PendingInsetsController.java30
-rw-r--r--core/java/android/view/WindowInsetsAnimationControlListener.java1
-rw-r--r--core/java/android/view/WindowInsetsController.java9
4 files changed, 50 insertions, 52 deletions
diff --git a/core/java/android/view/InsetsController.java b/core/java/android/view/InsetsController.java
index b1da4cc60ad1..607886f3b13b 100644
--- a/core/java/android/view/InsetsController.java
+++ b/core/java/android/view/InsetsController.java
@@ -52,6 +52,7 @@ import android.view.animation.Interpolator;
import android.view.animation.PathInterpolator;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.Preconditions;
import java.io.PrintWriter;
import java.lang.annotation.Retention;
@@ -493,12 +494,13 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
PendingControlRequest pendingRequest = mPendingImeControlRequest;
mPendingImeControlRequest = null;
mHandler.removeCallbacks(mPendingControlTimeout);
- controlAnimationUnchecked(
- pendingRequest.types, pendingRequest.cancellationSignal,
+ CancellationSignal cancellationSignal = controlAnimationUnchecked(
+ pendingRequest.types,
pendingRequest.listener, mFrame,
true /* fromIme */, pendingRequest.durationMs, pendingRequest.interpolator,
false /* fade */, pendingRequest.animationType,
pendingRequest.layoutInsetsDuringAnimation);
+ pendingRequest.cancellationSignal.setOnCancelListener(cancellationSignal::cancel);
return;
}
@@ -544,26 +546,24 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
}
@Override
- public void controlWindowInsetsAnimation(@InsetsType int types, long durationMillis,
+ public CancellationSignal controlWindowInsetsAnimation(@InsetsType int types, long durationMs,
@Nullable Interpolator interpolator,
- @Nullable CancellationSignal cancellationSignal,
@NonNull WindowInsetsAnimationControlListener listener) {
- controlWindowInsetsAnimation(types, cancellationSignal, listener,
- false /* fromIme */, durationMillis, interpolator, ANIMATION_TYPE_USER);
+ return controlWindowInsetsAnimation(types, listener, false /* fromIme */, durationMs,
+ interpolator, ANIMATION_TYPE_USER);
}
- private void controlWindowInsetsAnimation(@InsetsType int types,
- @Nullable CancellationSignal cancellationSignal,
- WindowInsetsAnimationControlListener listener,
- boolean fromIme, long durationMs, @Nullable Interpolator interpolator,
- @AnimationType int animationType) {
+ private CancellationSignal controlWindowInsetsAnimation(@InsetsType int types,
+ WindowInsetsAnimationControlListener listener, boolean fromIme, long durationMs,
+ @Nullable Interpolator interpolator, @AnimationType int animationType) {
if (!checkDisplayFramesForControlling()) {
listener.onCancelled();
- return;
+ CancellationSignal cancellationSignal = new CancellationSignal();
+ cancellationSignal.cancel();
+ return cancellationSignal;
}
- controlAnimationUnchecked(types, cancellationSignal, listener, mFrame, fromIme, durationMs,
- interpolator, false /* fade */, animationType,
- getLayoutInsetsDuringAnimationMode(types));
+ return controlAnimationUnchecked(types, listener, mFrame, fromIme, durationMs, interpolator,
+ false /* fade */, animationType, getLayoutInsetsDuringAnimationMode(types));
}
private boolean checkDisplayFramesForControlling() {
@@ -573,16 +573,17 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
return mState.getDisplayFrame().equals(mFrame);
}
- private void controlAnimationUnchecked(@InsetsType int types,
- @Nullable CancellationSignal cancellationSignal,
+ private CancellationSignal controlAnimationUnchecked(@InsetsType int types,
WindowInsetsAnimationControlListener listener, Rect frame, boolean fromIme,
long durationMs, Interpolator interpolator, boolean fade,
@AnimationType int animationType,
@LayoutInsetsDuringAnimation int layoutInsetsDuringAnimation) {
+ CancellationSignal cancellationSignal = new CancellationSignal();
if (types == 0) {
// nothing to animate.
listener.onCancelled();
- return;
+ cancellationSignal.cancel();
+ return cancellationSignal;
}
cancelExistingControllers(types);
mLastStartedAnimTypes |= types;
@@ -602,28 +603,26 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
interpolator, animationType, layoutInsetsDuringAnimation, cancellationSignal);
mPendingImeControlRequest = request;
mHandler.postDelayed(mPendingControlTimeout, PENDING_CONTROL_TIMEOUT_MS);
- if (cancellationSignal != null) {
- cancellationSignal.setOnCancelListener(() -> {
- if (mPendingImeControlRequest == request) {
- abortPendingImeControlRequest();
- }
- });
- }
- return;
+ cancellationSignal.setOnCancelListener(() -> {
+ if (mPendingImeControlRequest == request) {
+ abortPendingImeControlRequest();
+ }
+ });
+ return cancellationSignal;
}
if (typesReady == 0) {
listener.onCancelled();
- return;
+ cancellationSignal.cancel();
+ return cancellationSignal;
}
final InsetsAnimationControlImpl controller = new InsetsAnimationControlImpl(controls,
frame, mState, listener, typesReady, this, durationMs, interpolator, fade,
layoutInsetsDuringAnimation, animationType);
mRunningAnimations.add(new RunningAnimation(controller, animationType));
- if (cancellationSignal != null) {
- cancellationSignal.setOnCancelListener(controller::onCancelled);
- }
+ cancellationSignal.setOnCancelListener(controller::onCancelled);
+ return cancellationSignal;
}
/**
@@ -884,8 +883,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
// Show/hide animations always need to be relative to the display frame, in order that shown
// and hidden state insets are correct.
controlAnimationUnchecked(
- types, new CancellationSignal(), listener, mState.getDisplayFrame(), fromIme,
- listener.getDurationMs(),
+ types, listener, mState.getDisplayFrame(), fromIme, listener.getDurationMs(),
INTERPOLATOR, true /* fade */, show ? ANIMATION_TYPE_SHOW : ANIMATION_TYPE_HIDE,
show ? LAYOUT_INSETS_DURING_ANIMATION_SHOWN
: LAYOUT_INSETS_DURING_ANIMATION_HIDDEN);
diff --git a/core/java/android/view/PendingInsetsController.java b/core/java/android/view/PendingInsetsController.java
index e8d9bb50c290..7f3641803770 100644
--- a/core/java/android/view/PendingInsetsController.java
+++ b/core/java/android/view/PendingInsetsController.java
@@ -16,8 +16,6 @@
package android.view;
-import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.os.CancellationSignal;
import android.view.WindowInsets.Type.InsetsType;
import android.view.animation.Interpolator;
@@ -62,6 +60,21 @@ public class PendingInsetsController implements WindowInsetsController {
}
@Override
+ public CancellationSignal controlWindowInsetsAnimation(int types, long durationMillis,
+ Interpolator interpolator,
+ WindowInsetsAnimationControlListener listener) {
+ if (mReplayedInsetsController != null) {
+ return mReplayedInsetsController.controlWindowInsetsAnimation(types, durationMillis,
+ interpolator, listener);
+ } else {
+ listener.onCancelled();
+ CancellationSignal cancellationSignal = new CancellationSignal();
+ cancellationSignal.cancel();
+ return cancellationSignal;
+ }
+ }
+
+ @Override
public void setSystemBarsAppearance(int appearance, int mask) {
if (mReplayedInsetsController != null) {
mReplayedInsetsController.setSystemBarsAppearance(appearance, mask);
@@ -163,19 +176,6 @@ public class PendingInsetsController implements WindowInsetsController {
mReplayedInsetsController = null;
}
- @Override
- public void controlWindowInsetsAnimation(@InsetsType int types, long durationMillis,
- @Nullable Interpolator interpolator,
- CancellationSignal cancellationSignal,
- @NonNull WindowInsetsAnimationControlListener listener) {
- if (mReplayedInsetsController != null) {
- mReplayedInsetsController.controlWindowInsetsAnimation(types, durationMillis,
- interpolator, cancellationSignal, listener);
- } else {
- listener.onCancelled();
- }
- }
-
private interface PendingRequest {
void replay(InsetsController controller);
}
diff --git a/core/java/android/view/WindowInsetsAnimationControlListener.java b/core/java/android/view/WindowInsetsAnimationControlListener.java
index faaf9203af32..701bd3158b1e 100644
--- a/core/java/android/view/WindowInsetsAnimationControlListener.java
+++ b/core/java/android/view/WindowInsetsAnimationControlListener.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.Hide;
import android.annotation.NonNull;
import android.view.WindowInsets.Type.InsetsType;
import android.view.inputmethod.EditorInfo;
diff --git a/core/java/android/view/WindowInsetsController.java b/core/java/android/view/WindowInsetsController.java
index 0282ecac8920..2ad557e6d9f6 100644
--- a/core/java/android/view/WindowInsetsController.java
+++ b/core/java/android/view/WindowInsetsController.java
@@ -156,17 +156,16 @@ public interface WindowInsetsController {
* calculate {@link WindowInsetsAnimation#getInterpolatedFraction()}.
* @param listener The {@link WindowInsetsAnimationControlListener} that gets called when the
* windows are ready to be controlled, among other callbacks.
- * @param cancellationSignal A cancellation signal that the caller can use to cancel the
- * request to obtain control, or once they have control, to cancel the
- * control.
+ * @return A cancellation signal that the caller can use to cancel the request to obtain
+ * control, or once they have control, to cancel the control.
* @see WindowInsetsAnimation#getFraction()
* @see WindowInsetsAnimation#getInterpolatedFraction()
* @see WindowInsetsAnimation#getInterpolator()
* @see WindowInsetsAnimation#getDurationMillis()
*/
- void controlWindowInsetsAnimation(@InsetsType int types, long durationMillis,
+ @NonNull
+ CancellationSignal controlWindowInsetsAnimation(@InsetsType int types, long durationMillis,
@Nullable Interpolator interpolator,
- @Nullable CancellationSignal cancellationSignal,
@NonNull WindowInsetsAnimationControlListener listener);
/**