diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 076b33cc9d6a0..31911cb5b6fdb 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -683,7 +683,8 @@ public class SurfaceView extends View { mTranslator.translateRectInAppWindowToScreen(mScreenRect); } - if (!isHardwareAccelerated() || !mRtHandlingPositionUpdates) { + if (mSurfaceControl != null + && (!isHardwareAccelerated() || !mRtHandlingPositionUpdates)) { try { if (DEBUG) Log.d(TAG, String.format("%d updateSurfacePosition UI, " + "postion = [%d, %d, %d, %d]", System.identityHashCode(this), diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 58ef0af3fe79d..4a7b16eff93cd 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -1249,6 +1249,13 @@ public final class ViewRootImpl implements ViewParent, mIsAmbientMode = ambient; } + void setWindowVisibility(int visibility) { + if (visibility != mAttachInfo.mWindowVisibility) { + mAttachInfo.mWindowVisibility = visibility; + mView.dispatchWindowVisibilityChanged(visibility); + } + } + void setWindowStopped(boolean stopped) { if (mStopped != stopped) { mStopped = stopped; @@ -1263,6 +1270,7 @@ public final class ViewRootImpl implements ViewParent, if (renderer != null) { renderer.destroyHardwareResources(mView); } + mView.dispatchWindowVisibilityChanged(View.GONE); } } } @@ -1297,7 +1305,8 @@ public final class ViewRootImpl implements ViewParent, } int getHostVisibility() { - return (mAppVisible || mForceDecorViewVisibility) ? mView.getVisibility() : View.GONE; + return (mAppVisible || mForceDecorViewVisibility) && !mStopped + ? mView.getVisibility() : View.GONE; } /** @@ -1654,8 +1663,8 @@ public final class ViewRootImpl implements ViewParent, } if (viewVisibilityChanged) { - mAttachInfo.mWindowVisibility = viewVisibility; - host.dispatchWindowVisibilityChanged(viewVisibility); + setWindowVisibility(viewVisibility); + if (viewUserVisibilityChanged) { host.dispatchVisibilityAggregated(viewVisibility == View.VISIBLE); }