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

Commit 9c17a4c1 authored by Adam Powell's avatar Adam Powell
Browse files

Fix bug 2918587 Infinite loop and memory leak in AdapterView

Change-Id: Icb63b186c56c2d731003dc38a8ff7a93a69a94e7
parent 2e86809b
Loading
Loading
Loading
Loading
+11 −4
Original line number Diff line number Diff line
@@ -808,7 +808,6 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup {
            mNextSelectedPosition = INVALID_POSITION;
            mNextSelectedRowId = INVALID_ROW_ID;
            mNeedSync = false;
            checkSelectionChanged();

            checkFocus();
            requestLayout();
@@ -819,13 +818,21 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup {
        }
    }

    private class SelectionNotifier extends Handler implements Runnable {
    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        removeCallbacks(mSelectionNotifier);
    }

    private class SelectionNotifier implements Runnable {
        public void run() {
            if (mDataChanged) {
                // Data has changed between when this SelectionNotifier
                // was posted and now. We need to wait until the AdapterView
                // has been synched to the new data.
                if (getAdapter() != null) {
                    post(this);
                }
            } else {
                fireOnSelected();
            }
@@ -842,7 +849,7 @@ public abstract class AdapterView<T extends Adapter> extends ViewGroup {
                if (mSelectionNotifier == null) {
                    mSelectionNotifier = new SelectionNotifier();
                }
                mSelectionNotifier.post(mSelectionNotifier);
                post(mSelectionNotifier);
            } else {
                fireOnSelected();
            }