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 {