Merge "Prevent NPE when computing FastScroller position with no visible items" into lmp-mr1-dev

This commit is contained in:
Alan Viverette
2014-11-18 17:46:51 +00:00
committed by Android (Google) Code Review

View File

@@ -1194,17 +1194,37 @@ class FastScroller {
return MathUtils.constrain((y - offset) / range, 0f, 1f);
}
/**
* Calculates the thumb position based on the visible items.
*
* @param firstVisibleItem First visible item, >= 0.
* @param visibleItemCount Number of visible items, >= 0.
* @param totalItemCount Total number of items, >= 0.
* @return
*/
private float getPosFromItemCount(
int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if (mSectionIndexer == null || mListAdapter == null) {
final SectionIndexer sectionIndexer = mSectionIndexer;
if (sectionIndexer == null || mListAdapter == null) {
getSectionsFromIndexer();
}
final boolean hasSections = mSectionIndexer != null && mSections != null
if (visibleItemCount == 0 || totalItemCount == 0) {
// No items are visible.
return 0;
}
final boolean hasSections = sectionIndexer != null && mSections != null
&& mSections.length > 0;
if (!hasSections || !mMatchDragPosition) {
return (float) firstVisibleItem / (totalItemCount - visibleItemCount);
if (visibleItemCount == totalItemCount) {
// All items are visible.
return 0;
} else {
return (float) firstVisibleItem / (totalItemCount - visibleItemCount);
}
}
// Ignore headers.
firstVisibleItem -= mHeaderCount;
if (firstVisibleItem < 0) {
@@ -1222,14 +1242,14 @@ class FastScroller {
}
// Number of rows in this section.
final int section = mSectionIndexer.getSectionForPosition(firstVisibleItem);
final int sectionPos = mSectionIndexer.getPositionForSection(section);
final int section = sectionIndexer.getSectionForPosition(firstVisibleItem);
final int sectionPos = sectionIndexer.getPositionForSection(section);
final int sectionCount = mSections.length;
final int positionsInSection;
if (section < sectionCount - 1) {
final int nextSectionPos;
if (section + 1 < sectionCount) {
nextSectionPos = mSectionIndexer.getPositionForSection(section + 1);
nextSectionPos = sectionIndexer.getPositionForSection(section + 1);
} else {
nextSectionPos = totalItemCount - 1;
}