Fix FileCopyUiTest failure because of Virtual SD Card not ejected am: d11b7e9b8d

Change-Id: Ie9e4b3a53862e843f68e3c2e4bdaf7e009837b10
diff --git a/tests/functional/com/android/documentsui/FileCopyUiTest.java b/tests/functional/com/android/documentsui/FileCopyUiTest.java
index 79c109d..d052721 100644
--- a/tests/functional/com/android/documentsui/FileCopyUiTest.java
+++ b/tests/functional/com/android/documentsui/FileCopyUiTest.java
@@ -30,6 +30,7 @@
 import android.os.RemoteException;
 import android.os.SystemClock;
 import android.provider.Settings;
+import android.support.test.uiautomator.UiObjectNotFoundException;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -172,27 +173,38 @@
     public void tearDown() throws Exception {
         // Delete created files
         deleteDocuments(mDeviceLabel);
-        deleteDocuments(mSdCardLabel);
+        try {
+            deleteDocuments(mSdCardLabel);
+        } catch (UiObjectNotFoundException e) {
+            Log.d(TAG, "SD Card ejected unexpectedly. ", e);
+            mSdCardRoot = null;
+            mSdCardLabel = null;
+        }
 
         for (RootAndFolderPair rootAndFolder : mFoldersToCleanup) {
             deleteDocuments(rootAndFolder.root, rootAndFolder.folder);
         }
 
         // Eject virtual SD card
-        if (mIsVirtualSdCard) {
+        if (mIsVirtualSdCard && mSdCardRoot != null) {
             device.executeShellCommand("sm set-virtual-disk false");
-            while (mSdCardRoot != null) {
+            int attempts = 0;
+            while (mSdCardRoot != null && attempts++ < 15) {
                 List<RootInfo> rootList = mStorageDocsHelper.getRootList();
+                boolean sdCardRootHidden = true;
                 for (RootInfo info : rootList) {
                     if (info.isSd()) {
+                        sdCardRootHidden = false;
                         SystemClock.sleep(1000);
                         break;
                     }
-
+                }
+                if (sdCardRootHidden) {
                     mSdCardRoot = null;
                     mSdCardLabel = null;
                 }
             }
+            assertNull("Cannot eject virtual SD Card", mSdCardRoot);
         }
 
         device.executeShellCommand("settings put global stay_on_while_plugged_in "