com.motorola.studio.android.wizards.buildingblocks.ActivitySampleSelectionPage.java Source code

Java tutorial

Introduction

Here is the source code for com.motorola.studio.android.wizards.buildingblocks.ActivitySampleSelectionPage.java

Source

/*
 * 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.jface.dialogs.IPageChangeProvider;
import org.eclipse.jface.dialogs.IPageChangedListener;
import org.eclipse.jface.dialogs.PageChangedEvent;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;

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;

/**
 * New activity wizard sample page.
 */
public class ActivitySampleSelectionPage extends NewLauncherWizardPage {
    private static final String ANDROID_LOGO_ICON_PATH = "icons/obj16/androidLogo.png";

    private TreeViewer treeViewer;

    private Label descriptionLabel;

    private String content[];

    private boolean canFlip = false;

    private static final String NEW_ACTIVITY_BASED_ON_TEMPLATE_HELP = CodeUtilsActivator.PLUGIN_ID
            + ".new-activity-based-on-template"; //$NON-NLS-1$

    private static Image androidImg = null;

    public static final String PAGE_NAME = "Samples Page";

    /*
     * Listener to update description pane whenever this page is open
     */
    private class PageChangeListener implements IPageChangedListener {
        public void pageChanged(PageChangedEvent event) {
            if ((event.getSelectedPage() == ActivitySampleSelectionPage.this)) {
                ActivitySampleSelectionPage.this.getControl().update();
                ((ActivitySampleSelectionPage) event.getSelectedPage()).updateDescriptionPane();
            }
        }
    }

    /**
     * Create a new wizard page based on activity samples.
     * @param activity The building block model to be used in the wizard page. 
     * */
    protected ActivitySampleSelectionPage(ActivityBasedOnTemplate activity) {
        super(activity, PAGE_NAME);

        activity.evaluateSamplesList(ActivityBasedOnTemplate.SAMPLE_CATEGORY.SAMPLE_ACTIVITIES_CATEGORY);

        ImageDescriptor imgDescr = CodeUtilsActivator.imageDescriptorFromPlugin(CodeUtilsActivator.PLUGIN_ID,
                ANDROID_LOGO_ICON_PATH);
        if (imgDescr != null) {
            androidImg = imgDescr.createImage();
        }
    }

    /*
     * (non-Javadoc)
     * */
    @Override
    public boolean canFlipToNextPage() {

        return canFlip;
    }

    /*
     * (non-Javadoc)
     * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizard#getBuildBlock()
     */
    @Override
    public ActivityBasedOnTemplate getBuildBlock() {
        return (ActivityBasedOnTemplate) super.getBuildBlock();
    }

    @Override
    public IWizardPage getNextPage() {
        String selection = treeViewer.getSelection() != null ? treeViewer.getSelection().toString() : null;
        selection = selection != null ? selection.substring(1, selection.length() - 1) : null;

        if ((selection != null)
                && selection.equalsIgnoreCase(ActivityBasedOnTemplate.LIST_ACTIVITIES_SAMPLE_LOCALIZED)) {
            return this.getWizard().getPage(NewActivityWizardListTemplatesPage.PAGE_NAME);
        }
        return this.getWizard().getPage(CodeUtilsNLS.UI_NewActivityMainPage_PageTitle);
    }

    /* (non-Javadoc)
     * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getMethods()
     */
    @Override
    protected Method[] getMethods() {
        Method onCreateMethod = new Method(getBuildBlock().getOnStartMessage()) {
            @Override
            public void handle(boolean selection) {
                getBuildBlock().setOnStart(selection);
            }
        };
        return new Method[] { onCreateMethod };
    }

    /* (non-Javadoc)
     * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#createIntermediateControls(org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected void createExtendedControls(Composite parent) {
        Composite mainComposite = new Composite(parent, SWT.FILL);
        mainComposite.setLayout(new GridLayout(1, false));
        mainComposite.setLayoutData(new GridData(GridData.FILL_BOTH));

        // Samples Tree Label
        Label itemsTableLabel = new Label(mainComposite, SWT.NONE);
        itemsTableLabel.setText(CodeUtilsNLS.UI_SampleSelectionPage_SamplesTreeLabel);

        // Samples Tree Viewer
        treeViewer = new TreeViewer(mainComposite, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL);
        treeViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
        treeViewer.setLabelProvider(new LabelProvider() {
            @Override
            public Image getImage(Object obj) {
                return androidImg;
            }

            @Override
            public String getText(Object element) {
                return element.toString();
            }
        });

        content = new String[getBuildBlock().getAvailableSamples().size()];

        int i = 0;
        for (String currentSample : getBuildBlock().getAvailableSamples().keySet()) {
            content[i] = currentSample;
            i++;
        }

        treeViewer.setContentProvider(new SampleTreeContentProvider(content));
        treeViewer.setInput(content);

        final Group intentFilterGroup = new Group(mainComposite, SWT.NONE);

        treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent e) {
                String selection = e.getSelection().toString();
                getBuildBlock().setSample(selection.substring(1, selection.length() - 1));

                getBuildBlock()
                        .setSampleCategoty(ActivityBasedOnTemplate.SAMPLE_CATEGORY.SAMPLE_ACTIVITIES_CATEGORY);

                if (selection.substring(1, selection.length() - 1)
                        .equals(ActivityBasedOnTemplate.DATABASE_LIST_SAMPLE_LOCALIZED)) {
                    getBuildBlock().setDatabaseTemplateSelected(true);
                } else {
                    getBuildBlock().setDatabaseTemplateSelected(false);
                }

                canFlip = true;

                updateDescriptionPane();
                getWizard().getContainer().updateButtons();
            }
        });

        treeViewer.setComparator(new ViewerComparator());

        treeViewer.expandAll();

        intentFilterGroup.setText(CodeUtilsNLS.UI_SampleSelectionPage_SamplesDescriptionPane);
        intentFilterGroup.setLayout(new GridLayout(1, false));
        intentFilterGroup.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false));

        ScrolledComposite scrolledArea = new ScrolledComposite(intentFilterGroup, SWT.V_SCROLL);
        GridData descriptionLabelData = new GridData(GridData.FILL, GridData.FILL, true, true);
        descriptionLabelData.heightHint = 140;
        scrolledArea.setLayoutData(descriptionLabelData);

        descriptionLabel = new Label(scrolledArea, SWT.FILL | SWT.WRAP);
        descriptionLabel.setText("");
        scrolledArea.setContent(descriptionLabel);
        descriptionLabel.setSize(descriptionLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT));

        // Add a listener to the wizard to listen for page changes
        if (getContainer() instanceof IPageChangeProvider) {
            ((IPageChangeProvider) getContainer()).addPageChangedListener(new PageChangeListener());
        }
        setControl(mainComposite);
    }

    /*
     * Updates selected label description.
     */
    private void updateDescriptionPane() {
        descriptionLabel.setText(getBuildBlock().getSampleDescription());
        //        descriptionLabel.setVisible(true);
        descriptionLabel.setSize(descriptionLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
        descriptionLabel.update();
        descriptionLabel.getParent().update();
    }

    /* (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;
    }

    /**
     * Returns true if page has header false otherwise
     * 
     * @return true if page has header false otherwise
     */
    @Override
    public boolean hasHeader() {
        return false;
    }
}

/**
 * Fills tree viewer with sample options
 */
class SampleTreeContentProvider extends ArrayContentProvider implements ITreeContentProvider {

    Object[] elements;

    public SampleTreeContentProvider(Object[] elements) {
        this.elements = elements;
    }

    @Override
    public Object[] getElements(Object inputElement) {
        return elements;
    }

    public Object[] getChildren(Object parentElement) {
        return new Object[0];
    }

    public Object getParent(Object element) {
        return new Object[0];
    }

    public boolean hasChildren(Object element) {
        return false;
    }
}