Fix race condition for LoaderTest.

Bug 63450334

LoaderTest.startWhenReused() requires that the activity be resumed
prior to testing the value. This waits for the resume call.

Test: ran fragment tests

Change-Id: I463450c16bd04ac624ec2766abdfe83bea1e448c
diff --git a/tests/fragment/src/android/fragment/cts/LoaderTest.java b/tests/fragment/src/android/fragment/cts/LoaderTest.java
index 2eb897e..be6e032 100755
--- a/tests/fragment/src/android/fragment/cts/LoaderTest.java
+++ b/tests/fragment/src/android/fragment/cts/LoaderTest.java
@@ -96,6 +96,7 @@
     @Test
     public void startWhenReused() throws Throwable {
         LoaderActivity activity = mActivityRule.getActivity();
+        activity.waitForResume(mActivityRule);
 
         assertEquals("Loaded!", activity.textView.getText().toString());
 
diff --git a/tests/fragment/src/android/fragment/cts/RecreatedActivity.java b/tests/fragment/src/android/fragment/cts/RecreatedActivity.java
index 82b32a9..57011bd 100644
--- a/tests/fragment/src/android/fragment/cts/RecreatedActivity.java
+++ b/tests/fragment/src/android/fragment/cts/RecreatedActivity.java
@@ -15,16 +15,21 @@
  */
 package android.fragment.cts;
 
+import static org.junit.Assert.assertTrue;
+
 import android.app.Activity;
 import android.os.Bundle;
+import android.support.test.rule.ActivityTestRule;
 
 import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
 
 public class RecreatedActivity extends Activity {
     // These must be cleared after each test using clearState()
     public static RecreatedActivity sActivity;
     public static CountDownLatch sResumed;
     public static CountDownLatch sDestroyed;
+    private boolean mIsResumed;
 
     public static void clearState() {
         sActivity = null;
@@ -41,15 +46,42 @@
     @Override
     protected void onResume() {
         super.onResume();
+        mIsResumed = true;
         if (sResumed != null) {
             sResumed.countDown();
         }
     }
 
     @Override
+    protected void onPause() {
+        super.onPause();
+        mIsResumed = false;
+    }
+
+    @Override
     protected void onDestroy() {
         super.onDestroy();
         if (sDestroyed != null) {
             sDestroyed.countDown();
         }
-    }}
+    }
+
+    public void waitForResume(ActivityTestRule<? extends Activity> rule) throws Throwable {
+        if (mIsResumed) {
+            return;
+        }
+        if (sResumed != null) {
+            assertTrue(sResumed.await(1, TimeUnit.SECONDS));
+        } else {
+            rule.runOnUiThread(() -> {
+                if (!mIsResumed) {
+                    sResumed = new CountDownLatch(1);
+                }
+            });
+            if (sResumed != null) {
+                assertTrue(sResumed.await(1, TimeUnit.SECONDS));
+                sResumed = null;
+            }
+        }
+    }
+}