aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/NewActivityWizard.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/NewActivityWizard.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/NewActivityWizard.java187
1 files changed, 187 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/NewActivityWizard.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/NewActivityWizard.java
new file mode 100644
index 000000000..b33d65bb7
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/wizards/templates/NewActivityWizard.java
@@ -0,0 +1,187 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php
+ *
+ * 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.
+ */
+package com.android.ide.eclipse.adt.internal.wizards.templates;
+
+import static com.android.ide.eclipse.adt.internal.wizards.templates.NewProjectWizard.ATTR_BUILD_API;
+import static com.android.ide.eclipse.adt.internal.wizards.templates.NewProjectWizard.ATTR_MIN_API;
+import static com.android.ide.eclipse.adt.internal.wizards.templates.NewProjectWizard.ATTR_MIN_API_LEVEL;
+import static com.android.ide.eclipse.adt.internal.wizards.templates.NewProjectWizard.ATTR_PACKAGE_NAME;
+import static com.android.ide.eclipse.adt.internal.wizards.templates.NewProjectWizard.ATTR_TARGET_API;
+import static org.eclipse.core.resources.IResource.DEPTH_INFINITE;
+
+import com.android.annotations.NonNull;
+import com.android.ide.eclipse.adt.AdtPlugin;
+import com.android.ide.eclipse.adt.AdtUtils;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ui.IWorkbench;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * Wizard for creating new activities. This is a hybrid between a New Project
+ * Wizard and a New Template Wizard: it has the "Activity selector" page from
+ * the New Project Wizard, which is used to dynamically select a wizard for the
+ * second page, but beyond that it runs the normal template wizard when it comes
+ * time to create the template.
+ */
+public class NewActivityWizard extends TemplateWizard {
+ private NewTemplatePage mTemplatePage;
+ private ActivityPage mActivityPage;
+ private NewProjectWizardState mValues;
+ private NewTemplateWizardState mActivityValues;
+ protected boolean mOnlyActivities;
+
+ /** Creates a new {@link NewActivityWizard} */
+ public NewActivityWizard() {
+ mOnlyActivities = true;
+ }
+
+ @Override
+ protected boolean shouldAddIconPage() {
+ return mActivityValues.getIconState() != null;
+ }
+
+ @Override
+ public void init(IWorkbench workbench, IStructuredSelection selection) {
+ super.init(workbench, selection);
+
+ setWindowTitle(mOnlyActivities ? "New Activity" : "New Android Object");
+
+ mValues = new NewProjectWizardState();
+ mActivityPage = new ActivityPage(mValues, mOnlyActivities, false);
+
+ mActivityValues = mValues.activityValues;
+ List<IProject> projects = AdtUtils.getSelectedProjects(selection);
+ if (projects.size() == 1) {
+ mActivityValues.project = projects.get(0);
+ }
+ }
+
+ @Override
+ public void addPages() {
+ super.addPages();
+ addPage(mActivityPage);
+ }
+
+ @Override
+ public IWizardPage getNextPage(IWizardPage page) {
+ if (page == mActivityPage) {
+ if (mTemplatePage == null) {
+ Set<String> hidden = mActivityValues.hidden;
+ hidden.add(ATTR_PACKAGE_NAME);
+ hidden.add(ATTR_MIN_API);
+ hidden.add(ATTR_MIN_API_LEVEL);
+ hidden.add(ATTR_TARGET_API);
+ hidden.add(ATTR_BUILD_API);
+
+ mTemplatePage = new NewTemplatePage(mActivityValues, true);
+ addPage(mTemplatePage);
+ }
+ return mTemplatePage;
+ } else if (page == mTemplatePage && shouldAddIconPage()) {
+ WizardPage iconPage = getIconPage(mActivityValues.getIconState());
+ mActivityValues.updateIconState(mTemplatePage.getEvaluator());
+ return iconPage;
+ } else if (page == mTemplatePage
+ || shouldAddIconPage() && page == getIconPage(mActivityValues.getIconState())) {
+ TemplateMetadata template = mActivityValues.getTemplateHandler().getTemplate();
+ if (template != null) {
+ if (InstallDependencyPage.isInstalled(template.getDependencies())) {
+ return getPreviewPage(mActivityValues);
+ } else {
+ return getDependencyPage(template, true);
+ }
+ }
+ } else {
+ TemplateMetadata template = mActivityValues.getTemplateHandler().getTemplate();
+ if (template != null && page == getDependencyPage(template, false)) {
+ return getPreviewPage(mActivityValues);
+ }
+ }
+
+ return super.getNextPage(page);
+ }
+
+ @Override
+ public boolean canFinish() {
+ // Deal with lazy creation of some pages: these may not be in the page-list yet
+ // since they are constructed lazily, so consider that option here.
+ if (mTemplatePage == null || !mTemplatePage.isPageComplete()) {
+ return false;
+ }
+
+ return super.canFinish();
+ }
+
+ @Override
+ public boolean performFinish(IProgressMonitor monitor) throws InvocationTargetException {
+ boolean success = super.performFinish(monitor);
+
+ if (success) {
+ List<Runnable> finalizingTasks = getFinalizingActions();
+ for (Runnable r : finalizingTasks) {
+ r.run();
+ }
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ @NonNull
+ protected IProject getProject() {
+ return mActivityValues.project;
+ }
+
+ @Override
+ @NonNull
+ protected List<String> getFilesToOpen() {
+ TemplateHandler activityTemplate = mActivityValues.getTemplateHandler();
+ return activityTemplate.getFilesToOpen();
+ }
+
+ @Override
+ @NonNull
+ protected List<Runnable> getFinalizingActions() {
+ TemplateHandler activityTemplate = mActivityValues.getTemplateHandler();
+ return activityTemplate.getFinalizingActions();
+ }
+
+ @Override
+ protected List<Change> computeChanges() {
+ return mActivityValues.computeChanges();
+ }
+
+ /** Wizard for creating other Android components */
+ public static class OtherWizard extends NewActivityWizard {
+ /** Create new {@link OtherWizard} */
+ public OtherWizard() {
+ mOnlyActivities = false;
+ }
+ }
+}