blob: ff03b338f2495555963da33e43a64307f3993208 [file] [log] [blame]
/*
* Copyright (C) 2011 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.newproject;
import static com.android.SdkConstants.FN_PROJECT_PROGUARD_FILE;
import static com.android.SdkConstants.OS_SDK_TOOLS_LIB_FOLDER;
import com.android.ide.eclipse.adt.AdtPlugin;
import com.android.ide.eclipse.adt.AdtUtils;
import com.android.ide.eclipse.adt.internal.wizards.newproject.NewProjectWizardState.Mode;
import org.eclipse.jdt.ui.actions.OpenJavaPerspectiveAction;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.jface.wizard.Wizard;
import org.eclipse.ui.INewWizard;
import org.eclipse.ui.IWorkbench;
import java.io.File;
/**
* A "New Android Project" Wizard.
* <p/>
* Note: this class is public so that it can be accessed from unit tests.
* It is however an internal class. Its API may change without notice.
* It should semantically be considered as a private final class.
* <p/>
* Do not derive from this class.
*/
public class NewProjectWizard extends Wizard implements INewWizard {
private static final String PROJECT_LOGO_LARGE = "icons/android-64.png"; //$NON-NLS-1$
private NewProjectWizardState mValues;
private ProjectNamePage mNamePage;
private SdkSelectionPage mSdkPage;
private SampleSelectionPage mSamplePage;
private ApplicationInfoPage mPropertiesPage;
private final Mode mMode;
private IStructuredSelection mSelection;
/** Constructs a new wizard default project wizard */
public NewProjectWizard() {
this(Mode.ANY);
}
protected NewProjectWizard(Mode mode) {
mMode = mode;
switch (mMode) {
case SAMPLE:
setWindowTitle("New Android Sample Project");
break;
case TEST:
setWindowTitle("New Android Test Project");
break;
default:
setWindowTitle("New Android Project");
break;
}
}
@Override
public void addPages() {
mValues = new NewProjectWizardState(mMode);
if (mMode != Mode.SAMPLE) {
mNamePage = new ProjectNamePage(mValues);
if (mSelection != null) {
mNamePage.init(mSelection, AdtUtils.getActivePart());
}
addPage(mNamePage);
}
if (mMode == Mode.TEST) {
addPage(new TestTargetPage(mValues));
}
mSdkPage = new SdkSelectionPage(mValues);
addPage(mSdkPage);
if (mMode != Mode.TEST) {
// Sample projects can be created when entering the new/existing wizard, or
// the sample wizard
mSamplePage = new SampleSelectionPage(mValues);
addPage(mSamplePage);
}
if (mMode != Mode.SAMPLE) {
// Project properties are entered in all project types except sample projects
mPropertiesPage = new ApplicationInfoPage(mValues);
addPage(mPropertiesPage);
}
}
@Override
public void init(IWorkbench workbench, IStructuredSelection selection) {
mSelection = selection;
setHelpAvailable(false); // TODO have help
ImageDescriptor desc = AdtPlugin.getImageDescriptor(PROJECT_LOGO_LARGE);
setDefaultPageImageDescriptor(desc);
// Trigger a check to see if the SDK needs to be reloaded (which will
// invoke onSdkLoaded asynchronously as needed).
AdtPlugin.getDefault().refreshSdk();
}
@Override
public boolean performFinish() {
File file = new File(AdtPlugin.getOsSdkFolder(), OS_SDK_TOOLS_LIB_FOLDER + File.separator
+ FN_PROJECT_PROGUARD_FILE);
if (!file.exists()) {
AdtPlugin.displayError("Tools Out of Date?",
String.format("It looks like you do not have the latest version of the "
+ "SDK Tools installed. Make sure you update via the SDK Manager "
+ "first. (Could not find %1$s)", file.getPath()));
return false;
}
NewProjectCreator creator = new NewProjectCreator(mValues, getContainer());
if (!(creator.createAndroidProjects())) {
return false;
}
// Open the default Java Perspective
OpenJavaPerspectiveAction action = new OpenJavaPerspectiveAction();
action.run();
return true;
}
@Override
public IWizardPage getNextPage(IWizardPage page) {
if (page == mNamePage) {
// Skip the test target selection page unless creating a test project
if (mValues.mode != Mode.TEST) {
return mSdkPage;
}
} else if (page == mSdkPage) {
if (mValues.mode == Mode.SAMPLE) {
return mSamplePage;
} else if (mValues.mode != Mode.TEST) {
return mPropertiesPage;
} else {
// Done with wizard when creating from existing or creating test projects
return null;
}
} else if (page == mSamplePage) {
// Nothing more to be entered for samples
return null;
}
return super.getNextPage(page);
}
/**
* Returns the package name currently set by the wizard
*
* @return the current package name, or null
*/
public String getPackageName() {
return mValues.packageName;
}
// TBD: Call setDialogSettings etc to store persistent state between wizard invocations.
}