EmulatorConfigTabpublic class EmulatorConfigTab extends org.eclipse.debug.ui.AbstractLaunchConfigurationTab Launch configuration tab to control the parameters of the Emulator |
Fields Summary |
---|
private static final String[] | NETWORK_SPEEDS | private static final String[] | NETWORK_LATENCIES | private org.eclipse.swt.widgets.Button | mAutoTargetButton | private org.eclipse.swt.widgets.Button | mManualTargetButton | private com.android.sdkuilib.AvdSelector | mPreferredAvdSelector | private org.eclipse.swt.widgets.Combo | mSpeedCombo | private org.eclipse.swt.widgets.Combo | mDelayCombo | private org.eclipse.swt.widgets.Group | mEmulatorOptionsGroup | private org.eclipse.swt.widgets.Text | mEmulatorCLOptions | private org.eclipse.swt.widgets.Button | mWipeDataButton | private org.eclipse.swt.widgets.Button | mNoBootAnimButton | private org.eclipse.swt.widgets.Label | mPreferredAvdLabel |
Constructors Summary |
---|
public EmulatorConfigTab()
|
Methods Summary |
---|
public void | createControl(org.eclipse.swt.widgets.Composite parent)
Font font = parent.getFont();
// reload the AVDs to make sure we are up to date
try {
Sdk.getCurrent().getAvdManager().reloadAvds();
} catch (AndroidLocationException e1) {
// this happens if the AVD Manager failed to find the folder in which the AVDs are
// stored. There isn't much we can do at this point.
}
Composite topComp = new Composite(parent, SWT.NONE);
setControl(topComp);
GridLayout topLayout = new GridLayout();
topLayout.numColumns = 1;
topLayout.verticalSpacing = 0;
topComp.setLayout(topLayout);
topComp.setFont(font);
GridData gd;
GridLayout layout;
// radio button for the target mode
Group targetModeGroup = new Group(topComp, SWT.NONE);
targetModeGroup.setText("Deployment Target Selection Mode");
gd = new GridData(GridData.FILL_HORIZONTAL);
targetModeGroup.setLayoutData(gd);
layout = new GridLayout();
layout.numColumns = 1;
targetModeGroup.setLayout(layout);
targetModeGroup.setFont(font);
mManualTargetButton = new Button(targetModeGroup, SWT.RADIO);
mManualTargetButton.setText("Manual");
// Since there are only 2 radio buttons, we can put a listener on only one (they
// are both called on select and unselect event.
// add the radio button
mAutoTargetButton = new Button(targetModeGroup, SWT.RADIO);
mAutoTargetButton.setText("Automatic");
mAutoTargetButton.setSelection(true);
mAutoTargetButton.addSelectionListener(new SelectionAdapter() {
// called when selection changes
@Override
public void widgetSelected(SelectionEvent e) {
updateLaunchConfigurationDialog();
boolean auto = mAutoTargetButton.getSelection();
mPreferredAvdSelector.setEnabled(auto);
mPreferredAvdLabel.setEnabled(auto);
}
});
Composite offsetComp = new Composite(targetModeGroup, SWT.NONE);
offsetComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
layout = new GridLayout(1, false);
layout.marginRight = layout.marginHeight = 0;
layout.marginLeft = 30;
offsetComp.setLayout(layout);
mPreferredAvdLabel = new Label(offsetComp, SWT.NONE);
mPreferredAvdLabel.setText("Select a preferred Android Virtual Device for deployment:");
AvdInfo[] avds = new AvdInfo[0];
mPreferredAvdSelector = new AvdSelector(offsetComp, avds);
mPreferredAvdSelector.setTableHeightHint(100);
mPreferredAvdSelector.setSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateLaunchConfigurationDialog();
}
});
// emulator size
mEmulatorOptionsGroup = new Group(topComp, SWT.NONE);
mEmulatorOptionsGroup.setText("Emulator launch parameters:");
mEmulatorOptionsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
layout = new GridLayout();
layout.numColumns = 2;
mEmulatorOptionsGroup.setLayout(layout);
mEmulatorOptionsGroup.setFont(font);
// network options
new Label(mEmulatorOptionsGroup, SWT.NONE).setText("Network Speed:");
mSpeedCombo = new Combo(mEmulatorOptionsGroup, SWT.READ_ONLY);
for (String[] speed : NETWORK_SPEEDS) {
mSpeedCombo.add(speed[0]);
}
mSpeedCombo.addSelectionListener(new SelectionAdapter() {
// called when selection changes
@Override
public void widgetSelected(SelectionEvent e) {
updateLaunchConfigurationDialog();
}
});
mSpeedCombo.pack();
new Label(mEmulatorOptionsGroup, SWT.NONE).setText("Network Latency:");
mDelayCombo = new Combo(mEmulatorOptionsGroup, SWT.READ_ONLY);
for (String[] delay : NETWORK_LATENCIES) {
mDelayCombo.add(delay[0]);
}
mDelayCombo.addSelectionListener(new SelectionAdapter() {
// called when selection changes
@Override
public void widgetSelected(SelectionEvent e) {
updateLaunchConfigurationDialog();
}
});
mDelayCombo.pack();
// wipe data option
mWipeDataButton = new Button(mEmulatorOptionsGroup, SWT.CHECK);
mWipeDataButton.setText("Wipe User Data");
mWipeDataButton.setToolTipText("Check this if you want to wipe your user data each time you start the emulator. You will be prompted for confirmation when the emulator starts.");
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
mWipeDataButton.setLayoutData(gd);
mWipeDataButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateLaunchConfigurationDialog();
}
});
// no boot anim option
mNoBootAnimButton = new Button(mEmulatorOptionsGroup, SWT.CHECK);
mNoBootAnimButton.setText("Disable Boot Animation");
mNoBootAnimButton.setToolTipText("Check this if you want to disable the boot animation. This can help the emulator start faster on slow machines.");
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
mNoBootAnimButton.setLayoutData(gd);
mNoBootAnimButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
updateLaunchConfigurationDialog();
}
});
// custom command line option for emulator
Label l = new Label(mEmulatorOptionsGroup, SWT.NONE);
l.setText("Additional Emulator Command Line Options");
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
l.setLayoutData(gd);
mEmulatorCLOptions = new Text(mEmulatorOptionsGroup, SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalSpan = 2;
mEmulatorCLOptions.setLayoutData(gd);
mEmulatorCLOptions.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateLaunchConfigurationDialog();
}
});
| public static java.lang.String | getDelay(int value)Returns the emulator ready network latency value.
try {
return NETWORK_LATENCIES[value][1];
} catch (ArrayIndexOutOfBoundsException e) {
return NETWORK_LATENCIES[LaunchConfigDelegate.DEFAULT_DELAY][1];
}
| public org.eclipse.swt.graphics.Image | getImage()
return DdmsPlugin.getImageLoader().loadImage("emulator.png", null); //$NON-NLS-1$
| public java.lang.String | getName()
return "Target";
| public static java.lang.String | getSpeed(int value)Returns the emulator ready speed option value.
try {
return NETWORK_SPEEDS[value][1];
} catch (ArrayIndexOutOfBoundsException e) {
return NETWORK_SPEEDS[LaunchConfigDelegate.DEFAULT_SPEED][1];
}
| public void | initializeFrom(org.eclipse.debug.core.ILaunchConfiguration configuration)
AvdManager avdManager = Sdk.getCurrent().getAvdManager();
TargetMode mode = LaunchConfigDelegate.DEFAULT_TARGET_MODE; // true == automatic
try {
mode = TargetMode.getMode(configuration.getAttribute(
LaunchConfigDelegate.ATTR_TARGET_MODE, mode.getValue()));
} catch (CoreException e) {
// let's not do anything here, we'll use the default value
}
mAutoTargetButton.setSelection(mode.getValue());
mManualTargetButton.setSelection(!mode.getValue());
// look for the project name to get its target.
String stringValue = "";
try {
stringValue = configuration.getAttribute(
IJavaLaunchConfigurationConstants.ATTR_PROJECT_NAME, stringValue);
} catch (CoreException ce) {
// let's not do anything here, we'll use the default value
}
IProject project = null;
// get the list of existing Android projects from the workspace.
IJavaProject[] projects = BaseProjectHelper.getAndroidProjects();
if (projects != null) {
// look for the project whose name we read from the configuration.
for (IJavaProject p : projects) {
if (p.getElementName().equals(stringValue)) {
project = p.getProject();
break;
}
}
}
// update the AVD list
AvdInfo[] avds = null;
if (avdManager != null) {
avds = avdManager.getValidAvds();
}
IAndroidTarget projectTarget = null;
if (project != null) {
projectTarget = Sdk.getCurrent().getTarget(project);
} else {
avds = null; // no project? we don't want to display any "compatible" AVDs.
}
mPreferredAvdSelector.setAvds(avds, projectTarget);
stringValue = "";
try {
stringValue = configuration.getAttribute(LaunchConfigDelegate.ATTR_AVD_NAME,
stringValue);
} catch (CoreException e) {
// let's not do anything here, we'll use the default value
}
if (stringValue != null && stringValue.length() > 0 && avdManager != null) {
AvdInfo targetAvd = avdManager.getAvd(stringValue, true /*validAvdOnly*/);
mPreferredAvdSelector.setSelection(targetAvd);
} else {
mPreferredAvdSelector.setSelection(null);
}
boolean value = LaunchConfigDelegate.DEFAULT_WIPE_DATA;
try {
value = configuration.getAttribute(LaunchConfigDelegate.ATTR_WIPE_DATA, value);
} catch (CoreException e) {
// let's not do anything here, we'll use the default value
}
mWipeDataButton.setSelection(value);
value = LaunchConfigDelegate.DEFAULT_NO_BOOT_ANIM;
try {
value = configuration.getAttribute(LaunchConfigDelegate.ATTR_NO_BOOT_ANIM, value);
} catch (CoreException e) {
// let's not do anything here, we'll use the default value
}
mNoBootAnimButton.setSelection(value);
int index = -1;
index = LaunchConfigDelegate.DEFAULT_SPEED;
try {
index = configuration.getAttribute(LaunchConfigDelegate.ATTR_SPEED,
index);
} catch (CoreException e) {
// let's not do anything here, we'll use the default value
}
if (index == -1) {
mSpeedCombo.clearSelection();
} else {
mSpeedCombo.select(index);
}
index = LaunchConfigDelegate.DEFAULT_DELAY;
try {
index = configuration.getAttribute(LaunchConfigDelegate.ATTR_DELAY,
index);
} catch (CoreException e) {
// let's not do anything here, we'll put a proper value in
// performApply anyway
}
if (index == -1) {
mDelayCombo.clearSelection();
} else {
mDelayCombo.select(index);
}
String commandLine = null;
try {
commandLine = configuration.getAttribute(
LaunchConfigDelegate.ATTR_COMMANDLINE, ""); //$NON-NLS-1$
} catch (CoreException e) {
// let's not do anything here, we'll use the default value
}
if (commandLine != null) {
mEmulatorCLOptions.setText(commandLine);
}
| public void | performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy configuration)
configuration.setAttribute(LaunchConfigDelegate.ATTR_TARGET_MODE,
mAutoTargetButton.getSelection());
AvdInfo avd = mPreferredAvdSelector.getFirstSelected();
if (avd != null) {
configuration.setAttribute(LaunchConfigDelegate.ATTR_AVD_NAME, avd.getName());
} else {
configuration.setAttribute(LaunchConfigDelegate.ATTR_AVD_NAME, (String)null);
}
configuration.setAttribute(LaunchConfigDelegate.ATTR_SPEED,
mSpeedCombo.getSelectionIndex());
configuration.setAttribute(LaunchConfigDelegate.ATTR_DELAY,
mDelayCombo.getSelectionIndex());
configuration.setAttribute(LaunchConfigDelegate.ATTR_COMMANDLINE,
mEmulatorCLOptions.getText());
configuration.setAttribute(LaunchConfigDelegate.ATTR_WIPE_DATA,
mWipeDataButton.getSelection());
configuration.setAttribute(LaunchConfigDelegate.ATTR_NO_BOOT_ANIM,
mNoBootAnimButton.getSelection());
| public void | setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy configuration)
configuration.setAttribute(LaunchConfigDelegate.ATTR_TARGET_MODE,
LaunchConfigDelegate.DEFAULT_TARGET_MODE.getValue());
configuration.setAttribute(LaunchConfigDelegate.ATTR_SPEED,
LaunchConfigDelegate.DEFAULT_SPEED);
configuration.setAttribute(LaunchConfigDelegate.ATTR_DELAY,
LaunchConfigDelegate.DEFAULT_DELAY);
configuration.setAttribute(LaunchConfigDelegate.ATTR_WIPE_DATA,
LaunchConfigDelegate.DEFAULT_WIPE_DATA);
configuration.setAttribute(LaunchConfigDelegate.ATTR_NO_BOOT_ANIM,
LaunchConfigDelegate.DEFAULT_NO_BOOT_ANIM);
IPreferenceStore store = AdtPlugin.getDefault().getPreferenceStore();
String emuOptions = store.getString(AdtPlugin.PREFS_EMU_OPTIONS);
configuration.setAttribute(LaunchConfigDelegate.ATTR_COMMANDLINE, emuOptions);
|
|