blob: c633d44e3e5fcdc8d18c2668cb5d1300314bde82 [file] [log] [blame]
/*
* 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.propertypage;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jdt.internal.core.JavaProject;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.preference.PreferencePage;
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.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbenchPropertyPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.PropertyPage;
import com.motorola.studio.android.AndroidPlugin;
import com.motorola.studio.android.common.log.StudioLogger;
import com.motorola.studio.android.common.utilities.EclipseUtils;
import com.motorola.studio.android.i18n.AndroidNLS;
import com.motorola.studio.android.obfuscate.ObfuscatorManager;
/**
* Motodev Studio for Android properties (obfuscate)
*/
public class MotodevStudioPropertyPage extends PropertyPage implements IWorkbenchPropertyPage
{
private final String PROPERTY_PAGE_HELP = AndroidPlugin.PLUGIN_ID + ".obuscation_property"; //$NON-NLS-1$
private Button obfuscateCkbox;
private IProject project = null;
private void addFirstSection(Composite parent)
{
Composite group = createDefaultComposite(parent);
Composite composite = new Composite(group, SWT.NULL);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
composite.setLayout(layout);
GridData data = new GridData();
data.verticalAlignment = GridData.FILL;
data.horizontalAlignment = GridData.FILL;
composite.setLayoutData(data);
obfuscateCkbox = new Button(composite, SWT.CHECK);
setDefaultObfuscate();
Label obfuscateLabel = new Label(composite, SWT.NONE);
obfuscateLabel.setText(AndroidNLS.UI_ProjectPropertyPage_Obfuscate);
obfuscateCkbox.addSelectionListener(new SelectionAdapter()
{
/* (non-Javadoc)
* @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
*/
@Override
public void widgetSelected(SelectionEvent e)
{
super.widgetSelected(e);
boolean showWarningMessage = false;
if (obfuscateCkbox.getSelection())
{
if ((project != null) && project.getLocation().toOSString().contains(" ")) //$NON-NLS-1$
{
showWarningMessage = true;
}
}
if (showWarningMessage)
{
setMessage(AndroidNLS.WRN_Obfuscation_ProjectLocationContainWhitespaces,
IMessageProvider.WARNING);
}
else
{
setMessage("MOTODEV Studio"); //$NON-NLS-1$
}
}
});
}
/**
* Checks if project have Proguard settings and, if so, update checkbox state
*/
private void setDefaultObfuscate()
{
project = null;
if (getElement() instanceof IResource)
{
IResource resource = (IResource) getElement();
if (resource != null)
{
project = resource.getProject();
}
}
else if (getElement() instanceof JavaProject)
{
JavaProject javaProject = (JavaProject) getElement();
project = javaProject.getProject();
}
if (project != null)
{
obfuscateCkbox.setSelection(ObfuscatorManager.isProguardSet(project));
}
else
{
//project not found
obfuscateCkbox.setSelection(false);
}
}
/**
* @see PreferencePage#createContents(Composite)
*/
@Override
protected Control createContents(Composite parent)
{
Composite composite = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
composite.setLayout(layout);
GridData data = new GridData(GridData.FILL);
data.grabExcessHorizontalSpace = true;
composite.setLayoutData(data);
addFirstSection(composite);
PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, PROPERTY_PAGE_HELP);
PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, PROPERTY_PAGE_HELP);
return composite;
}
private Composite createDefaultComposite(Composite parent)
{
GridData data = new GridData(SWT.FILL, SWT.NONE, true, false);
Group groupForObfuscation = new Group(parent, SWT.SHADOW_ETCHED_IN);
groupForObfuscation.setLayout(new GridLayout());
groupForObfuscation.setLayoutData(data);
groupForObfuscation.setFont(parent.getFont());
groupForObfuscation.setText(AndroidNLS.UI_ProjectPropertyPage_ObfuscateGroup);
return groupForObfuscation;
}
@Override
protected void performDefaults()
{
super.performDefaults();
setDefaultObfuscate();
}
/**
* Add or remove Proguard setting depending on obfuscateCkbox checkbox state
*/
@Override
public boolean performOk()
{
IProject project = null;
Boolean needToObfuscate = obfuscateCkbox.getSelection();
if (getElement() instanceof IResource)
{
IResource resource = (IResource) getElement();
if (resource != null)
{
project = resource.getProject();
}
}
else if (getElement() instanceof JavaProject)
{
JavaProject javaProject = (JavaProject) getElement();
project = javaProject.getProject();
}
if (project != null)
{
IStatus status = null;
try
{
if (needToObfuscate.booleanValue())
{
status = ObfuscatorManager.obfuscate(project, null);
}
else
{
status = ObfuscatorManager.unobfuscate(project);
}
project.refreshLocal(IResource.DEPTH_INFINITE, null);
}
catch (Exception e)
{
EclipseUtils.showErrorDialog(
AndroidNLS.MotodevStudioPropertyPage_ChangeProguardSettingsProblem,
status.getMessage(), status);
StudioLogger.error(MotodevStudioPropertyPage.class, e.getMessage(), e);
return false;
}
}
return true;
}
}