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
