summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android/guiTestSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/AbstractWizardFixture.java3
-rw-r--r--android/src/com/android/tools/idea/avdmanager/AvdConfigurationOptionHelpPanel.java2
-rw-r--r--android/src/com/android/tools/idea/avdmanager/AvdConfigurationPath.java4
-rwxr-xr-xandroid/src/com/android/tools/idea/avdmanager/AvdEditWizard.java2
-rw-r--r--android/src/com/android/tools/idea/avdmanager/AvdListDialog.java2
-rw-r--r--android/src/com/android/tools/idea/avdmanager/AvdWizardConstants.java8
-rwxr-xr-xandroid/src/com/android/tools/idea/avdmanager/ChooseDeviceDefinitionStep.java2
-rw-r--r--android/src/com/android/tools/idea/avdmanager/ChooseSystemImageStep.java2
-rw-r--r--android/src/com/android/tools/idea/avdmanager/ConfigureAvdOptionsStep.java3
-rwxr-xr-xandroid/src/com/android/tools/idea/avdmanager/ConfigureDeviceOptionsStep.java4
-rwxr-xr-xandroid/src/com/android/tools/idea/avdmanager/DeviceEditWizard.java4
-rw-r--r--android/src/com/android/tools/idea/avdmanager/HaxmAlert.java1
-rwxr-xr-xandroid/src/com/android/tools/idea/avdmanager/SkinChooser.java2
-rw-r--r--android/src/com/android/tools/idea/avdmanager/StorageField.java2
-rw-r--r--android/src/com/android/tools/idea/avdmanager/SystemImageList.java2
-rw-r--r--android/src/com/android/tools/idea/sdk/wizard/LicenseAgreementStep.java2
-rw-r--r--android/src/com/android/tools/idea/sdk/wizard/SdkQuickfixWizard.java8
-rwxr-xr-xandroid/src/com/android/tools/idea/sdk/wizard/SmwOldApiDirectInstall.java2
-rw-r--r--android/src/com/android/tools/idea/welcome/install/AndroidSdk.java2
-rwxr-xr-xandroid/src/com/android/tools/idea/welcome/install/AndroidVirtualDevice.java2
-rw-r--r--android/src/com/android/tools/idea/welcome/install/ComponentCategory.java4
-rw-r--r--android/src/com/android/tools/idea/welcome/install/ComponentTreeNode.java4
-rw-r--r--android/src/com/android/tools/idea/welcome/install/Haxm.java4
-rw-r--r--android/src/com/android/tools/idea/welcome/install/InstallableComponent.java4
-rw-r--r--android/src/com/android/tools/idea/welcome/install/Platform.java2
-rw-r--r--android/src/com/android/tools/idea/welcome/wizard/ConsolidatedProgressStep.java4
-rw-r--r--android/src/com/android/tools/idea/welcome/wizard/FirstRunWizard.java5
-rw-r--r--android/src/com/android/tools/idea/welcome/wizard/FirstRunWizardHost.java4
-rw-r--r--android/src/com/android/tools/idea/welcome/wizard/FirstRunWizardStep.java2
-rw-r--r--android/src/com/android/tools/idea/welcome/wizard/HaxmInstallSettingsStep.java2
-rw-r--r--android/src/com/android/tools/idea/welcome/wizard/InstallComponentsPath.java7
-rw-r--r--android/src/com/android/tools/idea/welcome/wizard/InstallSummaryStep.java2
-rw-r--r--android/src/com/android/tools/idea/welcome/wizard/InstallationTypeWizardStep.java2
-rw-r--r--android/src/com/android/tools/idea/welcome/wizard/JdkLocationStep.java2
-rwxr-xr-xandroid/src/com/android/tools/idea/welcome/wizard/SdkComponentsStep.java2
-rw-r--r--android/src/com/android/tools/idea/welcome/wizard/SelectThemeStep.java2
-rw-r--r--android/src/com/android/tools/idea/welcome/wizard/SetupJdkPath.java8
-rw-r--r--android/src/com/android/tools/idea/welcome/wizard/TwoRadiosToBooleanBinding.java2
-rw-r--r--android/src/com/android/tools/idea/wizard/ActivityGalleryStep.java4
-rw-r--r--android/src/com/android/tools/idea/wizard/AddAndroidActivityPath.java9
-rw-r--r--android/src/com/android/tools/idea/wizard/ChooseModuleTypeStep.java2
-rw-r--r--android/src/com/android/tools/idea/wizard/ConfigureAndroidModuleStepDynamic.java2
-rw-r--r--android/src/com/android/tools/idea/wizard/ConfigureAndroidProjectPath.java4
-rw-r--r--android/src/com/android/tools/idea/wizard/ConfigureAndroidProjectStep.java5
-rwxr-xr-xandroid/src/com/android/tools/idea/wizard/ConfigureFormFactorStep.java12
-rw-r--r--android/src/com/android/tools/idea/wizard/CreateModuleTemplate.java1
-rw-r--r--android/src/com/android/tools/idea/wizard/FormFactorApiComboBox.java4
-rw-r--r--android/src/com/android/tools/idea/wizard/FormFactorUtils.java8
-rw-r--r--android/src/com/android/tools/idea/wizard/IconStep.java10
-rw-r--r--android/src/com/android/tools/idea/wizard/ImportSourceLocationStep.java1
-rw-r--r--android/src/com/android/tools/idea/wizard/JavaModuleDynamicPath.java2
-rw-r--r--android/src/com/android/tools/idea/wizard/LegacyPathWrapper.java2
-rw-r--r--android/src/com/android/tools/idea/wizard/ModuleTemplate.java1
-rw-r--r--android/src/com/android/tools/idea/wizard/NewAndroidActivityWizard.java1
-rw-r--r--android/src/com/android/tools/idea/wizard/NewFormFactorModulePath.java7
-rw-r--r--android/src/com/android/tools/idea/wizard/NewModuleDynamicPath.java2
-rw-r--r--android/src/com/android/tools/idea/wizard/NewModuleWizardDynamic.java5
-rw-r--r--android/src/com/android/tools/idea/wizard/NewModuleWizardState.java1
-rw-r--r--android/src/com/android/tools/idea/wizard/NewProjectWizardDynamic.java8
-rw-r--r--android/src/com/android/tools/idea/wizard/NewTemplateObjectWizard.java1
-rw-r--r--android/src/com/android/tools/idea/wizard/ScopedStateStoreAdapter.java1
-rw-r--r--android/src/com/android/tools/idea/wizard/TemplateListProvider.java2
-rw-r--r--android/src/com/android/tools/idea/wizard/TemplateParameterStep2.java6
-rw-r--r--android/src/com/android/tools/idea/wizard/WizardConstants.java9
-rw-r--r--android/src/com/android/tools/idea/wizard/WizardParameterFactory.java1
-rw-r--r--android/src/com/android/tools/idea/wizard/WizardPath.java1
-rw-r--r--android/src/com/android/tools/idea/wizard/WrapArchiveOptionsStep.java1
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/AndroidStudioWizardPath.java (renamed from android/src/com/android/tools/idea/wizard/AndroidStudioWizardPath.java)2
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/AndroidStudioWizardStep.java (renamed from android/src/com/android/tools/idea/wizard/AndroidStudioWizardStep.java)2
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/DialogWrapperHost.java (renamed from android/src/com/android/tools/idea/wizard/DialogWrapperHost.java)5
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/DynamicWizard.java (renamed from android/src/com/android/tools/idea/wizard/DynamicWizard.java)21
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardHost.java (renamed from android/src/com/android/tools/idea/wizard/DynamicWizardHost.java)2
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardPath.java (renamed from android/src/com/android/tools/idea/wizard/DynamicWizardPath.java)12
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStep.java (renamed from android/src/com/android/tools/idea/wizard/DynamicWizardStep.java)25
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStepWithDescription.form (renamed from android/src/com/android/tools/idea/wizard/DynamicWizardStepWithDescription.form)2
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStepWithDescription.java (renamed from android/src/com/android/tools/idea/wizard/DynamicWizardStepWithDescription.java)6
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStepWithHeaderAndDescription.form (renamed from android/src/com/android/tools/idea/wizard/DynamicWizardStepWithHeaderAndDescription.form)2
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStepWithHeaderAndDescription.java (renamed from android/src/com/android/tools/idea/wizard/DynamicWizardStepWithHeaderAndDescription.java)7
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/RadioButtonGroupBinding.java (renamed from android/src/com/android/tools/idea/wizard/RadioButtonGroupBinding.java)4
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/ScopedDataBinder.java (renamed from android/src/com/android/tools/idea/wizard/ScopedDataBinder.java)35
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/ScopedStateStore.java (renamed from android/src/com/android/tools/idea/wizard/ScopedStateStore.java)2
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/SingleStepDialogWrapperHost.java (renamed from android/src/com/android/tools/idea/wizard/SingleStepDialogWrapperHost.java)2
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/SingleStepPath.java (renamed from android/src/com/android/tools/idea/wizard/SingleStepPath.java)2
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/SingleStepWizard.java (renamed from android/src/com/android/tools/idea/wizard/SingleStepWizard.java)2
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/WizardStepHeaderPanel.java (renamed from android/src/com/android/tools/idea/wizard/WizardStepHeaderPanel.java)4
-rw-r--r--android/src/com/android/tools/idea/wizard/dynamic/package-info.java28
-rw-r--r--android/src/com/android/tools/idea/wizard/template/TemplateWizard.java2
-rw-r--r--android/src/com/android/tools/idea/wizard/template/TemplateWizardState.java6
-rwxr-xr-xandroid/src/com/android/tools/idea/wizard/template/TemplateWizardStep.java4
-rwxr-xr-xandroid/testSrc/com/android/tools/idea/welcome/install/AndroidVirtualDeviceTest.java12
-rw-r--r--android/testSrc/com/android/tools/idea/welcome/wizard/FirstRunWizardTest.java10
-rw-r--r--android/testSrc/com/android/tools/idea/welcome/wizard/InstallComponentsPathTest.java2
-rw-r--r--android/testSrc/com/android/tools/idea/wizard/ConfigureAndroidModuleStepDynamicTest.java1
-rw-r--r--android/testSrc/com/android/tools/idea/wizard/ConfigureAndroidProjectStepTest.java1
-rw-r--r--android/testSrc/com/android/tools/idea/wizard/NewFormFactorModulePathTest.java23
-rw-r--r--android/testSrc/com/android/tools/idea/wizard/TemplateParameterStep2DynamcTypeTest.java2
-rw-r--r--android/testSrc/com/android/tools/idea/wizard/TemplateParameterStep2Test.java3
-rw-r--r--android/testSrc/com/android/tools/idea/wizard/dynamic/DynamicWizardPathTest.java (renamed from android/testSrc/com/android/tools/idea/wizard/DynamicWizardPathTest.java)10
-rw-r--r--android/testSrc/com/android/tools/idea/wizard/dynamic/DynamicWizardStepTest.java (renamed from android/testSrc/com/android/tools/idea/wizard/DynamicWizardStepTest.java)2
-rw-r--r--android/testSrc/com/android/tools/idea/wizard/dynamic/DynamicWizardTest.java (renamed from android/testSrc/com/android/tools/idea/wizard/DynamicWizardTest.java)16
-rw-r--r--android/testSrc/com/android/tools/idea/wizard/dynamic/ScopedDataBinderTest.java (renamed from android/testSrc/com/android/tools/idea/wizard/ScopedDataBinderTest.java)6
-rw-r--r--android/testSrc/com/android/tools/idea/wizard/dynamic/ScopedStateStoreTest.java (renamed from android/testSrc/com/android/tools/idea/wizard/ScopedStateStoreTest.java)9
-rw-r--r--sdk-updates/src/com/android/tools/idea/updater/UpdateInfoDialog.java2
-rw-r--r--sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigPanel.java8
104 files changed, 315 insertions, 203 deletions
diff --git a/android/guiTestSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/AbstractWizardFixture.java b/android/guiTestSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/AbstractWizardFixture.java
index 9e6a6c6ae58..f1be948b1db 100644
--- a/android/guiTestSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/AbstractWizardFixture.java
+++ b/android/guiTestSrc/com/android/tools/idea/tests/gui/framework/fixture/newProjectWizard/AbstractWizardFixture.java
@@ -16,6 +16,7 @@
package com.android.tools.idea.tests.gui.framework.fixture.newProjectWizard;
import com.android.tools.idea.tests.gui.framework.fixture.ComponentFixture;
+import com.android.tools.idea.wizard.dynamic.DynamicWizard;
import org.fest.swing.core.GenericTypeMatcher;
import org.fest.swing.core.Robot;
import org.fest.swing.fixture.ContainerFixture;
@@ -26,7 +27,7 @@ import javax.swing.*;
import static com.android.tools.idea.tests.gui.framework.GuiTests.*;
/**
- * Base class for fixtures which control wizards that extend {@link com.android.tools.idea.wizard.DynamicWizard}
+ * Base class for fixtures which control wizards that extend {@link DynamicWizard}
*/
public abstract class AbstractWizardFixture<S> extends ComponentFixture<S, JDialog> implements ContainerFixture<JDialog> {
diff --git a/android/src/com/android/tools/idea/avdmanager/AvdConfigurationOptionHelpPanel.java b/android/src/com/android/tools/idea/avdmanager/AvdConfigurationOptionHelpPanel.java
index 349624ec0a9..18ef8ca434e 100644
--- a/android/src/com/android/tools/idea/avdmanager/AvdConfigurationOptionHelpPanel.java
+++ b/android/src/com/android/tools/idea/avdmanager/AvdConfigurationOptionHelpPanel.java
@@ -15,7 +15,7 @@
*/
package com.android.tools.idea.avdmanager;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.base.Splitter;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Iterables;
diff --git a/android/src/com/android/tools/idea/avdmanager/AvdConfigurationPath.java b/android/src/com/android/tools/idea/avdmanager/AvdConfigurationPath.java
index 4d0c87d142c..5390ca2e122 100644
--- a/android/src/com/android/tools/idea/avdmanager/AvdConfigurationPath.java
+++ b/android/src/com/android/tools/idea/avdmanager/AvdConfigurationPath.java
@@ -15,9 +15,7 @@
*/
package com.android.tools.idea.avdmanager;
-import com.android.tools.idea.wizard.AndroidStudioWizardPath;
-import com.android.tools.idea.wizard.DynamicWizardPath;
-import com.android.tools.idea.wizard.DynamicWizardStep;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardPath;
import com.intellij.openapi.Disposable;
import org.jetbrains.annotations.NotNull;
diff --git a/android/src/com/android/tools/idea/avdmanager/AvdEditWizard.java b/android/src/com/android/tools/idea/avdmanager/AvdEditWizard.java
index ecec31798a1..22ff0cc4e71 100755
--- a/android/src/com/android/tools/idea/avdmanager/AvdEditWizard.java
+++ b/android/src/com/android/tools/idea/avdmanager/AvdEditWizard.java
@@ -25,7 +25,7 @@ import com.android.sdklib.internal.avd.AvdInfo;
import com.android.sdklib.internal.avd.AvdManager;
import com.android.sdklib.internal.avd.HardwareProperties;
import com.android.tools.idea.ddms.screenshot.DeviceArtDescriptor;
-import com.android.tools.idea.wizard.*;
+import com.android.tools.idea.wizard.dynamic.*;
import com.google.common.base.Objects;
import com.google.common.base.Predicate;
import com.google.common.collect.Maps;
diff --git a/android/src/com/android/tools/idea/avdmanager/AvdListDialog.java b/android/src/com/android/tools/idea/avdmanager/AvdListDialog.java
index 3366e29fee4..66f5e313660 100644
--- a/android/src/com/android/tools/idea/avdmanager/AvdListDialog.java
+++ b/android/src/com/android/tools/idea/avdmanager/AvdListDialog.java
@@ -17,7 +17,7 @@ package com.android.tools.idea.avdmanager;
import com.android.sdklib.internal.avd.AvdInfo;
import com.android.tools.idea.wizard.WizardConstants;
-import com.android.tools.idea.wizard.WizardStepHeaderPanel;
+import com.android.tools.idea.wizard.dynamic.WizardStepHeaderPanel;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.ui.FrameWrapper;
diff --git a/android/src/com/android/tools/idea/avdmanager/AvdWizardConstants.java b/android/src/com/android/tools/idea/avdmanager/AvdWizardConstants.java
index 5cd7e040c2d..c441223469e 100644
--- a/android/src/com/android/tools/idea/avdmanager/AvdWizardConstants.java
+++ b/android/src/com/android/tools/idea/avdmanager/AvdWizardConstants.java
@@ -34,10 +34,10 @@ import java.util.Collections;
import java.util.List;
import static com.android.sdklib.devices.Storage.Unit;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.STEP;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.WIZARD;
-import static com.android.tools.idea.wizard.ScopedStateStore.createKey;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.STEP;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.WIZARD;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.createKey;
/**
* State store keys for the AVD Manager wizards
diff --git a/android/src/com/android/tools/idea/avdmanager/ChooseDeviceDefinitionStep.java b/android/src/com/android/tools/idea/avdmanager/ChooseDeviceDefinitionStep.java
index 8d5bd6cd6ff..002f34805dc 100755
--- a/android/src/com/android/tools/idea/avdmanager/ChooseDeviceDefinitionStep.java
+++ b/android/src/com/android/tools/idea/avdmanager/ChooseDeviceDefinitionStep.java
@@ -16,7 +16,7 @@
package com.android.tools.idea.avdmanager;
import com.android.sdklib.devices.Device;
-import com.android.tools.idea.wizard.DynamicWizardStepWithDescription;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithDescription;
import com.intellij.openapi.Disposable;
import com.intellij.ui.JBColor;
import org.jetbrains.annotations.NotNull;
diff --git a/android/src/com/android/tools/idea/avdmanager/ChooseSystemImageStep.java b/android/src/com/android/tools/idea/avdmanager/ChooseSystemImageStep.java
index 2b93d69066a..e0f5fa32372 100644
--- a/android/src/com/android/tools/idea/avdmanager/ChooseSystemImageStep.java
+++ b/android/src/com/android/tools/idea/avdmanager/ChooseSystemImageStep.java
@@ -18,7 +18,7 @@ package com.android.tools.idea.avdmanager;
import com.android.sdklib.SystemImage;
import com.android.sdklib.devices.Device;
import com.android.sdklib.repository.descriptors.IdDisplay;
-import com.android.tools.idea.wizard.DynamicWizardStepWithDescription;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithDescription;
import com.google.common.base.Objects;
import com.google.common.base.Predicate;
import com.intellij.openapi.Disposable;
diff --git a/android/src/com/android/tools/idea/avdmanager/ConfigureAvdOptionsStep.java b/android/src/com/android/tools/idea/avdmanager/ConfigureAvdOptionsStep.java
index 8bcbd538300..4a27afa8d43 100644
--- a/android/src/com/android/tools/idea/avdmanager/ConfigureAvdOptionsStep.java
+++ b/android/src/com/android/tools/idea/avdmanager/ConfigureAvdOptionsStep.java
@@ -26,6 +26,7 @@ import com.android.sdklib.devices.Screen;
import com.android.sdklib.devices.Storage;
import com.android.sdklib.internal.avd.AvdInfo;
import com.android.tools.idea.wizard.*;
+import com.android.tools.idea.wizard.dynamic.*;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
import com.google.common.collect.*;
@@ -64,7 +65,7 @@ import java.util.Set;
import static com.android.sdklib.devices.Storage.Unit;
import static com.android.tools.idea.avdmanager.AvdWizardConstants.*;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
/**
* Options panel for configuring various AVD options. Has an "advanced" mode and a "simple" mode.
diff --git a/android/src/com/android/tools/idea/avdmanager/ConfigureDeviceOptionsStep.java b/android/src/com/android/tools/idea/avdmanager/ConfigureDeviceOptionsStep.java
index 6aedb31bb58..e26a1c29bfa 100755
--- a/android/src/com/android/tools/idea/avdmanager/ConfigureDeviceOptionsStep.java
+++ b/android/src/com/android/tools/idea/avdmanager/ConfigureDeviceOptionsStep.java
@@ -22,8 +22,8 @@ import com.android.sdklib.SystemImage;
import com.android.sdklib.devices.*;
import com.android.sdklib.repository.descriptors.IdDisplay;
import com.android.tools.idea.ddms.screenshot.DeviceArtDescriptor;
-import com.android.tools.idea.wizard.DynamicWizardStepWithDescription;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithDescription;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
diff --git a/android/src/com/android/tools/idea/avdmanager/DeviceEditWizard.java b/android/src/com/android/tools/idea/avdmanager/DeviceEditWizard.java
index 1dc8cd10ec3..ff286ed6892 100755
--- a/android/src/com/android/tools/idea/avdmanager/DeviceEditWizard.java
+++ b/android/src/com/android/tools/idea/avdmanager/DeviceEditWizard.java
@@ -16,8 +16,8 @@
package com.android.tools.idea.avdmanager;
import com.android.sdklib.devices.Device;
-import com.android.tools.idea.wizard.SingleStepDialogWrapperHost;
-import com.android.tools.idea.wizard.SingleStepWizard;
+import com.android.tools.idea.wizard.dynamic.SingleStepDialogWrapperHost;
+import com.android.tools.idea.wizard.dynamic.SingleStepWizard;
import com.intellij.openapi.ui.DialogWrapper;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/android/src/com/android/tools/idea/avdmanager/HaxmAlert.java b/android/src/com/android/tools/idea/avdmanager/HaxmAlert.java
index cd89d2ef65a..d819c97d154 100644
--- a/android/src/com/android/tools/idea/avdmanager/HaxmAlert.java
+++ b/android/src/com/android/tools/idea/avdmanager/HaxmAlert.java
@@ -23,6 +23,7 @@ import com.android.tools.idea.sdk.wizard.LicenseAgreementStep;
import com.android.tools.idea.welcome.install.*;
import com.android.tools.idea.welcome.wizard.ProgressStep;
import com.android.tools.idea.wizard.*;
+import com.android.tools.idea.wizard.dynamic.*;
import com.google.common.base.Function;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableList;
diff --git a/android/src/com/android/tools/idea/avdmanager/SkinChooser.java b/android/src/com/android/tools/idea/avdmanager/SkinChooser.java
index e0b073cb9b2..c4e700766d3 100755
--- a/android/src/com/android/tools/idea/avdmanager/SkinChooser.java
+++ b/android/src/com/android/tools/idea/avdmanager/SkinChooser.java
@@ -19,7 +19,7 @@ import com.android.sdklib.IAndroidTarget;
import com.android.sdklib.ISystemImage;
import com.android.sdklib.devices.Device;
import com.android.sdklib.repository.local.LocalSdk;
-import com.android.tools.idea.wizard.ScopedDataBinder;
+import com.android.tools.idea.wizard.dynamic.ScopedDataBinder;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
diff --git a/android/src/com/android/tools/idea/avdmanager/StorageField.java b/android/src/com/android/tools/idea/avdmanager/StorageField.java
index e16b97323e2..6b2109c5301 100644
--- a/android/src/com/android/tools/idea/avdmanager/StorageField.java
+++ b/android/src/com/android/tools/idea/avdmanager/StorageField.java
@@ -16,7 +16,7 @@
package com.android.tools.idea.avdmanager;
import com.android.sdklib.devices.Storage;
-import com.android.tools.idea.wizard.ScopedDataBinder;
+import com.android.tools.idea.wizard.dynamic.ScopedDataBinder;
import com.intellij.openapi.ui.ComboBox;
import com.intellij.ui.ColoredListCellRenderer;
import com.intellij.ui.EnumComboBoxModel;
diff --git a/android/src/com/android/tools/idea/avdmanager/SystemImageList.java b/android/src/com/android/tools/idea/avdmanager/SystemImageList.java
index bda3fe47ce4..949c5738d55 100644
--- a/android/src/com/android/tools/idea/avdmanager/SystemImageList.java
+++ b/android/src/com/android/tools/idea/avdmanager/SystemImageList.java
@@ -26,7 +26,7 @@ import com.android.tools.idea.sdk.SdkPackages;
import com.android.tools.idea.sdk.SdkState;
import com.android.tools.idea.sdk.remote.RemotePkgInfo;
import com.android.tools.idea.sdk.wizard.SdkQuickfixWizard;
-import com.android.tools.idea.wizard.DialogWrapperHost;
+import com.android.tools.idea.wizard.dynamic.DialogWrapperHost;
import com.google.common.base.Predicate;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
diff --git a/android/src/com/android/tools/idea/sdk/wizard/LicenseAgreementStep.java b/android/src/com/android/tools/idea/sdk/wizard/LicenseAgreementStep.java
index 3c509bc6d5f..b273bdc0d04 100644
--- a/android/src/com/android/tools/idea/sdk/wizard/LicenseAgreementStep.java
+++ b/android/src/com/android/tools/idea/sdk/wizard/LicenseAgreementStep.java
@@ -17,7 +17,7 @@ package com.android.tools.idea.sdk.wizard;
import com.android.sdklib.repository.License;
import com.android.sdklib.repository.descriptors.IPkgDesc;
-import com.android.tools.idea.wizard.DynamicWizardStepWithDescription;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithDescription;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
diff --git a/android/src/com/android/tools/idea/sdk/wizard/SdkQuickfixWizard.java b/android/src/com/android/tools/idea/sdk/wizard/SdkQuickfixWizard.java
index f7224a56f3e..2d1bc5a5a28 100644
--- a/android/src/com/android/tools/idea/sdk/wizard/SdkQuickfixWizard.java
+++ b/android/src/com/android/tools/idea/sdk/wizard/SdkQuickfixWizard.java
@@ -18,10 +18,10 @@ package com.android.tools.idea.sdk.wizard;
import com.android.sdklib.repository.descriptors.IPkgDesc;
import com.android.tools.idea.sdk.SdkState;
import com.android.tools.idea.sdk.remote.UpdatablePkgInfo;
-import com.android.tools.idea.wizard.DialogWrapperHost;
-import com.android.tools.idea.wizard.DynamicWizard;
-import com.android.tools.idea.wizard.DynamicWizardPath;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.DialogWrapperHost;
+import com.android.tools.idea.wizard.dynamic.DynamicWizard;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardPath;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.collect.Sets;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.Disposable;
diff --git a/android/src/com/android/tools/idea/sdk/wizard/SmwOldApiDirectInstall.java b/android/src/com/android/tools/idea/sdk/wizard/SmwOldApiDirectInstall.java
index e8c829af58a..78cff45cc39 100755
--- a/android/src/com/android/tools/idea/sdk/wizard/SmwOldApiDirectInstall.java
+++ b/android/src/com/android/tools/idea/sdk/wizard/SmwOldApiDirectInstall.java
@@ -24,7 +24,7 @@ import com.android.tools.idea.sdk.SdkLoggerIntegration;
import com.android.tools.idea.sdk.SdkPackages;
import com.android.tools.idea.sdk.SdkState;
import com.android.tools.idea.sdk.remote.internal.updater.SdkUpdaterNoWindow;
-import com.android.tools.idea.wizard.DynamicWizardStepWithDescription;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithDescription;
import com.android.utils.ILogger;
import com.google.common.collect.Lists;
import com.intellij.openapi.Disposable;
diff --git a/android/src/com/android/tools/idea/welcome/install/AndroidSdk.java b/android/src/com/android/tools/idea/welcome/install/AndroidSdk.java
index 6ac9d69fe65..7d2838718d6 100644
--- a/android/src/com/android/tools/idea/welcome/install/AndroidSdk.java
+++ b/android/src/com/android/tools/idea/welcome/install/AndroidSdk.java
@@ -23,7 +23,7 @@ import com.android.sdklib.repository.descriptors.IPkgDesc;
import com.android.sdklib.repository.descriptors.PkgDesc;
import com.android.sdklib.repository.descriptors.PkgType;
import com.android.tools.idea.sdk.remote.RemotePkgInfo;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;
import org.jetbrains.annotations.NotNull;
diff --git a/android/src/com/android/tools/idea/welcome/install/AndroidVirtualDevice.java b/android/src/com/android/tools/idea/welcome/install/AndroidVirtualDevice.java
index 49cca2e7f42..68b1da257af 100755
--- a/android/src/com/android/tools/idea/welcome/install/AndroidVirtualDevice.java
+++ b/android/src/com/android/tools/idea/welcome/install/AndroidVirtualDevice.java
@@ -37,7 +37,7 @@ import com.android.tools.idea.sdk.LogWrapper;
import com.android.tools.idea.sdk.remote.RemotePkgInfo;
import com.android.tools.idea.welcome.wizard.InstallComponentsPath;
import com.android.tools.idea.welcome.wizard.ProgressStep;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableSet;
diff --git a/android/src/com/android/tools/idea/welcome/install/ComponentCategory.java b/android/src/com/android/tools/idea/welcome/install/ComponentCategory.java
index 5a68658e7d2..073c4a3d83d 100644
--- a/android/src/com/android/tools/idea/welcome/install/ComponentCategory.java
+++ b/android/src/com/android/tools/idea/welcome/install/ComponentCategory.java
@@ -17,8 +17,8 @@ package com.android.tools.idea.welcome.install;
import com.android.sdklib.SdkManager;
import com.android.tools.idea.welcome.wizard.ProgressStep;
-import com.android.tools.idea.wizard.DynamicWizardStep;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStep;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.collect.ImmutableList;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/android/src/com/android/tools/idea/welcome/install/ComponentTreeNode.java b/android/src/com/android/tools/idea/welcome/install/ComponentTreeNode.java
index 553bd1e94ea..3fc8587d27d 100644
--- a/android/src/com/android/tools/idea/welcome/install/ComponentTreeNode.java
+++ b/android/src/com/android/tools/idea/welcome/install/ComponentTreeNode.java
@@ -17,8 +17,8 @@ package com.android.tools.idea.welcome.install;
import com.android.sdklib.SdkManager;
import com.android.tools.idea.welcome.wizard.ProgressStep;
-import com.android.tools.idea.wizard.DynamicWizardStep;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStep;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/android/src/com/android/tools/idea/welcome/install/Haxm.java b/android/src/com/android/tools/idea/welcome/install/Haxm.java
index e3f24947ec7..52f52aa3ee5 100644
--- a/android/src/com/android/tools/idea/welcome/install/Haxm.java
+++ b/android/src/com/android/tools/idea/welcome/install/Haxm.java
@@ -26,8 +26,8 @@ import com.android.sdklib.repository.descriptors.PkgType;
import com.android.tools.idea.sdk.remote.RemotePkgInfo;
import com.android.tools.idea.welcome.wizard.HaxmInstallSettingsStep;
import com.android.tools.idea.welcome.wizard.ProgressStep;
-import com.android.tools.idea.wizard.DynamicWizardStep;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStep;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Multimap;
import com.intellij.execution.ExecutionException;
diff --git a/android/src/com/android/tools/idea/welcome/install/InstallableComponent.java b/android/src/com/android/tools/idea/welcome/install/InstallableComponent.java
index 7b49177a828..b9af332e57b 100644
--- a/android/src/com/android/tools/idea/welcome/install/InstallableComponent.java
+++ b/android/src/com/android/tools/idea/welcome/install/InstallableComponent.java
@@ -22,8 +22,8 @@ import com.android.sdklib.repository.local.LocalPkgInfo;
import com.android.sdklib.repository.local.LocalSdk;
import com.android.tools.idea.sdk.remote.RemotePkgInfo;
import com.android.tools.idea.welcome.wizard.WelcomeUIUtils;
-import com.android.tools.idea.wizard.DynamicWizardStep;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStep;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.collect.Multimap;
import com.google.common.collect.Sets;
import org.jetbrains.annotations.NotNull;
diff --git a/android/src/com/android/tools/idea/welcome/install/Platform.java b/android/src/com/android/tools/idea/welcome/install/Platform.java
index 26312f5a101..79108db0674 100644
--- a/android/src/com/android/tools/idea/welcome/install/Platform.java
+++ b/android/src/com/android/tools/idea/welcome/install/Platform.java
@@ -27,7 +27,7 @@ import com.android.sdklib.repository.local.LocalPkgInfo;
import com.android.sdklib.repository.local.LocalSdk;
import com.android.tools.idea.sdk.remote.RemotePkgInfo;
import com.android.tools.idea.welcome.wizard.InstallComponentsPath;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Multimap;
import org.jetbrains.annotations.NotNull;
diff --git a/android/src/com/android/tools/idea/welcome/wizard/ConsolidatedProgressStep.java b/android/src/com/android/tools/idea/welcome/wizard/ConsolidatedProgressStep.java
index dc0c5801c98..2268b32b024 100644
--- a/android/src/com/android/tools/idea/welcome/wizard/ConsolidatedProgressStep.java
+++ b/android/src/com/android/tools/idea/welcome/wizard/ConsolidatedProgressStep.java
@@ -16,8 +16,8 @@
package com.android.tools.idea.welcome.wizard;
import com.android.tools.idea.welcome.install.WizardException;
-import com.android.tools.idea.wizard.AndroidStudioWizardPath;
-import com.android.tools.idea.wizard.DynamicWizardHost;
+import com.android.tools.idea.wizard.dynamic.AndroidStudioWizardPath;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardHost;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.diagnostic.Logger;
diff --git a/android/src/com/android/tools/idea/welcome/wizard/FirstRunWizard.java b/android/src/com/android/tools/idea/welcome/wizard/FirstRunWizard.java
index 26e45cb48b8..61b1490b8c8 100644
--- a/android/src/com/android/tools/idea/welcome/wizard/FirstRunWizard.java
+++ b/android/src/com/android/tools/idea/welcome/wizard/FirstRunWizard.java
@@ -22,7 +22,10 @@ import com.android.tools.idea.sdk.wizard.LicenseAgreementStep;
import com.android.tools.idea.welcome.config.AndroidFirstRunPersistentData;
import com.android.tools.idea.welcome.config.FirstRunWizardMode;
import com.android.tools.idea.welcome.install.FirstRunWizardDefaults;
-import com.android.tools.idea.wizard.*;
+import com.android.tools.idea.wizard.dynamic.DynamicWizard;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardHost;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.SingleStepPath;
import com.android.utils.NullLogger;
import com.google.common.collect.Multimap;
import com.intellij.openapi.util.SystemInfo;
diff --git a/android/src/com/android/tools/idea/welcome/wizard/FirstRunWizardHost.java b/android/src/com/android/tools/idea/welcome/wizard/FirstRunWizardHost.java
index 87ca9e07cc9..04ef4ce9bba 100644
--- a/android/src/com/android/tools/idea/welcome/wizard/FirstRunWizardHost.java
+++ b/android/src/com/android/tools/idea/welcome/wizard/FirstRunWizardHost.java
@@ -18,8 +18,8 @@ package com.android.tools.idea.welcome.wizard;
import com.android.sdklib.repository.descriptors.PkgType;
import com.android.tools.idea.sdk.remote.RemotePkgInfo;
import com.android.tools.idea.welcome.config.FirstRunWizardMode;
-import com.android.tools.idea.wizard.DynamicWizard;
-import com.android.tools.idea.wizard.DynamicWizardHost;
+import com.android.tools.idea.wizard.dynamic.DynamicWizard;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardHost;
import com.android.tools.idea.wizard.WizardConstants;
import com.google.common.collect.Maps;
import com.google.common.collect.Multimap;
diff --git a/android/src/com/android/tools/idea/welcome/wizard/FirstRunWizardStep.java b/android/src/com/android/tools/idea/welcome/wizard/FirstRunWizardStep.java
index 3cb7531dd2a..c27a2ff0b07 100644
--- a/android/src/com/android/tools/idea/welcome/wizard/FirstRunWizardStep.java
+++ b/android/src/com/android/tools/idea/welcome/wizard/FirstRunWizardStep.java
@@ -15,7 +15,7 @@
*/
package com.android.tools.idea.welcome.wizard;
-import com.android.tools.idea.wizard.DynamicWizardStep;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStep;
import com.android.tools.idea.wizard.WizardConstants;
import com.intellij.util.IJSwingUtilities;
import org.jetbrains.annotations.NotNull;
diff --git a/android/src/com/android/tools/idea/welcome/wizard/HaxmInstallSettingsStep.java b/android/src/com/android/tools/idea/welcome/wizard/HaxmInstallSettingsStep.java
index 6cd56f1ba59..bedde256c86 100644
--- a/android/src/com/android/tools/idea/welcome/wizard/HaxmInstallSettingsStep.java
+++ b/android/src/com/android/tools/idea/welcome/wizard/HaxmInstallSettingsStep.java
@@ -18,7 +18,7 @@ package com.android.tools.idea.welcome.wizard;
import com.android.sdklib.devices.Storage;
import com.android.tools.idea.welcome.install.FirstRunWizardDefaults;
import com.android.tools.idea.welcome.install.Haxm;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.intellij.openapi.util.SystemInfo;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.NotNull;
diff --git a/android/src/com/android/tools/idea/welcome/wizard/InstallComponentsPath.java b/android/src/com/android/tools/idea/welcome/wizard/InstallComponentsPath.java
index bde20f423de..dbe844e7709 100644
--- a/android/src/com/android/tools/idea/welcome/wizard/InstallComponentsPath.java
+++ b/android/src/com/android/tools/idea/welcome/wizard/InstallComponentsPath.java
@@ -26,9 +26,9 @@ import com.android.tools.idea.sdk.remote.RemotePkgInfo;
import com.android.tools.idea.welcome.config.AndroidFirstRunPersistentData;
import com.android.tools.idea.welcome.config.FirstRunWizardMode;
import com.android.tools.idea.welcome.install.*;
-import com.android.tools.idea.wizard.DynamicWizardPath;
-import com.android.tools.idea.wizard.DynamicWizardStep;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardPath;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStep;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.android.tools.idea.wizard.WizardConstants;
import com.android.utils.NullLogger;
import com.google.common.annotations.VisibleForTesting;
@@ -39,7 +39,6 @@ import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.progress.ProgressIndicator;
-import com.intellij.openapi.util.SystemInfo;
import com.intellij.openapi.util.io.FileUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/android/src/com/android/tools/idea/welcome/wizard/InstallSummaryStep.java b/android/src/com/android/tools/idea/welcome/wizard/InstallSummaryStep.java
index 271be130871..18ce1d4d802 100644
--- a/android/src/com/android/tools/idea/welcome/wizard/InstallSummaryStep.java
+++ b/android/src/com/android/tools/idea/welcome/wizard/InstallSummaryStep.java
@@ -16,7 +16,7 @@
package com.android.tools.idea.welcome.wizard;
import com.android.tools.idea.sdk.remote.RemotePkgInfo;
-import com.android.tools.idea.wizard.ScopedStateStore.Key;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
import com.android.tools.idea.wizard.WizardConstants;
import com.google.common.base.Supplier;
import com.google.common.collect.ComparisonChain;
diff --git a/android/src/com/android/tools/idea/welcome/wizard/InstallationTypeWizardStep.java b/android/src/com/android/tools/idea/welcome/wizard/InstallationTypeWizardStep.java
index eb5fecc1239..e2c8b176bce 100644
--- a/android/src/com/android/tools/idea/welcome/wizard/InstallationTypeWizardStep.java
+++ b/android/src/com/android/tools/idea/welcome/wizard/InstallationTypeWizardStep.java
@@ -15,7 +15,7 @@
*/
package com.android.tools.idea.welcome.wizard;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/android/src/com/android/tools/idea/welcome/wizard/JdkLocationStep.java b/android/src/com/android/tools/idea/welcome/wizard/JdkLocationStep.java
index ed17c285eb7..fb9845fd122 100644
--- a/android/src/com/android/tools/idea/welcome/wizard/JdkLocationStep.java
+++ b/android/src/com/android/tools/idea/welcome/wizard/JdkLocationStep.java
@@ -18,7 +18,7 @@ package com.android.tools.idea.welcome.wizard;
import com.android.tools.idea.sdk.Jdks;
import com.android.tools.idea.welcome.config.FirstRunWizardMode;
import com.android.tools.idea.welcome.config.JdkDetection;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.intellij.openapi.externalSystem.util.ExternalSystemUiUtil;
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
diff --git a/android/src/com/android/tools/idea/welcome/wizard/SdkComponentsStep.java b/android/src/com/android/tools/idea/welcome/wizard/SdkComponentsStep.java
index e4c21a77545..2ec96b67bda 100755
--- a/android/src/com/android/tools/idea/welcome/wizard/SdkComponentsStep.java
+++ b/android/src/com/android/tools/idea/welcome/wizard/SdkComponentsStep.java
@@ -19,7 +19,7 @@ import com.android.tools.idea.sdk.IdeSdks;
import com.android.tools.idea.welcome.install.ComponentTreeNode;
import com.android.tools.idea.welcome.install.InstallableComponent;
import com.android.tools.idea.welcome.config.FirstRunWizardMode;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.android.tools.idea.wizard.WizardConstants;
import com.android.tools.idea.wizard.WizardUtils;
import com.google.common.collect.*;
diff --git a/android/src/com/android/tools/idea/welcome/wizard/SelectThemeStep.java b/android/src/com/android/tools/idea/welcome/wizard/SelectThemeStep.java
index 595afdbff24..d5c02c8055b 100644
--- a/android/src/com/android/tools/idea/welcome/wizard/SelectThemeStep.java
+++ b/android/src/com/android/tools/idea/welcome/wizard/SelectThemeStep.java
@@ -15,7 +15,7 @@
*/
package com.android.tools.idea.welcome.wizard;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.intellij.ide.customize.CustomizeUIThemeStepPanel;
import com.intellij.ide.ui.laf.darcula.DarculaInstaller;
import com.intellij.util.ui.UIUtil;
diff --git a/android/src/com/android/tools/idea/welcome/wizard/SetupJdkPath.java b/android/src/com/android/tools/idea/welcome/wizard/SetupJdkPath.java
index 5c249ac7974..f25dea755e4 100644
--- a/android/src/com/android/tools/idea/welcome/wizard/SetupJdkPath.java
+++ b/android/src/com/android/tools/idea/welcome/wizard/SetupJdkPath.java
@@ -19,10 +19,10 @@ import com.android.tools.idea.sdk.IdeSdks;
import com.android.tools.idea.welcome.config.FirstRunWizardMode;
import com.android.tools.idea.welcome.config.JdkDetection;
import com.android.tools.idea.welcome.install.FirstRunWizardDefaults;
-import com.android.tools.idea.wizard.DynamicWizardPath;
-import com.android.tools.idea.wizard.ScopedStateStore;
-import com.android.tools.idea.wizard.ScopedStateStore.Key;
-import com.android.tools.idea.wizard.ScopedStateStore.Scope;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardPath;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.util.text.StringUtil;
diff --git a/android/src/com/android/tools/idea/welcome/wizard/TwoRadiosToBooleanBinding.java b/android/src/com/android/tools/idea/welcome/wizard/TwoRadiosToBooleanBinding.java
index 745a9578725..4fdaf695f6c 100644
--- a/android/src/com/android/tools/idea/welcome/wizard/TwoRadiosToBooleanBinding.java
+++ b/android/src/com/android/tools/idea/welcome/wizard/TwoRadiosToBooleanBinding.java
@@ -15,7 +15,7 @@
*/
package com.android.tools.idea.welcome.wizard;
-import com.android.tools.idea.wizard.ScopedDataBinder;
+import com.android.tools.idea.wizard.dynamic.ScopedDataBinder;
import com.google.common.base.Objects;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/android/src/com/android/tools/idea/wizard/ActivityGalleryStep.java b/android/src/com/android/tools/idea/wizard/ActivityGalleryStep.java
index 0434da5f7cd..82da4066128 100644
--- a/android/src/com/android/tools/idea/wizard/ActivityGalleryStep.java
+++ b/android/src/com/android/tools/idea/wizard/ActivityGalleryStep.java
@@ -18,6 +18,8 @@ package com.android.tools.idea.wizard;
import com.android.sdklib.AndroidVersion;
import com.android.tools.idea.actions.NewAndroidComponentAction;
import com.android.tools.idea.templates.TemplateManager;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithDescription;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.base.Function;
import com.google.common.base.Optional;
import com.intellij.openapi.Disposable;
@@ -34,7 +36,7 @@ import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
import static com.android.tools.idea.wizard.WizardConstants.DEFAULT_GALLERY_THUMBNAIL_SIZE;
/**
diff --git a/android/src/com/android/tools/idea/wizard/AddAndroidActivityPath.java b/android/src/com/android/tools/idea/wizard/AddAndroidActivityPath.java
index 44b2688bd6e..c7b5df68f8d 100644
--- a/android/src/com/android/tools/idea/wizard/AddAndroidActivityPath.java
+++ b/android/src/com/android/tools/idea/wizard/AddAndroidActivityPath.java
@@ -21,6 +21,7 @@ import com.android.tools.idea.gradle.IdeaAndroidProject;
import com.android.tools.idea.model.AndroidModuleInfo;
import com.android.tools.idea.model.ManifestInfo;
import com.android.tools.idea.templates.*;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardPath;
import com.android.tools.idea.wizard.template.TemplateWizard;
import com.google.common.base.Joiner;
import com.google.common.base.Objects;
@@ -57,10 +58,10 @@ import java.util.Set;
import static com.android.tools.idea.templates.KeystoreUtils.getDebugKeystore;
import static com.android.tools.idea.templates.TemplateMetadata.*;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.PATH;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.WIZARD;
-import static com.android.tools.idea.wizard.ScopedStateStore.createKey;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.PATH;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.WIZARD;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.createKey;
/**
* Wizard path for adding a new activity.
diff --git a/android/src/com/android/tools/idea/wizard/ChooseModuleTypeStep.java b/android/src/com/android/tools/idea/wizard/ChooseModuleTypeStep.java
index 8e1993e21b7..0040fb02145 100644
--- a/android/src/com/android/tools/idea/wizard/ChooseModuleTypeStep.java
+++ b/android/src/com/android/tools/idea/wizard/ChooseModuleTypeStep.java
@@ -15,6 +15,8 @@
*/
package com.android.tools.idea.wizard;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithDescription;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.base.Function;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableList;
diff --git a/android/src/com/android/tools/idea/wizard/ConfigureAndroidModuleStepDynamic.java b/android/src/com/android/tools/idea/wizard/ConfigureAndroidModuleStepDynamic.java
index 46666c93d55..c4ae0ce855e 100644
--- a/android/src/com/android/tools/idea/wizard/ConfigureAndroidModuleStepDynamic.java
+++ b/android/src/com/android/tools/idea/wizard/ConfigureAndroidModuleStepDynamic.java
@@ -15,6 +15,8 @@
*/
package com.android.tools.idea.wizard;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithHeaderAndDescription;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.intellij.ide.util.PropertiesComponent;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.diagnostic.Logger;
diff --git a/android/src/com/android/tools/idea/wizard/ConfigureAndroidProjectPath.java b/android/src/com/android/tools/idea/wizard/ConfigureAndroidProjectPath.java
index 5ff440c0ad3..fee3310b43d 100644
--- a/android/src/com/android/tools/idea/wizard/ConfigureAndroidProjectPath.java
+++ b/android/src/com/android/tools/idea/wizard/ConfigureAndroidProjectPath.java
@@ -24,7 +24,9 @@ import com.android.tools.idea.sdk.wizard.LicenseAgreementStep;
import com.android.tools.idea.sdk.wizard.SmwOldApiDirectInstall;
import com.android.tools.idea.templates.Template;
import com.android.tools.idea.templates.TemplateManager;
-import com.android.tools.idea.wizard.DynamicWizardStepWithHeaderAndDescription.WizardStepHeaderSettings;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithHeaderAndDescription.WizardStepHeaderSettings;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardPath;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
diff --git a/android/src/com/android/tools/idea/wizard/ConfigureAndroidProjectStep.java b/android/src/com/android/tools/idea/wizard/ConfigureAndroidProjectStep.java
index f526877f9b0..b9fa3f1533c 100644
--- a/android/src/com/android/tools/idea/wizard/ConfigureAndroidProjectStep.java
+++ b/android/src/com/android/tools/idea/wizard/ConfigureAndroidProjectStep.java
@@ -16,6 +16,8 @@
package com.android.tools.idea.wizard;
import com.android.annotations.VisibleForTesting;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithHeaderAndDescription;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.base.CharMatcher;
import com.google.common.base.Function;
import com.google.common.base.Joiner;
@@ -35,14 +37,13 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import javax.swing.*;
-import javax.swing.text.Document;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.util.ArrayList;
import java.util.Set;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
/**
* ConfigureAndroidModuleStep is the first page in the New Project wizard that sets project/module name, location, and other project-global
diff --git a/android/src/com/android/tools/idea/wizard/ConfigureFormFactorStep.java b/android/src/com/android/tools/idea/wizard/ConfigureFormFactorStep.java
index 7e36ce307ed..72643b25dba 100755
--- a/android/src/com/android/tools/idea/wizard/ConfigureFormFactorStep.java
+++ b/android/src/com/android/tools/idea/wizard/ConfigureFormFactorStep.java
@@ -25,6 +25,10 @@ import com.android.tools.idea.stats.DistributionService;
import com.android.tools.idea.templates.Template;
import com.android.tools.idea.templates.TemplateManager;
import com.android.tools.idea.templates.TemplateMetadata;
+import com.android.tools.idea.wizard.dynamic.DialogWrapperHost;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithHeaderAndDescription;
+import com.android.tools.idea.wizard.dynamic.ScopedDataBinder;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.collect.*;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
@@ -55,10 +59,10 @@ import static com.android.tools.idea.templates.TemplateMetadata.*;
import static com.android.tools.idea.wizard.FormFactorApiComboBox.AndroidTargetComboBoxItem;
import static com.android.tools.idea.wizard.FormFactorUtils.*;
import static com.android.tools.idea.wizard.FormFactorUtils.FormFactor.MOBILE;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.STEP;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.WIZARD;
-import static com.android.tools.idea.wizard.ScopedStateStore.createKey;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.STEP;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.WIZARD;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.createKey;
import static com.android.tools.idea.wizard.WizardConstants.NEWLY_INSTALLED_API_KEY;
/**
diff --git a/android/src/com/android/tools/idea/wizard/CreateModuleTemplate.java b/android/src/com/android/tools/idea/wizard/CreateModuleTemplate.java
index 4c165c4c1c3..944c6c16627 100644
--- a/android/src/com/android/tools/idea/wizard/CreateModuleTemplate.java
+++ b/android/src/com/android/tools/idea/wizard/CreateModuleTemplate.java
@@ -16,6 +16,7 @@
package com.android.tools.idea.wizard;
import com.android.tools.idea.templates.TemplateMetadata;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.collect.Maps;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/android/src/com/android/tools/idea/wizard/FormFactorApiComboBox.java b/android/src/com/android/tools/idea/wizard/FormFactorApiComboBox.java
index effbd48d0d5..78fe567599b 100644
--- a/android/src/com/android/tools/idea/wizard/FormFactorApiComboBox.java
+++ b/android/src/com/android/tools/idea/wizard/FormFactorApiComboBox.java
@@ -25,6 +25,8 @@ import com.android.sdklib.repository.descriptors.IPkgDesc;
import com.android.sdklib.repository.descriptors.PkgDesc;
import com.android.tools.idea.templates.TemplateMetadata;
import com.android.tools.idea.templates.TemplateUtils;
+import com.android.tools.idea.wizard.dynamic.ScopedDataBinder;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.collect.Iterables;
import com.google.common.collect.Lists;
import com.google.common.collect.Sets;
@@ -46,7 +48,7 @@ import java.util.List;
import java.util.Set;
import static com.android.tools.idea.wizard.FormFactorUtils.*;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
import static com.android.tools.idea.wizard.WizardConstants.INSTALL_REQUESTS_KEY;
/**
diff --git a/android/src/com/android/tools/idea/wizard/FormFactorUtils.java b/android/src/com/android/tools/idea/wizard/FormFactorUtils.java
index 47574157e95..8f228d90adc 100644
--- a/android/src/com/android/tools/idea/wizard/FormFactorUtils.java
+++ b/android/src/com/android/tools/idea/wizard/FormFactorUtils.java
@@ -36,10 +36,10 @@ import java.util.Map;
import static com.android.tools.idea.templates.TemplateMetadata.*;
import static com.android.tools.idea.wizard.FormFactorApiComboBox.AndroidTargetComboBoxItem;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.STEP;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.WIZARD;
-import static com.android.tools.idea.wizard.ScopedStateStore.createKey;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.STEP;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.WIZARD;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.createKey;
import static com.android.tools.idea.wizard.WizardConstants.INVALID_FILENAME_CHARS;
/**
diff --git a/android/src/com/android/tools/idea/wizard/IconStep.java b/android/src/com/android/tools/idea/wizard/IconStep.java
index f12a73b83fe..0c4e1f2b851 100644
--- a/android/src/com/android/tools/idea/wizard/IconStep.java
+++ b/android/src/com/android/tools/idea/wizard/IconStep.java
@@ -26,6 +26,8 @@ import com.android.tools.idea.templates.Parameter;
import com.android.tools.idea.templates.Template;
import com.android.tools.idea.templates.TemplateManager;
import com.android.tools.idea.templates.TemplateMetadata;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithDescription;
+import com.android.tools.idea.wizard.dynamic.RadioButtonGroupBinding;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
@@ -57,10 +59,10 @@ import java.util.concurrent.ConcurrentHashMap;
import static com.android.assetstudiolib.ActionBarIconGenerator.Theme;
import static com.android.tools.idea.wizard.AssetStudioAssetGenerator.*;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.PATH;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.STEP;
-import static com.android.tools.idea.wizard.ScopedStateStore.createKey;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.PATH;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.STEP;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.createKey;
/**
* {@linkplain IconStep} is a wizard page that lets the user create a variety of density-scaled assets.
diff --git a/android/src/com/android/tools/idea/wizard/ImportSourceLocationStep.java b/android/src/com/android/tools/idea/wizard/ImportSourceLocationStep.java
index 67a4b03aec9..8661d1804ba 100644
--- a/android/src/com/android/tools/idea/wizard/ImportSourceLocationStep.java
+++ b/android/src/com/android/tools/idea/wizard/ImportSourceLocationStep.java
@@ -18,6 +18,7 @@ package com.android.tools.idea.wizard;
import com.android.annotations.VisibleForTesting;
import com.android.tools.idea.gradle.project.ModuleImporter;
import com.android.tools.idea.gradle.project.ModuleToImport;
+import com.android.tools.idea.wizard.dynamic.AndroidStudioWizardStep;
import com.android.tools.idea.wizard.template.TemplateWizardStep;
import com.google.common.base.Joiner;
import com.google.common.base.Objects;
diff --git a/android/src/com/android/tools/idea/wizard/JavaModuleDynamicPath.java b/android/src/com/android/tools/idea/wizard/JavaModuleDynamicPath.java
index ae3e5f997a2..68bf8b63b49 100644
--- a/android/src/com/android/tools/idea/wizard/JavaModuleDynamicPath.java
+++ b/android/src/com/android/tools/idea/wizard/JavaModuleDynamicPath.java
@@ -19,6 +19,8 @@ import com.android.builder.model.SourceProvider;
import com.android.tools.idea.templates.Template;
import com.android.tools.idea.templates.TemplateManager;
import com.android.tools.idea.templates.TemplateMetadata;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardPath;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Maps;
diff --git a/android/src/com/android/tools/idea/wizard/LegacyPathWrapper.java b/android/src/com/android/tools/idea/wizard/LegacyPathWrapper.java
index 8cf4305935b..7ae2456df1f 100644
--- a/android/src/com/android/tools/idea/wizard/LegacyPathWrapper.java
+++ b/android/src/com/android/tools/idea/wizard/LegacyPathWrapper.java
@@ -15,6 +15,8 @@
*/
package com.android.tools.idea.wizard;
+import com.android.tools.idea.wizard.dynamic.DynamicWizard;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Iterables;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
diff --git a/android/src/com/android/tools/idea/wizard/ModuleTemplate.java b/android/src/com/android/tools/idea/wizard/ModuleTemplate.java
index 973f0c5b73c..f8badbfc662 100644
--- a/android/src/com/android/tools/idea/wizard/ModuleTemplate.java
+++ b/android/src/com/android/tools/idea/wizard/ModuleTemplate.java
@@ -15,6 +15,7 @@
*/
package com.android.tools.idea.wizard;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
diff --git a/android/src/com/android/tools/idea/wizard/NewAndroidActivityWizard.java b/android/src/com/android/tools/idea/wizard/NewAndroidActivityWizard.java
index 08bb4faf83a..51608204f2a 100644
--- a/android/src/com/android/tools/idea/wizard/NewAndroidActivityWizard.java
+++ b/android/src/com/android/tools/idea/wizard/NewAndroidActivityWizard.java
@@ -15,6 +15,7 @@
*/
package com.android.tools.idea.wizard;
+import com.android.tools.idea.wizard.dynamic.DynamicWizard;
import com.google.common.collect.ImmutableMap;
import com.intellij.openapi.command.UndoConfirmationPolicy;
import com.intellij.openapi.module.Module;
diff --git a/android/src/com/android/tools/idea/wizard/NewFormFactorModulePath.java b/android/src/com/android/tools/idea/wizard/NewFormFactorModulePath.java
index 22bb1a5b7ce..5c4bbbb6f01 100644
--- a/android/src/com/android/tools/idea/wizard/NewFormFactorModulePath.java
+++ b/android/src/com/android/tools/idea/wizard/NewFormFactorModulePath.java
@@ -20,6 +20,7 @@ import com.android.tools.idea.templates.Parameter;
import com.android.tools.idea.templates.Template;
import com.android.tools.idea.templates.TemplateManager;
import com.android.tools.idea.templates.TemplateMetadata;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardPath;
import com.android.tools.idea.wizard.template.TemplateWizard;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
@@ -41,10 +42,10 @@ import static com.android.tools.idea.templates.TemplateUtils.checkedCreateDirect
import static com.android.tools.idea.wizard.AddAndroidActivityPath.KEY_SELECTED_TEMPLATE;
import static com.android.tools.idea.wizard.ConfigureFormFactorStep.NUM_ENABLED_FORM_FACTORS_KEY;
import static com.android.tools.idea.wizard.NewModuleWizardState.ATTR_CREATE_ACTIVITY;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.PATH;
-import static com.android.tools.idea.wizard.ScopedStateStore.createKey;
import static com.android.tools.idea.wizard.WizardConstants.*;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.PATH;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.createKey;
/**
* Module creation for a given form factor
diff --git a/android/src/com/android/tools/idea/wizard/NewModuleDynamicPath.java b/android/src/com/android/tools/idea/wizard/NewModuleDynamicPath.java
index e3b22661813..8e58c775679 100644
--- a/android/src/com/android/tools/idea/wizard/NewModuleDynamicPath.java
+++ b/android/src/com/android/tools/idea/wizard/NewModuleDynamicPath.java
@@ -15,6 +15,8 @@
*/
package com.android.tools.idea.wizard;
+import com.android.tools.idea.wizard.dynamic.AndroidStudioWizardPath;
+
/**
* Combines wizard path and module template provider.
*/
diff --git a/android/src/com/android/tools/idea/wizard/NewModuleWizardDynamic.java b/android/src/com/android/tools/idea/wizard/NewModuleWizardDynamic.java
index 42db7f9effd..c83653e3bf0 100644
--- a/android/src/com/android/tools/idea/wizard/NewModuleWizardDynamic.java
+++ b/android/src/com/android/tools/idea/wizard/NewModuleWizardDynamic.java
@@ -24,7 +24,10 @@ import com.android.tools.idea.gradle.util.GradleUtil;
import com.android.tools.idea.templates.KeystoreUtils;
import com.android.tools.idea.templates.TemplateManager;
import com.android.tools.idea.templates.TemplateUtils;
-import com.android.tools.idea.wizard.DynamicWizardStepWithHeaderAndDescription.WizardStepHeaderSettings;
+import com.android.tools.idea.wizard.dynamic.DynamicWizard;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithHeaderAndDescription.WizardStepHeaderSettings;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.SingleStepPath;
import com.android.tools.idea.wizard.template.TemplateWizard;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Iterables;
diff --git a/android/src/com/android/tools/idea/wizard/NewModuleWizardState.java b/android/src/com/android/tools/idea/wizard/NewModuleWizardState.java
index 27e526b8aa3..47d92f7409d 100644
--- a/android/src/com/android/tools/idea/wizard/NewModuleWizardState.java
+++ b/android/src/com/android/tools/idea/wizard/NewModuleWizardState.java
@@ -20,6 +20,7 @@ import com.android.sdklib.BuildToolInfo;
import com.android.tools.idea.templates.KeystoreUtils;
import com.android.tools.idea.templates.RepositoryUrlManager;
import com.android.tools.idea.templates.TemplateMetadata;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.android.tools.idea.wizard.template.TemplateWizardState;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
diff --git a/android/src/com/android/tools/idea/wizard/NewProjectWizardDynamic.java b/android/src/com/android/tools/idea/wizard/NewProjectWizardDynamic.java
index c25c370917f..40ba1831191 100644
--- a/android/src/com/android/tools/idea/wizard/NewProjectWizardDynamic.java
+++ b/android/src/com/android/tools/idea/wizard/NewProjectWizardDynamic.java
@@ -23,6 +23,8 @@ import com.android.tools.idea.templates.KeystoreUtils;
import com.android.tools.idea.templates.TemplateManager;
import com.android.tools.idea.templates.TemplateUtils;
import com.android.tools.idea.wizard.FormFactorUtils.FormFactor;
+import com.android.tools.idea.wizard.dynamic.DynamicWizard;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.android.tools.idea.wizard.template.TemplateWizard;
import com.google.common.collect.Lists;
import com.intellij.ide.startup.StartupManagerEx;
@@ -47,9 +49,7 @@ import java.util.List;
import static com.android.SdkConstants.GRADLE_LATEST_VERSION;
import static com.android.SdkConstants.GRADLE_PLUGIN_RECOMMENDED_VERSION;
-import static com.android.tools.idea.wizard.WizardConstants.APPLICATION_NAME_KEY;
-import static com.android.tools.idea.wizard.WizardConstants.FILES_TO_OPEN_KEY;
-import static com.android.tools.idea.wizard.WizardConstants.PROJECT_LOCATION_KEY;
+import static com.android.tools.idea.wizard.WizardConstants.*;
/**
* Presents a wizard to the user to create a new project.
@@ -237,7 +237,7 @@ public class NewProjectWizardDynamic extends DynamicWizard {
@Nullable
@Override
- protected Project getProject() {
+ public Project getProject() {
return myProject;
}
}
diff --git a/android/src/com/android/tools/idea/wizard/NewTemplateObjectWizard.java b/android/src/com/android/tools/idea/wizard/NewTemplateObjectWizard.java
index dc2c87c2caa..444bf1f9606 100644
--- a/android/src/com/android/tools/idea/wizard/NewTemplateObjectWizard.java
+++ b/android/src/com/android/tools/idea/wizard/NewTemplateObjectWizard.java
@@ -28,6 +28,7 @@ import com.android.tools.idea.templates.TemplateUtils;
import com.android.tools.idea.wizard.template.TemplateWizard;
import com.android.tools.idea.wizard.template.TemplateWizardState;
import com.android.tools.idea.wizard.template.TemplateWizardStep;
+import com.android.tools.idea.wizard.dynamic.DynamicWizard;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.Module;
diff --git a/android/src/com/android/tools/idea/wizard/ScopedStateStoreAdapter.java b/android/src/com/android/tools/idea/wizard/ScopedStateStoreAdapter.java
index 114b8c2ff2b..54186756315 100644
--- a/android/src/com/android/tools/idea/wizard/ScopedStateStoreAdapter.java
+++ b/android/src/com/android/tools/idea/wizard/ScopedStateStoreAdapter.java
@@ -16,6 +16,7 @@
package com.android.tools.idea.wizard;
import com.android.assetstudiolib.GraphicGenerator;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import org.jetbrains.annotations.Nullable;
import java.awt.*;
diff --git a/android/src/com/android/tools/idea/wizard/TemplateListProvider.java b/android/src/com/android/tools/idea/wizard/TemplateListProvider.java
index a24e53fb09b..6ba210ef595 100644
--- a/android/src/com/android/tools/idea/wizard/TemplateListProvider.java
+++ b/android/src/com/android/tools/idea/wizard/TemplateListProvider.java
@@ -17,6 +17,8 @@ package com.android.tools.idea.wizard;
import com.android.tools.idea.templates.TemplateManager;
import com.android.tools.idea.templates.TemplateMetadata;
+import com.android.tools.idea.wizard.dynamic.ScopedDataBinder;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Lists;
import com.intellij.openapi.util.text.StringUtil;
diff --git a/android/src/com/android/tools/idea/wizard/TemplateParameterStep2.java b/android/src/com/android/tools/idea/wizard/TemplateParameterStep2.java
index b442c491349..aec20728460 100644
--- a/android/src/com/android/tools/idea/wizard/TemplateParameterStep2.java
+++ b/android/src/com/android/tools/idea/wizard/TemplateParameterStep2.java
@@ -22,6 +22,8 @@ import com.android.sdklib.AndroidVersion;
import com.android.tools.idea.templates.Parameter;
import com.android.tools.idea.templates.Template;
import com.android.tools.idea.templates.TemplateMetadata;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithDescription;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.base.*;
import com.google.common.base.Objects;
import com.google.common.base.Optional;
@@ -73,8 +75,8 @@ import java.io.IOException;
import java.util.*;
import java.util.List;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
-import static com.android.tools.idea.wizard.ScopedStateStore.createKey;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.createKey;
/**
* Wizard step for specifying template-specific parameters.
diff --git a/android/src/com/android/tools/idea/wizard/WizardConstants.java b/android/src/com/android/tools/idea/wizard/WizardConstants.java
index 04c62de8804..99de5f93a31 100644
--- a/android/src/com/android/tools/idea/wizard/WizardConstants.java
+++ b/android/src/com/android/tools/idea/wizard/WizardConstants.java
@@ -17,6 +17,7 @@ package com.android.tools.idea.wizard;
import com.android.sdklib.repository.descriptors.IPkgDesc;
import com.android.tools.idea.templates.TemplateMetadata;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.collect.ImmutableSet;
import com.intellij.ui.JBColor;
@@ -26,10 +27,10 @@ import java.util.List;
import java.util.Set;
import static com.android.tools.idea.templates.TemplateMetadata.*;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.STEP;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.WIZARD;
-import static com.android.tools.idea.wizard.ScopedStateStore.createKey;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.STEP;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.WIZARD;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.createKey;
/**
* Constants for template based wizards
diff --git a/android/src/com/android/tools/idea/wizard/WizardParameterFactory.java b/android/src/com/android/tools/idea/wizard/WizardParameterFactory.java
index 210b06edcc7..87ab0977a91 100644
--- a/android/src/com/android/tools/idea/wizard/WizardParameterFactory.java
+++ b/android/src/com/android/tools/idea/wizard/WizardParameterFactory.java
@@ -17,6 +17,7 @@ package com.android.tools.idea.wizard;
import com.android.tools.idea.templates.Parameter;
+import com.android.tools.idea.wizard.dynamic.ScopedDataBinder;
import com.intellij.openapi.extensions.ExtensionPointName;
import javax.swing.*;
diff --git a/android/src/com/android/tools/idea/wizard/WizardPath.java b/android/src/com/android/tools/idea/wizard/WizardPath.java
index 513ff68a8f5..d5c4ea57bc7 100644
--- a/android/src/com/android/tools/idea/wizard/WizardPath.java
+++ b/android/src/com/android/tools/idea/wizard/WizardPath.java
@@ -15,6 +15,7 @@
*/
package com.android.tools.idea.wizard;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardPath;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
import java.util.Collection;
diff --git a/android/src/com/android/tools/idea/wizard/WrapArchiveOptionsStep.java b/android/src/com/android/tools/idea/wizard/WrapArchiveOptionsStep.java
index 770ef36f3b9..4965f40f8ac 100644
--- a/android/src/com/android/tools/idea/wizard/WrapArchiveOptionsStep.java
+++ b/android/src/com/android/tools/idea/wizard/WrapArchiveOptionsStep.java
@@ -18,6 +18,7 @@ package com.android.tools.idea.wizard;
import com.android.tools.idea.gradle.IdeaGradleProject;
import com.android.tools.idea.gradle.facet.AndroidGradleFacet;
import com.android.tools.idea.gradle.util.GradleUtil;
+import com.android.tools.idea.wizard.dynamic.AndroidStudioWizardStep;
import com.android.tools.idea.wizard.template.TemplateWizardState;
import com.google.common.base.Splitter;
import com.google.common.base.Strings;
diff --git a/android/src/com/android/tools/idea/wizard/AndroidStudioWizardPath.java b/android/src/com/android/tools/idea/wizard/dynamic/AndroidStudioWizardPath.java
index 405f5c1ca6f..96d91da8aad 100644
--- a/android/src/com/android/tools/idea/wizard/AndroidStudioWizardPath.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/AndroidStudioWizardPath.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import com.intellij.ide.wizard.Step;
import org.jetbrains.annotations.NotNull;
diff --git a/android/src/com/android/tools/idea/wizard/AndroidStudioWizardStep.java b/android/src/com/android/tools/idea/wizard/dynamic/AndroidStudioWizardStep.java
index 2d1b0d25718..b70589ab466 100644
--- a/android/src/com/android/tools/idea/wizard/AndroidStudioWizardStep.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/AndroidStudioWizardStep.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
/**
* This interface is needed to unify several wizard mini-frameworks we have.
diff --git a/android/src/com/android/tools/idea/wizard/DialogWrapperHost.java b/android/src/com/android/tools/idea/wizard/dynamic/DialogWrapperHost.java
index 1a01f910db4..01851cb88e1 100644
--- a/android/src/com/android/tools/idea/wizard/DialogWrapperHost.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/DialogWrapperHost.java
@@ -13,8 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
+import com.android.tools.idea.wizard.WizardConstants;
import com.google.common.collect.Maps;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.application.Application;
@@ -41,7 +42,7 @@ import java.util.Map;
import java.util.concurrent.atomic.AtomicReference;
/**
- * Uses {@link com.intellij.openapi.ui.DialogWrapper} to display a wizard in a dialog
+ * Uses {@link DialogWrapper} to display a wizard in a dialog
*/
public class DialogWrapperHost extends DialogWrapper implements DynamicWizardHost {
// Action References. myCancelAction and myHelpAction are inherited
diff --git a/android/src/com/android/tools/idea/wizard/DynamicWizard.java b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizard.java
index d30d8cfce9a..b2e970297a4 100644
--- a/android/src/com/android/tools/idea/wizard/DynamicWizard.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizard.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import com.android.tools.idea.wizard.template.TemplateWizard;
import com.google.common.collect.Lists;
@@ -41,7 +41,7 @@ import java.util.ArrayList;
import java.util.Map;
import java.util.Set;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
/**
* DynamicWizard is an evolution of {@link TemplateWizard} that seeks to provide a flexible base for
@@ -62,7 +62,8 @@ public abstract class DynamicWizard implements ScopedStateStore.ScopedStoreListe
// 42 is an arbitrary number. This constant is for the number of update cycles before
// we decide there's circular dependency and we cannot settle down the model state.
public static final int MAX_UPDATE_ATTEMPTS = 42;
- Logger LOG = Logger.getInstance(DynamicWizard.class);
+ // TODO: Make this logger private and create new loggers for anywhere that complains
+ public static Logger LOG = Logger.getInstance(DynamicWizard.class);
// A queue of updates used to throttle the update() function.
private final MergingUpdateQueue myUpdateQueue;
@@ -186,7 +187,7 @@ public abstract class DynamicWizard implements ScopedStateStore.ScopedStoreListe
* If the this wizard is a global one, the function returns null.
*/
@Nullable
- protected Project getProject() {
+ public Project getProject() {
return myProject;
}
@@ -228,13 +229,23 @@ public abstract class DynamicWizard implements ScopedStateStore.ScopedStoreListe
/**
* Add the given path to the end of this wizard.
*/
- protected final void addPath(@NotNull AndroidStudioWizardPath path) {
+ public final void addPath(@NotNull AndroidStudioWizardPath path) {
myPaths.add(path);
path.attachToWizard(this);
// Rebuild the iterator to avoid concurrent modification exceptions
myPathListIterator = new PathIterator(myPaths);
}
+ @NotNull
+ public final ArrayList<AndroidStudioWizardPath> getAllPaths() {
+ return myPaths;
+ }
+
+ @Nullable
+ public final AndroidStudioWizardPath getCurrentPath() {
+ return myCurrentPath;
+ }
+
/**
* @return the total number of visible steps in this wizard.
*/
diff --git a/android/src/com/android/tools/idea/wizard/DynamicWizardHost.java b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardHost.java
index 96d4b448448..7be33662c1d 100644
--- a/android/src/com/android/tools/idea/wizard/DynamicWizardHost.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardHost.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.progress.ProgressIndicator;
diff --git a/android/src/com/android/tools/idea/wizard/DynamicWizardPath.java b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardPath.java
index 9358dbdb92d..b4d0b08b105 100644
--- a/android/src/com/android/tools/idea/wizard/DynamicWizardPath.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardPath.java
@@ -13,8 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
+import com.android.annotations.VisibleForTesting;
import com.google.common.collect.Lists;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
@@ -29,7 +30,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
/**
* DynamicWizardPath
@@ -112,7 +113,7 @@ public abstract class DynamicWizardPath implements ScopedStateStore.ScopedStoreL
/**
* Add a new step to the end of this path.
*/
- protected final void addStep(@NotNull DynamicWizardStep step) {
+ public final void addStep(@NotNull DynamicWizardStep step) {
mySteps.add(step);
step.attachToPath(this);
}
@@ -124,6 +125,11 @@ public abstract class DynamicWizardPath implements ScopedStateStore.ScopedStoreL
return myState;
}
+ @VisibleForTesting
+ public final void setState(@NotNull ScopedStateStore overrideState) {
+ myState = overrideState;
+ }
+
/**
* @return the number of visible steps currently in this path.
*/
diff --git a/android/src/com/android/tools/idea/wizard/DynamicWizardStep.java b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStep.java
index f4806f3ddd4..b31d82ca4f0 100644
--- a/android/src/com/android/tools/idea/wizard/DynamicWizardStep.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStep.java
@@ -13,14 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
+import com.android.tools.idea.wizard.WizardConstants;
import com.intellij.ide.wizard.CommitStepException;
import com.intellij.ide.wizard.Step;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.JBColor;
import com.intellij.util.ui.update.MergingUpdateQueue;
import com.intellij.util.ui.update.Update;
@@ -32,8 +34,8 @@ import java.awt.*;
import java.util.Map;
import java.util.Set;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.STEP;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.STEP;
/**
* DynamicWizardStep
@@ -279,11 +281,9 @@ public abstract class DynamicWizardStep extends ScopedDataBinder implements Step
* @param errorMessage the message to display
*/
public final void setErrorHtml(@Nullable String errorMessage) {
- if (errorMessage != null && !errorMessage.startsWith("<html>")) {
- errorMessage = "<html>" + errorMessage + "</html>";
- }
JLabel label = getMessageLabel();
if (label != null) {
+ errorMessage = toHtml(errorMessage);
label.setText(errorMessage);
}
else {
@@ -367,6 +367,19 @@ public abstract class DynamicWizardStep extends ScopedDataBinder implements Step
@Nullable
protected abstract String getStepDescription();
+ /**
+ * Wrap the target string with html tags unless it is already tagged. If the input string is
+ * {@code null} then the output string will also be {@code null}.
+ */
+ @Nullable
+ protected final String toHtml(@Nullable String text) {
+ if (!StringUtil.isEmpty(text) && !text.startsWith("<html>")) {
+ text = String.format("<html>%1$s</html>", text.trim());
+ }
+ return text;
+
+ }
+
private class StepUpdate extends Update {
private final Key<?> myChangedKey;
diff --git a/android/src/com/android/tools/idea/wizard/DynamicWizardStepWithDescription.form b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStepWithDescription.form
index 2041d867055..1f6f8606ddb 100644
--- a/android/src/com/android/tools/idea/wizard/DynamicWizardStepWithDescription.form
+++ b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStepWithDescription.form
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.android.tools.idea.wizard.DynamicWizardStepWithDescription">
+<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithDescription">
<grid id="27dc6" binding="myRootPane" layout-manager="BorderLayout" hgap="0" vgap="0">
<constraints>
<xy x="20" y="20" width="500" height="400"/>
diff --git a/android/src/com/android/tools/idea/wizard/DynamicWizardStepWithDescription.java b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStepWithDescription.java
index 7dacbe00b2e..dfc7af85165 100644
--- a/android/src/com/android/tools/idea/wizard/DynamicWizardStepWithDescription.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStepWithDescription.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.util.Disposer;
@@ -34,9 +34,9 @@ import java.beans.PropertyChangeListener;
import java.util.Map;
import java.util.WeakHashMap;
-import static com.android.tools.idea.wizard.ScopedStateStore.createKey;
import static com.android.tools.idea.wizard.WizardConstants.STUDIO_WIZARD_INSETS;
import static com.android.tools.idea.wizard.WizardConstants.STUDIO_WIZARD_INSET_SIZE;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.createKey;
/**
* <p>Base class for wizard steps that have a description label in the bottom.
@@ -132,7 +132,7 @@ public abstract class DynamicWizardStepWithDescription extends DynamicWizardStep
register(KEY_DESCRIPTION, getDescriptionLabel(), new ComponentBinding<String, JLabel>() {
@Override
public void setValue(String newValue, @NotNull JLabel label) {
- label.setText(ImportUIUtil.makeHtmlString(newValue));
+ label.setText(toHtml(newValue));
}
});
}
diff --git a/android/src/com/android/tools/idea/wizard/DynamicWizardStepWithHeaderAndDescription.form b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStepWithHeaderAndDescription.form
index 6d4ace36a31..9f1779ec487 100644
--- a/android/src/com/android/tools/idea/wizard/DynamicWizardStepWithHeaderAndDescription.form
+++ b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStepWithHeaderAndDescription.form
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.android.tools.idea.wizard.DynamicWizardStepWithHeaderAndDescription">
+<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithHeaderAndDescription">
<grid id="27dc6" binding="myHeaderPane" layout-manager="GridLayoutManager" row-count="3" column-count="2" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
diff --git a/android/src/com/android/tools/idea/wizard/DynamicWizardStepWithHeaderAndDescription.java b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStepWithHeaderAndDescription.java
index 9e7af996fed..478f81be784 100644
--- a/android/src/com/android/tools/idea/wizard/DynamicWizardStepWithHeaderAndDescription.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/DynamicWizardStepWithHeaderAndDescription.java
@@ -13,8 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
+import com.android.tools.idea.wizard.WizardConstants;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.JBColor;
@@ -27,8 +28,8 @@ import javax.swing.*;
import javax.swing.border.EmptyBorder;
import java.awt.*;
-import static com.android.tools.idea.wizard.ScopedStateStore.createKey;
import static com.android.tools.idea.wizard.WizardConstants.STUDIO_WIZARD_INSET_SIZE;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.createKey;
/**
* Base class for wizard pages with title and description labels underneath
@@ -89,7 +90,7 @@ public abstract class DynamicWizardStepWithHeaderAndDescription extends DynamicW
@Override
public void setValue(@Nullable String newValue, @NotNull JLabel component) {
component.setVisible(!StringUtil.isEmpty(newValue));
- component.setText(ImportUIUtil.makeHtmlString(newValue));
+ component.setText(toHtml(newValue));
}
});
}
diff --git a/android/src/com/android/tools/idea/wizard/RadioButtonGroupBinding.java b/android/src/com/android/tools/idea/wizard/dynamic/RadioButtonGroupBinding.java
index a2e799ba21b..556f82b5356 100644
--- a/android/src/com/android/tools/idea/wizard/RadioButtonGroupBinding.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/RadioButtonGroupBinding.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import com.google.common.base.Objects;
import com.google.common.collect.ImmutableMap;
@@ -25,7 +25,7 @@ import java.awt.event.ActionListener;
import java.util.Map;
/**
- * Class for binding radio buttons to {@link com.android.tools.idea.wizard.ScopedStateStore}
+ * Class for binding radio buttons to {@link ScopedStateStore}
*/
public class RadioButtonGroupBinding<E> extends ScopedDataBinder.ComponentBinding<E, JRadioButton> {
private final Map<JRadioButton, E> myValueToButtonBinding;
diff --git a/android/src/com/android/tools/idea/wizard/ScopedDataBinder.java b/android/src/com/android/tools/idea/wizard/dynamic/ScopedDataBinder.java
index a26c5fd08ea..d6692c9d396 100644
--- a/android/src/com/android/tools/idea/wizard/ScopedDataBinder.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/ScopedDataBinder.java
@@ -13,10 +13,11 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import com.android.annotations.VisibleForTesting;
import com.android.tools.idea.ui.TextAccessors;
+import com.android.tools.idea.wizard.ComboBoxItem;
import com.google.common.base.Objects;
import com.google.common.collect.*;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
@@ -39,14 +40,14 @@ import java.util.HashSet;
import java.util.Map;
import java.util.Set;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope;
/**
* A data binding class that links Swing UI elements to a {@link ScopedStateStore}.
* Provides data bindings between Swing JComponents of various types and a ScopedStateStore.
* Components may be registered in a 2-way binding by calling
- * {@link #register(com.android.tools.idea.wizard.ScopedStateStore.Key, javax.swing.JCheckBox)}.
+ * {@link #register(ScopedStateStore.Key, javax.swing.JCheckBox)}.
* Once registered, any change to the state store will trigger an update of the UI, and any update of the UI will automatically
* enter the value into the state store.
*
@@ -99,7 +100,9 @@ import static com.android.tools.idea.wizard.ScopedStateStore.Scope;
public class ScopedDataBinder implements ScopedStateStore.ScopedStoreListener, FocusListener, ChangeListener, ActionListener,
DocumentListener, ItemListener {
// State store
- protected ScopedStateStore myState;
+ // TODO: Temporary change. Set to private in a followup CL!
+ @VisibleForTesting
+ public ScopedStateStore myState;
// Mapping documents to components.
private Map<Document, JComponent> myDocumentsToComponent = Maps.newIdentityHashMap();
@@ -218,7 +221,7 @@ public class ScopedDataBinder implements ScopedStateStore.ScopedStoreListener, F
*/
@VisibleForTesting
@SuppressWarnings("unchecked")
- protected <T> void saveState(@NotNull JComponent component) {
+ public <T> void saveState(@NotNull JComponent component) {
if (myAlreadySavingState) {
return;
}
@@ -354,7 +357,7 @@ public class ScopedDataBinder implements ScopedStateStore.ScopedStoreListener, F
* Connects the given {@link ValueDeriver} to the given key. Whenever an update is triggered, the given deriver will
* be queried to update the underlying value.
*/
- protected <T> void registerValueDeriver(@NotNull Key<T> key, @NotNull ValueDeriver<T> deriver) {
+ public <T> void registerValueDeriver(@NotNull Key<T> key, @NotNull ValueDeriver<T> deriver) {
myValueDerivers.put(key, deriver);
}
@@ -417,7 +420,7 @@ public class ScopedDataBinder implements ScopedStateStore.ScopedStoreListener, F
* Connects the given {@link JComponent} to the given key through the given binding
* and sets a listener to pick up changes that need to trigger validation and UI updates.
*/
- protected <T, C extends JComponent> void register(@NotNull Key<T> key, @NotNull C component,
+ public <T, C extends JComponent> void register(@NotNull Key<T> key, @NotNull C component,
@NotNull ComponentBinding<T, ? super C> binding) {
T value = bindAndGet(key, component, binding);
if (value != null) {
@@ -477,7 +480,7 @@ public class ScopedDataBinder implements ScopedStateStore.ScopedStoreListener, F
* Connects the given {@link javax.swing.JCheckBox} to the given key and sets a listener to pick up changes that
* need to trigger validation and UI updates.
*/
- protected void register(@NotNull Key<Boolean> key, @NotNull JCheckBox checkBox) {
+ public void register(@NotNull Key<Boolean> key, @NotNull JCheckBox checkBox) {
Boolean value = bindAndGet(key, checkBox, null);
if (value != null) {
checkBox.setSelected(value);
@@ -523,7 +526,7 @@ public class ScopedDataBinder implements ScopedStateStore.ScopedStoreListener, F
* Connects the given {@link JTextField} to the given key and sets a listener to pick up changes that need to trigger validation
* and UI updates.
*/
- protected void register(@NotNull Key<String> key, @NotNull JTextField textField) {
+ public void register(@NotNull Key<String> key, @NotNull JTextField textField) {
myDocumentsToComponent.put(textField.getDocument(), textField);
String value = bindAndGet(key, textField, null);
if (value != null) {
@@ -535,7 +538,7 @@ public class ScopedDataBinder implements ScopedStateStore.ScopedStoreListener, F
textField.getDocument().addDocumentListener(this);
}
- protected void register(@NotNull Key<String> key, @NotNull JLabel label) {
+ public void register(@NotNull Key<String> key, @NotNull JLabel label) {
String value = bindAndGet(key, label, null);
if (value != null) {
label.setText(value);
@@ -548,7 +551,7 @@ public class ScopedDataBinder implements ScopedStateStore.ScopedStoreListener, F
* Connects the given {@link JSlider} to the given key and sets a listener to pick up changes that need to trigger validation
* and UI updates.
*/
- protected void register(@NotNull Key<Integer> key, @NotNull JSlider paddingSlider) {
+ public void register(@NotNull Key<Integer> key, @NotNull JSlider paddingSlider) {
Integer value = bindAndGet(key, paddingSlider, null);
if (value != null) {
paddingSlider.setValue(value);
@@ -563,7 +566,7 @@ public class ScopedDataBinder implements ScopedStateStore.ScopedStoreListener, F
* Connects the given {@link JSpinner} to the given key and sets a listener to pick up changes that need to trigger validation
* and UI updates.
*/
- protected void register(@NotNull Key<Object> key, @NotNull JSpinner spinner) {
+ public void register(@NotNull Key<Object> key, @NotNull JSpinner spinner) {
Object value = bindAndGet(key, spinner, null);
if (value != null) {
spinner.setValue(value);
@@ -578,7 +581,7 @@ public class ScopedDataBinder implements ScopedStateStore.ScopedStoreListener, F
* Connects the given {@link TextFieldWithBrowseButton} to the given key and sets a listener to pick up
* changes that need to trigger validation and UI updates.
*/
- protected void register(@NotNull Key<String> key, @NotNull final TextFieldWithBrowseButton field) {
+ public void register(@NotNull Key<String> key, @NotNull final TextFieldWithBrowseButton field) {
myDocumentsToComponent.put(field.getTextField().getDocument(), field);
String value = bindAndGet(key, field, null);
if (value != null) {
@@ -591,7 +594,7 @@ public class ScopedDataBinder implements ScopedStateStore.ScopedStoreListener, F
field.getTextField().addFocusListener(this);
}
- protected void register(@NotNull Key<String> key, @NotNull final TextAccessor field) {
+ public void register(@NotNull Key<String> key, @NotNull final TextAccessor field) {
assert field instanceof JComponent;
JComponent component = (JComponent)field;
@@ -608,7 +611,7 @@ public class ScopedDataBinder implements ScopedStateStore.ScopedStoreListener, F
* Connects the given {@link ColorPanel} to the given key and sets a listener to pick up changes that need to trigger validation
* and UI updates.
*/
- protected void register(@NotNull Key<Color> key, @NotNull ColorPanel colorPanel) {
+ public void register(@NotNull Key<Color> key, @NotNull ColorPanel colorPanel) {
Color value = bindAndGet(key, colorPanel, null);
if (value != null) {
colorPanel.setSelectedColor(value);
diff --git a/android/src/com/android/tools/idea/wizard/ScopedStateStore.java b/android/src/com/android/tools/idea/wizard/dynamic/ScopedStateStore.java
index 10a7edb0bf4..e8d257f1693 100644
--- a/android/src/com/android/tools/idea/wizard/ScopedStateStore.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/ScopedStateStore.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import com.google.common.base.Function;
import com.google.common.collect.*;
diff --git a/android/src/com/android/tools/idea/wizard/SingleStepDialogWrapperHost.java b/android/src/com/android/tools/idea/wizard/dynamic/SingleStepDialogWrapperHost.java
index 5ec0bc22c41..f7dcef46890 100644
--- a/android/src/com/android/tools/idea/wizard/SingleStepDialogWrapperHost.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/SingleStepDialogWrapperHost.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import com.intellij.ide.IdeBundle;
import com.intellij.openapi.project.Project;
diff --git a/android/src/com/android/tools/idea/wizard/SingleStepPath.java b/android/src/com/android/tools/idea/wizard/dynamic/SingleStepPath.java
index 73e0368907a..905fdb7809e 100644
--- a/android/src/com/android/tools/idea/wizard/SingleStepPath.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/SingleStepPath.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import org.jetbrains.annotations.NotNull;
diff --git a/android/src/com/android/tools/idea/wizard/SingleStepWizard.java b/android/src/com/android/tools/idea/wizard/dynamic/SingleStepWizard.java
index 1f9ddc9c886..2c26d1c614d 100644
--- a/android/src/com/android/tools/idea/wizard/SingleStepWizard.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/SingleStepWizard.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
diff --git a/android/src/com/android/tools/idea/wizard/WizardStepHeaderPanel.java b/android/src/com/android/tools/idea/wizard/dynamic/WizardStepHeaderPanel.java
index f2ea1282e04..fb46bc72298 100644
--- a/android/src/com/android/tools/idea/wizard/WizardStepHeaderPanel.java
+++ b/android/src/com/android/tools/idea/wizard/dynamic/WizardStepHeaderPanel.java
@@ -13,8 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
+import com.android.tools.idea.wizard.ImageComponent;
+import com.android.tools.idea.wizard.WizardConstants;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.JBColor;
import com.intellij.uiDesigner.core.GridConstraints;
diff --git a/android/src/com/android/tools/idea/wizard/dynamic/package-info.java b/android/src/com/android/tools/idea/wizard/dynamic/package-info.java
new file mode 100644
index 00000000000..36cfed7ff65
--- /dev/null
+++ b/android/src/com/android/tools/idea/wizard/dynamic/package-info.java
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/**
+ * Support for wizards that allow dynamically adding multiple paths and steps (unlike the wizards
+ * offered by IntelliJ, which require a fixed list of steps up front).
+ * <p/>
+ * A path is a collection of one or more steps, and wizards contain one or more paths. Furthermore,
+ * different wizards may share (their own instances of) the same path class.
+ * <p/>
+ * Data is passed along the wizard from step to step via a
+ * {@link com.android.tools.idea.wizard.dynamic.ScopedStateStore}, which is a hashtable of data,
+ * essentially.
+ */
+package com.android.tools.idea.wizard.dynamic; \ No newline at end of file
diff --git a/android/src/com/android/tools/idea/wizard/template/TemplateWizard.java b/android/src/com/android/tools/idea/wizard/template/TemplateWizard.java
index 33351f2ab75..c4fdb16f905 100644
--- a/android/src/com/android/tools/idea/wizard/template/TemplateWizard.java
+++ b/android/src/com/android/tools/idea/wizard/template/TemplateWizard.java
@@ -16,7 +16,7 @@
package com.android.tools.idea.wizard.template;
import com.android.sdklib.IAndroidTarget;
-import com.android.tools.idea.wizard.AndroidStudioWizardStep;
+import com.android.tools.idea.wizard.dynamic.AndroidStudioWizardStep;
import com.intellij.ide.util.projectWizard.ModuleWizardStep;
import com.intellij.ide.wizard.AbstractWizard;
import com.intellij.openapi.project.Project;
diff --git a/android/src/com/android/tools/idea/wizard/template/TemplateWizardState.java b/android/src/com/android/tools/idea/wizard/template/TemplateWizardState.java
index bec5ce14138..01744f7c99b 100644
--- a/android/src/com/android/tools/idea/wizard/template/TemplateWizardState.java
+++ b/android/src/com/android/tools/idea/wizard/template/TemplateWizardState.java
@@ -22,7 +22,11 @@ import com.android.tools.idea.model.ManifestInfo;
import com.android.tools.idea.templates.Parameter;
import com.android.tools.idea.templates.Template;
import com.android.tools.idea.templates.TemplateMetadata;
-import com.android.tools.idea.wizard.*;
+import com.android.tools.idea.wizard.FormFactorUtils;
+import com.android.tools.idea.wizard.NewModuleWizardState;
+import com.android.tools.idea.wizard.NewTemplateObjectWizard;
+import com.android.tools.idea.wizard.dynamic.ScopedDataBinder;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.google.common.base.Function;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.util.io.FileUtil;
diff --git a/android/src/com/android/tools/idea/wizard/template/TemplateWizardStep.java b/android/src/com/android/tools/idea/wizard/template/TemplateWizardStep.java
index 9c5467552b7..f610e0771b6 100755
--- a/android/src/com/android/tools/idea/wizard/template/TemplateWizardStep.java
+++ b/android/src/com/android/tools/idea/wizard/template/TemplateWizardStep.java
@@ -18,9 +18,9 @@ package com.android.tools.idea.wizard.template;
import com.android.tools.idea.templates.Parameter;
import com.android.tools.idea.templates.Template;
import com.android.tools.idea.templates.TemplateMetadata;
-import com.android.tools.idea.wizard.AndroidStudioWizardStep;
+import com.android.tools.idea.wizard.dynamic.AndroidStudioWizardStep;
import com.android.tools.idea.wizard.ComboBoxItem;
-import com.android.tools.idea.wizard.DynamicWizardStepWithHeaderAndDescription;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStepWithHeaderAndDescription;
import com.android.tools.idea.wizard.StringEvaluator;
import com.android.utils.Pair;
import com.android.utils.XmlUtils;
diff --git a/android/testSrc/com/android/tools/idea/welcome/install/AndroidVirtualDeviceTest.java b/android/testSrc/com/android/tools/idea/welcome/install/AndroidVirtualDeviceTest.java
index c4ca12de1ee..39bd60c0110 100755
--- a/android/testSrc/com/android/tools/idea/welcome/install/AndroidVirtualDeviceTest.java
+++ b/android/testSrc/com/android/tools/idea/welcome/install/AndroidVirtualDeviceTest.java
@@ -15,25 +15,15 @@
*/
package com.android.tools.idea.welcome.install;
-import com.android.sdklib.AndroidVersion;
import com.android.sdklib.SdkManager;
import com.android.sdklib.internal.avd.AvdInfo;
import com.android.sdklib.internal.avd.AvdManager;
-import com.android.sdklib.repository.FullRevision;
-import com.android.sdklib.repository.IDescription;
-import com.android.sdklib.repository.MajorRevision;
-import com.android.sdklib.repository.descriptors.PkgDesc;
-import com.android.sdklib.repository.descriptors.PkgType;
import com.android.sdklib.repository.local.LocalSdk;
import com.android.tools.idea.AndroidTestCaseHelper;
import com.android.tools.idea.avdmanager.AvdManagerConnection;
-import com.android.tools.idea.sdk.remote.RemotePkgInfo;
-import com.android.tools.idea.sdk.remote.internal.packages.RemotePlatformPkgInfo;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.android.utils.StdLogger;
-import com.google.common.collect.HashMultimap;
import com.google.common.collect.ImmutableMap;
-import com.google.common.collect.Multimap;
import com.intellij.openapi.Disposable;
import com.intellij.testFramework.fixtures.IdeaProjectTestFixture;
import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory;
diff --git a/android/testSrc/com/android/tools/idea/welcome/wizard/FirstRunWizardTest.java b/android/testSrc/com/android/tools/idea/welcome/wizard/FirstRunWizardTest.java
index 7e7791036fd..6db60114b2b 100644
--- a/android/testSrc/com/android/tools/idea/welcome/wizard/FirstRunWizardTest.java
+++ b/android/testSrc/com/android/tools/idea/welcome/wizard/FirstRunWizardTest.java
@@ -18,11 +18,11 @@ package com.android.tools.idea.welcome.wizard;
import com.android.tools.idea.welcome.config.InstallerData;
import com.android.tools.idea.welcome.install.ComponentCategory;
import com.android.tools.idea.welcome.config.FirstRunWizardMode;
-import com.android.tools.idea.wizard.DynamicWizard;
-import com.android.tools.idea.wizard.DynamicWizardStep;
-import com.android.tools.idea.wizard.ScopedStateStore;
-import com.android.tools.idea.wizard.ScopedStateStore.Key;
-import com.android.tools.idea.wizard.SingleStepPath;
+import com.android.tools.idea.wizard.dynamic.DynamicWizard;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardStep;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
+import com.android.tools.idea.wizard.dynamic.SingleStepPath;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.testFramework.fixtures.IdeaProjectTestFixture;
import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory;
diff --git a/android/testSrc/com/android/tools/idea/welcome/wizard/InstallComponentsPathTest.java b/android/testSrc/com/android/tools/idea/welcome/wizard/InstallComponentsPathTest.java
index 1cbe5d29b99..23b9deb8276 100644
--- a/android/testSrc/com/android/tools/idea/welcome/wizard/InstallComponentsPathTest.java
+++ b/android/testSrc/com/android/tools/idea/welcome/wizard/InstallComponentsPathTest.java
@@ -23,7 +23,7 @@ import com.android.sdklib.repository.local.LocalPkgInfo;
import com.android.tools.idea.AndroidTestCaseHelper;
import com.android.tools.idea.sdk.SdkLoggerIntegration;
import com.android.tools.idea.welcome.install.*;
-import com.android.tools.idea.wizard.ScopedStateStore;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.android.utils.ILogger;
import com.android.utils.StdLogger;
import com.google.common.base.Function;
diff --git a/android/testSrc/com/android/tools/idea/wizard/ConfigureAndroidModuleStepDynamicTest.java b/android/testSrc/com/android/tools/idea/wizard/ConfigureAndroidModuleStepDynamicTest.java
index 352b0ae7b3f..0627d44ef0b 100644
--- a/android/testSrc/com/android/tools/idea/wizard/ConfigureAndroidModuleStepDynamicTest.java
+++ b/android/testSrc/com/android/tools/idea/wizard/ConfigureAndroidModuleStepDynamicTest.java
@@ -16,6 +16,7 @@
package com.android.tools.idea.wizard;
import com.android.tools.idea.templates.AndroidGradleTestCase;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.module.ModuleManager;
diff --git a/android/testSrc/com/android/tools/idea/wizard/ConfigureAndroidProjectStepTest.java b/android/testSrc/com/android/tools/idea/wizard/ConfigureAndroidProjectStepTest.java
index 0bb08ac07fd..c9bf1de5008 100644
--- a/android/testSrc/com/android/tools/idea/wizard/ConfigureAndroidProjectStepTest.java
+++ b/android/testSrc/com/android/tools/idea/wizard/ConfigureAndroidProjectStepTest.java
@@ -15,6 +15,7 @@
*/
package com.android.tools.idea.wizard;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import junit.framework.TestCase;
import static com.android.tools.idea.wizard.WizardConstants.APPLICATION_NAME_KEY;
diff --git a/android/testSrc/com/android/tools/idea/wizard/NewFormFactorModulePathTest.java b/android/testSrc/com/android/tools/idea/wizard/NewFormFactorModulePathTest.java
index 64a7a51b113..ffbae93ff4e 100644
--- a/android/testSrc/com/android/tools/idea/wizard/NewFormFactorModulePathTest.java
+++ b/android/testSrc/com/android/tools/idea/wizard/NewFormFactorModulePathTest.java
@@ -15,14 +15,15 @@
*/
package com.android.tools.idea.wizard;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import org.jetbrains.android.AndroidTestCase;
import java.io.File;
import java.util.Collections;
import static com.android.tools.idea.wizard.FormFactorUtils.FormFactor.MOBILE;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.PATH;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.WIZARD;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.PATH;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.WIZARD;
import static com.android.tools.idea.wizard.WizardConstants.NEWLY_INSTALLED_API_KEY;
public class NewFormFactorModulePathTest extends AndroidTestCase {
@@ -34,29 +35,29 @@ public class NewFormFactorModulePathTest extends AndroidTestCase {
super.setUp();
myPath = new NewFormFactorModulePath(MOBILE, new File("/"), getTestRootDisposable());
ScopedStateStore wizardState = new ScopedStateStore(WIZARD, null, null);
- myPath.myState = new ScopedStateStore(PATH, wizardState, null);
+ myPath.setState(new ScopedStateStore(PATH, wizardState, null));
}
public void testDeriveValues_addsNewApiWhenAvailable() throws Exception {
ScopedStateStore.Key<Integer> targetApiLevelKey = FormFactorUtils.getTargetApiLevelKey(MOBILE);
- myPath.myState.put(targetApiLevelKey, 18);
- myPath.myState.put(NEWLY_INSTALLED_API_KEY, 19);
+ myPath.getState().put(targetApiLevelKey, 18);
+ myPath.getState().put(NEWLY_INSTALLED_API_KEY, 19);
myPath.deriveValues(Collections.EMPTY_SET);
- assertNotNull(myPath.myState.get(targetApiLevelKey));
- assertEquals(Integer.valueOf(19), myPath.myState.get(targetApiLevelKey));
+ assertNotNull(myPath.getState().get(targetApiLevelKey));
+ assertEquals(Integer.valueOf(19), myPath.getState().get(targetApiLevelKey));
}
public void testDeriveValues_doesNotChangeIfLowerApiInstalled() throws Exception {
ScopedStateStore.Key<Integer> targetApiLevelKey = FormFactorUtils.getTargetApiLevelKey(MOBILE);
- myPath.myState.put(targetApiLevelKey, 18);
- myPath.myState.put(NEWLY_INSTALLED_API_KEY, 17);
+ myPath.getState().put(targetApiLevelKey, 18);
+ myPath.getState().put(NEWLY_INSTALLED_API_KEY, 17);
myPath.deriveValues(Collections.EMPTY_SET);
- assertNotNull(myPath.myState.get(targetApiLevelKey));
- assertEquals(Integer.valueOf(18), myPath.myState.get(targetApiLevelKey));
+ assertNotNull(myPath.getState().get(targetApiLevelKey));
+ assertEquals(Integer.valueOf(18), myPath.getState().get(targetApiLevelKey));
}
} \ No newline at end of file
diff --git a/android/testSrc/com/android/tools/idea/wizard/TemplateParameterStep2DynamcTypeTest.java b/android/testSrc/com/android/tools/idea/wizard/TemplateParameterStep2DynamcTypeTest.java
index 0c44e124f58..9febdd0dbe4 100644
--- a/android/testSrc/com/android/tools/idea/wizard/TemplateParameterStep2DynamcTypeTest.java
+++ b/android/testSrc/com/android/tools/idea/wizard/TemplateParameterStep2DynamcTypeTest.java
@@ -17,6 +17,8 @@ package com.android.tools.idea.wizard;
import com.android.tools.idea.templates.Parameter;
import com.android.tools.idea.templates.TemplateMetadata;
+import com.android.tools.idea.wizard.dynamic.ScopedDataBinder;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.android.utils.XmlUtils;
import com.google.common.base.Strings;
import com.intellij.openapi.extensions.DefaultPluginDescriptor;
diff --git a/android/testSrc/com/android/tools/idea/wizard/TemplateParameterStep2Test.java b/android/testSrc/com/android/tools/idea/wizard/TemplateParameterStep2Test.java
index dbb71bd85a5..61ae2873605 100644
--- a/android/testSrc/com/android/tools/idea/wizard/TemplateParameterStep2Test.java
+++ b/android/testSrc/com/android/tools/idea/wizard/TemplateParameterStep2Test.java
@@ -17,6 +17,9 @@ package com.android.tools.idea.wizard;
import com.android.builder.model.SourceProvider;
import com.android.tools.idea.templates.TemplateMetadata;
+import com.android.tools.idea.wizard.dynamic.DynamicWizard;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardPath;
+import com.android.tools.idea.wizard.dynamic.ScopedStateStore;
import com.android.utils.XmlUtils;
import com.google.common.collect.ImmutableMap;
import com.intellij.openapi.Disposable;
diff --git a/android/testSrc/com/android/tools/idea/wizard/DynamicWizardPathTest.java b/android/testSrc/com/android/tools/idea/wizard/dynamic/DynamicWizardPathTest.java
index 5fb0d6a3ac4..d834074e4b9 100644
--- a/android/testSrc/com/android/tools/idea/wizard/DynamicWizardPathTest.java
+++ b/android/testSrc/com/android/tools/idea/wizard/dynamic/DynamicWizardPathTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import com.intellij.testFramework.fixtures.IdeaProjectTestFixture;
import com.intellij.testFramework.fixtures.IdeaTestFixtureFactory;
@@ -24,7 +24,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.Set;
-import static com.android.tools.idea.wizard.DynamicWizardStepTest.DummyDynamicWizardStep;
+import static com.android.tools.idea.wizard.dynamic.DynamicWizardStepTest.DummyDynamicWizardStep;
/**
* Tests for {@link DynamicWizardPath}
@@ -58,15 +58,15 @@ public class DynamicWizardPathTest extends AndroidTestBase {
public void testAddStep() throws Exception {
assertEquals(0, myPath.getVisibleStepCount());
- assertEquals(0, myPath.mySteps.size());
+ assertEquals(0, myPath.getAllSteps().size());
myPath.addStep(myStep1);
assertEquals(1, myPath.getVisibleStepCount());
- assertEquals(1, myPath.mySteps.size());
+ assertEquals(1, myPath.getAllSteps().size());
myPath.addStep(myStep2);
assertEquals(2, myPath.getVisibleStepCount());
- assertEquals(2, myPath.mySteps.size());
+ assertEquals(2, myPath.getAllSteps().size());
}
public void testGetStepCount() throws Exception {
diff --git a/android/testSrc/com/android/tools/idea/wizard/DynamicWizardStepTest.java b/android/testSrc/com/android/tools/idea/wizard/dynamic/DynamicWizardStepTest.java
index 5346d090306..dade8d18e8a 100644
--- a/android/testSrc/com/android/tools/idea/wizard/DynamicWizardStepTest.java
+++ b/android/testSrc/com/android/tools/idea/wizard/dynamic/DynamicWizardStepTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import icons.AndroidIcons;
import junit.framework.TestCase;
diff --git a/android/testSrc/com/android/tools/idea/wizard/DynamicWizardTest.java b/android/testSrc/com/android/tools/idea/wizard/dynamic/DynamicWizardTest.java
index 2a09ae6ae0d..b59a08de37b 100644
--- a/android/testSrc/com/android/tools/idea/wizard/DynamicWizardTest.java
+++ b/android/testSrc/com/android/tools/idea/wizard/dynamic/DynamicWizardTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
@@ -24,8 +24,8 @@ import org.jetbrains.annotations.Nullable;
import javax.swing.*;
-import static com.android.tools.idea.wizard.DynamicWizardPathTest.DummyDynamicWizardPath;
-import static com.android.tools.idea.wizard.DynamicWizardStepTest.DummyDynamicWizardStep;
+import static com.android.tools.idea.wizard.dynamic.DynamicWizardPathTest.DummyDynamicWizardPath;
+import static com.android.tools.idea.wizard.dynamic.DynamicWizardStepTest.DummyDynamicWizardStep;
/**
* Tests for {@link DynamicWizard} and a dummy implementation
@@ -60,15 +60,15 @@ public class DynamicWizardTest extends LightIdeaTestCase {
public void testAddPath() throws Exception {
assertEquals(0, myWizard.getVisibleStepCount());
- assertEquals(0, myWizard.myPaths.size());
+ assertEquals(0, myWizard.getAllPaths().size());
myWizard.addPath(myPath1);
assertEquals(2, myWizard.getVisibleStepCount());
- assertEquals(1, myWizard.myPaths.size());
+ assertEquals(1, myWizard.getAllPaths().size());
myWizard.addPath(myPath2);
assertEquals(4, myWizard.getVisibleStepCount());
- assertEquals(2, myWizard.myPaths.size());
+ assertEquals(2, myWizard.getAllPaths().size());
}
public void testInvisibleFirstPage() {
@@ -76,7 +76,7 @@ public class DynamicWizardTest extends LightIdeaTestCase {
DynamicWizard wizard = new VisibilityTestWizard(new LabelStep(false), new LabelStep(false), visibleStep);
wizard.init();
assertEquals(1, wizard.getVisibleStepCount(), 1);
- assertEquals(visibleStep, wizard.myCurrentPath.getCurrentStep());
+ assertEquals(visibleStep, wizard.getCurrentPath().getCurrentStep());
}
public void testVisibleFirstPage() {
@@ -84,7 +84,7 @@ public class DynamicWizardTest extends LightIdeaTestCase {
DynamicWizard wizard = new VisibilityTestWizard(visibleStep, new LabelStep(false), new LabelStep(false), new LabelStep(true));
wizard.init();
assertEquals(1, wizard.getVisibleStepCount(), 2);
- assertEquals(visibleStep, wizard.myCurrentPath.getCurrentStep());
+ assertEquals(visibleStep, wizard.getCurrentPath().getCurrentStep());
}
public static class DummyDynamicWizard extends DynamicWizard {
diff --git a/android/testSrc/com/android/tools/idea/wizard/ScopedDataBinderTest.java b/android/testSrc/com/android/tools/idea/wizard/dynamic/ScopedDataBinderTest.java
index 166837b6f12..f24860d706a 100644
--- a/android/testSrc/com/android/tools/idea/wizard/ScopedDataBinderTest.java
+++ b/android/testSrc/com/android/tools/idea/wizard/dynamic/ScopedDataBinderTest.java
@@ -13,7 +13,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import com.intellij.openapi.ui.TextFieldWithBrowseButton;
import com.intellij.ui.ColorPanel;
@@ -26,8 +26,8 @@ import java.awt.*;
import java.util.Set;
import java.util.concurrent.atomic.AtomicBoolean;
-import static com.android.tools.idea.wizard.ScopedDataBinder.ValueDeriver;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedDataBinder.ValueDeriver;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
/**
* Tests for {@link ScopedDataBinder}. These tests
diff --git a/android/testSrc/com/android/tools/idea/wizard/ScopedStateStoreTest.java b/android/testSrc/com/android/tools/idea/wizard/dynamic/ScopedStateStoreTest.java
index 21471901958..3a96fb50275 100644
--- a/android/testSrc/com/android/tools/idea/wizard/ScopedStateStoreTest.java
+++ b/android/testSrc/com/android/tools/idea/wizard/dynamic/ScopedStateStoreTest.java
@@ -13,11 +13,10 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package com.android.tools.idea.wizard;
+package com.android.tools.idea.wizard.dynamic;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
-import com.intellij.openapi.util.Pair;
import junit.framework.TestCase;
import org.jetbrains.annotations.Nullable;
@@ -25,9 +24,9 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import static com.android.tools.idea.wizard.ScopedStateStore.Key;
-import static com.android.tools.idea.wizard.ScopedStateStore.Scope.*;
-import static com.android.tools.idea.wizard.ScopedStateStore.createKey;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Key;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.Scope.*;
+import static com.android.tools.idea.wizard.dynamic.ScopedStateStore.createKey;
/**
* Test cases for the {@link ScopedStateStore}
diff --git a/sdk-updates/src/com/android/tools/idea/updater/UpdateInfoDialog.java b/sdk-updates/src/com/android/tools/idea/updater/UpdateInfoDialog.java
index 6253e045020..723b35e2d35 100644
--- a/sdk-updates/src/com/android/tools/idea/updater/UpdateInfoDialog.java
+++ b/sdk-updates/src/com/android/tools/idea/updater/UpdateInfoDialog.java
@@ -21,7 +21,7 @@ import com.android.tools.idea.sdk.SdkState;
import com.android.tools.idea.sdk.remote.UpdatablePkgInfo;
import com.android.tools.idea.sdk.wizard.SdkQuickfixWizard;
import com.android.tools.idea.welcome.wizard.WelcomeUIUtils;
-import com.android.tools.idea.wizard.DialogWrapperHost;
+import com.android.tools.idea.wizard.dynamic.DialogWrapperHost;
import com.android.utils.HtmlBuilder;
import com.intellij.ide.BrowserUtil;
import com.intellij.ide.IdeBundle;
diff --git a/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigPanel.java b/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigPanel.java
index 6dcc72bbad3..f2803e66652 100644
--- a/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigPanel.java
+++ b/sdk-updates/src/com/android/tools/idea/updater/configure/SdkUpdaterConfigPanel.java
@@ -27,10 +27,10 @@ import com.android.tools.idea.welcome.config.FirstRunWizardMode;
import com.android.tools.idea.welcome.install.FirstRunWizardDefaults;
import com.android.tools.idea.welcome.wizard.InstallComponentsPath;
import com.android.tools.idea.welcome.wizard.ConsolidatedProgressStep;
-import com.android.tools.idea.wizard.DialogWrapperHost;
-import com.android.tools.idea.wizard.DynamicWizard;
-import com.android.tools.idea.wizard.DynamicWizardHost;
-import com.android.tools.idea.wizard.SingleStepPath;
+import com.android.tools.idea.wizard.dynamic.DialogWrapperHost;
+import com.android.tools.idea.wizard.dynamic.DynamicWizard;
+import com.android.tools.idea.wizard.dynamic.DynamicWizardHost;
+import com.android.tools.idea.wizard.dynamic.SingleStepPath;
import com.android.utils.ILogger;
import com.google.common.collect.Lists;
import com.google.common.collect.Multimap;