Reset visibilities if mDummyControlTarget is the control target

The leash visibility won't be reset while the control target is changed
anymore. So we need to reset it when mDummyControlTarget gets the
control.

Fix: 156342134
Test: Open Camera and see if status bar is visible while receiving a
      heads up notification.
Change-Id: Ieca5b08f4342ec350bb57d333f1e34149050db45
This commit is contained in:
Tiger Huang
2020-05-12 19:53:18 +08:00
parent c8d5a68525
commit af2c7c42dc

View File

@@ -60,7 +60,37 @@ class InsetsPolicy {
private final IntArray mShowingTransientTypes = new IntArray();
/** For resetting visibilities of insets sources. */
private final InsetsControlTarget mDummyControlTarget = new InsetsControlTarget() { };
private final InsetsControlTarget mDummyControlTarget = new InsetsControlTarget() {
@Override
public void notifyInsetsControlChanged() {
boolean hasLeash = false;
final InsetsSourceControl[] controls =
mStateController.getControlsForDispatch(this);
if (controls == null) {
return;
}
for (InsetsSourceControl control : controls) {
final @InternalInsetsType int type = control.getType();
if (mShowingTransientTypes.indexOf(type) != -1) {
// The visibilities of transient bars will be handled with animations.
continue;
}
final SurfaceControl leash = control.getLeash();
if (leash != null) {
hasLeash = true;
// We use alpha to control the visibility here which aligns the logic at
// SurfaceAnimator.createAnimationLeash
mDisplayContent.getPendingTransaction().setAlpha(
leash, InsetsState.getDefaultVisibility(type) ? 1f : 0f);
}
}
if (hasLeash) {
mDisplayContent.scheduleAnimation();
}
}
};
private WindowState mFocusedWin;
private BarWindow mStatusBar = new BarWindow(StatusBarManager.WINDOW_STATUS_BAR);