Merge "Prevent crash when manipulating hidden SurfaceView."
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index dbbbb58..0c606fe 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -2534,26 +2534,32 @@
win.mAttrs.height = bottom - top;
win.setWindowScale(win.mRequestedWidth, win.mRequestedHeight);
- if (SHOW_TRANSACTIONS) {
- Slog.i(TAG_WM, ">>> OPEN TRANSACTION repositionChild");
- }
+ if (win.mHasSurface) {
+ if (SHOW_TRANSACTIONS) {
+ Slog.i(TAG_WM, ">>> OPEN TRANSACTION repositionChild");
+ }
- SurfaceControl.openTransaction();
+ SurfaceControl.openTransaction();
- win.applyGravityAndUpdateFrame();
- win.mWinAnimator.computeShownFrameLocked();
+ try {
- win.mWinAnimator.setSurfaceBoundariesLocked(false);
+ win.applyGravityAndUpdateFrame();
+ win.mWinAnimator.computeShownFrameLocked();
- if (deferTransactionUntilFrame > 0) {
- win.mWinAnimator.mSurfaceController.deferTransactionUntil(
- win.mAttachedWindow.mWinAnimator.mSurfaceController.getHandle(),
- deferTransactionUntilFrame);
- }
+ win.mWinAnimator.setSurfaceBoundariesLocked(false);
- SurfaceControl.closeTransaction();
- if (SHOW_TRANSACTIONS) {
- Slog.i(TAG_WM, "<<< CLOSE TRANSACTION repositionChild");
+ if (deferTransactionUntilFrame > 0) {
+ win.mWinAnimator.mSurfaceController.deferTransactionUntil(
+ win.mAttachedWindow.mWinAnimator.mSurfaceController.getHandle(),
+ deferTransactionUntilFrame);
+ }
+
+ } finally {
+ SurfaceControl.closeTransaction();
+ if (SHOW_TRANSACTIONS) {
+ Slog.i(TAG_WM, "<<< CLOSE TRANSACTION repositionChild");
+ }
+ }
}
outFrame = win.mCompatFrame;