am ef2f55d0: Add support to delete AVD in the new AvdSelector.

Merge commit 'ef2f55d0b70edcddeeeac7ad7cab0c8f115c0800'

* commit 'ef2f55d0b70edcddeeeac7ad7cab0c8f115c0800':
  Add support to delete AVD in the new AvdSelector.
This commit is contained in:
Xavier Ducrohet
2009-06-18 16:47:44 -07:00
committed by The Android Open Source Project
4 changed files with 129 additions and 35 deletions

View File

@@ -433,35 +433,6 @@ class AvdManagerListPage extends WizardPage {
}
}
/**
* Triggered when the user selects the "delete" button (the extra action in the selector)
* Deletes the currently selected AVD, if any.
*
* This is obsolete. Kept around to reuse the code later in the AvdSelector itself.
*/
@Deprecated
private void onDelete() {
AvdInfo avdInfo = mAvdSelector.getSelected();
AvdManager avdm = getAvdManager();
if (avdInfo == null || avdm == null) {
return;
}
// Confirm you want to delete this AVD
if (!AdtPlugin.displayPrompt("Delete Android Virtual Device",
String.format("Please confirm that you want to delete the Android Virtual Device named '%s'. This operation cannot be reverted.",
avdInfo.getName()))) {
return;
}
SdkLog log = new SdkLog(String.format("Result of deleting AVD '%s':", avdInfo.getName()));
boolean success = avdm.deleteAvd(avdInfo, log);
log.display(success);
reloadAvdList();
}
/**
* Triggered when the user selects the "create" button.
*/

View File

@@ -783,7 +783,7 @@ public final class AvdManager {
File f = avdInfo.getIniFile();
if (f != null && f.exists()) {
log.warning("Deleting file %1$s", f.getCanonicalPath());
log.printf("Deleting file %1$s", f.getCanonicalPath());
if (!f.delete()) {
log.error(null, "Failed to delete %1$s", f.getCanonicalPath());
error = true;
@@ -794,7 +794,7 @@ public final class AvdManager {
if (path != null) {
f = new File(path);
if (f.exists()) {
log.warning("Deleting folder %1$s", f.getCanonicalPath());
log.printf("Deleting folder %1$s", f.getCanonicalPath());
recursiveDelete(f);
if (!f.delete()) {
log.error(null, "Failed to delete %1$s", f.getCanonicalPath());
@@ -806,10 +806,10 @@ public final class AvdManager {
removeAvd(avdInfo);
if (error) {
log.printf("AVD '%1$s' deleted with errors. See warnings above.\n",
log.printf("\nAVD '%1$s' deleted with errors. See errors above.",
avdInfo.getName());
} else {
log.printf("AVD '%1$s' deleted.\n", avdInfo.getName());
log.printf("\nAVD '%1$s' deleted.", avdInfo.getName());
return true;
}

View File

@@ -245,6 +245,11 @@ final class UpdateChooserDialog extends Dialog {
placeholder = new Label(mDialogShell, SWT.NONE);
placeholder.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false, 1, 1));
// for MacOS, the Cancel button should be left.
if (SdkConstants.currentPlatform() == SdkConstants.PLATFORM_DARWIN) {
mCancelButton = new Button(mDialogShell, SWT.PUSH);
}
mInstallButton = new Button(mDialogShell, SWT.PUSH);
mInstallButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
mInstallButton.setText("Install Accepted");
@@ -255,7 +260,10 @@ final class UpdateChooserDialog extends Dialog {
}
});
// if we haven't created the cancel button yet (macos?), create it now.
if (mCancelButton == null) {
mCancelButton = new Button(mDialogShell, SWT.PUSH);
}
mCancelButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
mCancelButton.setText("Cancel");
mCancelButton.addSelectionListener(new SelectionAdapter() {

View File

@@ -18,11 +18,13 @@ package com.android.sdkuilib.internal.widgets;
import com.android.prefs.AndroidLocation.AndroidLocationException;
import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.ISdkLog;
import com.android.sdklib.internal.avd.AvdManager;
import com.android.sdklib.internal.avd.AvdManager.AvdInfo;
import com.android.sdklib.internal.avd.AvdManager.AvdInfo.AvdStatus;
import com.android.sdkuilib.internal.repository.icons.ImageFactory;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ControlAdapter;
import org.eclipse.swt.events.ControlEvent;
@@ -37,11 +39,15 @@ import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import java.util.ArrayList;
/**
* The AVD selector is a table that is added to the given parent composite.
@@ -195,7 +201,12 @@ public final class AvdSelector {
Button deleteButton = new Button(buttons, SWT.PUSH | SWT.FLAT);
deleteButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
deleteButton.setText("Delete");
// TODO: callback for button
deleteButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent arg0) {
onDelete();
}
});
Label l = new Label(buttons, SWT.SEPARATOR | SWT.HORIZONTAL);
l.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
@@ -610,4 +621,108 @@ public final class AvdSelector {
item.setText(3, "--");
}
}
private void onDelete() {
final AvdInfo avdInfo = getSelected();
// get the current Display
final Display display = mTable.getDisplay();
// Confirm you want to delete this AVD
final boolean[] result = new boolean[1];
display.syncExec(new Runnable() {
public void run() {
Shell shell = display.getActiveShell();
result[0] = MessageDialog.openQuestion(shell,
"Delete Android Virtual Device",
String.format(
"Please confirm that you want to delete the Android Virtual Device named '%s'. This operation cannot be reverted.",
avdInfo.getName()));
}
});
if (result[0] == false) {
return;
}
// log for this action.
SdkLog log = new SdkLog(
String.format("Result of deleting AVD '%s':", avdInfo.getName()),
display);
// delete the AVD
boolean success = mManager.deleteAvd(avdInfo, log);
// display the result
log.displayResult(success);
if (success) {
refresh(false);
}
}
/**
* Collects all log from the AVD action and displays it in a dialog.
*/
private class SdkLog implements ISdkLog {
final ArrayList<String> logMessages = new ArrayList<String>();
private final String mMessage;
private final Display mDisplay;
public SdkLog(String message, Display display) {
mMessage = message;
mDisplay = display;
}
public void error(Throwable throwable, String errorFormat, Object... arg) {
if (errorFormat != null) {
logMessages.add(String.format("Error: " + errorFormat, arg));
}
if (throwable != null) {
logMessages.add(throwable.getMessage());
}
}
public void warning(String warningFormat, Object... arg) {
logMessages.add(String.format("Warning: " + warningFormat, arg));
}
public void printf(String msgFormat, Object... arg) {
logMessages.add(String.format(msgFormat, arg));
}
/**
* Displays the log if anything was captured.
*/
public void displayResult(final boolean success) {
if (logMessages.size() > 0) {
final StringBuilder sb = new StringBuilder(mMessage + "\n");
for (String msg : logMessages) {
sb.append('\n');
sb.append(msg);
}
// display the message
// dialog box only run in ui thread..
mDisplay.asyncExec(new Runnable() {
public void run() {
Shell shell = mDisplay.getActiveShell();
if (success) {
MessageDialog.openInformation(shell, "Android Virtual Devices Manager",
sb.toString());
} else {
MessageDialog.openError(shell, "Android Virtual Devices Manager",
sb.toString());
}
}
});
}
}
}
}