From d881a6796940d924b9f04def7204b31290ef35b2 Mon Sep 17 00:00:00 2001 From: Jacqueline Bronger Date: Tue, 7 Feb 2023 09:55:26 +0100 Subject: [PATCH] Fix NPE going from PiP to Fullscreen. Only happens when going to fullscreen when shell transitions are turned on. Bug: 271098548 Test: manual - make sure shell transitions are enabled, start a PiP, go to the menu and select the fullscreen option --> app should go to fullscreen and not just show a black screen. Change-Id: I848b808182a0b0bae11401d74765cfd25e864d15 --- .../wm/shell/pip/tv/TvPipMenuController.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java index be1f800b9d2e4..b18e21c03c630 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/pip/tv/TvPipMenuController.java @@ -276,15 +276,14 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis Rect pipBounds) { ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, "%s: resizePipMenu: %s", TAG, pipBounds.toShortString()); + if (pipBounds.isEmpty()) { return; } - - if (!isMenuReadyToMove()) { + if (!isMenuAttached()) { return; } - final SurfaceControl frontSurface = getSurfaceControl(mPipMenuView); final SurfaceControl backSurface = getSurfaceControl(mPipBackgroundView); final Rect menuBounds = calculateMenuSurfaceBounds(pipBounds); @@ -321,7 +320,7 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis } return; } - if (!isMenuReadyToMove()) { + if (!isMenuAttached()) { return; } @@ -344,12 +343,12 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis syncGroup.markSyncReady(); } - private boolean isMenuReadyToMove() { + private boolean isMenuAttached() { final boolean ready = mPipMenuView != null && mPipMenuView.getViewRootImpl() != null && mPipBackgroundView != null && mPipBackgroundView.getViewRootImpl() != null; if (!ready) { ProtoLog.v(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, - "%s: Not going to move PiP, either menu or its parent is not created.", TAG); + "%s: the menu surfaces are not attached.", TAG); } return ready; } @@ -368,6 +367,9 @@ public class TvPipMenuController implements PipMenuController, TvPipMenuView.Lis @Override public void updateMenuBounds(Rect pipBounds) { + if (!isMenuAttached()) { + return; + } final Rect menuBounds = calculateMenuSurfaceBounds(pipBounds); ProtoLog.d(ShellProtoLogGroup.WM_SHELL_PICTURE_IN_PICTURE, "%s: updateMenuBounds: %s", TAG, menuBounds.toShortString());