Merge "GridLayoutManager: fix scroll bug" into lmp-preview-dev
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java b/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
index 20fd687..91a96fa 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
@@ -1694,9 +1694,12 @@
for (int i = mLastVisiblePos; i >= mFirstVisiblePos; i--) {
StaggeredGrid.Location location = mGrid.getLocation(i);
if (location != null && location.row == rowIndex) {
+ int savedMaxEdge = mWindowAlignment.mainAxis().getMaxEdge();
+ mWindowAlignment.mainAxis().setMaxEdge(maxEdge);
maxScroll = mWindowAlignment
.mainAxis().getSystemScrollPos(mScrollOffsetPrimary
+ getViewCenter(findViewByPosition(i)));
+ mWindowAlignment.mainAxis().setMaxEdge(savedMaxEdge);
break;
}
}
@@ -1737,9 +1740,12 @@
for (int i = mFirstVisiblePos; i <= mLastVisiblePos; i++) {
StaggeredGrid.Location location = mGrid.getLocation(i);
if (location != null && location.row == rowIndex) {
+ int savedMinEdge = mWindowAlignment.mainAxis().getMinEdge();
+ mWindowAlignment.mainAxis().setMinEdge(minEdge);
minScroll = mWindowAlignment
.mainAxis().getSystemScrollPos(mScrollOffsetPrimary
+ getViewCenter(findViewByPosition(i)));
+ mWindowAlignment.mainAxis().setMinEdge(savedMinEdge);
break;
}
}
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/WindowAlignment.java b/v17/leanback/src/android/support/v17/leanback/widget/WindowAlignment.java
index 1affb68..e8073e8 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/WindowAlignment.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/WindowAlignment.java
@@ -109,6 +109,10 @@
mMinEdge = minEdge;
}
+ final public int getMinEdge() {
+ return mMinEdge;
+ }
+
/** set minScroll, Integer.MIN_VALUE means unknown*/
final public void setMinScroll(int minScroll) {
mMinScroll = minScroll;
@@ -128,6 +132,10 @@
mMaxEdge = maxEdge;
}
+ final public int getMaxEdge() {
+ return mMaxEdge;
+ }
+
/** update max scroll, Integer.MAX_VALUE means unknown*/
final public void setMaxScroll(int maxScroll) {
mMaxScroll = maxScroll;