/* * Copyright (C) 2012 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. */ package com.motorola.studio.android.wizards.buildingblocks; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.ui.wizards.NewTypeWizardPage; import org.eclipse.jface.dialogs.IPageChangeProvider; import org.eclipse.jface.dialogs.IPageChangedListener; import org.eclipse.jface.dialogs.PageChangedEvent; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import com.motorola.studio.android.codeutils.CodeUtilsActivator; import com.motorola.studio.android.codeutils.i18n.CodeUtilsNLS; import com.motorola.studio.android.common.exception.AndroidException; import com.motorola.studio.android.common.utilities.AndroidUtils; import com.motorola.studio.android.model.ActivityBasedOnTemplate; /** * Class that implements the Activity Wizard Main Page */ public class NewActivityBasedOnTemplatePage extends NewLauncherWizardPage { private IPackageFragmentRoot currentPackageFragmentRoot; private IPackageFragmentRoot previousPackageFragmentRoot; private boolean firstLoad = true; /** * Listener to verify when this page is visible */ private class PageChangeListener implements IPageChangedListener { /* * (non-Javadoc) * * @see * org.eclipse.jface.dialogs.IPageChangedListener#pageChanged(org.eclipse * .jface.dialogs.PageChangedEvent) */ public void pageChanged(PageChangedEvent event) { if ((event.getSelectedPage() == NewActivityBasedOnTemplatePage.this)) { if (!firstLoad) { handleFieldChanged(NewTypeWizardPage.TYPENAME); handleFieldChanged(NewTypeWizardPage.PACKAGE); } firstLoad = false; } } } @Override public boolean canFlipToNextPage() { if (getBuildBlock().isDatabaseTemplateSelected()) { return !getBuildBlock().isBasicInformationFilledIn(); } else { return false; } } private static final String NEW_ACTIVITY_BASED_ON_TEMPLATE_HELP = CodeUtilsActivator.PLUGIN_ID + ".new-activity-based-on-template"; //$NON-NLS-1$ /** * Default constructor * * @param activity The activity model */ public NewActivityBasedOnTemplatePage(ActivityBasedOnTemplate activity) { super(activity, CodeUtilsNLS.UI_NewActivityMainPage_PageTitle); } /* * (non-Javadoc) * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizard#getBuildBlock() */ @Override public ActivityBasedOnTemplate getBuildBlock() { return (ActivityBasedOnTemplate) super.getBuildBlock(); } /* (non-Javadoc) * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getMethods() */ @Override protected Method[] getMethods() { return null; } /* (non-Javadoc) * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#createIntermediateControls(org.eclipse.swt.widgets.Composite) */ @Override protected void createIntermediateControls(Composite parent) { createIntentFilterControls(parent); createMainActivityControl(parent, 4); } private void createMainActivityControl(Composite parent, int nColumns) { // Create a checkbox to allow the user to set the created activity as the MAIN activity Button checkButtonMainActivity = new Button(parent, SWT.CHECK | SWT.LEFT); GridData gridData = new GridData(SWT.FILL, SWT.CENTER, true, false, nColumns, 1); checkButtonMainActivity.setLayoutData(gridData); checkButtonMainActivity.setText(CodeUtilsNLS.UI_NewActivityMainPage_CheckMainButton); checkButtonMainActivity.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { if (e.widget instanceof Button) { // Set Activity flag accordingly getBuildBlock().setMainActivity(((Button) e.widget).getSelection()); } } }); // Add a listener to the wizard to listen for page changes if (getContainer() instanceof IPageChangeProvider) { ((IPageChangeProvider) getContainer()).addPageChangedListener(new PageChangeListener()); } currentPackageFragmentRoot = getBuildBlock().getPackageFragmentRoot(); previousPackageFragmentRoot = getBuildBlock().getPackageFragmentRoot(); } /* (non-Javadoc) * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getDefaultMessage() */ @Override public String getDefaultMessage() { return CodeUtilsNLS.UI_NewActivityMainPage_DescriptionCreateActivityBasedOnTemplate; } /* (non-Javadoc) * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getWizardTitle() */ @Override public String getWizardTitle() { return CodeUtilsNLS.UI_NewActivityMainPage_TitleActivityBasedOnTemplate; } /* (non-Javadoc) * @see com.motorola.studio.android.wizards.buildingblocks.NewLauncherWizardPage#getIntentFiltersActions() */ @Override protected String[] getIntentFiltersActions() { String[] intentFiltersActions = new String[0]; try { intentFiltersActions = AndroidUtils.getActivityActions(getBuildBlock().getProject()); } catch (AndroidException e) { setErrorMessage(e.getMessage()); } return intentFiltersActions; } /** * Gets the help ID to be used for attaching * context sensitive help. * * Classes that extends this class and want to set * their on help should override this method */ @Override protected String getHelpId() { return NEW_ACTIVITY_BASED_ON_TEMPLATE_HELP; } /* * (non-Javadoc) * * @see * org.eclipse.jdt.ui.wizards.NewTypeWizardPage#handleFieldChanged(java. * lang.String) */ @Override protected void handleFieldChanged(String fieldName) { super.handleFieldChanged(fieldName); if (NewTypeWizardPage.CONTAINER.equals(fieldName)) { currentPackageFragmentRoot = getBuildBlock().getPackageFragmentRoot(); if ((currentPackageFragmentRoot != null) && (!currentPackageFragmentRoot.equals(previousPackageFragmentRoot))) { previousPackageFragmentRoot = currentPackageFragmentRoot; // Set the collector info to null getBuildBlock().setCollectorTable(null); getBuildBlock().setCollectorDatabaseName(null); getBuildBlock().setDatabaseTableSelected(false); getBuildBlock().setSqlOpenHelperDefined(false); getBuildBlock().setUseSampleDatabaseTableSelected(false); IWizardPage page = getWizard().getPage(CodeUtilsNLS.UI_DefineSqlOpenHelperPage_Title); if (!firstLoad) { if (page instanceof NewTypeWizardPage) { ((NewTypeWizardPage) page).setPackageFragment(getPackageFragment(), true); } } } } if (getWizard().getContainer().getCurrentPage() != null) { getWizard().getContainer().updateButtons(); } } }