Merge "VmTerminalApp: Show confirmation dialog for resize" into main
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>