diff --git a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java index 114965fcab..e5fd605904 100644 --- a/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java +++ b/quickstep/src/com/android/launcher3/QuickstepTransitionManager.java @@ -2042,10 +2042,5 @@ public class QuickstepTransitionManager implements OnDeviceProfileChangeListener setCrossWindowBlursEnabled( CrossWindowBlurListeners.getInstance().isCrossWindowBlurEnabled()); } - - @Override - public void setSurface(SurfaceControl surface) { - super.setSurface(surface); - } } } diff --git a/quickstep/src/com/android/launcher3/statehandlers/DepthController.java b/quickstep/src/com/android/launcher3/statehandlers/DepthController.java index 7c62763943..70aa5d77b8 100644 --- a/quickstep/src/com/android/launcher3/statehandlers/DepthController.java +++ b/quickstep/src/com/android/launcher3/statehandlers/DepthController.java @@ -158,6 +158,12 @@ public class DepthController extends BaseDepthController implements StateHandler super.applyDepthAndBlur(); } + @Override + protected void onInvalidSurface() { + // Lets wait for surface to become valid again + mLauncher.getDragLayer().getViewTreeObserver().addOnDrawListener(mOnDrawListener); + } + @Override public void onMultiWindowModeChanged(boolean isInMultiWindowMode) { mIgnoreStateChangesDuringMultiWindowAnimation = true; diff --git a/quickstep/src/com/android/quickstep/util/BaseDepthController.java b/quickstep/src/com/android/quickstep/util/BaseDepthController.java index 23cfb39ec2..931e46876e 100644 --- a/quickstep/src/com/android/quickstep/util/BaseDepthController.java +++ b/quickstep/src/com/android/quickstep/util/BaseDepthController.java @@ -88,6 +88,8 @@ public class BaseDepthController { */ protected boolean mInEarlyWakeUp; + private boolean mWaitingOnSurfaceValidity; + public BaseDepthController(Launcher activity) { mLauncher = activity; mMaxBlurRadius = activity.getResources().getInteger(R.integer.max_depth_blur_radius); @@ -115,6 +117,8 @@ public class BaseDepthController { } } + protected void onInvalidSurface() { } + protected void applyDepthAndBlur() { float depth = mDepth; IBinder windowToken = mLauncher.getRootView().getWindowToken(); @@ -128,9 +132,15 @@ public class BaseDepthController { if (!BlurUtils.supportsBlursOnWindows()) { return; } - if (mSurface == null || !mSurface.isValid()) { + if (mSurface == null) { return; } + if (!mSurface.isValid()) { + mWaitingOnSurfaceValidity = true; + onInvalidSurface(); + return; + } + mWaitingOnSurfaceValidity = false; boolean hasOpaqueBg = mLauncher.getScrimView().isFullyOpaque(); boolean isSurfaceOpaque = !mHasContentBehindLauncher && hasOpaqueBg && !mPauseBlurs; @@ -174,7 +184,7 @@ public class BaseDepthController { * Sets the specified app target surface to apply the blur to. */ protected void setSurface(SurfaceControl surface) { - if (mSurface != surface) { + if (mSurface != surface || mWaitingOnSurfaceValidity) { mSurface = surface; applyDepthAndBlur(); }