com.motorola.studio.android.obfuscate.ui.ObfuscateDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.motorola.studio.android.obfuscate.ui.ObfuscateDialog.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.obfuscate.ui;

import java.util.ArrayList;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.viewers.CheckboxTreeViewer;
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.Viewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Monitor;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;

import com.motorola.studio.android.AndroidPlugin;
import com.motorola.studio.android.i18n.AndroidNLS;
import com.motorola.studio.android.model.AndroidProject;
import com.motorola.studio.android.obfuscate.ObfuscatorManager;

public class ObfuscateDialog extends TitleAreaDialog {

    private final String OBFUSCATION_DIALOG_HELP = AndroidPlugin.PLUGIN_ID + ".obfuscation-dialog";

    private CheckboxTreeViewer treeViewer;

    private Object[] selectedProjects;

    public ObfuscateDialog(Shell parentShell) {
        super(parentShell);

        setTitleImage(AndroidPlugin.imageDescriptorFromPlugin(AndroidPlugin.PLUGIN_ID, "icons/wizban/obfuscate.gif") //$NON-NLS-1$
                .createImage());
    }

    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setSize(330, 300);
        newShell.setText(AndroidNLS.ObfuscateProjectsHandler_1);
    }

    /**
     * Center the dialog.
     */
    @Override
    protected void initializeBounds() {
        super.initializeBounds();
        Shell shell = this.getShell();
        Monitor primary = shell.getMonitor();
        Rectangle bounds = primary.getBounds();
        Rectangle rect = shell.getBounds();
        int x = bounds.x + ((bounds.width - rect.width) / 2);
        int y = bounds.y + ((bounds.height - rect.height) / 2);
        shell.setLocation(x, y);
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        super.createDialogArea(parent).setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        Composite mainComposite = new Composite(parent, SWT.NONE);
        mainComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
        GridLayout layout = new GridLayout(1, false);
        mainComposite.setLayout(layout);

        treeViewer = new CheckboxTreeViewer(mainComposite, SWT.CHECK | SWT.BORDER | SWT.V_SCROLL);
        treeViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));

        // Set content and label provider
        treeViewer.setLabelProvider(new LabelProvider() {
            @Override
            public String getText(Object element) {
                String label = null;
                if (element instanceof IProject) {
                    label = ((IProject) element).getName();
                }
                return label;
            }
        });
        treeViewer.setContentProvider(new TreeViewerContentProvider());

        ArrayList<IProject> projectsList = generateInputForTree();
        treeViewer.setInput(projectsList);

        for (IProject p : projectsList) {
            treeViewer.setChecked(p, ObfuscatorManager.isProguardSet(p));
        }

        treeViewer.addSelectionChangedListener(new ISelectionChangedListener() {
            public void selectionChanged(SelectionChangedEvent event) {
                selectedProjects = treeViewer.getCheckedElements();
            }
        });
        treeViewer.expandAll();
        mainComposite.layout(true);

        setTitle(AndroidNLS.ObfuscateProjectsHandler_2);
        setMessage(AndroidNLS.ObfuscateProjectsHandler_3, IMessageProvider.NONE);

        PlatformUI.getWorkbench().getHelpSystem().setHelp(mainComposite, OBFUSCATION_DIALOG_HELP);

        return mainComposite;
    }

    private ArrayList<IProject> generateInputForTree() {
        ArrayList<IProject> androidProjects = new ArrayList<IProject>();
        IProject[] allProjectsList = ResourcesPlugin.getWorkspace().getRoot().getProjects();

        for (int i = 0; i < allProjectsList.length; i++) {
            IProject currentProject = allProjectsList[i];
            try {
                if ((currentProject.getNature(AndroidProject.ANDROID_NATURE) != null) && currentProject.isOpen()) {
                    androidProjects.add(currentProject);
                }
            } catch (CoreException e) {
                // do nothing
            }
        }
        return androidProjects;
    }

    public ArrayList<IProject> getSelectedProjects() {
        ArrayList<IProject> list = new ArrayList<IProject>();
        if (selectedProjects != null) {
            for (int i = 0; i < selectedProjects.length; i++) {
                list.add((IProject) selectedProjects[i]);
            }
        }
        return list;
    }
}

class TreeViewerContentProvider implements ITreeContentProvider {
    public void dispose() {
        // do nothing
    }

    public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        // do nothing
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.viewers.ITreeContentProvider#getElements(java.lang.Object)
     */
    public Object[] getElements(Object inputElement) {
        Object[] elem = null;
        if (inputElement instanceof ArrayList) {
            elem = new Object[((ArrayList) inputElement).size()];
            elem = ((ArrayList) inputElement).toArray();
        }

        return elem;
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object)
     */
    public Object[] getChildren(Object parentElement) {
        //no children
        return new Object[0];
    }

    public Object getParent(Object element) {
        return null;
    }

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