Merge "Handle ForegroundServiceStartNotAllowedException when starting the VM" into main am: 329eea7a8a
Original change: https://android-review.googlesource.com/c/platform/packages/modules/Virtualization/+/3541801
Change-Id: Ie05f2c6762e7dd327ef3af79fef4edfbcd23ac60
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
index 35c5570..7502415 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.kt
@@ -361,8 +361,10 @@
.build()
)
.build()
-
- run(this, this, notification, getDisplayInfo())
+ run(this, this, notification, getDisplayInfo()).onFailure {
+ Log.e(TAG, "Failed to start VM.", it)
+ finish()
+ }
}
@VisibleForTesting
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
index 1857175..2d7dde9 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/VmLauncherService.kt
@@ -15,6 +15,7 @@
*/
package com.android.virtualization.terminal
+import android.app.ForegroundServiceStartNotAllowedException
import android.app.Notification
import android.app.NotificationManager
import android.app.PendingIntent
@@ -423,7 +424,7 @@
callback: VmLauncherServiceCallback?,
notification: Notification?,
displayInfo: DisplayInfo,
- ) {
+ ): Result<Unit> {
val i = getMyIntent(context)
val resultReceiver: ResultReceiver =
object : ResultReceiver(Handler(Looper.myLooper()!!)) {
@@ -446,7 +447,12 @@
i.putExtra(Intent.EXTRA_RESULT_RECEIVER, getResultReceiverForIntent(resultReceiver))
i.putExtra(EXTRA_NOTIFICATION, notification)
i.putExtra(EXTRA_DISPLAY_INFO, displayInfo)
- context.startForegroundService(i)
+ return try {
+ context.startForegroundService(i)
+ Result.success(Unit)
+ } catch (e: ForegroundServiceStartNotAllowedException) {
+ Result.failure<Unit>(e)
+ }
}
private fun getResultReceiverForIntent(r: ResultReceiver): ResultReceiver {