Fix the NPE crash when device reboot with hide cutout set

1. Set initial values to the fields.
2. Also listen to onDisplayAdded for the case that only the
   onDisplayAdded is being called after reboot.

Bug: 220884764
Test: 1. Go Settings > System > Developer option > Display cutout
      2. Select Rednder apps below cutout area
      3. Reboot device
Change-Id: I35ba3dcebcded19373901b88f7bb208633587392
This commit is contained in:
Shawn Lin
2022-06-23 06:20:00 +00:00
parent 1d7f570eaa
commit 2a4ddb9c14

View File

@@ -64,8 +64,8 @@ class HideDisplayCutoutOrganizer extends DisplayAreaOrganizer {
@VisibleForTesting
final Rect mCurrentDisplayBounds = new Rect();
// The default display cutout in natural orientation.
private Insets mDefaultCutoutInsets;
private Insets mCurrentCutoutInsets;
private Insets mDefaultCutoutInsets = Insets.NONE;
private Insets mCurrentCutoutInsets = Insets.NONE;
private boolean mIsDefaultPortrait;
private int mStatusBarHeight;
@VisibleForTesting
@@ -77,28 +77,36 @@ class HideDisplayCutoutOrganizer extends DisplayAreaOrganizer {
private final DisplayController.OnDisplaysChangedListener mListener =
new DisplayController.OnDisplaysChangedListener() {
@Override
public void onDisplayAdded(int displayId) {
onDisplayChanged(displayId);
}
@Override
public void onDisplayConfigurationChanged(int displayId, Configuration newConfig) {
if (displayId != DEFAULT_DISPLAY) {
return;
}
DisplayLayout displayLayout =
mDisplayController.getDisplayLayout(DEFAULT_DISPLAY);
if (displayLayout == null) {
return;
}
final boolean rotationChanged = mRotation != displayLayout.rotation();
mRotation = displayLayout.rotation();
if (rotationChanged || isDisplayBoundsChanged()) {
updateBoundsAndOffsets(true /* enabled */);
final WindowContainerTransaction wct = new WindowContainerTransaction();
final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
applyAllBoundsAndOffsets(wct, t);
applyTransaction(wct, t);
}
onDisplayChanged(displayId);
}
};
private void onDisplayChanged(int displayId) {
if (displayId != DEFAULT_DISPLAY) {
return;
}
final DisplayLayout displayLayout = mDisplayController.getDisplayLayout(DEFAULT_DISPLAY);
if (displayLayout == null) {
return;
}
final boolean rotationChanged = mRotation != displayLayout.rotation();
mRotation = displayLayout.rotation();
if (rotationChanged || isDisplayBoundsChanged()) {
updateBoundsAndOffsets(true /* enabled */);
final WindowContainerTransaction wct = new WindowContainerTransaction();
final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
applyAllBoundsAndOffsets(wct, t);
applyTransaction(wct, t);
}
}
HideDisplayCutoutOrganizer(Context context, DisplayController displayController,
ShellExecutor mainExecutor) {
super(mainExecutor);