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();
             }
         }