summaryrefslogtreecommitdiff
path: root/src/plugins/installer/src/com/motorola/studio/android/installer/ui/dialogs/AcceptLicensesDialog.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/installer/src/com/motorola/studio/android/installer/ui/dialogs/AcceptLicensesDialog.java')
-rw-r--r--src/plugins/installer/src/com/motorola/studio/android/installer/ui/dialogs/AcceptLicensesDialog.java363
1 files changed, 363 insertions, 0 deletions
diff --git a/src/plugins/installer/src/com/motorola/studio/android/installer/ui/dialogs/AcceptLicensesDialog.java b/src/plugins/installer/src/com/motorola/studio/android/installer/ui/dialogs/AcceptLicensesDialog.java
new file mode 100644
index 0000000..a1ea3e0
--- /dev/null
+++ b/src/plugins/installer/src/com/motorola/studio/android/installer/ui/dialogs/AcceptLicensesDialog.java
@@ -0,0 +1,363 @@
+/*
+ * 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.installer.ui.dialogs;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+import org.eclipse.jface.dialogs.TitleAreaDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.SashForm;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Color;
+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.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.swt.widgets.Text;
+
+import com.motorola.studio.android.installer.InstallerPlugin;
+import com.motorola.studio.android.installer.i18n.InstallerNLS;
+import com.motorola.studio.android.installer.utilities.InstallableItem;
+
+/**
+ * Accept Licenses Dialog
+ * Show all unaccepted licenses and a single radio to allow accept the licenses
+ */
+public class AcceptLicensesDialog extends TitleAreaDialog
+{
+
+ private Table table;
+
+ private Text licenseArea;
+
+ private Text detailsArea;
+
+ private final InstallableItem[] unitsToInstall;
+
+ private final List<InstallableItem> unitsWithUnacceptedLicenses;
+
+ private String license;
+
+ private boolean isDetailsDisplayed = false;
+
+ public AcceptLicensesDialog(Shell parentShell, InstallableItem[] iInstallableUnits,
+ boolean isDetailsDisplayed, boolean forceShowLicenseDialog)
+ {
+ super(parentShell);
+ this.unitsToInstall = iInstallableUnits;
+ this.isDetailsDisplayed = isDetailsDisplayed;
+ if (forceShowLicenseDialog)
+ {
+ unitsWithUnacceptedLicenses = Arrays.asList(iInstallableUnits);
+ }
+ else
+ {
+ unitsWithUnacceptedLicenses = new ArrayList<InstallableItem>();
+ findUnitsWithUnacceptedLicenses();
+ }
+ }
+
+ private void findUnitsWithUnacceptedLicenses()
+ {
+ for (InstallableItem iu : unitsToInstall)
+ {
+ if (iu.hasLicenseNotAccepted())
+ {
+ unitsWithUnacceptedLicenses.add(iu);
+ }
+
+ }
+ Collections.sort(unitsWithUnacceptedLicenses, new IUComparator());
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.TitleAreaDialog#createDialogArea(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected Control createDialogArea(Composite parent)
+ {
+ //create main area
+ super.createDialogArea(parent).setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ Composite mainComposite = new Composite(parent, SWT.NONE);
+ mainComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+ mainComposite.setLayout(new GridLayout());
+
+ //create sash
+ SashForm sash = new SashForm(mainComposite, SWT.HORIZONTAL);
+ sash.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ // lay out form for displaying details
+ if (isDetailsDisplayed)
+ {
+ table = new Table(sash, SWT.BORDER | SWT.SINGLE);
+ SashForm sashLeft = new SashForm(sash, SWT.VERTICAL);
+
+ licenseArea = new Text(sashLeft, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.WRAP);
+ detailsArea = new Text(sashLeft, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.WRAP);
+
+ sash.setWeights(new int[]
+ {
+ 35, 65
+ });
+
+ sashLeft.setWeights(new int[]
+ {
+ 80, 20
+ });
+ }
+ // lay out form NOT to display details
+ else
+ {
+ table = new Table(sash, SWT.BORDER | SWT.SINGLE);
+ licenseArea = new Text(sash, SWT.MULTI | SWT.BORDER | SWT.V_SCROLL | SWT.WRAP);
+
+ sash.setWeights(new int[]
+ {
+ 35, 65
+ });
+ }
+
+ Button acceptLicense = new Button(mainComposite, SWT.RADIO);
+ acceptLicense.setText(InstallerNLS.AcceptLicensesDialog_AcceptLicenseButton);
+ acceptLicense.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ acceptLicense.setSelection(false);
+ acceptLicense.addSelectionListener(new SelectionListener()
+ {
+
+ public void widgetSelected(SelectionEvent e)
+ {
+ getButton(OK).setEnabled(true);
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e)
+ {
+ //do nothing
+ }
+ });
+
+ Button doNotAcceptLicense = new Button(mainComposite, SWT.RADIO);
+ doNotAcceptLicense.setText(InstallerNLS.AcceptLicensesDialog_RejectLicenseButton);
+ doNotAcceptLicense.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ doNotAcceptLicense.setSelection(true);
+ doNotAcceptLicense.addSelectionListener(new SelectionListener()
+ {
+
+ public void widgetSelected(SelectionEvent e)
+ {
+ getButton(OK).setEnabled(false);
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e)
+ {
+ //do nothing
+ }
+ });
+
+ populateTable();
+
+ setTitle(InstallerNLS.AcceptLicensesDialog_Title);
+ setMessage(InstallerNLS.AcceptLicensesDialog_Description);
+ setTitleImage(InstallerPlugin.imageDescriptorFromPlugin(InstallerPlugin.PLUGIN_ID,
+ "icons/wizban/installer_image_top.png").createImage()); //$NON-NLS-1$
+ return mainComposite;
+ }
+
+ /**
+ * Populate the list of available ius
+ */
+ private void populateTable()
+ {
+
+ for (InstallableItem iu : unitsWithUnacceptedLicenses)
+ {
+ TableItem item = new TableItem(table, SWT.NONE);
+ item.setData(iu);
+ item.setText(iu.getDisplayName());
+ }
+
+ if (table.getItemCount() > 0)
+ {
+ table.select(0);
+ if (license != null)
+ {
+ showLicense(null);
+ }
+ else
+ {
+ showLicense((InstallableItem) table.getItem(0).getData());
+ }
+ // only add "show details" listener, in case details are to be displayed.
+ if (isDetailsDisplayed)
+ {
+ showDetails((InstallableItem) table.getItem(0).getData());
+ }
+ }
+
+ table.addSelectionListener(new SelectionListener()
+ {
+
+ public void widgetSelected(SelectionEvent e)
+ {
+ TableItem[] selection = ((Table) e.widget).getSelection();
+ TableItem item = selection[0];
+ if (item != null)
+ {
+ if (license != null)
+ {
+ showLicense(null);
+ }
+ else
+ {
+ showLicense((InstallableItem) item.getData());
+ }
+ // only add "show details" listener, in case details are to be displayed.
+ if (isDetailsDisplayed)
+ {
+ showDetails((InstallableItem) item.getData());
+ }
+ }
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e)
+ {
+ //do nothing
+ }
+ });
+ }
+
+ /**
+ * Show the license in the text area
+ * @param iu
+ */
+ private void showLicense(InstallableItem iu)
+ {
+ StringBuffer buffer = new StringBuffer();
+ if (iu != null)
+ {
+ String licenseText = iu.getLicense();
+ buffer.append(licenseText);
+ }
+ else
+ {
+ buffer.append(license);
+ }
+
+ licenseArea.setText(buffer.toString());
+ Color originalColor = licenseArea.getBackground();
+ licenseArea.setEditable(false);
+ licenseArea.setBackground(originalColor);
+ }
+
+ /**
+ * Set details.
+ *
+ * @param iu Installable item.
+ */
+ private void showDetails(InstallableItem iu)
+ {
+ StringBuffer buffer = new StringBuffer();
+ if (iu != null)
+ {
+ String detailsText = iu.getDescription();
+ buffer.append(InstallerNLS.AcceptLicensesDialog_IUDescriptionLabel + ": " + detailsText); //$NON-NLS-2$
+ }
+
+ detailsArea.setText(buffer.toString());
+ }
+
+ /**
+ * Save the licenses accepted
+ */
+ private void acceptLicenses()
+ {
+ for (TableItem item : table.getItems())
+ {
+ InstallableItem ii = (InstallableItem) item.getData();
+ ii.acceptLicenses();
+ }
+ }
+
+ @Override
+ protected void createButtonsForButtonBar(Composite parent)
+ {
+ super.createButtonsForButtonBar(parent);
+ getButton(OK).setEnabled(false);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#isResizable()
+ */
+ @Override
+ protected boolean isResizable()
+ {
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
+ */
+ @Override
+ protected void configureShell(Shell newShell)
+ {
+ super.configureShell(newShell);
+ newShell.setSize(600, 600);
+ newShell.setText(InstallerNLS.ConfigurationDialog_DialogTitle);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+ */
+ @Override
+ protected void okPressed()
+ {
+ acceptLicenses();
+ super.okPressed();
+ }
+
+ @Override
+ public int open()
+ {
+ int returnCode = OK;
+ if (unitsWithUnacceptedLicenses.size() > 0)
+ {
+ returnCode = super.open();
+ }
+ return returnCode;
+ }
+
+ private class IUComparator implements Comparator<InstallableItem>
+ {
+
+ public int compare(InstallableItem arg0, InstallableItem arg1)
+ {
+ return arg0.getDisplayName().compareTo(arg1.getDisplayName());
+ }
+ }
+
+}