| /* |
| * 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").createImage()); //$NON-NLS-1$ |
| } |
| |
| @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; |
| } |
| } |