diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java
index a49403c..45da73c 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java
@@ -40,14 +40,12 @@
 import com.google.android.material.snackbar.Snackbar;
 
 import java.lang.ref.WeakReference;
-import java.util.concurrent.ExecutorService;
 
 public class InstallerActivity extends BaseActivity {
     private static final String TAG = "LinuxInstaller";
 
     private static final long ESTIMATED_IMG_SIZE_BYTES = FileUtils.parseSize("550MB");
 
-    private ExecutorService mExecutorService;
     private CheckBox mWaitForWifiCheckbox;
     private TextView mInstallButton;
 
@@ -83,7 +81,7 @@
         Intent intent = new Intent(this, InstallerService.class);
         mInstallerServiceConnection = new InstallerServiceConnection(this);
         if (!bindService(intent, mInstallerServiceConnection, Context.BIND_AUTO_CREATE)) {
-            handleCriticalError(new Exception("Failed to connect to installer service"));
+            handleInternalError(new Exception("Failed to connect to installer service"));
         }
     }
 
@@ -92,11 +90,7 @@
         super.onResume();
 
         if (Build.isDebuggable() && InstallUtils.payloadFromExternalStorageExists()) {
-            Snackbar.make(
-                            findViewById(android.R.id.content),
-                            "Auto installing",
-                            Snackbar.LENGTH_LONG)
-                    .show();
+            showSnackbar("Auto installing", Snackbar.LENGTH_LONG);
             requestInstall();
         }
     }
@@ -125,13 +119,17 @@
         return mInstallCompleted.block(timeoutMillis);
     }
 
-    public void handleCriticalError(Exception e) {
+    private void showSnackbar(String message, int length) {
+        Snackbar snackbar = Snackbar.make(findViewById(android.R.id.content), message, length);
+        snackbar.setAnchorView(mWaitForWifiCheckbox);
+        snackbar.show();
+    }
+
+    public void handleInternalError(Exception e) {
         if (Build.isDebuggable()) {
-            Snackbar.make(
-                            findViewById(android.R.id.content),
-                            e.getMessage() + ". File a bugreport to go/ferrochrome-bug",
-                            Snackbar.LENGTH_INDEFINITE)
-                    .show();
+            showSnackbar(
+                    e.getMessage() + ". File a bugreport to go/ferrochrome-bug",
+                    Snackbar.LENGTH_INDEFINITE);
         }
         Log.e(TAG, "Internal error", e);
         finishWithResult(RESULT_CANCELED);
@@ -170,7 +168,7 @@
             try {
                 mService.requestInstall(mWaitForWifiCheckbox.isChecked());
             } catch (RemoteException e) {
-                handleCriticalError(e);
+                handleInternalError(e);
             }
         } else {
             Log.d(TAG, "requestInstall() is called, but not yet connected");
@@ -195,21 +193,18 @@
                 setInstallEnabled(false);
             }
         } catch (RemoteException e) {
-            handleCriticalError(e);
+            handleInternalError(e);
         }
     }
 
     @MainThread
     public void handleInstallerServiceDisconnected() {
-        handleCriticalError(new Exception("InstallerService is destroyed while in use"));
+        handleInternalError(new Exception("InstallerService is destroyed while in use"));
     }
 
     @MainThread
-    private void handleError(String displayText) {
-        if (Build.isDebuggable()) {
-            Snackbar.make(findViewById(android.R.id.content), displayText, Snackbar.LENGTH_LONG)
-                    .show();
-        }
+    private void handleInstallError(String displayText) {
+        showSnackbar(displayText, Snackbar.LENGTH_LONG);
         setInstallEnabled(true);
     }
 
@@ -249,7 +244,7 @@
                             return;
                         }
 
-                        activity.handleError(displayText);
+                        activity.handleInstallError(displayText);
                     });
         }
     }
@@ -270,7 +265,7 @@
                 return;
             }
             if (service == null) {
-                activity.handleCriticalError(new Exception("service shouldn't be null"));
+                activity.handleInternalError(new Exception("service shouldn't be null"));
             }
 
             activity.mService = IInstallerService.Stub.asInterface(service);
diff --git a/android/TerminalApp/res/layout/activity_error.xml b/android/TerminalApp/res/layout/activity_error.xml
index 1b5026e..054478f 100644
--- a/android/TerminalApp/res/layout/activity_error.xml
+++ b/android/TerminalApp/res/layout/activity_error.xml
@@ -29,7 +29,7 @@
         android:layout_marginVertical="24dp"
         android:layout_marginHorizontal="24dp"
         android:layout_alignParentTop="true"
-        android:hyphenationFrequency="normal"
+        android:hyphenationFrequency="full"
         android:textSize="48sp" />
 
     <TextView
diff --git a/android/TerminalApp/res/layout/settings_disk_resize.xml b/android/TerminalApp/res/layout/settings_disk_resize.xml
index 21ff070..7b8b9fc 100644
--- a/android/TerminalApp/res/layout/settings_disk_resize.xml
+++ b/android/TerminalApp/res/layout/settings_disk_resize.xml
@@ -29,7 +29,7 @@
         android:layout_width="wrap_content"
         android:text="@string/settings_disk_resize_title"
         android:textSize="48sp"
-        android:hyphenationFrequency="normal"
+        android:hyphenationFrequency="full"
         android:layout_marginBottom="24dp"/>
 
     <androidx.constraintlayout.widget.ConstraintLayout
@@ -71,7 +71,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:maxWidth="150sp"
-            android:hyphenationFrequency="normal"
+            android:hyphenationFrequency="full"
             android:text="@string/settings_disk_resize_resize_cancel"
             android:visibility="invisible"
             android:layout_marginTop="48dp"
@@ -85,7 +85,7 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:maxWidth="150sp"
-            android:hyphenationFrequency="normal"
+            android:hyphenationFrequency="full"
             android:text="@string/settings_disk_resize_resize_restart_vm_to_apply"
             android:visibility="invisible"
             android:layout_marginTop="48dp"
diff --git a/android/TerminalApp/res/layout/settings_port_forwarding.xml b/android/TerminalApp/res/layout/settings_port_forwarding.xml
index 98ba02c..2d21962 100644
--- a/android/TerminalApp/res/layout/settings_port_forwarding.xml
+++ b/android/TerminalApp/res/layout/settings_port_forwarding.xml
@@ -28,7 +28,7 @@
         android:layout_width="wrap_content"
         android:text="@string/settings_port_forwarding_title"
         android:textSize="48sp"
-        android:hyphenationFrequency="normal"
+        android:hyphenationFrequency="full"
         android:layout_marginBottom="24dp"/>
 
     <androidx.recyclerview.widget.RecyclerView
diff --git a/android/TerminalApp/res/layout/settings_recovery.xml b/android/TerminalApp/res/layout/settings_recovery.xml
index c72447f..d33f9a3 100644
--- a/android/TerminalApp/res/layout/settings_recovery.xml
+++ b/android/TerminalApp/res/layout/settings_recovery.xml
@@ -28,7 +28,7 @@
         android:layout_width="wrap_content"
         android:text="@string/settings_recovery_title"
         android:textSize="48sp"
-        android:hyphenationFrequency="normal"
+        android:hyphenationFrequency="full"
         android:layout_marginStart="24dp"
         android:layout_marginBottom="24dp"/>
     <FrameLayout
