aboutsummaryrefslogtreecommitdiffstats
path: root/eclipse
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2009-06-16 17:41:09 -0700
committerXavier Ducrohet <xav@android.com>2009-06-17 11:40:19 -0700
commit88f1127ee0b90d7fe91597d072ff6a2c693eff7c (patch)
tree687250026e77fc0660cd35513b21ac01455e7f82 /eclipse
parent5dafec27ae2cb37516d1b12c3dd0fbbcbe188e59 (diff)
downloadsdk-88f1127ee0b90d7fe91597d072ff6a2c693eff7c.zip
sdk-88f1127ee0b90d7fe91597d072ff6a2c693eff7c.tar.gz
sdk-88f1127ee0b90d7fe91597d072ff6a2c693eff7c.tar.bz2
First step of a more standalone AvdSelector.
- New/Delete/Info/Refresh/Manager buttons. - Ability to set any kind of AVD filter - Self-refresh: Selector knows the AvdManager and can refresh itself. - Manager mode or simple (selection or checkboxes) - Manager mode displays broken AVDs. Updated the SdkUpdate AVD page and the various use of the Selector in ADT.
Diffstat (limited to 'eclipse')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/DeviceChooserDialog.java76
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/EmulatorConfigTab.java37
-rwxr-xr-xeclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/avdmanager/AvdManagerListPage.java44
3 files changed, 43 insertions, 114 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/DeviceChooserDialog.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/DeviceChooserDialog.java
index 3bc68fe..6813d0b 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/DeviceChooserDialog.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/DeviceChooserDialog.java
@@ -26,13 +26,12 @@ import com.android.ddmuilib.ImageHelper;
import com.android.ddmuilib.TableHelper;
import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.internal.sdk.Sdk;
-import com.android.ide.eclipse.adt.internal.wizards.actions.AvdManagerAction;
import com.android.ide.eclipse.ddms.DdmsPlugin;
import com.android.sdklib.IAndroidTarget;
-import com.android.sdklib.internal.avd.AvdManager;
import com.android.sdklib.internal.avd.AvdManager.AvdInfo;
import com.android.sdkuilib.internal.widgets.AvdSelector;
-import com.android.sdkuilib.internal.widgets.AvdSelector.SelectionMode;
+import com.android.sdkuilib.internal.widgets.AvdSelector.DisplayMode;
+import com.android.sdkuilib.internal.widgets.AvdSelector.IAvdFilter;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
@@ -58,8 +57,6 @@ import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
-import java.util.ArrayList;
-
/**
* A dialog that lets the user choose a device to deploy an application.
* The user can either choose an exiting running device (including running emulators)
@@ -91,8 +88,6 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener
private final IAndroidTarget mProjectTarget;
private final Sdk mSdk;
- private AvdInfo[] mFullAvdList;
-
private Button mDeviceRadioButton;
private boolean mDisableAvdSelectionChange = false;
@@ -264,6 +259,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener
mProjectTarget = projectTarget;
mSdk = Sdk.getCurrent();
+ AndroidDebugBridge.addDeviceChangeListener(this);
loadImages();
}
@@ -415,24 +411,9 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener
offsetComp.setLayout(layout);
mPreferredAvdSelector = new AvdSelector(offsetComp,
- getNonRunningAvds(false /*reloadAvds*/),
- mProjectTarget,
- new AvdSelector.IExtraAction() {
- public void run() {
- AvdManagerAction action = new AvdManagerAction();
- action.run(null);
- refillAvdList(true /*reloadAvds*/);
- }
-
- public boolean isEnabled() {
- return true;
- }
-
- public String label() {
- return "AVD Manager...";
- }
- },
- SelectionMode.CHECK);
+ mSdk.getAvdManager(),
+ new NonRunningAvdFilter(),
+ DisplayMode.SIMPLE_SELECTION);
mPreferredAvdSelector.setTableHeightHint(100);
mPreferredAvdSelector.setEnabled(false);
mPreferredAvdSelector.setSelectionListener(new SelectionAdapter() {
@@ -594,6 +575,7 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener
// update the display of AvdInfo (since it's filtered to only display
// non running AVD). This is done on deviceChanged because the avd name
// of a (emulator) device may be updated as the emulator boots.
+
refillAvdList(false /*reloadAvds*/);
// if the changed device is the current selection,
@@ -707,50 +689,44 @@ public class DeviceChooserDialog extends Dialog implements IDeviceChangeListener
handleDeviceSelection();
}
- /**
- * Returns the list of {@link AvdInfo} that are not already running in an emulator.
- */
- private AvdInfo[] getNonRunningAvds(boolean reloadAvds) {
- ArrayList<AvdInfo> list = new ArrayList<AvdInfo>();
-
- // get the full list of Android Virtual Devices
- if (reloadAvds || mFullAvdList == null) {
- AvdManager avdManager = mSdk.getAvdManager();
- if (avdManager != null) {
- mFullAvdList = avdManager.getValidAvds();
- }
+ private final class NonRunningAvdFilter implements IAvdFilter {
+
+ private IDevice[] mDevices;
+
+ public void prepare() {
+ mDevices = AndroidDebugBridge.getBridge().getDevices();
}
- // loop through all the Avd and put the one that are not running in the list.
- if (mFullAvdList != null) {
- IDevice[] devices = AndroidDebugBridge.getBridge().getDevices();
- avdLoop: for (AvdInfo info : mFullAvdList) {
- for (IDevice d : devices) {
- if (info.getName().equals(d.getAvdName())) {
- continue avdLoop;
+ public boolean accept(AvdInfo avd) {
+ if (mDevices != null) {
+ for (IDevice d : mDevices) {
+ if (mProjectTarget.isCompatibleBaseFor(avd.getTarget()) == false ||
+ avd.getName().equals(d.getAvdName())) {
+ return false;
}
}
- list.add(info);
}
+
+ return true;
}
- return list.toArray(new AvdInfo[list.size()]);
+ public void cleanup() {
+ mDevices = null;
+ }
}
/**
* Refills the AVD list keeping the current selection.
*/
private void refillAvdList(boolean reloadAvds) {
- AvdInfo[] array = getNonRunningAvds(reloadAvds);
-
// save the current selection
AvdInfo selected = mPreferredAvdSelector.getSelected();
// disable selection change.
mDisableAvdSelectionChange = true;
- // set the new list in the selector
- mPreferredAvdSelector.setAvds(array, mProjectTarget);
+ // refresh the list
+ mPreferredAvdSelector.refresh(false);
// attempt to reselect the proper avd if needed
if (selected != null) {
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/EmulatorConfigTab.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/EmulatorConfigTab.java
index 664babe..4d40c2e 100644
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/EmulatorConfigTab.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/launch/EmulatorConfigTab.java
@@ -20,14 +20,13 @@ import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.internal.launch.AndroidLaunchConfiguration.TargetMode;
import com.android.ide.eclipse.adt.internal.project.BaseProjectHelper;
import com.android.ide.eclipse.adt.internal.sdk.Sdk;
-import com.android.ide.eclipse.adt.internal.wizards.actions.AvdManagerAction;
import com.android.ide.eclipse.ddms.DdmsPlugin;
import com.android.prefs.AndroidLocation.AndroidLocationException;
import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.internal.avd.AvdManager;
import com.android.sdklib.internal.avd.AvdManager.AvdInfo;
import com.android.sdkuilib.internal.widgets.AvdSelector;
-import com.android.sdkuilib.internal.widgets.AvdSelector.SelectionMode;
+import com.android.sdkuilib.internal.widgets.AvdSelector.DisplayMode;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.runtime.CoreException;
@@ -191,24 +190,12 @@ public class EmulatorConfigTab extends AbstractLaunchConfigurationTab {
mPreferredAvdLabel = new Label(offsetComp, SWT.NONE);
mPreferredAvdLabel.setText("Select a preferred Android Virtual Device for deployment:");
- mPreferredAvdSelector = new AvdSelector(offsetComp,
- null /*avds*/,
- new AvdSelector.IExtraAction() {
- public void run() {
- AvdManagerAction action = new AvdManagerAction();
- action.run(null);
- updateAvdList(null);
- }
-
- public boolean isEnabled() {
- return true;
- }
-
- public String label() {
- return "AVD Manager...";
- }
- },
- SelectionMode.CHECK);
+
+ // create the selector with no manager, we'll reset the manager every time this is
+ // displayed to ensure we have the latest one (dialog is reused but SDK could have
+ // been changed in between.
+ mPreferredAvdSelector = new AvdSelector(offsetComp, null /* avd manager */,
+ DisplayMode.SIMPLE_CHECK);
mPreferredAvdSelector.setTableHeightHint(100);
mPreferredAvdSelector.setSelectionListener(new SelectionAdapter() {
@Override
@@ -322,13 +309,9 @@ public class EmulatorConfigTab extends AbstractLaunchConfigurationTab {
avdManager = Sdk.getCurrent().getAvdManager();
}
- AvdInfo[] avds = null;
- // no project? we don't want to display any "compatible" AVDs.
- if (avdManager != null && mProjectTarget != null) {
- avds = avdManager.getValidAvds();
- }
-
- mPreferredAvdSelector.setAvds(avds, mProjectTarget);
+ mPreferredAvdSelector.setManager(avdManager);
+ mPreferredAvdSelector.setFilter(mProjectTarget);
+ mPreferredAvdSelector.refresh(false);
}
/* (non-Javadoc)
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/avdmanager/AvdManagerListPage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/avdmanager/AvdManagerListPage.java
index 0ce569c..9708a0f 100755
--- a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/avdmanager/AvdManagerListPage.java
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/avdmanager/AvdManagerListPage.java
@@ -27,7 +27,7 @@ import com.android.sdklib.ISdkLog;
import com.android.sdklib.internal.avd.AvdManager;
import com.android.sdklib.internal.avd.AvdManager.AvdInfo;
import com.android.sdkuilib.internal.widgets.AvdSelector;
-import com.android.sdkuilib.internal.widgets.AvdSelector.SelectionMode;
+import com.android.sdkuilib.internal.widgets.AvdSelector.DisplayMode;
import org.eclipse.core.resources.IProject;
import org.eclipse.jface.wizard.WizardPage;
@@ -162,21 +162,7 @@ class AvdManagerListPage extends WizardPage {
}
});
- mAvdSelector = new AvdSelector(parent,
- SelectionMode.SELECT,
- new AvdSelector.IExtraAction() {
- public String label() {
- return "Delete AVD...";
- }
-
- public boolean isEnabled() {
- return mAvdSelector != null && mAvdSelector.getSelected() != null;
- }
-
- public void run() {
- onDelete();
- }
- });
+ mAvdSelector = new AvdSelector(parent, getAvdManager(), DisplayMode.MANAGER);
}
/**
@@ -430,29 +416,12 @@ class AvdManagerListPage extends WizardPage {
* Tries to preserve the selection.
*/
private void reloadAvdList() {
- AvdInfo selected = mAvdSelector.getSelected();
-
- AvdManager avdm = getAvdManager();
- AvdInfo[] avds = null;
-
- // For the AVD manager to reload the list, in case AVDs where created using the
- // command line tool.
- // The AVD manager may not exist yet, typically when loading the SDK.
- if (avdm != null) {
- try {
- avdm.reloadAvds();
- } catch (AndroidLocationException e) {
- AdtPlugin.log(e, "AVD Manager reload failed"); //$NON-NLS-1$
- }
-
- avds = avdm.getValidAvds();
- }
-
- mAvdSelector.setAvds(avds, null /*filter*/);
+ mAvdSelector.refresh(true /* reload */);
// Keep the list of known AVD names to check if they exist quickly. however
// use the list of all AVDs, including broken ones (unless we don't know their
// name).
+ AvdManager avdm = getAvdManager();
mKnownAvdNames.clear();
if (avdm != null) {
for (AvdInfo avd : avdm.getAllAvds()) {
@@ -462,14 +431,15 @@ class AvdManagerListPage extends WizardPage {
}
}
}
-
- mAvdSelector.setSelection(selected);
}
/**
* 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();