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

Commit b14dfe20 authored by John Reck's avatar John Reck
Browse files

Revert "Revert "Workaround apps not calling super.onDetachedFromWindow()""

This reverts commit bac16fae.

Change-Id: I61e997b23fac1aa984129fdc0328426ff8891bdd
parent acbc41d6
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -255,8 +255,9 @@ public class SurfaceView extends View {
        updateWindow(false, false);
    }

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

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

    @Override
+3 −2
Original line number Diff line number Diff line
@@ -228,10 +228,11 @@ public class TextureView extends View {
        }
    }

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

    private void destroySurface() {
+14 −0
Original line number Diff line number Diff line
@@ -13116,6 +13116,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
     * @see #onAttachedToWindow()
     */
    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;
        mPrivateFlags3 &= ~PFLAG3_IS_LAID_OUT;
@@ -13303,6 +13316,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
        }
        onDetachedFromWindow();
        onDetachedFromWindowInternal();
        ListenerInfo li = mListenerInfo;
        final CopyOnWriteArrayList<OnAttachStateChangeListener> listeners =
+4 −3
Original line number Diff line number Diff line
@@ -4729,10 +4729,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        if (mEditor != null) mEditor.onAttachedToWindow();
    }

    /** @hide */
    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();

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

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

        super.onDetachedFromWindowInternal();
    }

    @Override
+3 −7
Original line number Diff line number Diff line
@@ -595,13 +595,9 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
        mDetached = false;
    }

    /**
     * This method is used as part of the View class and is not normally
     * called or subclassed by clients of GLSurfaceView.
     * Must not be called before a renderer has been set.
     */
    /** @hide */
    @Override
    protected void onDetachedFromWindow() {
    protected void onDetachedFromWindowInternal() {
        if (LOG_ATTACH_DETACH) {
            Log.d(TAG, "onDetachedFromWindow");
        }
@@ -609,7 +605,7 @@ public class GLSurfaceView extends SurfaceView implements SurfaceHolder.Callback
            mGLThread.requestExitAndWait();
        }
        mDetached = true;
        super.onDetachedFromWindow();
        super.onDetachedFromWindowInternal();
    }

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