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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user