Merge "Defer adding surface changed callback until view root is valid" into tm-qpr-dev am: c04576ad6e
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/apps/Launcher3/+/19628908
Change-Id: I8f43ab2e866c34ccddd4c802c4892714160a66f5
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/quickstep/src/com/android/quickstep/ViewUtils.java b/quickstep/src/com/android/quickstep/ViewUtils.java
index 1bb95b9..b132067 100644
--- a/quickstep/src/com/android/quickstep/ViewUtils.java
+++ b/quickstep/src/com/android/quickstep/ViewUtils.java
@@ -53,13 +53,13 @@
final Runnable mFinishCallback;
final BooleanSupplier mCancelled;
final Handler mHandler;
+ boolean mSurfaceCallbackRegistered = false;
boolean mFinished;
int mDeferFrameCount = 1;
FrameHandler(View view, Runnable finishCallback, BooleanSupplier cancelled) {
mViewRoot = view.getViewRootImpl();
- mViewRoot.addSurfaceChangedCallback(this);
mFinishCallback = finishCallback;
mCancelled = cancelled;
mHandler = new Handler();
@@ -103,6 +103,10 @@
private boolean schedule() {
if (mViewRoot != null && mViewRoot.getView() != null) {
+ if (!mSurfaceCallbackRegistered) {
+ mSurfaceCallbackRegistered = true;
+ mViewRoot.addSurfaceChangedCallback(this);
+ }
mViewRoot.registerRtFrameCallback(this);
mViewRoot.getView().invalidate();
return true;
@@ -119,7 +123,10 @@
if (mFinishCallback != null) {
mFinishCallback.run();
}
- mViewRoot.removeSurfaceChangedCallback(this);
+ if (mViewRoot != null) {
+ mViewRoot.removeSurfaceChangedCallback(this);
+ mSurfaceCallbackRegistered = false;
+ }
}
}
}