Merge "Reduce stopSelf and ACTION_SHUTDOWN_VM" into main
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
index 37147eb..542265a 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
@@ -79,6 +79,7 @@
private lateinit var terminalTabAdapter: TerminalTabAdapter
private val terminalInfo = CompletableFuture<TerminalInfo>()
private val terminalViewModel: TerminalViewModel by viewModels()
+ private var isVmRunning = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -280,13 +281,16 @@
executorService.shutdown()
getSystemService<AccessibilityManager>(AccessibilityManager::class.java)
.removeAccessibilityStateChangeListener(this)
- val intent = VmLauncherService.getIntentForShutdown(this, this)
- startService(intent)
+ if (isVmRunning) {
+ val intent = VmLauncherService.getIntentForShutdown(this, this)
+ startService(intent)
+ }
super.onDestroy()
}
override fun onVmStart() {
Log.i(TAG, "onVmStart()")
+ isVmRunning = true
}
override fun onTerminalAvailable(info: TerminalInfo) {
@@ -295,11 +299,13 @@
override fun onVmStop() {
Log.i(TAG, "onVmStop()")
+ isVmRunning = false
finish()
}
override fun onVmError() {
Log.i(TAG, "onVmError()")
+ isVmRunning = false
// TODO: error cause is too simple.
ErrorActivity.start(this, Exception("onVmError"))
}
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
index 0b34a8d..f1ad561 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
@@ -465,7 +465,6 @@
private fun doShutdown(resultReceiver: ResultReceiver?) {
runner?.exitStatus?.thenAcceptAsync { success: Boolean ->
resultReceiver?.send(if (success) RESULT_STOP else RESULT_ERROR, null)
- stopSelf()
}
if (debianService != null && debianService!!.shutdownDebian()) {
// During shutdown, change the notification content to indicate that it's closing
@@ -494,7 +493,6 @@
} else {
// If there is no Debian service or it fails to shutdown, just stop the service.
runner?.vm?.stop()
- stopSelf()
}
}