summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/InsetsSourceConsumer.java9
-rw-r--r--core/java/android/view/InsetsSourceControl.java2
-rw-r--r--services/core/java/com/android/server/wm/InsetsSourceProvider.java2
3 files changed, 9 insertions, 4 deletions
diff --git a/core/java/android/view/InsetsSourceConsumer.java b/core/java/android/view/InsetsSourceConsumer.java
index 6aab6359d23e..4d9033df89e1 100644
--- a/core/java/android/view/InsetsSourceConsumer.java
+++ b/core/java/android/view/InsetsSourceConsumer.java
@@ -25,6 +25,7 @@ import static android.view.InsetsSourceConsumerProto.IS_REQUESTED_VISIBLE;
import static android.view.InsetsSourceConsumerProto.PENDING_FRAME;
import static android.view.InsetsSourceConsumerProto.PENDING_VISIBLE_FRAME;
import static android.view.InsetsSourceConsumerProto.SOURCE_CONTROL;
+import static android.view.InsetsSourceControl.INVALID_HINTS;
import static android.view.InsetsState.ITYPE_IME;
import static android.view.InsetsState.getDefaultVisibility;
import static android.view.InsetsState.toPublicType;
@@ -163,8 +164,10 @@ public class InsetsSourceConsumer {
// We are gaining control, and need to run an animation since previous state
// didn't match
final boolean requestedVisible = isRequestedVisibleAwaitingControl();
- final boolean needAnimation = requestedVisible != mState.getSource(mType).isVisible();
- if (control.getLeash() != null && (needAnimation || mIsAnimationPending)) {
+ final boolean fakeControl = INVALID_HINTS.equals(control.getInsetsHint());
+ final boolean needsAnimation = requestedVisible != mState.getSource(mType).isVisible()
+ && !fakeControl;
+ if (control.getLeash() != null && (needsAnimation || mIsAnimationPending)) {
if (DEBUG) Log.d(TAG, String.format("Gaining control in %s, requestedVisible: %b",
mController.getHost().getRootViewTitle(), requestedVisible));
if (requestedVisible) {
@@ -174,7 +177,7 @@ public class InsetsSourceConsumer {
}
mIsAnimationPending = false;
} else {
- if (needAnimation) {
+ if (needsAnimation) {
// We need animation but we haven't had a leash yet. Set this flag that when we
// get the leash we can play the deferred animation.
mIsAnimationPending = true;
diff --git a/core/java/android/view/InsetsSourceControl.java b/core/java/android/view/InsetsSourceControl.java
index 9d98a3e4b0e1..2cf827db38db 100644
--- a/core/java/android/view/InsetsSourceControl.java
+++ b/core/java/android/view/InsetsSourceControl.java
@@ -39,6 +39,8 @@ import java.util.function.Consumer;
*/
public class InsetsSourceControl implements Parcelable {
+ public static final Insets INVALID_HINTS = Insets.of(-1, -1, -1, -1);
+
private final @InternalInsetsType int mType;
private final @Nullable SurfaceControl mLeash;
private final Point mSurfacePosition;
diff --git a/services/core/java/com/android/server/wm/InsetsSourceProvider.java b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
index e04644c564f8..8413c5442536 100644
--- a/services/core/java/com/android/server/wm/InsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/InsetsSourceProvider.java
@@ -123,7 +123,7 @@ abstract class InsetsSourceProvider {
mDisplayContent = displayContent;
mStateController = stateController;
mFakeControl = new InsetsSourceControl(
- source.getType(), null /* leash */, new Point(), Insets.NONE);
+ source.getType(), null /* leash */, new Point(), InsetsSourceControl.INVALID_HINTS);
mControllable = InsetsPolicy.isInsetsTypeControllable(source.getType());
}