GridLayoutManager: avoid redundant dispatchChildSelected

If it's fastRelayout,  we fire dispatchChildSelected only on mFocusPosition
changes,  this can avoid mutliple events fired by view size change animation.
If it's not fastRelayout,  it can be a structure change,  so we
always dispatchChild regardless mFocusPosition changes or not.

In scrollToView triggered not in layout,  there is no structure change
so it will dispatchChildSelected only if mFocusPosiiton changes.

b/14807080

Change-Id: I5ac770181542955360c4d0531d5110694db04b89
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 85e77f4..78e94e8 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/GridLayoutManager.java
@@ -1442,7 +1442,10 @@
         }
 
         final boolean hasDoneFirstLayout = hasDoneFirstLayout();
+        int savedFocusPos = mFocusPosition;
+        boolean fastRelayout = false;
         if (!mState.didStructureChange() && !mForceFullLayout && hasDoneFirstLayout) {
+            fastRelayout = true;
             fastRelayout();
         } else {
             boolean hadFocus = mBaseGridView.hasFocus();
@@ -1523,7 +1526,7 @@
 
         if (!state.isPreLayout()) {
             mUseDeltaInPreLayout = false;
-            if (!hasDoneFirstLayout) {
+            if (!fastRelayout || mFocusPosition != savedFocusPos) {
                 dispatchChildSelected();
             }
         }
@@ -1817,9 +1820,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();
             }
         }