Fix flaky GridWidgetTest more

Test: testFocusToFirstItem GuidedStepFragmentTest
Bug: None

Change-Id: I815284eb38ae181b18fe229a89c66eb288b5bfb2
diff --git a/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepFragmentTest.java b/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepFragmentTest.java
index b11170c..4f43de0 100644
--- a/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepFragmentTest.java
+++ b/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepFragmentTest.java
@@ -54,7 +54,9 @@
 
     @Test
     public void nextAndBack() throws Throwable {
-        GuidedStepTestFragment.Provider first = mockProvider("first");
+        final String firstFragmentName = generateMethodTestName("first");
+        final String secondFragmentName = generateMethodTestName("second");
+        GuidedStepTestFragment.Provider first = mockProvider(firstFragmentName);
         doAnswer(new Answer<Void>() {
             public Void answer(InvocationOnMock invocation) {
                 List actions = (List) invocation.getArguments()[0];
@@ -69,15 +71,15 @@
                         invocation.getMock();
                 if (action.getId() == 1000) {
                     GuidedStepFragment.add(obj.getFragmentManager(),
-                            new GuidedStepTestFragment("second"));
+                            new GuidedStepTestFragment(secondFragmentName));
                 }
                 return null;
             }
         }).when(first).onGuidedActionClicked(any(GuidedAction.class));
 
-        GuidedStepTestFragment.Provider second = mockProvider("second");
+        GuidedStepTestFragment.Provider second = mockProvider(secondFragmentName);
 
-        GuidedStepFragmentTestActivity activity = launchTestActivity("first");
+        GuidedStepFragmentTestActivity activity = launchTestActivity(firstFragmentName);
         verify(first, times(1)).onCreate(any(Bundle.class));
         verify(first, times(1)).onCreateGuidance(any(Bundle.class));
         verify(first, times(1)).onCreateActions(any(List.class), any(Bundle.class));
@@ -127,7 +129,9 @@
 
     @Test
     public void restoreFragments() throws Throwable {
-        GuidedStepTestFragment.Provider first = mockProvider("first");
+        final String firstFragmentName = generateMethodTestName("first");
+        final String secondFragmentName = generateMethodTestName("second");
+        GuidedStepTestFragment.Provider first = mockProvider(firstFragmentName);
         doAnswer(new Answer<Void>() {
             public Void answer(InvocationOnMock invocation) {
                 List actions = (List) invocation.getArguments()[0];
@@ -146,15 +150,15 @@
                         invocation.getMock();
                 if (action.getId() == 1000) {
                     GuidedStepFragment.add(obj.getFragmentManager(),
-                            new GuidedStepTestFragment("second"));
+                            new GuidedStepTestFragment(secondFragmentName));
                 }
                 return null;
             }
         }).when(first).onGuidedActionClicked(any(GuidedAction.class));
 
-        GuidedStepTestFragment.Provider second = mockProvider("second");
+        GuidedStepTestFragment.Provider second = mockProvider(secondFragmentName);
 
-        final GuidedStepFragmentTestActivity activity = launchTestActivity("first");
+        final GuidedStepFragmentTestActivity activity = launchTestActivity(firstFragmentName);
         first.getFragment().findActionById(1001).setTitle("modified text");
         first.getFragment().findActionById(1002).setTitle("modified text");
         sendKey(KeyEvent.KEYCODE_DPAD_CENTER);
@@ -192,7 +196,8 @@
 
     @Test
     public void finishGuidedStepFragment_finishes_activity() throws Throwable {
-        GuidedStepTestFragment.Provider first = mockProvider("first");
+        final String firstFragmentName = generateMethodTestName("first");
+        GuidedStepTestFragment.Provider first = mockProvider(firstFragmentName);
         doAnswer(new Answer<Void>() {
             public Void answer(InvocationOnMock invocation) {
                 List actions = (List) invocation.getArguments()[0];
@@ -212,7 +217,7 @@
             }
         }).when(first).onGuidedActionClicked(any(GuidedAction.class));
 
-        final GuidedStepFragmentTestActivity activity = launchTestActivity("first");
+        final GuidedStepFragmentTestActivity activity = launchTestActivity(firstFragmentName);
 
         View viewFinish = first.getFragment().getActionItemView(0);
         assertTrue(viewFinish.hasFocus());
@@ -223,7 +228,8 @@
 
     @Test
     public void finishGuidedStepFragment_finishes_fragments() throws Throwable {
-        GuidedStepTestFragment.Provider first = mockProvider("first");
+        final String firstFragmentName = generateMethodTestName("first");
+        GuidedStepTestFragment.Provider first = mockProvider(firstFragmentName);
         doAnswer(new Answer<Void>() {
             public Void answer(InvocationOnMock invocation) {
                 List actions = (List) invocation.getArguments()[0];
@@ -243,7 +249,7 @@
             }
         }).when(first).onGuidedActionClicked(any(GuidedAction.class));
 
-        final GuidedStepFragmentTestActivity activity = launchTestActivity("first",
+        final GuidedStepFragmentTestActivity activity = launchTestActivity(firstFragmentName,
                 false /*asRoot*/);
 
         View viewFinish = first.getFragment().getActionItemView(0);
@@ -257,8 +263,10 @@
 
     @Test
     public void subActions() throws Throwable {
+        final String firstFragmentName = generateMethodTestName("first");
+        final String secondFragmentName = generateMethodTestName("second");
         final boolean[] expandSubActionInOnCreateView = new boolean[] {false};
-        GuidedStepTestFragment.Provider first = mockProvider("first");
+        GuidedStepTestFragment.Provider first = mockProvider(firstFragmentName);
         doAnswer(new Answer<Void>() {
             public Void answer(InvocationOnMock invocation) {
                 GuidedStepTestFragment.Provider obj = (GuidedStepTestFragment.Provider)
@@ -290,16 +298,16 @@
                     return true;
                 } else if (action.getId() == 2001) {
                     GuidedStepFragment.add(obj.getFragmentManager(),
-                            new GuidedStepTestFragment("second"));
+                            new GuidedStepTestFragment(secondFragmentName));
                     return false;
                 }
                 return false;
             }
         }).when(first).onSubGuidedActionClicked(any(GuidedAction.class));
 
-        GuidedStepTestFragment.Provider second = mockProvider("second");
+        GuidedStepTestFragment.Provider second = mockProvider(secondFragmentName);
 
-        final GuidedStepFragmentTestActivity activity = launchTestActivity("first");
+        final GuidedStepFragmentTestActivity activity = launchTestActivity(firstFragmentName);
 
         // after clicked, it sub actions list should expand
         View viewForList = first.getFragment().getActionItemView(0);
diff --git a/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepFragmentTestBase.java b/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepFragmentTestBase.java
index 2219f37..6ed254a 100644
--- a/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepFragmentTestBase.java
+++ b/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepFragmentTestBase.java
@@ -29,6 +29,7 @@
 
 import org.junit.Before;
 import org.junit.Rule;
+import org.junit.rules.TestName;
 
 /**
  * @hide from javadoc
@@ -37,6 +38,8 @@
 
     private static final long TIMEOUT = 5000;
 
+    @Rule public TestName mUnitTestName = new TestName();
+
     @Rule
     public ActivityTestRule<GuidedStepFragmentTestActivity> activityTestRule =
             new ActivityTestRule<>(GuidedStepFragmentTestActivity.class, false, false);
@@ -104,6 +107,10 @@
         InstrumentationRegistry.getInstrumentation().sendKeyDownUpSync(keyCode);
     }
 
+    public String generateMethodTestName(String testName) {
+        return mUnitTestName.getMethodName() + "_" + testName;
+    }
+
     public GuidedStepFragmentTestActivity launchTestActivity(String firstTestName) {
         Intent intent = new Intent();
         intent.putExtra(GuidedStepFragmentTestActivity.EXTRA_TEST_NAME, firstTestName);
@@ -118,7 +125,7 @@
         return activityTestRule.launchActivity(intent);
     }
 
-    public static GuidedStepTestFragment.Provider mockProvider(String testName) {
+    public GuidedStepTestFragment.Provider mockProvider(String testName) {
         GuidedStepTestFragment.Provider test = mock(GuidedStepTestFragment.Provider.class);
         when(test.getActivity()).thenCallRealMethod();
         when(test.getFragmentManager()).thenCallRealMethod();
diff --git a/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepSupportFragmentTest.java b/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepSupportFragmentTest.java
index 7f9e1ad..800f2c1 100644
--- a/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepSupportFragmentTest.java
+++ b/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepSupportFragmentTest.java
@@ -56,7 +56,9 @@
 
     @Test
     public void nextAndBack() throws Throwable {
-        GuidedStepTestSupportFragment.Provider first = mockProvider("first");
+        final String firstFragmentName = generateMethodTestName("first");
+        final String secondFragmentName = generateMethodTestName("second");
+        GuidedStepTestSupportFragment.Provider first = mockProvider(firstFragmentName);
         doAnswer(new Answer<Void>() {
             public Void answer(InvocationOnMock invocation) {
                 List actions = (List) invocation.getArguments()[0];
@@ -71,15 +73,15 @@
                         invocation.getMock();
                 if (action.getId() == 1000) {
                     GuidedStepSupportFragment.add(obj.getFragmentManager(),
-                            new GuidedStepTestSupportFragment("second"));
+                            new GuidedStepTestSupportFragment(secondFragmentName));
                 }
                 return null;
             }
         }).when(first).onGuidedActionClicked(any(GuidedAction.class));
 
-        GuidedStepTestSupportFragment.Provider second = mockProvider("second");
+        GuidedStepTestSupportFragment.Provider second = mockProvider(secondFragmentName);
 
-        GuidedStepSupportFragmentTestActivity activity = launchTestActivity("first");
+        GuidedStepSupportFragmentTestActivity activity = launchTestActivity(firstFragmentName);
         verify(first, times(1)).onCreate(any(Bundle.class));
         verify(first, times(1)).onCreateGuidance(any(Bundle.class));
         verify(first, times(1)).onCreateActions(any(List.class), any(Bundle.class));
@@ -129,7 +131,9 @@
 
     @Test
     public void restoreFragments() throws Throwable {
-        GuidedStepTestSupportFragment.Provider first = mockProvider("first");
+        final String firstFragmentName = generateMethodTestName("first");
+        final String secondFragmentName = generateMethodTestName("second");
+        GuidedStepTestSupportFragment.Provider first = mockProvider(firstFragmentName);
         doAnswer(new Answer<Void>() {
             public Void answer(InvocationOnMock invocation) {
                 List actions = (List) invocation.getArguments()[0];
@@ -148,15 +152,15 @@
                         invocation.getMock();
                 if (action.getId() == 1000) {
                     GuidedStepSupportFragment.add(obj.getFragmentManager(),
-                            new GuidedStepTestSupportFragment("second"));
+                            new GuidedStepTestSupportFragment(secondFragmentName));
                 }
                 return null;
             }
         }).when(first).onGuidedActionClicked(any(GuidedAction.class));
 
-        GuidedStepTestSupportFragment.Provider second = mockProvider("second");
+        GuidedStepTestSupportFragment.Provider second = mockProvider(secondFragmentName);
 
-        final GuidedStepSupportFragmentTestActivity activity = launchTestActivity("first");
+        final GuidedStepSupportFragmentTestActivity activity = launchTestActivity(firstFragmentName);
         first.getFragment().findActionById(1001).setTitle("modified text");
         first.getFragment().findActionById(1002).setTitle("modified text");
         sendKey(KeyEvent.KEYCODE_DPAD_CENTER);
@@ -194,7 +198,8 @@
 
     @Test
     public void finishGuidedStepSupportFragment_finishes_activity() throws Throwable {
-        GuidedStepTestSupportFragment.Provider first = mockProvider("first");
+        final String firstFragmentName = generateMethodTestName("first");
+        GuidedStepTestSupportFragment.Provider first = mockProvider(firstFragmentName);
         doAnswer(new Answer<Void>() {
             public Void answer(InvocationOnMock invocation) {
                 List actions = (List) invocation.getArguments()[0];
@@ -214,7 +219,7 @@
             }
         }).when(first).onGuidedActionClicked(any(GuidedAction.class));
 
-        final GuidedStepSupportFragmentTestActivity activity = launchTestActivity("first");
+        final GuidedStepSupportFragmentTestActivity activity = launchTestActivity(firstFragmentName);
 
         View viewFinish = first.getFragment().getActionItemView(0);
         assertTrue(viewFinish.hasFocus());
@@ -225,7 +230,8 @@
 
     @Test
     public void finishGuidedStepSupportFragment_finishes_fragments() throws Throwable {
-        GuidedStepTestSupportFragment.Provider first = mockProvider("first");
+        final String firstFragmentName = generateMethodTestName("first");
+        GuidedStepTestSupportFragment.Provider first = mockProvider(firstFragmentName);
         doAnswer(new Answer<Void>() {
             public Void answer(InvocationOnMock invocation) {
                 List actions = (List) invocation.getArguments()[0];
@@ -245,7 +251,7 @@
             }
         }).when(first).onGuidedActionClicked(any(GuidedAction.class));
 
-        final GuidedStepSupportFragmentTestActivity activity = launchTestActivity("first",
+        final GuidedStepSupportFragmentTestActivity activity = launchTestActivity(firstFragmentName,
                 false /*asRoot*/);
 
         View viewFinish = first.getFragment().getActionItemView(0);
@@ -259,8 +265,10 @@
 
     @Test
     public void subActions() throws Throwable {
+        final String firstFragmentName = generateMethodTestName("first");
+        final String secondFragmentName = generateMethodTestName("second");
         final boolean[] expandSubActionInOnCreateView = new boolean[] {false};
-        GuidedStepTestSupportFragment.Provider first = mockProvider("first");
+        GuidedStepTestSupportFragment.Provider first = mockProvider(firstFragmentName);
         doAnswer(new Answer<Void>() {
             public Void answer(InvocationOnMock invocation) {
                 GuidedStepTestSupportFragment.Provider obj = (GuidedStepTestSupportFragment.Provider)
@@ -292,16 +300,16 @@
                     return true;
                 } else if (action.getId() == 2001) {
                     GuidedStepSupportFragment.add(obj.getFragmentManager(),
-                            new GuidedStepTestSupportFragment("second"));
+                            new GuidedStepTestSupportFragment(secondFragmentName));
                     return false;
                 }
                 return false;
             }
         }).when(first).onSubGuidedActionClicked(any(GuidedAction.class));
 
-        GuidedStepTestSupportFragment.Provider second = mockProvider("second");
+        GuidedStepTestSupportFragment.Provider second = mockProvider(secondFragmentName);
 
-        final GuidedStepSupportFragmentTestActivity activity = launchTestActivity("first");
+        final GuidedStepSupportFragmentTestActivity activity = launchTestActivity(firstFragmentName);
 
         // after clicked, it sub actions list should expand
         View viewForList = first.getFragment().getActionItemView(0);
diff --git a/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepSupportFragmentTestBase.java b/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepSupportFragmentTestBase.java
index 088b053..c228884 100644
--- a/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepSupportFragmentTestBase.java
+++ b/v17/leanback/tests/java/android/support/v17/leanback/app/GuidedStepSupportFragmentTestBase.java
@@ -31,6 +31,7 @@
 
 import org.junit.Before;
 import org.junit.Rule;
+import org.junit.rules.TestName;
 
 /**
  * @hide from javadoc
@@ -39,6 +40,8 @@
 
     private static final long TIMEOUT = 5000;
 
+    @Rule public TestName mUnitTestName = new TestName();
+
     @Rule
     public ActivityTestRule<GuidedStepSupportFragmentTestActivity> activityTestRule =
             new ActivityTestRule<>(GuidedStepSupportFragmentTestActivity.class, false, false);
@@ -106,6 +109,10 @@
         InstrumentationRegistry.getInstrumentation().sendKeyDownUpSync(keyCode);
     }
 
+    public String generateMethodTestName(String testName) {
+        return mUnitTestName.getMethodName() + "_" + testName;
+    }
+
     public GuidedStepSupportFragmentTestActivity launchTestActivity(String firstTestName) {
         Intent intent = new Intent();
         intent.putExtra(GuidedStepSupportFragmentTestActivity.EXTRA_TEST_NAME, firstTestName);
@@ -120,7 +127,7 @@
         return activityTestRule.launchActivity(intent);
     }
 
-    public static GuidedStepTestSupportFragment.Provider mockProvider(String testName) {
+    public GuidedStepTestSupportFragment.Provider mockProvider(String testName) {
         GuidedStepTestSupportFragment.Provider test = mock(GuidedStepTestSupportFragment.Provider.class);
         when(test.getActivity()).thenCallRealMethod();
         when(test.getFragmentManager()).thenCallRealMethod();
diff --git a/v17/leanback/tests/java/android/support/v17/leanback/widget/GridWidgetTest.java b/v17/leanback/tests/java/android/support/v17/leanback/widget/GridWidgetTest.java
index 098e19c..8a38894 100644
--- a/v17/leanback/tests/java/android/support/v17/leanback/widget/GridWidgetTest.java
+++ b/v17/leanback/tests/java/android/support/v17/leanback/widget/GridWidgetTest.java
@@ -1195,14 +1195,14 @@
         mOrientation = BaseGridView.HORIZONTAL;
         mNumRows = 3;
 
-        mActivityTestRule.runOnUiThread(new Runnable() {
+        performAndWaitForAnimation(new Runnable() {
             public void run() {
                 mRemovedItems = mActivity.removeItems(0, 200);
             }
         });
 
         humanDelay(500);
-        mActivityTestRule.runOnUiThread(new Runnable() {
+        performAndWaitForAnimation(new Runnable() {
             public void run() {
                 mActivity.addItems(0, mRemovedItems);
             }
@@ -1373,7 +1373,7 @@
         initActivity(intent);
 
         // switching Adapter to cause a full rebind,  test if it will focus to second item.
-        mActivityTestRule.runOnUiThread(new Runnable() {
+        performAndWaitForAnimation(new Runnable() {
             @Override
             public void run() {
                 mActivity.mNumItems = numItems;
@@ -1381,6 +1381,7 @@
                 mActivity.rebindToNewAdapter();
             }
         });
+        assertTrue(mGridView.findViewHolderForAdapterPosition(1).itemView.hasFocus());
     }
 
     @Test