Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 01d5edc4 authored by Romain Guy's avatar Romain Guy
Browse files

Prevent crash when detaching a SurfaceView.

Bug #3400461

Change-Id: I837d9d47b12bc5a8798b6dbb720de43b7539c3bc
parent 885153e2
Loading
Loading
Loading
Loading
+16 −6
Original line number Diff line number Diff line
@@ -174,6 +174,7 @@ public class SurfaceView extends View {
                    return true;
                }
            };
    private boolean mGlobalListenersAdded;

    public SurfaceView(Context context) {
        super(context);
@@ -212,9 +213,13 @@ public class SurfaceView extends View {
        mLayout.token = getWindowToken();
        mLayout.setTitle("SurfaceView");
        mViewVisibility = getVisibility() == VISIBLE;

        if (!mGlobalListenersAdded) {
            ViewTreeObserver observer = getViewTreeObserver();
            observer.addOnScrollChangedListener(mScrollChangedListener);
            observer.addOnPreDrawListener(mDrawListener);
            mGlobalListenersAdded = true;
        }
    }

    @Override
@@ -275,9 +280,13 @@ public class SurfaceView extends View {
    
    @Override
    protected void onDetachedFromWindow() {
        if (mGlobalListenersAdded) {
            ViewTreeObserver observer = getViewTreeObserver();
            observer.removeOnScrollChangedListener(mScrollChangedListener);
            observer.removeOnPreDrawListener(mDrawListener);
            mGlobalListenersAdded = false;
        }

        mRequestedVisible = false;
        updateWindow(false, false);
        mHaveFrame = false;
@@ -285,6 +294,7 @@ public class SurfaceView extends View {
            try {
                mSession.remove(mWindow);
            } catch (RemoteException ex) {
                // Not much we can do here...
            }
            mWindow = null;
        }
+3 −2
Original line number Diff line number Diff line
@@ -7801,7 +7801,6 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
    }

    void dispatchDetachedFromWindow() {
        //System.out.println("Detached! " + this);
        AttachInfo info = mAttachInfo;
        if (info != null) {
            int vis = info.mWindowVisibility;
@@ -7811,10 +7810,12 @@ public class View implements Drawable.Callback, KeyEvent.Callback, Accessibility
        }

        onDetachedFromWindow();

        if ((mPrivateFlags & SCROLL_CONTAINER_ADDED) != 0) {
            mAttachInfo.mScrollContainers.remove(this);
            mPrivateFlags &= ~SCROLL_CONTAINER_ADDED;
        }

        mAttachInfo = null;
    }