diff options
| -rw-r--r-- | core/java/android/view/InsetsSourceConsumer.java | 33 | ||||
| -rw-r--r-- | core/java/android/view/InsetsSourceControl.java | 6 |
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) { |