diff options
author | Raphael Moll <ralf@android.com> | 2012-10-22 15:13:24 -0700 |
---|---|---|
committer | Raphael Moll <ralf@android.com> | 2012-10-22 15:21:42 -0700 |
commit | 6abe9585ff4d436d41df4f6a473677484e678870 (patch) | |
tree | ab63b79630365e6aba9df4fedee0a28e9aa24f84 /sdkmanager/libs/sdkuilib | |
parent | 64bc15b23a007e3ccbedecc30488a9348da58913 (diff) | |
download | sdk-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')
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) { |