summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/InsetsSourceConsumer.java33
-rw-r--r--core/java/android/view/InsetsSourceControl.java6
2 files changed, 24 insertions, 15 deletions
diff --git a/core/java/android/view/InsetsSourceConsumer.java b/core/java/android/view/InsetsSourceConsumer.java
index 92ac4259c349..f07f1ce186fe 100644
--- a/core/java/android/view/InsetsSourceConsumer.java
+++ b/core/java/android/view/InsetsSourceConsumer.java
@@ -87,6 +87,7 @@ public class InsetsSourceConsumer {
if (mSourceControl == control) {
return;
}
+ final InsetsSourceControl lastControl = mSourceControl;
mSourceControl = control;
// We are loosing control
@@ -97,25 +98,27 @@ public class InsetsSourceConsumer {
mState.getSource(getType()).setVisible(
mController.getLastDispatchedState().getSource(getType()).isVisible());
applyLocalVisibilityOverride();
- return;
- }
-
- // We are gaining control, and need to run an animation since previous state didn't match
- if (mRequestedVisible != mState.getSource(mType).isVisible()) {
- if (mRequestedVisible) {
- showTypes[0] |= toPublicType(getType());
+ } else {
+ // We are gaining control, and need to run an animation since previous state
+ // didn't match
+ if (mRequestedVisible != mState.getSource(mType).isVisible()) {
+ if (mRequestedVisible) {
+ showTypes[0] |= toPublicType(getType());
+ } else {
+ hideTypes[0] |= toPublicType(getType());
+ }
} else {
- hideTypes[0] |= toPublicType(getType());
+ // We are gaining control, but don't need to run an animation.
+ // However make sure that the leash visibility is still up to date.
+ if (applyLocalVisibilityOverride()) {
+ mController.notifyVisibilityChanged();
+ }
+ applyHiddenToControl();
}
- return;
}
-
- // We are gaining control, but don't need to run an animation. However make sure that the
- // leash visibility is still up to date.
- if (applyLocalVisibilityOverride()) {
- mController.notifyVisibilityChanged();
+ if (lastControl != null) {
+ lastControl.release();
}
- applyHiddenToControl();
}
@VisibleForTesting
diff --git a/core/java/android/view/InsetsSourceControl.java b/core/java/android/view/InsetsSourceControl.java
index 7be3e6a42475..29ba56a5fbb9 100644
--- a/core/java/android/view/InsetsSourceControl.java
+++ b/core/java/android/view/InsetsSourceControl.java
@@ -94,6 +94,12 @@ public class InsetsSourceControl implements Parcelable {
dest.writeParcelable(mSurfacePosition, 0 /* flags*/);
}
+ public void release() {
+ if (mLeash != null) {
+ mLeash.release();
+ }
+ }
+
public static final @android.annotation.NonNull Creator<InsetsSourceControl> CREATOR
= new Creator<InsetsSourceControl>() {
public InsetsSourceControl createFromParcel(Parcel in) {