Ferrochrome app guides how to download the assets

Ferrochrome app which is pre-installed on the device won't have assets
(the guest OS image) in it. In that case, the app instructs the user to
follow the guideline (go/try-ferrochrome) to manually download the
version of the app with assets in it and install it.

This CL also makes some minor changes:

* Readability enhancement
   - deleted the theme with no action bar
   - increased the font size of the text view

* After the asset extraction is done, wait for 30 sec before starting
the vm launcher activity. Ideally, this shouldn't be needed but for some
unknown reason it takes some time for the filesystem to be updated after
the asset files extraction.

Bug: N/A
Test: run the app, and follow go/try-ferrochrome
Change-Id: I0ef0401067624dcfc59fefd71da9109f85cf5a6d
diff --git a/ferrochrome_app/AndroidManifest.xml b/ferrochrome_app/AndroidManifest.xml
index d783bbc..d0aa62c 100644
--- a/ferrochrome_app/AndroidManifest.xml
+++ b/ferrochrome_app/AndroidManifest.xml
@@ -8,7 +8,6 @@
         android:label="Ferrochrome">
         <activity android:name=".FerrochromeActivity"
                   android:configChanges="orientation|screenSize|keyboard|keyboardHidden|navigation|uiMode"
-                  android:theme="@style/MyTheme"
                   android:screenOrientation="landscape"
                   android:exported="true">
             <intent-filter>
diff --git a/ferrochrome_app/java/com/android/virtualization/ferrochrome/FerrochromeActivity.java b/ferrochrome_app/java/com/android/virtualization/ferrochrome/FerrochromeActivity.java
index 58005aa..40af3b6 100644
--- a/ferrochrome_app/java/com/android/virtualization/ferrochrome/FerrochromeActivity.java
+++ b/ferrochrome_app/java/com/android/virtualization/ferrochrome/FerrochromeActivity.java
@@ -74,9 +74,11 @@
 
         executorService.execute(
                 () -> {
-                    updateImageIfNeeded();
-                    updateStatus("Starting Ferrochrome...");
-                    runOnUiThread(() -> startActivityForResult(intent, REQUEST_CODE_VMLAUNCHER));
+                    if (updateImageIfNeeded()) {
+                        updateStatus("Starting Ferrochrome...");
+                        runOnUiThread(
+                                () -> startActivityForResult(intent, REQUEST_CODE_VMLAUNCHER));
+                    }
                 });
     }
 
@@ -87,18 +89,25 @@
         }
     }
 
-    private void updateImageIfNeeded() {
+    private boolean updateImageIfNeeded() {
         if (!isUpdateNeeded()) {
             Log.d(TAG, "No update needed.");
-            return;
+            return true;
         }
 
-        updateStatus("Copying images...");
         try {
             if (Files.notExists(DEST_DIR)) {
                 Files.createDirectory(DEST_DIR);
             }
-            for (String file : getAssets().list("ferrochrome")) {
+
+            String[] files = getAssets().list("ferrochrome");
+            if (files == null || files.length == 0) {
+                updateStatus("ChromeOS image not found. Please go/try-ferrochrome");
+                return false;
+            }
+
+            updateStatus("Copying images...");
+            for (String file : files) {
                 updateStatus(file);
                 Path dst = Path.of(DEST_DIR.toString(), file);
                 updateFile(getAssets().open("ferrochrome/" + file), dst);
@@ -106,7 +115,7 @@
         } catch (IOException e) {
             Log.e(TAG, "Error while updating image: " + e);
             updateStatus("Failed.");
-            return;
+            return false;
         }
         updateStatus("Done.");
 
@@ -118,10 +127,20 @@
             } catch (Exception e) {
                 Log.e(TAG, "Error while extracting image: " + e);
                 updateStatus("Failed.");
-                return;
+                return false;
             }
         }
+        // TODO(jiyong): remove this sleep.
+        try {
+            Thread.sleep(30 * 1000);
+        } catch (Exception e) {
+            Log.e(TAG, "Interrupted while waiting for the copy to finish");
+            updateStatus("Failed.");
+            return false;
+        }
+
         updateStatus("Done.");
+        return true;
     }
 
     private boolean isUpdateNeeded() {
diff --git a/ferrochrome_app/res/layout/activity_ferrochrome.xml b/ferrochrome_app/res/layout/activity_ferrochrome.xml
index 7d5e8aa..3967167 100644
--- a/ferrochrome_app/res/layout/activity_ferrochrome.xml
+++ b/ferrochrome_app/res/layout/activity_ferrochrome.xml
@@ -1,14 +1,15 @@
 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:context=".FerrochromeActivity">
+    android:fitsSystemWindows="true"
+    android:paddingLeft="16dp"
+    android:paddingRight="16dp">
   <TextView
       android:layout_width="match_parent"
-      android:layout_height="match_parent"
+      android:layout_height="wrap_content"
+      android:textSize="28sp"
       android:id="@+id/status_txt_view"/>
 
-</RelativeLayout>
\ No newline at end of file
+</RelativeLayout>
diff --git a/ferrochrome_app/res/values/themes.xml b/ferrochrome_app/res/values/themes.xml
deleted file mode 100644
index c9a9ed2..0000000
--- a/ferrochrome_app/res/values/themes.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-<resources xmlns:tools="http://schemas.android.com/tools">
-    <style name="MyTheme" parent="@android:style/Theme.DeviceDefault.NoActionBar">
-    </style>
-</resources>