VmTerminalApp: Show confirmation dialog for resize

Previously resize confirm button had text 'Restart to apply'.
But the text may be increased up to 40 chars for i18n, and it takes more
than half of the device screen width.

For better UX, simplify the button text and show confirmation dialog
instead.

Bug: 380407944
Test: Manually
Change-Id: Id0a4fe93efd4e85b43fef18cda1efc7a5eac9329
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt
index 303a932..30475f5 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsDiskResizeActivity.kt
@@ -17,6 +17,7 @@
 
 import android.content.Context
 import android.content.Intent
+import android.content.SharedPreferences
 import android.icu.text.MeasureFormat
 import android.icu.text.NumberFormat
 import android.icu.util.Measure
@@ -26,11 +27,12 @@
 import android.text.Spanned
 import android.text.TextUtils
 import android.text.style.RelativeSizeSpan
+import android.view.View
 import android.widget.SeekBar
 import android.widget.TextView
 import androidx.appcompat.app.AppCompatActivity
 import androidx.core.view.isVisible
-import com.google.android.material.button.MaterialButton
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
 import java.util.Locale
 import java.util.regex.Pattern
 
@@ -40,6 +42,10 @@
 
     private var diskSizeStepMb: Long = 0
     private var diskSizeMb: Long = 0
+    private lateinit var sharedPref: SharedPreferences
+    private lateinit var buttons: View
+    private lateinit var cancelButton: View
+    private lateinit var resizeButton: View
     private lateinit var diskSizeText: TextView
     private lateinit var diskSizeSlider: SeekBar
 
@@ -65,7 +71,7 @@
 
         diskSizeStepMb = 1L shl resources.getInteger(R.integer.disk_size_round_up_step_size_in_mb)
 
-        val sharedPref =
+        sharedPref =
             this.getSharedPreferences(getString(R.string.preference_file_key), Context.MODE_PRIVATE)
         diskSizeMb =
             bytesToMb(
@@ -82,9 +88,10 @@
                 localizedFileSize(maxDiskSizeMb, /* isShort= */ true),
             )
 
+        buttons = findViewById<View>(R.id.buttons)
         diskSizeSlider = findViewById<SeekBar>(R.id.settings_disk_resize_disk_size_slider)!!
-        val cancelButton = findViewById<MaterialButton>(R.id.settings_disk_resize_cancel_button)
-        val resizeButton = findViewById<MaterialButton>(R.id.settings_disk_resize_resize_button)
+        cancelButton = findViewById<View>(R.id.settings_disk_resize_cancel_button)
+        resizeButton = findViewById<View>(R.id.settings_disk_resize_resize_button)
         diskSizeSlider.min = mbToProgress(minDiskSizeMb)
         diskSizeSlider.max = mbToProgress(maxDiskSizeMb)
         diskSizeSlider.progress = mbToProgress(diskSizeMb)
@@ -94,6 +101,7 @@
             object : SeekBar.OnSeekBarChangeListener {
                 override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) {
                     updateSliderText(progressToMb(progress))
+                    buttons.isVisible = true
                     cancelButton.isVisible = true
                     resizeButton.isVisible = true
                 }
@@ -108,27 +116,41 @@
             }
         )
 
-        cancelButton.setOnClickListener {
-            diskSizeSlider.progress = mbToProgress(diskSizeMb)
-            cancelButton.isVisible = false
-            resizeButton.isVisible = false
-        }
+        cancelButton.setOnClickListener { cancel() }
 
-        resizeButton.setOnClickListener {
-            diskSizeMb = progressToMb(diskSizeSlider.progress)
-            cancelButton.isVisible = false
-            resizeButton.isVisible = false
-            val editor = sharedPref.edit()
-            editor.putLong(getString(R.string.preference_disk_size_key), mbToBytes(diskSizeMb))
-            editor.apply()
+        resizeButton.setOnClickListener { showConfirmationDialog() }
+    }
 
-            // Restart terminal
-            val intent =
-                baseContext.packageManager.getLaunchIntentForPackage(baseContext.packageName)
-            intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
-            finish()
-            startActivity(intent)
-        }
+    fun cancel() {
+        diskSizeSlider.progress = mbToProgress(diskSizeMb)
+        buttons.isVisible = false
+    }
+
+    fun showConfirmationDialog() {
+        MaterialAlertDialogBuilder(this)
+            .setTitle(R.string.settings_disk_resize_title)
+            .setMessage(R.string.settings_disk_resize_resize_confirm_dialog_message)
+            .setPositiveButton(R.string.settings_disk_resize_resize_confirm_dialog_confirm) { _, _
+                ->
+                resize()
+            }
+            .setNegativeButton(R.string.settings_disk_resize_resize_cancel) { _, _ -> cancel() }
+            .create()
+            .show()
+    }
+
+    fun resize() {
+        diskSizeMb = progressToMb(diskSizeSlider.progress)
+        buttons.isVisible = false
+        val editor = sharedPref.edit()
+        editor.putLong(getString(R.string.preference_disk_size_key), mbToBytes(diskSizeMb))
+        editor.apply()
+
+        // Restart terminal
+        val intent = baseContext.packageManager.getLaunchIntentForPackage(baseContext.packageName)
+        intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
+        finish()
+        startActivity(intent)
     }
 
     fun updateSliderText(sizeMb: Long) {
diff --git a/android/TerminalApp/res/layout/settings_disk_resize.xml b/android/TerminalApp/res/layout/settings_disk_resize.xml
index fb7f85b..55fb7af 100644
--- a/android/TerminalApp/res/layout/settings_disk_resize.xml
+++ b/android/TerminalApp/res/layout/settings_disk_resize.xml
@@ -65,14 +65,18 @@
             app:layout_constraintTop_toTopOf="parent"
             app:layout_constraintBottom_toBottomOf="parent" />
 
+        <androidx.constraintlayout.widget.Group
+            android:id="@+id/buttons"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:visibility="invisible"
+            app:constraint_referenced_ids="settings_disk_resize_cancel_button,settings_disk_resize_resize_button" />
+
         <com.google.android.material.button.MaterialButton
             android:id="@+id/settings_disk_resize_cancel_button"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:maxWidth="150sp"
-            android:hyphenationFrequency="full"
             android:text="@string/settings_disk_resize_resize_cancel"
-            android:visibility="invisible"
             android:layout_marginTop="48dp"
             android:layout_marginHorizontal="8dp"
             app:layout_constraintTop_toTopOf="@+id/settings_disk_resize_disk_size_slider"
@@ -83,10 +87,7 @@
             android:id="@+id/settings_disk_resize_resize_button"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:maxWidth="150sp"
-            android:hyphenationFrequency="full"
             android:text="@string/settings_disk_resize_resize_restart_vm_to_apply"
-            android:visibility="invisible"
             android:layout_marginTop="48dp"
             app:layout_constraintTop_toTopOf="@+id/settings_disk_resize_disk_size_slider"
             app:layout_constraintBottom_toBottomOf="parent"
diff --git a/android/TerminalApp/res/values/strings.xml b/android/TerminalApp/res/values/strings.xml
index 6fb256b..44d88a2 100644
--- a/android/TerminalApp/res/values/strings.xml
+++ b/android/TerminalApp/res/values/strings.xml
@@ -74,8 +74,12 @@
     <string name="settings_disk_resize_resize_gb_max_format"><xliff:g id="max_size" example="256GB">%1$s</xliff:g> max</string>
     <!-- Settings menu button to cancel disk resize. [CHAR LIMIT=16] -->
     <string name="settings_disk_resize_resize_cancel">Cancel</string>
-    <!-- Settings menu button to apply change that requires to restart Terminal app. [CHAR LIMIT=40] -->
-    <string name="settings_disk_resize_resize_restart_vm_to_apply">Restart to apply</string>
+    <!-- Settings menu button to apply change Terminal app. This will launch a confirmation dialog [CHAR LIMIT=16] -->
+    <string name="settings_disk_resize_resize_restart_vm_to_apply">Apply</string>
+    <!-- Dialog description for applying disk resize Terminal app, which requires to restart the terminal [CHAR LIMIT=none] -->
+    <string name="settings_disk_resize_resize_confirm_dialog_message">Terminal will be restarted to resize disk</string>
+    <!-- Dialog confirmation button for restarting the terminal [CHAR LIMIT=16] -->
+    <string name="settings_disk_resize_resize_confirm_dialog_confirm">Confirm</string>
 
     <!-- Settings menu title for 'port forwarding' [CHAR LIMIT=none] -->
     <string name="settings_port_forwarding_title">Port forwarding</string>