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

Commit d22db216 authored by Alan Viverette's avatar Alan Viverette
Browse files

Refactor AbsListView position scrollers for better abstraction

The AbsListView sub-scroller knows nothing about layout. That's now
handled by ListView and GridView, with subclasses of AbsListView using
the default PositionScroller. Removes unnecessary (unreleased) APIs.

Also fixes a bounds check that was using the item position rather than
the child view position.

BUG: 13006641
Change-Id: I2adb0f15623e32295facf81f5ada974083ba03ce
parent d63b4314
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -31628,12 +31628,10 @@ package android.widget {
    method public int getCheckedItemPosition();
    method public android.util.SparseBooleanArray getCheckedItemPositions();
    method public int getChoiceMode();
    method public int getFirstPositionForRow(int);
    method public int getListPaddingBottom();
    method public int getListPaddingLeft();
    method public int getListPaddingRight();
    method public int getListPaddingTop();
    method public int getRowForPosition(int);
    method public android.view.View getSelectedView();
    method public android.graphics.drawable.Drawable getSelector();
    method public java.lang.CharSequence getTextFilter();
+2310 −2282

File changed.

Preview size limit exceeded, changes collapsed.

+33 −7
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo.CollectionInfo;
import android.view.accessibility.AccessibilityNodeInfo.CollectionItemInfo;
import android.view.animation.GridLayoutAnimationController;
import android.widget.AbsListView.AbsPositionScroller;
import android.widget.ListView.ListViewPositionScroller;
import android.widget.RemoteViews.RemoteView;

import java.lang.annotation.Retention;
@@ -1027,13 +1029,8 @@ public class GridView extends AbsListView {
    }

    @Override
    public int getRowForPosition(int position) {
        return position / mNumColumns;
    }

    @Override
    public int getFirstPositionForRow(int row) {
        return row * mNumColumns;
    AbsPositionScroller createPositionScroller() {
        return new GridViewPositionScroller();
    }

    @Override
@@ -2357,4 +2354,33 @@ public class GridView extends AbsListView {
        final CollectionItemInfo itemInfo = CollectionItemInfo.obtain(column, 1, row, 1, isHeading);
        info.setCollectionItemInfo(itemInfo);
    }

    /**
     * Sub-position scroller that understands the layout of a GridView.
     */
    class GridViewPositionScroller extends AbsSubPositionScroller {
        @Override
        public int getRowForPosition(int position) {
            return position / mNumColumns;
        }

        @Override
        public int getFirstPositionForRow(int row) {
            return row * mNumColumns;
        }

        @Override
        public int getHeightForRow(int row) {
            final int firstRowPosition = row * mNumColumns;
            final int lastRowPosition = Math.min(getCount(), firstRowPosition + mNumColumns);
            int maxHeight = 0;
            for (int i = firstRowPosition; i < lastRowPosition; i++) {
                final int height = getHeightForPosition(i);
                if (height > maxHeight) {
                    maxHeight = height;
                }
            }
            return maxHeight;
        }
    }
}
+22 −7
Original line number Diff line number Diff line
@@ -3775,13 +3775,8 @@ public class ListView extends AbsListView {
    }

    @Override
    public int getRowForPosition(int position) {
        return position;
    }

    @Override
    public int getFirstPositionForRow(int row) {
        return row;
    AbsPositionScroller createPositionScroller() {
        return new ListViewPositionScroller();
    }

    @Override
@@ -3810,4 +3805,24 @@ public class ListView extends AbsListView {
        final CollectionItemInfo itemInfo = CollectionItemInfo.obtain(0, 1, position, 1, isHeading);
        info.setCollectionItemInfo(itemInfo);
    }

    /**
     * Sub-position scroller that understands the layout of a ListView.
     */
    class ListViewPositionScroller extends AbsSubPositionScroller {
        @Override
        public int getRowForPosition(int position) {
            return position;
        }

        @Override
        public int getFirstPositionForRow(int row) {
            return row;
        }

        @Override
        public int getHeightForRow(int row) {
            return getHeightForPosition(row);
        }
    }
}