diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsActivity.kt
index 6a30971..784e740 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsActivity.kt
@@ -18,12 +18,10 @@
 import android.os.Bundle
 import android.os.Handler
 import android.os.Looper
-import android.view.Window
 import android.view.WindowManager
 import androidx.appcompat.app.AppCompatActivity
 import androidx.recyclerview.widget.LinearLayoutManager
 import androidx.recyclerview.widget.RecyclerView
-
 import com.google.android.material.appbar.MaterialToolbar
 
 class SettingsActivity : AppCompatActivity() {
@@ -40,26 +38,27 @@
 
         val toolbar: MaterialToolbar = findViewById(R.id.settings_toolbar)
         setSupportActionBar(toolbar)
-        val settingsItems = arrayOf(
-            SettingsItem(
-                resources.getString(R.string.settings_disk_resize_title),
-                resources.getString(R.string.settings_disk_resize_sub_title),
-                R.drawable.baseline_storage_24,
-                SettingsItemEnum.DiskResize
-            ),
-            SettingsItem(
-                resources.getString(R.string.settings_port_forwarding_title),
-                resources.getString(R.string.settings_port_forwarding_sub_title),
-                R.drawable.baseline_call_missed_outgoing_24,
-                SettingsItemEnum.PortForwarding
-            ),
-            SettingsItem(
-                resources.getString(R.string.settings_recovery_title),
-                resources.getString(R.string.settings_recovery_sub_title),
-                R.drawable.baseline_settings_backup_restore_24,
-                SettingsItemEnum.Recovery
-            ),
-        )
+        val settingsItems =
+            arrayOf(
+                SettingsItem(
+                    resources.getString(R.string.settings_disk_resize_title),
+                    resources.getString(R.string.settings_disk_resize_sub_title),
+                    R.drawable.baseline_storage_24,
+                    SettingsItemEnum.DiskResize,
+                ),
+                SettingsItem(
+                    resources.getString(R.string.settings_port_forwarding_title),
+                    resources.getString(R.string.settings_port_forwarding_sub_title),
+                    R.drawable.baseline_call_missed_outgoing_24,
+                    SettingsItemEnum.PortForwarding,
+                ),
+                SettingsItem(
+                    resources.getString(R.string.settings_recovery_title),
+                    resources.getString(R.string.settings_recovery_sub_title),
+                    R.drawable.baseline_settings_backup_restore_24,
+                    SettingsItemEnum.Recovery,
+                ),
+            )
         val settingsListItemAdapter = SettingsItemAdapter(settingsItems)
 
         val recyclerView: RecyclerView = findViewById(R.id.settings_list_recycler_view)
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt
index 2a505d8..303a932 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt
@@ -22,7 +22,6 @@
 import android.icu.util.Measure
 import android.icu.util.MeasureUnit
 import android.os.Bundle
-import android.os.FileUtils
 import android.text.SpannableString
 import android.text.Spanned
 import android.text.TextUtils
@@ -45,11 +44,11 @@
     private lateinit var diskSizeSlider: SeekBar
 
     private fun bytesToMb(bytes: Long): Long {
-        return bytes shr 20;
+        return bytes shr 20
     }
 
     private fun mbToBytes(bytes: Long): Long {
-        return bytes shl 20;
+        return bytes shl 20
     }
 
     private fun mbToProgress(bytes: Long): Int {
@@ -68,19 +67,20 @@
 
         val sharedPref =
             this.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE)
-        diskSizeMb = bytesToMb(sharedPref.getLong(
-                    getString(R.string.preference_disk_size_key),
-                    /* defValue= */ 0))
+        diskSizeMb =
+            bytesToMb(
+                sharedPref.getLong(getString(R.string.preference_disk_size_key), /* defValue= */ 0)
+            )
         val image = InstalledImage.getDefault(this)
-        val minDiskSizeMb =
-            bytesToMb(image.getSmallestSizePossible())
-                .coerceAtMost(diskSizeMb)
+        val minDiskSizeMb = bytesToMb(image.getSmallestSizePossible()).coerceAtMost(diskSizeMb)
 
         diskSizeText = findViewById<TextView>(R.id.settings_disk_resize_resize_gb_assigned)!!
         val diskMaxSizeText = findViewById<TextView>(R.id.settings_disk_resize_resize_gb_max)
-        diskMaxSizeText.text = getString(R.string.settings_disk_resize_resize_gb_max_format,
-            localizedFileSize(maxDiskSizeMb, /* isShort= */ true)
-        );
+        diskMaxSizeText.text =
+            getString(
+                R.string.settings_disk_resize_resize_gb_max_format,
+                localizedFileSize(maxDiskSizeMb, /* isShort= */ true),
+            )
 
         diskSizeSlider = findViewById<SeekBar>(R.id.settings_disk_resize_disk_size_slider)!!
         val cancelButton = findViewById<MaterialButton>(R.id.settings_disk_resize_cancel_button)
@@ -90,21 +90,23 @@
         diskSizeSlider.progress = mbToProgress(diskSizeMb)
         updateSliderText(diskSizeMb)
 
-        diskSizeSlider.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
-            override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
-                updateSliderText(progressToMb(progress))
-                cancelButton.isVisible = true
-                resizeButton.isVisible = true
-            }
+        diskSizeSlider.setOnSeekBarChangeListener(
+            object : SeekBar.OnSeekBarChangeListener {
+                override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
+                    updateSliderText(progressToMb(progress))
+                    cancelButton.isVisible = true
+                    resizeButton.isVisible = true
+                }
 
-            override fun onStartTrackingTouch(seekBar: SeekBar?) {
-                // no-op
-            }
+                override fun onStartTrackingTouch(seekBar: SeekBar?) {
+                    // no-op
+                }
 
-            override fun onStopTrackingTouch(seekBar: SeekBar?) {
-                // no-op
+                override fun onStopTrackingTouch(seekBar: SeekBar?) {
+                    // no-op
+                }
             }
-        })
+        )
 
         cancelButton.setOnClickListener {
             diskSizeSlider.progress = mbToProgress(diskSizeMb)
@@ -117,10 +119,7 @@
             cancelButton.isVisible = false
             resizeButton.isVisible = false
             val editor = sharedPref.edit()
-            editor.putLong(
-                getString(R.string.preference_disk_size_key),
-                mbToBytes(diskSizeMb)
-            )
+            editor.putLong(getString(R.string.preference_disk_size_key), mbToBytes(diskSizeMb))
             editor.apply()
 
             // Restart terminal
@@ -133,12 +132,18 @@
     }
 
     fun updateSliderText(sizeMb: Long) {
-        diskSizeText.text = enlargeFontOfNumber(
-            getString(R.string.settings_disk_resize_resize_gb_assigned_format,
-                localizedFileSize(sizeMb, /* isShort= */ true)))
+        diskSizeText.text =
+            enlargeFontOfNumber(
+                getString(
+                    R.string.settings_disk_resize_resize_gb_assigned_format,
+                    localizedFileSize(sizeMb, /* isShort= */ true),
+                )
+            )
         diskSizeSlider.stateDescription =
-            getString(R.string.settings_disk_resize_resize_gb_assigned_format,
-                localizedFileSize(sizeMb, /* isShort= */ false))
+            getString(
+                R.string.settings_disk_resize_resize_gb_assigned_format,
+                localizedFileSize(sizeMb, /* isShort= */ false),
+            )
     }
 
     fun localizedFileSize(sizeMb: Long, isShort: Boolean): String {
@@ -150,7 +155,8 @@
         numberFormatter.minimumFractionDigits = 1
         numberFormatter.maximumFractionDigits = 1
 
-        val formatWidth = if (isShort) MeasureFormat.FormatWidth.SHORT else MeasureFormat.FormatWidth.WIDE
+        val formatWidth =
+            if (isShort) MeasureFormat.FormatWidth.SHORT else MeasureFormat.FormatWidth.WIDE
         val measureFormat: MeasureFormat =
             MeasureFormat.getInstance(localeFromContext, formatWidth, numberFormatter)
         return measureFormat.format(measure)
@@ -161,14 +167,15 @@
             return ""
         }
 
-        val matcher = numberPattern.matcher(summary);
+        val matcher = numberPattern.matcher(summary)
         if (matcher.find()) {
             val spannableSummary = SpannableString(summary)
             spannableSummary.setSpan(
-                    RelativeSizeSpan(2f),
-                    matcher.start(),
-                    matcher.end(),
-                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
+                RelativeSizeSpan(2f),
+                matcher.start(),
+                matcher.end(),
+                Spanned.SPAN_EXCLUSIVE_EXCLUSIVE,
+            )
             return spannableSummary
         }
         return summary
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItem.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItem.kt
index e1723a7..5098ecd 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItem.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItem.kt
@@ -16,13 +16,14 @@
 package com.android.virtualization.terminal
 
 enum class SettingsItemEnum {
-    DiskResize, PortForwarding, Recovery
+    DiskResize,
+    PortForwarding,
+    Recovery,
 }
 
 class SettingsItem(
     val title: String,
     val subTitle: String,
     val icon: Int,
-    val settingsItemEnum: SettingsItemEnum
-) {
-}
\ No newline at end of file
+    val settingsItemEnum: SettingsItemEnum,
+) {}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItemAdapter.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItemAdapter.kt
index 86f5c92..132d749 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItemAdapter.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsItemAdapter.kt
@@ -35,8 +35,9 @@
     }
 
     override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
-        val view = LayoutInflater.from(viewGroup.context)
-            .inflate(R.layout.settings_list_item, viewGroup, false)
+        val view =
+            LayoutInflater.from(viewGroup.context)
+                .inflate(R.layout.settings_list_item, viewGroup, false)
         return ViewHolder(view)
     }
 
@@ -46,17 +47,19 @@
         viewHolder.subTitle.text = dataSet[position].subTitle
 
         viewHolder.card.setOnClickListener { view ->
-            val intent = Intent(
-                viewHolder.itemView.context,
-                when (dataSet[position].settingsItemEnum) {
-                    SettingsItemEnum.DiskResize -> SettingsDiskResizeActivity::class.java
-                    SettingsItemEnum.PortForwarding -> SettingsPortForwardingActivity::class.java
-                    SettingsItemEnum.Recovery -> SettingsRecoveryActivity::class.java
-                }
-            )
+            val intent =
+                Intent(
+                    viewHolder.itemView.context,
+                    when (dataSet[position].settingsItemEnum) {
+                        SettingsItemEnum.DiskResize -> SettingsDiskResizeActivity::class.java
+                        SettingsItemEnum.PortForwarding ->
+                            SettingsPortForwardingActivity::class.java
+                        SettingsItemEnum.Recovery -> SettingsRecoveryActivity::class.java
+                    },
+                )
             view.context.startActivity(intent)
         }
     }
 
     override fun getItemCount() = dataSet.size
-}
\ No newline at end of file
+}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt
index c3501d4..afe985a 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsPortForwardingAdapter.kt
@@ -90,8 +90,9 @@
     }
 
     override fun onCreateViewHolder(viewGroup: ViewGroup, viewType: Int): ViewHolder {
-        val view = LayoutInflater.from(viewGroup.context)
-            .inflate(R.layout.settings_port_forwarding_item, viewGroup, false)
+        val view =
+            LayoutInflater.from(viewGroup.context)
+                .inflate(R.layout.settings_port_forwarding_item, viewGroup, false)
         return ViewHolder(view)
     }
 
@@ -100,13 +101,16 @@
         viewHolder.enabledSwitch.contentDescription = viewHolder.port.text
         viewHolder.enabledSwitch.isChecked = mItems[position].enabled
         viewHolder.enabledSwitch.setOnCheckedChangeListener { _, isChecked ->
-            val sharedPref: SharedPreferences = context.getSharedPreferences(
-                context.getString(R.string.preference_file_key), Context.MODE_PRIVATE
-            )
+            val sharedPref: SharedPreferences =
+                context.getSharedPreferences(
+                    context.getString(R.string.preference_file_key),
+                    Context.MODE_PRIVATE,
+                )
             val editor = sharedPref.edit()
             editor.putBoolean(
-                context.getString(R.string.preference_forwarding_port_is_enabled) + viewHolder.port.text,
-                isChecked
+                context.getString(R.string.preference_forwarding_port_is_enabled) +
+                    viewHolder.port.text,
+                isChecked,
             )
             editor.apply()
         }
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt
index f986aa1..0d74eb0 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt
@@ -27,7 +27,6 @@
 import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import com.google.android.material.snackbar.Snackbar
 import java.io.IOException
-import java.nio.file.Files
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.Dispatchers
 import kotlinx.coroutines.launch
@@ -40,20 +39,25 @@
         val resetCard = findViewById<MaterialCardView>(R.id.settings_recovery_reset_card)
         resetCard.setOnClickListener {
             var backupRootfs = false
-            val dialog = MaterialAlertDialogBuilder(this)
-                .setTitle(R.string.settings_recovery_reset_dialog_title)
-                .setMultiChoiceItems(arrayOf(getString(R.string.settings_recovery_reset_dialog_backup_option)), booleanArrayOf(backupRootfs)) {_, _, checked ->
-                    backupRootfs = checked
-                }
-                .setPositiveButton(R.string.settings_recovery_reset_dialog_confirm) { _, _ ->
-                    // This coroutine will be killed when the activity is killed. The behavior is both acceptable
-                    // either removing is done or not
-                    runInBackgroundAndRestartApp {
-                        uninstall(backupRootfs)
+            val dialog =
+                MaterialAlertDialogBuilder(this)
+                    .setTitle(R.string.settings_recovery_reset_dialog_title)
+                    .setMultiChoiceItems(
+                        arrayOf(getString(R.string.settings_recovery_reset_dialog_backup_option)),
+                        booleanArrayOf(backupRootfs),
+                    ) { _, _, checked ->
+                        backupRootfs = checked
                     }
-                }
-                .setNegativeButton(R.string.settings_recovery_reset_dialog_cancel) { dialog, _ -> dialog.dismiss() }
-                .create()
+                    .setPositiveButton(R.string.settings_recovery_reset_dialog_confirm) { _, _ ->
+                        // This coroutine will be killed when the activity is killed. Either
+                        // finishing removing or not is acceptable behavior.
+                        runInBackgroundAndRestartApp { uninstall(backupRootfs) }
+                    }
+                    .setNegativeButton(R.string.settings_recovery_reset_dialog_cancel) { dialog, _
+                        ->
+                        dialog.dismiss()
+                    }
+                    .create()
             dialog.show()
         }
         val resetBackupCard = findViewById<View>(R.id.settings_recovery_reset_backup_card)
@@ -61,16 +65,18 @@
         resetBackupCard.isVisible = InstalledImage.getDefault(this).hasBackup()
 
         resetBackupCard.setOnClickListener {
-            val dialog = MaterialAlertDialogBuilder(this)
-                .setTitle(R.string.settings_recovery_remove_backup_title)
-                .setMessage(R.string.settings_recovery_remove_backup_sub_title)
-                .setPositiveButton(R.string.settings_recovery_reset_dialog_confirm) { _, _ ->
-                    runInBackgroundAndRestartApp {
-                        removeBackup()
+            val dialog =
+                MaterialAlertDialogBuilder(this)
+                    .setTitle(R.string.settings_recovery_remove_backup_title)
+                    .setMessage(R.string.settings_recovery_remove_backup_sub_title)
+                    .setPositiveButton(R.string.settings_recovery_reset_dialog_confirm) { _, _ ->
+                        runInBackgroundAndRestartApp { removeBackup() }
                     }
-                }
-                .setNegativeButton(R.string.settings_recovery_reset_dialog_cancel) { dialog, _ -> dialog.dismiss() }
-                .create()
+                    .setNegativeButton(R.string.settings_recovery_reset_dialog_cancel) { dialog, _
+                        ->
+                        dialog.dismiss()
+                    }
+                    .create()
             dialog.show()
         }
     }
@@ -80,10 +86,11 @@
             InstalledImage.getDefault(this).deleteBackup()
         } catch (e: IOException) {
             Snackbar.make(
-                findViewById(android.R.id.content),
-                R.string.settings_recovery_error_during_removing_backup,
-                Snackbar.LENGTH_SHORT
-            ).show();
+                    findViewById(android.R.id.content),
+                    R.string.settings_recovery_error_during_removing_backup,
+                    Snackbar.LENGTH_SHORT,
+                )
+                .show()
             Log.e(TAG, "cannot remove backup")
         }
     }
@@ -99,34 +106,36 @@
                 image.uninstallFully()
             }
         } catch (e: IOException) {
-            val errorMsgId = if (backupRootfs && !backupDone) R.string.settings_recovery_error_due_to_backup
-                    else R.string.settings_recovery_error;
-            Snackbar.make(
-                findViewById(android.R.id.content),
-                errorMsgId,
-                Snackbar.LENGTH_SHORT
-            ).show();
+            val errorMsgId =
+                if (backupRootfs && !backupDone) R.string.settings_recovery_error_due_to_backup
+                else R.string.settings_recovery_error
+            Snackbar.make(findViewById(android.R.id.content), errorMsgId, Snackbar.LENGTH_SHORT)
+                .show()
             Log.e(TAG, "cannot recovery ", e)
         }
     }
 
-    private fun runInBackgroundAndRestartApp(backgroundWork: suspend CoroutineScope.() -> Unit): Unit {
+    private fun runInBackgroundAndRestartApp(
+        backgroundWork: suspend CoroutineScope.() -> Unit
+    ): Unit {
         findViewById<View>(R.id.setting_recovery_card_container).visibility = View.INVISIBLE
         findViewById<View>(R.id.recovery_boot_progress).visibility = View.VISIBLE
-        lifecycleScope.launch(Dispatchers.IO) {
-            backgroundWork()
-        }.invokeOnCompletion {
-            runOnUiThread {
-                findViewById<View>(R.id.setting_recovery_card_container).visibility =
-                    View.VISIBLE
-                findViewById<View>(R.id.recovery_boot_progress).visibility = View.INVISIBLE
-                // Restart terminal
-                val intent =
-                    baseContext.packageManager.getLaunchIntentForPackage(baseContext.packageName)
-                intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
-                finish()
-                startActivity(intent)
+        lifecycleScope
+            .launch(Dispatchers.IO) { backgroundWork() }
+            .invokeOnCompletion {
+                runOnUiThread {
+                    findViewById<View>(R.id.setting_recovery_card_container).visibility =
+                        View.VISIBLE
+                    findViewById<View>(R.id.recovery_boot_progress).visibility = View.INVISIBLE
+                    // Restart terminal
+                    val intent =
+                        baseContext.packageManager.getLaunchIntentForPackage(
+                            baseContext.packageName
+                        )
+                    intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
+                    finish()
+                    startActivity(intent)
+                }
             }
-        }
     }
 }
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SplitInitializer.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SplitInitializer.kt
index cb917bd..7562779 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SplitInitializer.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SplitInitializer.kt
@@ -30,4 +30,4 @@
     override fun dependencies(): List<Class<out Initializer<*>>> {
         return emptyList()
     }
-}
\ No newline at end of file
+}
