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

Commit 198d2084 authored by John Reck's avatar John Reck
Browse files

Workaround apps not calling super.onDetachedFromWindow()

 Bug: 13338698
 Move the releasing of hardware resources to a new
 @hide onDetachedFromWindowInternal

Change-Id: I52b4e6ba4d5b3ce20b89cabffa248d1d780e3e81
parent cb20740e
Loading
Loading
Loading
Loading
+2 −2
Original line number Original line Diff line number Diff line
@@ -256,7 +256,7 @@ public class SurfaceView extends View {
    }
    }


    @Override
    @Override
    protected void onDetachedFromWindow() {
    protected void onDetachedFromWindowInternal() {
        if (mGlobalListenersAdded) {
        if (mGlobalListenersAdded) {
            ViewTreeObserver observer = getViewTreeObserver();
            ViewTreeObserver observer = getViewTreeObserver();
            observer.removeOnScrollChangedListener(mScrollChangedListener);
            observer.removeOnScrollChangedListener(mScrollChangedListener);
@@ -278,7 +278,7 @@ public class SurfaceView extends View {
        mSession = null;
        mSession = null;
        mLayout.token = null;
        mLayout.token = null;


        super.onDetachedFromWindow();
        super.onDetachedFromWindowInternal();
    }
    }


    @Override
    @Override
+2 −2
Original line number Original line Diff line number Diff line
@@ -229,9 +229,9 @@ public class TextureView extends View {
    }
    }


    @Override
    @Override
    protected void onDetachedFromWindow() {
    protected void onDetachedFromWindowInternal() {
        super.onDetachedFromWindow();
        destroySurface();
        destroySurface();
        super.onDetachedFromWindowInternal();
    }
    }


    private void destroySurface() {
    private void destroySurface() {
+14 −0
Original line number Original line Diff line number Diff line
@@ -13110,6 +13110,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * @see #onAttachedToWindow()
     * @see #onAttachedToWindow()
     */
     */
    protected void onDetachedFromWindow() {
    protected void onDetachedFromWindow() {
    }
    /**
     * This is a framework-internal mirror of onDetachedFromWindow() that's called
     * after onDetachedFromWindow().
     *
     * If you override this you *MUST* call super.onDetachedFromWindowInternal()!
     * The super method should be called at the end of the overriden method to ensure
     * subclasses are destroyed first
     *
     * @hide
     */
    protected void onDetachedFromWindowInternal() {
        mPrivateFlags &= ~PFLAG_CANCEL_NEXT_UP_EVENT;
        mPrivateFlags &= ~PFLAG_CANCEL_NEXT_UP_EVENT;
        mPrivateFlags3 &= ~PFLAG3_IS_LAID_OUT;
        mPrivateFlags3 &= ~PFLAG3_IS_LAID_OUT;
@@ -13297,6 +13310,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        }
        }
        onDetachedFromWindow();
        onDetachedFromWindow();
        onDetachedFromWindowInternal();
        ListenerInfo li = mListenerInfo;
        ListenerInfo li = mListenerInfo;
        final CopyOnWriteArrayList<OnAttachStateChangeListener> listeners =
        final CopyOnWriteArrayList<OnAttachStateChangeListener> listeners =
+3 −3
Original line number Original line Diff line number Diff line
@@ -4730,9 +4730,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    }
    }


    @Override
    @Override
    protected void onDetachedFromWindow() {
    protected void onDetachedFromWindowInternal() {
        super.onDetachedFromWindow();

        if (mPreDrawRegistered) {
        if (mPreDrawRegistered) {
            getViewTreeObserver().removeOnPreDrawListener(this);
            getViewTreeObserver().removeOnPreDrawListener(this);
            mPreDrawRegistered = false;
            mPreDrawRegistered = false;
@@ -4741,6 +4739,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        resetResolvedDrawables();
        resetResolvedDrawables();


        if (mEditor != null) mEditor.onDetachedFromWindow();
        if (mEditor != null) mEditor.onDetachedFromWindow();

        super.onDetachedFromWindowInternal();
    }
    }


    @Override
    @Override
+2 −2
Original line number Original line Diff line number Diff line
@@ -601,7 +601,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
     * Must not be called before a renderer has been set.
     * Must not be called before a renderer has been set.
     */
     */
    @Override
    @Override
    protected void onDetachedFromWindow() {
    protected void onDetachedFromWindowInternal() {
        if (LOG_ATTACH_DETACH) {
        if (LOG_ATTACH_DETACH) {
            Log.d(TAG, "onDetachedFromWindow");
            Log.d(TAG, "onDetachedFromWindow");
        }
        }
@@ -609,7 +609,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
            mGLThread.requestExitAndWait();
            mGLThread.requestExitAndWait();
        }
        }
        mDetached = true;
        mDetached = true;
        super.onDetachedFromWindow();
        super.onDetachedFromWindowInternal();
    }
    }


    // ----------------------------------------------------------------------
    // ----------------------------------------------------------------------