Merge "GridLayoutManager: avoid redundant dispatchChildSelected" 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 ef9c77d..9331b11 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
@@ -1453,7 +1453,10 @@
}
final boolean hasDoneFirstLayout = hasDoneFirstLayout();
+ int savedFocusPos = mFocusPosition;
+ boolean fastRelayout = false;
if (!mState.didStructureChange() && !mForceFullLayout && hasDoneFirstLayout) {
+ fastRelayout = true;
fastRelayout();
} else {
boolean hadFocus = mBaseGridView.hasFocus();
@@ -1534,7 +1537,7 @@
if (!state.isPreLayout()) {
mUseDeltaInPreLayout = false;
- if (!hasDoneFirstLayout) {
+ if (!fastRelayout || mFocusPosition != savedFocusPos) {
dispatchChildSelected();
}
}
@@ -1828,9 +1831,9 @@
*/
private void scrollToView(View view, boolean smooth) {
int newFocusPosition = getPositionByView(view);
- if (mInLayout || newFocusPosition != mFocusPosition) {
+ if (newFocusPosition != mFocusPosition) {
mFocusPosition = newFocusPosition;
- if (mState == null || !mState.isPreLayout()) {
+ if (!mInLayout) {
dispatchChildSelected();
}
}