ADV Manager: prevent deletion of running AVDs

Bug: 2364918
Change-Id: Ibe01e0b2d51f6d7df1972f57ff7fadb6116175df
diff --git a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/avd/AvdManager.java b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/avd/AvdManager.java
index 0713e74..986d760 100644
--- a/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/avd/AvdManager.java
+++ b/sdkmanager/libs/sdklib/src/com/android/sdklib/internal/avd/AvdManager.java
@@ -308,6 +308,14 @@
         }
 
         /**
+         * Returns whether an emulator is currently running the AVD.
+         */
+        public boolean isRunning() {
+            File f = new File(mPath, "userdata-qemu.img.lock");
+            return f.isFile();
+        }
+
+        /**
          * Compares this object with the specified object for order. Returns a
          * negative integer, zero, or a positive integer as this object is less
          * than, equal to, or greater than the specified object.
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java
index c302cd6..b97d8fb 100644
--- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdSelector.java
@@ -837,6 +837,21 @@
         // get the current Display
         final Display display = mTable.getDisplay();
 
+        // check if the AVD is running
+        if (avdInfo.isRunning()) {
+            display.asyncExec(new Runnable() {
+                public void run() {
+                    Shell shell = display.getActiveShell();
+                    MessageDialog.openError(shell,
+                            "Delete Android Virtual Device",
+                            String.format(
+                                    "The Android Virtual Device '%1$s' is currently running in an emulator and cannot be deleted.",
+                                    avdInfo.getName()));
+                }
+            });
+            return;
+        }
+
         // Confirm you want to delete this AVD
         final boolean[] result = new boolean[1];
         display.syncExec(new Runnable() {