Notification dismissal or click close button will stop VM
Bug: 372170751
Bug: 376339300
Test: check if vm is stopped with these actions
Change-Id: I48c1043da39146f3e2ea968d22807f3833203ba1
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
index 1212525..2e10903 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/MainActivity.java
@@ -44,6 +44,7 @@
import android.widget.Toast;
import com.android.virtualization.vmlauncher.InstallUtils;
+import com.android.virtualization.vmlauncher.VmLauncherService;
import com.android.virtualization.vmlauncher.VmLauncherServices;
import com.google.android.material.appbar.MaterialToolbar;
@@ -433,22 +434,46 @@
Intent intent = new Intent();
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
-
+ Intent stopIntent = new Intent();
+ stopIntent.setClass(this, VmLauncherService.class);
+ stopIntent.setAction(VmLauncherServices.ACTION_STOP_VM_LAUNCHER_SERVICE);
+ PendingIntent stopPendingIntent =
+ PendingIntent.getService(
+ this,
+ 0,
+ stopIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE);
Icon icon = Icon.createWithResource(getResources(), R.drawable.ic_launcher_foreground);
- Notification notification = new Notification.Builder(this, TAG)
- .setChannelId(TAG)
- .setSmallIcon(R.drawable.ic_launcher_foreground)
- .setContentTitle(getResources().getString(R.string.service_notification_title))
- .setContentText(getResources().getString(R.string.service_notification_content))
- .setContentIntent(pendingIntent)
- .setOngoing(true)
- .addAction(new Notification.Action.Builder(icon,
- getResources().getString(R.string.service_notification_settings),
- pendingIntent).build())
- .addAction(new Notification.Action.Builder(icon,
- getResources().getString(R.string.service_notification_quit_action),
- pendingIntent).build())
- .build();
+ Notification notification =
+ new Notification.Builder(this, TAG)
+ .setChannelId(TAG)
+ .setSmallIcon(R.drawable.ic_launcher_foreground)
+ .setContentTitle(
+ getResources().getString(R.string.service_notification_title))
+ .setContentText(
+ getResources().getString(R.string.service_notification_content))
+ .setContentIntent(pendingIntent)
+ .setOngoing(true)
+ .addAction(
+ new Notification.Action.Builder(
+ icon,
+ getResources()
+ .getString(
+ R.string
+ .service_notification_settings),
+ pendingIntent)
+ .build())
+ .addAction(
+ new Notification.Action.Builder(
+ icon,
+ getResources()
+ .getString(
+ R.string
+ .service_notification_quit_action),
+ stopPendingIntent)
+ .build())
+ .setDeleteIntent(stopPendingIntent)
+ .build();
android.os.Trace.beginAsyncSection("executeTerminal", 0);
VmLauncherServices.startVmLauncherService(this, this, notification);
diff --git a/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/VmLauncherService.java b/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/VmLauncherService.java
index 3731854..5cd7b92 100644
--- a/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/VmLauncherService.java
+++ b/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/VmLauncherService.java
@@ -33,6 +33,7 @@
import java.io.IOException;
import java.nio.file.Path;
+import java.util.Objects;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@@ -62,6 +63,11 @@
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
+ if (Objects.equals(
+ intent.getAction(), VmLauncherServices.ACTION_STOP_VM_LAUNCHER_SERVICE)) {
+ stopSelf();
+ return START_NOT_STICKY;
+ }
if (mVirtualMachine != null) {
Log.d(TAG, "VM instance is already started");
return START_NOT_STICKY;
diff --git a/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/VmLauncherServices.java b/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/VmLauncherServices.java
index 2fa0b32..6eca2b3 100644
--- a/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/VmLauncherServices.java
+++ b/libs/vm_launcher_lib/java/com/android/virtualization/vmlauncher/VmLauncherServices.java
@@ -36,6 +36,8 @@
private static final String ACTION_START_VM_LAUNCHER_SERVICE =
"android.virtualization.START_VM_LAUNCHER_SERVICE";
+ public static final String ACTION_STOP_VM_LAUNCHER_SERVICE =
+ "android.virtualization.STOP_VM_LAUNCHER_SERVICE";
private static final int RESULT_START = 0;
private static final int RESULT_STOP = 1;
private static final int RESULT_ERROR = 2;