InsetSourceConsumer: Ensure we release Leash when finished.
SurfaceControl resources may be heavy weight, and so we explicitly release them when finished. Specifically, we need to fix this to keep the CloseGuard from complaining in strict-mode. Bug: 150805473 Test: Existing tests pass Change-Id: Ie3c609f79a953374a4d336465676cdc312679f93
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user