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

Commit 2ea32929 authored by Alan Viverette's avatar Alan Viverette
Browse files

Always remeasure ListView scrap used to obtain minimum width

Also turns off ViewPager debug, enabled the scroll indicator on the
DatePicker's year list, and updates the year label's TextView ID to
something more reasonable. Some code cleanup inside ListView.

Bug: 20110431
Change-Id: If1dba955094524d69cc297d7a567a182cef7f11d
parent d2c41457
Loading
Loading
Loading
Loading
+23 −17
Original line number Original line Diff line number Diff line
@@ -1143,8 +1143,8 @@ public class ListView extends AbsListView {
        // Sets up mListPadding
        // Sets up mListPadding
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);


        int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
        int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        final int heightMode = MeasureSpec.getMode(heightMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int widthSize = MeasureSpec.getSize(widthMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);
        int heightSize = MeasureSpec.getSize(heightMeasureSpec);


@@ -1153,10 +1153,12 @@ public class ListView extends AbsListView {
        int childState = 0;
        int childState = 0;


        mItemCount = mAdapter == null ? 0 : mAdapter.getCount();
        mItemCount = mAdapter == null ? 0 : mAdapter.getCount();
        if (mItemCount > 0 && (widthMode == MeasureSpec.UNSPECIFIED ||
        if (mItemCount > 0 && (widthMode == MeasureSpec.UNSPECIFIED
                heightMode == MeasureSpec.UNSPECIFIED)) {
                || heightMode == MeasureSpec.UNSPECIFIED)) {
            final View child = obtainView(0, mIsScrap);
            final View child = obtainView(0, mIsScrap);


            // Lay out child directly against the parent measure spec so that
            // we can obtain exected minimum width and height.
            measureScrapChild(child, 0, widthMeasureSpec, heightSize);
            measureScrapChild(child, 0, widthMeasureSpec, heightSize);


            childWidth = child.getMeasuredWidth();
            childWidth = child.getMeasuredWidth();
@@ -1187,6 +1189,7 @@ public class ListView extends AbsListView {
        }
        }


        setMeasuredDimension(widthSize, heightSize);
        setMeasuredDimension(widthSize, heightSize);

        mWidthMeasureSpec = widthMeasureSpec;
        mWidthMeasureSpec = widthMeasureSpec;
    }
    }


@@ -1199,16 +1202,20 @@ public class ListView extends AbsListView {
        p.viewType = mAdapter.getItemViewType(position);
        p.viewType = mAdapter.getItemViewType(position);
        p.forceAdd = true;
        p.forceAdd = true;


        int childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec,
        final int childWidthSpec = ViewGroup.getChildMeasureSpec(widthMeasureSpec,
                mListPadding.left + mListPadding.right, p.width);
                mListPadding.left + mListPadding.right, p.width);
        int lpHeight = p.height;
        final int lpHeight = p.height;
        int childHeightSpec;
        final int childHeightSpec;
        if (lpHeight > 0) {
        if (lpHeight > 0) {
            childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
            childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
        } else {
        } else {
            childHeightSpec = MeasureSpec.makeSafeMeasureSpec(heightHint, MeasureSpec.UNSPECIFIED);
            childHeightSpec = MeasureSpec.makeSafeMeasureSpec(heightHint, MeasureSpec.UNSPECIFIED);
        }
        }
        child.measure(childWidthSpec, childHeightSpec);
        child.measure(childWidthSpec, childHeightSpec);

        // Since this view was measured directly aginst the parent measure
        // spec, we must measure it again before reuse.
        child.forceLayout();
    }
    }


    /**
    /**
@@ -1248,8 +1255,7 @@ public class ListView extends AbsListView {
     * @return The height of this ListView with the given children.
     * @return The height of this ListView with the given children.
     */
     */
    final int measureHeightOfChildren(int widthMeasureSpec, int startPosition, int endPosition,
    final int measureHeightOfChildren(int widthMeasureSpec, int startPosition, int endPosition,
            final int maxHeight, int disallowPartialChildPosition) {
            int maxHeight, int disallowPartialChildPosition) {

        final ListAdapter adapter = mAdapter;
        final ListAdapter adapter = mAdapter;
        if (adapter == null) {
        if (adapter == null) {
            return mListPadding.top + mListPadding.bottom;
            return mListPadding.top + mListPadding.bottom;
@@ -1907,8 +1913,8 @@ public class ListView extends AbsListView {
        }
        }
        p.viewType = mAdapter.getItemViewType(position);
        p.viewType = mAdapter.getItemViewType(position);


        if ((recycled && !p.forceAdd) || (p.recycledHeaderFooter &&
        if ((recycled && !p.forceAdd) || (p.recycledHeaderFooter
                p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER)) {
                && p.viewType == AdapterView.ITEM_VIEW_TYPE_HEADER_OR_FOOTER)) {
            attachViewToParent(child, flowDown ? -1 : 0, p);
            attachViewToParent(child, flowDown ? -1 : 0, p);
        } else {
        } else {
            p.forceAdd = false;
            p.forceAdd = false;
@@ -1936,10 +1942,10 @@ public class ListView extends AbsListView {
        }
        }


        if (needToMeasure) {
        if (needToMeasure) {
            int childWidthSpec = ViewGroup.getChildMeasureSpec(mWidthMeasureSpec,
            final int childWidthSpec = ViewGroup.getChildMeasureSpec(mWidthMeasureSpec,
                    mListPadding.left + mListPadding.right, p.width);
                    mListPadding.left + mListPadding.right, p.width);
            int lpHeight = p.height;
            final int lpHeight = p.height;
            int childHeightSpec;
            final int childHeightSpec;
            if (lpHeight > 0) {
            if (lpHeight > 0) {
                childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
                childHeightSpec = MeasureSpec.makeMeasureSpec(lpHeight, MeasureSpec.EXACTLY);
            } else {
            } else {
+1 −1
Original line number Original line Diff line number Diff line
@@ -85,7 +85,7 @@ import java.util.Comparator;
 */
 */
public class ViewPager extends ViewGroup {
public class ViewPager extends ViewGroup {
    private static final String TAG = "ViewPager";
    private static final String TAG = "ViewPager";
    private static final boolean DEBUG = true;
    private static final boolean DEBUG = false;


    private static final int MAX_SCROLL_X = 2 << 23;
    private static final int MAX_SCROLL_X = 2 << 23;
    private static final boolean USE_CACHE = false;
    private static final boolean USE_CACHE = false;
+2 −1
Original line number Original line Diff line number Diff line
@@ -32,6 +32,7 @@
    <android.widget.YearPickerView
    <android.widget.YearPickerView
        android:id="@+id/date_picker_year_picker"
        android:id="@+id/date_picker_year_picker"
        android:layout_width="match_parent"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
        android:layout_height="match_parent"
        android:scrollIndicators="bottom" />


</com.android.internal.widget.DialogViewAnimator>
</com.android.internal.widget.DialogViewAnimator>
+1 −1
Original line number Original line Diff line number Diff line
@@ -14,7 +14,7 @@
     limitations under the License.
     limitations under the License.
-->
-->
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
         android:id="@+id/month_text_view"
         android:id="@id/text1"
         android:layout_width="match_parent"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_height="wrap_content"
         android:minHeight="?attr/listPreferredItemHeightSmall"
         android:minHeight="?attr/listPreferredItemHeightSmall"