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

Commit 16260e73 authored by Romain Guy's avatar Romain Guy
Browse files

Dispatch onDetachedFromWindow before destroying everything

Bug #5245686

Change-Id: I637178ee0bb47fbec9b59198b388bb8de22c1786
parent cbe67d5b
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -344,9 +344,9 @@ public abstract class HardwareRenderer {
        static final int EGL_SURFACE_TYPE = 0x3033;
        static final int EGL_SWAP_BEHAVIOR_PRESERVED_BIT = 0x0400;        

        private static final int SURFACE_STATE_ERROR = 0;
        private static final int SURFACE_STATE_SUCCESS = 1;
        private static final int SURFACE_STATE_UPDATED = 2;
        static final int SURFACE_STATE_ERROR = 0;
        static final int SURFACE_STATE_SUCCESS = 1;
        static final int SURFACE_STATE_UPDATED = 2;
        
        static EGL10 sEgl;
        static EGLDisplay sEglDisplay;
@@ -913,8 +913,7 @@ public abstract class HardwareRenderer {

        @Override
        void destroyLayers(View view) {
            if (view != null && isEnabled()) {
                checkCurrent();
            if (view != null && isEnabled() && checkCurrent() != SURFACE_STATE_ERROR) {
                destroyHardwareLayer(view);
                GLES20Canvas.flushCaches(GLES20Canvas.FLUSH_CACHES_LAYERS);
            }
+5 −0
Original line number Diff line number Diff line
@@ -285,6 +285,11 @@ public class TextureView extends View {
        }
    }

    @Override
    boolean destroyLayer() {
        return false;
    }

    @Override
    HardwareLayer getHardwareLayer() {
        if (mLayer == null) {
+9 −4
Original line number Diff line number Diff line
@@ -2136,6 +2136,10 @@ public final class ViewRootImpl extends Handler implements ViewParent,

    void dispatchDetachedFromWindow() {
        if (mView != null && mView.mAttachInfo != null) {
            if (mAttachInfo.mHardwareRenderer != null &&
                    mAttachInfo.mHardwareRenderer.isEnabled()) {
                mAttachInfo.mHardwareRenderer.validate();
            }
            mView.dispatchDetachedFromWindow();
        }

@@ -3564,6 +3568,11 @@ public final class ViewRootImpl extends Handler implements ViewParent,
        checkThread();
        if (LOCAL_LOGV) Log.v(TAG, "DIE in " + this + " of " + mSurface);
        synchronized (this) {
            if (mAdded) {
                mAdded = false;
                dispatchDetachedFromWindow();
            }

            if (mAdded && !mFirst) {
                destroyHardwareRenderer();

@@ -3584,10 +3593,6 @@ public final class ViewRootImpl extends Handler implements ViewParent,

                mSurface.release();
            }
            if (mAdded) {
                mAdded = false;
                dispatchDetachedFromWindow();
            }
        }
    }