summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2010-11-10 17:21:23 -0800
committerAndroid (Google) Code Review <android-gerrit@google.com>2010-11-10 17:21:23 -0800
commit6e3d6cf2e99301d0602cb5119cf015931c88704d (patch)
tree1b9202851bb362d7e258f24f5f83c34fd233d0b0 /core
parentec4d82046bcdaa6ea1d43601c9d0673444f3e3bf (diff)
parent0785279dad89d90564f42beb2c4620bf387a966e (diff)
downloadframeworks_base-6e3d6cf2e99301d0602cb5119cf015931c88704d.zip
frameworks_base-6e3d6cf2e99301d0602cb5119cf015931c88704d.tar.gz
frameworks_base-6e3d6cf2e99301d0602cb5119cf015931c88704d.tar.bz2
Merge "Refine AbsListView transcript mode behavior."
Diffstat (limited to 'core')
-rw-r--r--core/java/android/widget/AbsListView.java17
1 files changed, 14 insertions, 3 deletions
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index d0ed23f..ab5ff3d 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -3856,12 +3856,23 @@ public abstract class AbsListView extends AdapterView<ListAdapter> implements Te
// Update this first, since setNextSelectedPositionInt inspects it
mNeedSync = false;
- if (mTranscriptMode == TRANSCRIPT_MODE_ALWAYS_SCROLL ||
- (mTranscriptMode == TRANSCRIPT_MODE_NORMAL &&
- mFirstPosition + getChildCount() >= mOldItemCount)) {
+ if (mTranscriptMode == TRANSCRIPT_MODE_ALWAYS_SCROLL) {
mLayoutMode = LAYOUT_FORCE_BOTTOM;
return;
}
+ if (mTranscriptMode == TRANSCRIPT_MODE_NORMAL) {
+ final int childCount = getChildCount();
+ final int listBottom = getBottom() - getPaddingBottom();
+ final View lastChild = getChildAt(childCount - 1);
+ final int lastBottom = lastChild != null ? lastChild.getBottom() : listBottom;
+ if (mFirstPosition + childCount >= mOldItemCount && lastBottom <= listBottom) {
+ mLayoutMode = LAYOUT_FORCE_BOTTOM;
+ return;
+ }
+ // Something new came in and we didn't scroll; give the user a clue that
+ // there's something new.
+ awakenScrollBars();
+ }
switch (mSyncMode) {
case SYNC_SELECTED_POSITION: