aboutsummaryrefslogtreecommitdiffstats
path: root/sdkmanager/libs/sdkuilib
diff options
context:
space:
mode:
authorRaphael Moll <ralf@android.com>2012-10-22 15:13:24 -0700
committerRaphael Moll <ralf@android.com>2012-10-22 15:21:42 -0700
commit6abe9585ff4d436d41df4f6a473677484e678870 (patch)
treeab63b79630365e6aba9df4fedee0a28e9aa24f84 /sdkmanager/libs/sdkuilib
parent64bc15b23a007e3ccbedecc30488a9348da58913 (diff)
downloadsdk-6abe9585ff4d436d41df4f6a473677484e678870.zip
sdk-6abe9585ff4d436d41df4f6a473677484e678870.tar.gz
sdk-6abe9585ff4d436d41df4f6a473677484e678870.tar.bz2
AVD Manager: display and select newly created AVD.
When using Device page > Create AVD, this will switch the AVD Manager to the AVD page, refresh the AVD list and select the new AVD. SDK Bug: 38785 Change-Id: I7cff8f434b16d90cc9e46e938631e6b67bb69af7
Diffstat (limited to 'sdkmanager/libs/sdkuilib')
-rwxr-xr-xsdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/AvdManagerPage.java14
-rwxr-xr-xsdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/AvdManagerWindowImpl1.java30
-rwxr-xr-xsdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/DeviceManagerPage.java20
-rw-r--r--sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdCreationDialog.java10
4 files changed, 62 insertions, 12 deletions
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/AvdManagerPage.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/AvdManagerPage.java
index 1074dfa..4d7e79e 100755
--- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/AvdManagerPage.java
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/AvdManagerPage.java
@@ -19,6 +19,8 @@ package com.android.sdkuilib.internal.repository.ui;
import com.android.prefs.AndroidLocation.AndroidLocationException;
import com.android.sdklib.devices.DeviceManager;
import com.android.sdklib.devices.DeviceManager.DevicesChangeListener;
+import com.android.sdklib.internal.avd.AvdInfo;
+import com.android.sdklib.internal.avd.AvdManager;
import com.android.sdkuilib.internal.repository.UpdaterData;
import com.android.sdkuilib.internal.widgets.AvdSelector;
import com.android.sdkuilib.internal.widgets.AvdSelector.DisplayMode;
@@ -112,6 +114,18 @@ public class AvdManagerPage extends Composite
// Disable the check that prevents subclassing of SWT components
}
+ public void selectAvd(AvdInfo avdInfo, boolean reloadAvdList) {
+ if (reloadAvdList) {
+ mAvdSelector.refresh(true /*reload*/);
+
+ // Reloading the AVDs created new objects, so the reference to avdInfo
+ // will never be selected. Instead reselect it based on its unique name.
+ AvdManager am = mUpdaterData.getAvdManager();
+ avdInfo = am.getAvd(avdInfo.getName(), false /*validAvdOnly*/);
+ }
+ mAvdSelector.setSelection(avdInfo);
+ }
+
// -- Start of internal part ----------
// Hide everything down-below from SWT designer
//$hide>>$
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/AvdManagerWindowImpl1.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/AvdManagerWindowImpl1.java
index 36e01ba..08eed1b 100755
--- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/AvdManagerWindowImpl1.java
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/AvdManagerWindowImpl1.java
@@ -19,6 +19,7 @@ package com.android.sdkuilib.internal.repository.ui;
import com.android.SdkConstants;
import com.android.sdklib.devices.DeviceManager;
+import com.android.sdklib.internal.avd.AvdInfo;
import com.android.sdklib.internal.repository.ITaskFactory;
import com.android.sdkuilib.internal.repository.AboutDialog;
import com.android.sdkuilib.internal.repository.MenuBarWrapper;
@@ -26,6 +27,7 @@ import com.android.sdkuilib.internal.repository.SettingsController;
import com.android.sdkuilib.internal.repository.SettingsDialog;
import com.android.sdkuilib.internal.repository.UpdaterData;
import com.android.sdkuilib.internal.repository.icons.ImageFactory;
+import com.android.sdkuilib.internal.repository.ui.DeviceManagerPage.IAvdCreatedListener;
import com.android.sdkuilib.repository.AvdManagerWindow.AvdInvocationContext;
import com.android.sdkuilib.repository.ISdkChangeListener;
import com.android.sdkuilib.repository.SdkUpdaterWindow;
@@ -72,6 +74,7 @@ public class AvdManagerWindowImpl1 {
protected Shell mShell;
private AvdManagerPage mAvdPage;
private SettingsController mSettingsController;
+ private TabFolder mTabFolder;
/**
* Creates a new window. Caller must call open(), which will block.
@@ -176,18 +179,18 @@ public class AvdManagerWindowImpl1 {
private void createContents() {
- TabFolder tabFolder = new TabFolder(mShell, SWT.NONE);
- GridDataBuilder.create(tabFolder).fill().grab().hSpan(2);
+ mTabFolder = new TabFolder(mShell, SWT.NONE);
+ GridDataBuilder.create(mTabFolder).fill().grab().hSpan(2);
// avd tab
- TabItem avdTabItem = new TabItem(tabFolder, SWT.NONE);
+ TabItem avdTabItem = new TabItem(mTabFolder, SWT.NONE);
avdTabItem.setText("Android Virtual Devices");
- createAvdTab(tabFolder, avdTabItem);
+ createAvdTab(mTabFolder, avdTabItem);
// device tab
- TabItem devTabItem = new TabItem(tabFolder, SWT.NONE);
+ TabItem devTabItem = new TabItem(mTabFolder, SWT.NONE);
devTabItem.setText("Device Definitions");
- createDeviceTab(tabFolder, devTabItem);
+ createDeviceTab(mTabFolder, devTabItem);
}
private void createAvdTab(TabFolder tabFolder, TabItem avdTabItem) {
@@ -204,8 +207,19 @@ public class AvdManagerWindowImpl1 {
devTabItem.setControl(root);
GridLayoutBuilder.create(root).columns(1);
- DeviceManagerPage container = new DeviceManagerPage(root, SWT.NONE, mUpdaterData, mDeviceManager);
- GridDataBuilder.create(container).fill().grab();
+ DeviceManagerPage devicePage =
+ new DeviceManagerPage(root, SWT.NONE, mUpdaterData, mDeviceManager);
+ GridDataBuilder.create(devicePage).fill().grab();
+
+ devicePage.setAvdCreatedListener(new IAvdCreatedListener() {
+ @Override
+ public void onAvdCreated(AvdInfo avdInfo) {
+ if (avdInfo != null) {
+ mTabFolder.setSelection(0); // display mAvdPage
+ mAvdPage.selectAvd(avdInfo, true /*reloadAvdList*/);
+ }
+ }
+ });
}
@SuppressWarnings("unused")
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/DeviceManagerPage.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/DeviceManagerPage.java
index 62f8bd5..2f1193b 100755
--- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/DeviceManagerPage.java
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/repository/ui/DeviceManagerPage.java
@@ -90,6 +90,10 @@ import java.util.regex.Pattern;
public class DeviceManagerPage extends Composite
implements ISdkChangeListener, DevicesChangeListener, DisposeListener {
+ public interface IAvdCreatedListener {
+ public void onAvdCreated(AvdInfo createdAvdInfo);
+ }
+
private final UpdaterData mUpdaterData;
private final DeviceManager mDeviceManager;
private Table mTable;
@@ -104,6 +108,8 @@ public class DeviceManagerPage extends Composite
private Image mOtherImage;
private int mImageWidth;
private boolean mDisableRefresh;
+ private IAvdCreatedListener mAvdCreatedListener;
+
/**
* Create the composite.
* @param parent The parent of the composite.
@@ -125,6 +131,10 @@ public class DeviceManagerPage extends Composite
postCreate(); //$hide$
}
+ public void setAvdCreatedListener(IAvdCreatedListener avdCreatedListener) {
+ mAvdCreatedListener = avdCreatedListener;
+ }
+
private void createContents(Composite parent) {
// get some bitmaps.
@@ -201,7 +211,7 @@ public class DeviceManagerPage extends Composite
mNewAvdButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent arg0) {
- onNewAvd();
+ onCreateAvd();
}
});
@@ -702,13 +712,13 @@ public class DeviceManagerPage extends Composite
}
}
- private void onNewAvd() {
+ private void onCreateAvd() {
CellInfo ci = getTableSelection();
if (ci == null || ci.mDevice == null) {
return;
}
- AvdCreationDialog dlg = new AvdCreationDialog(mTable.getShell(),
+ final AvdCreationDialog dlg = new AvdCreationDialog(mTable.getShell(),
mUpdaterData.getAvdManager(),
mImageFactory,
mUpdaterData.getSdkLog(),
@@ -717,6 +727,10 @@ public class DeviceManagerPage extends Composite
if (dlg.open() == Window.OK) {
onRefresh();
+
+ if (mAvdCreatedListener != null) {
+ mAvdCreatedListener.onAvdCreated(dlg.getCreatedAvd());
+ }
}
}
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdCreationDialog.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdCreationDialog.java
index e3bd5f7..b97881e 100644
--- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdCreationDialog.java
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdCreationDialog.java
@@ -116,6 +116,9 @@ public class AvdCreationDialog extends GridDialog {
private Label mStatusIcon;
private Label mStatusLabel;
+ private Device mInitWithDevice;
+ private AvdInfo mCreatedAvd;
+
/**
* {@link VerifyListener} for {@link Text} widgets that should only contains
* numbers.
@@ -133,7 +136,6 @@ public class AvdCreationDialog extends GridDialog {
}
}
};
- private Device mInitWithDevice;
public AvdCreationDialog(Shell shell,
AvdManager avdManager,
@@ -165,6 +167,11 @@ public class AvdCreationDialog extends GridDialog {
}
}
+ /** Returns the AVD Created, if successful. */
+ public AvdInfo getCreatedAvd() {
+ return mCreatedAvd;
+ }
+
@Override
protected Control createContents(Composite parent) {
Control control = super.createContents(parent);
@@ -994,6 +1001,7 @@ public class AvdCreationDialog extends GridDialog {
mAvdInfo != null, // edit existing
log);
+ mCreatedAvd = avdInfo;
boolean success = avdInfo != null;
if (log instanceof MessageBoxLog) {