Integrate recovery settings
Bug: 375873838
Test: Manually
Change-Id: I26896a2b6b805e78326933ab7510660f27df5b1b
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt
index 7256015..95bcbbc 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/SettingsRecoveryActivity.kt
@@ -15,18 +15,49 @@
*/
package com.android.virtualization.terminal
+import android.content.Intent
import android.os.Bundle
-import android.widget.Toast
+import android.util.Log
import androidx.appcompat.app.AppCompatActivity
+import androidx.lifecycle.lifecycleScope
+import com.android.virtualization.vmlauncher.InstallUtils
import com.google.android.material.card.MaterialCardView
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import java.io.IOException
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.launch
+
+const val TAG: String = "VmTerminalApp"
class SettingsRecoveryActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.settings_recovery)
val resetCard = findViewById<MaterialCardView>(R.id.settings_recovery_reset_card)
+ val dialog = MaterialAlertDialogBuilder(this)
+ .setTitle(R.string.settings_recovery_reset_dialog_title)
+ .setMessage(R.string.settings_recovery_reset_dialog_message)
+ .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
+ lifecycleScope.launch(Dispatchers.IO) {
+ try {
+ InstallUtils.unInstall(this@SettingsRecoveryActivity)
+ // Restart terminal
+ val intent =
+ baseContext.packageManager.getLaunchIntentForPackage(baseContext.packageName)
+ intent?.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
+ finish()
+ startActivity(intent)
+ } catch (e: IOException) {
+ Log.e(TAG, "VM image reset failed.")
+ }
+ }
+ }
+ .setNegativeButton(R.string.settings_recovery_reset_dialog_cancel) { dialog, _ -> dialog.dismiss() }
+ .create()
resetCard.setOnClickListener {
- Toast.makeText(this@SettingsRecoveryActivity, R.string.settings_recovery_reset_message, Toast.LENGTH_SHORT).show()
+ dialog.show()
}
}
}
\ No newline at end of file
diff --git a/android/TerminalApp/res/values/strings.xml b/android/TerminalApp/res/values/strings.xml
index dfe7b95..b3579c1 100644
--- a/android/TerminalApp/res/values/strings.xml
+++ b/android/TerminalApp/res/values/strings.xml
@@ -87,8 +87,14 @@
<string name="settings_recovery_reset_title">Change to Initial version</string>
<!-- Settings menu subtitle for resetting the virtual machine image [CHAR LIMIT=none] -->
<string name="settings_recovery_reset_sub_title">Remove all</string>
- <!-- Toast message for reset is completed [CHAR LIMIT=none] -->
- <string name="settings_recovery_reset_message">VM reset</string>
+ <!-- Dialog title for restarting the terminal [CHAR LIMIT=none] -->
+ <string name="settings_recovery_reset_dialog_title">Reset the virtual machine</string>
+ <!-- Dialog message for restarting the terminal [CHAR LIMIT=none] -->
+ <string name="settings_recovery_reset_dialog_message">Data will be deleted.</string>
+ <!-- Dialog button confirm for restarting the terminal [CHAR LIMIT=16] -->
+ <string name="settings_recovery_reset_dialog_confirm">Confirm</string>
+ <!-- Dialog button cancel for restarting the terminal [CHAR LIMIT=16] -->
+ <string name="settings_recovery_reset_dialog_cancel">Cancel</string>
<!-- Notification action button for settings [CHAR LIMIT=none] -->
<string name="service_notification_settings">Settings</string>
diff --git a/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/InstallUtils.java b/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/InstallUtils.java
index a4e7809..13e47f8 100644
--- a/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/InstallUtils.java
+++ b/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/InstallUtils.java
@@ -49,6 +49,10 @@
return Files.exists(getInstallationCompletedPath(context));
}
+ public static void unInstall(Context context) throws IOException {
+ Files.delete(getInstallationCompletedPath(context));
+ }
+
public static boolean createInstalledMarker(Context context) {
try {
File file = new File(getInstallationCompletedPath(context).toString());