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

Commit f209ef9c authored by Craig Stout's avatar Craig Stout
Browse files

Fix TextView drawing issue.

The predraw listener was lost because the view was detached and reattached
after layout but before the first draw.

b/15376022

Change-Id: Idf38f7373df3c457f54b6e3f995b00256914f775
parent 620a5466
Loading
Loading
Loading
Loading
+14 −3
Original line number Diff line number Diff line
@@ -293,6 +293,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener


    private boolean mPreDrawRegistered;
    private boolean mPreDrawListenerDetached;

    // A flag to prevent repeated movements from escaping the enclosing text view. The idea here is
    // that if a user is holding down a movement key to traverse text, we shouldn't also traverse
@@ -4719,6 +4720,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        }
    }

    private void unregisterForPreDraw() {
        getViewTreeObserver().removeOnPreDrawListener(this);
        mPreDrawRegistered = false;
        mPreDrawListenerDetached = false;
    }

    /**
     * {@inheritDoc}
     */
@@ -4770,8 +4777,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
            mEditor.startSelectionActionMode();
        }

        getViewTreeObserver().removeOnPreDrawListener(this);
        mPreDrawRegistered = false;
        unregisterForPreDraw();

        return true;
    }
@@ -4783,6 +4789,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
        mTemporaryDetach = false;

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

        if (mPreDrawListenerDetached) {
            getViewTreeObserver().addOnPreDrawListener(this);
            mPreDrawListenerDetached = false;
        }
    }

    /** @hide */
@@ -4790,7 +4801,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    protected void onDetachedFromWindowInternal() {
        if (mPreDrawRegistered) {
            getViewTreeObserver().removeOnPreDrawListener(this);
            mPreDrawRegistered = false;
            mPreDrawListenerDetached = true;
        }

        resetResolvedDrawables();