Home | History | Annotate | Download | only in welcome
      1 /*
      2  * Copyright (C) 2011 The Android Open Source Project
      3  *
      4  * Licensed under the Eclipse Public License, Version 1.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.eclipse.org/org/documents/epl-v10.php
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package com.android.ide.eclipse.adt.internal.welcome;
     18 
     19 import com.android.sdkstats.SdkStatsPermissionDialog;
     20 
     21 import org.eclipse.jface.dialogs.IMessageProvider;
     22 import org.eclipse.jface.dialogs.MessageDialog;
     23 import org.eclipse.jface.wizard.WizardPage;
     24 import org.eclipse.swt.SWT;
     25 import org.eclipse.swt.events.SelectionEvent;
     26 import org.eclipse.swt.events.SelectionListener;
     27 import org.eclipse.swt.layout.GridData;
     28 import org.eclipse.swt.layout.GridLayout;
     29 import org.eclipse.swt.widgets.Button;
     30 import org.eclipse.swt.widgets.Composite;
     31 import org.eclipse.swt.widgets.Label;
     32 import org.eclipse.swt.widgets.Link;
     33 import org.eclipse.ui.IWorkbench;
     34 import org.eclipse.ui.PlatformUI;
     35 import org.eclipse.ui.browser.IWebBrowser;
     36 
     37 import java.net.URL;
     38 
     39 /** Page which displays the permission dialog for collecting usage statistics */
     40 public class UsagePermissionPage extends WizardPage implements SelectionListener {
     41     private Link mLink;
     42     private Button mYesRadio;
     43     private Button mNoRadio;
     44 
     45     /**
     46      * Create the wizard.
     47      */
     48     public UsagePermissionPage() {
     49         super("usageData");
     50         setTitle("Contribute Usage Statistics?");
     51         setDescription(SdkStatsPermissionDialog.NOTICE_TEXT);
     52     }
     53 
     54     /**
     55      * Create contents of the wizard.
     56      *
     57      * @param parent parent to create page into
     58      */
     59     @Override
     60     public void createControl(Composite parent) {
     61         Composite container = new Composite(parent, SWT.NULL);
     62 
     63         setControl(container);
     64         container.setLayout(new GridLayout(1, false));
     65 
     66         Label label = new Label(container, SWT.WRAP);
     67         GridData gd_lblByChoosingTo = new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1);
     68         gd_lblByChoosingTo.widthHint = 580;
     69         label.setLayoutData(gd_lblByChoosingTo);
     70         label.setText(SdkStatsPermissionDialog.BODY_TEXT);
     71 
     72         Label blankLine = new Label(container, SWT.NONE);
     73 
     74         Label questionLabel = new Label(container, SWT.NONE);
     75         questionLabel.setText("Send usage statistics to Google?");
     76 
     77         mYesRadio = new Button(container, SWT.RADIO);
     78         mYesRadio.setText("Yes");
     79         mYesRadio.addSelectionListener(this);
     80 
     81         mNoRadio = new Button(container, SWT.RADIO);
     82         mNoRadio.setText("No");
     83         mNoRadio.addSelectionListener(this);
     84 
     85         Label laterLabel = new Label(container, SWT.WRAP);
     86         GridData gdLaterLabel = new GridData(SWT.FILL, SWT.BOTTOM, false, true, 1, 1);
     87         gdLaterLabel.widthHint = 580;
     88         laterLabel.setLayoutData(gdLaterLabel);
     89         laterLabel.setText("If you later decide to change this setting, you can do so in the " +
     90                "options panel under Android > Usage Stats");
     91 
     92         mLink = new Link(container, SWT.NONE);
     93         mLink.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
     94         mLink.setText(SdkStatsPermissionDialog.PRIVACY_POLICY_LINK_TEXT);
     95         mLink.addSelectionListener(this);
     96 
     97         validatePage();
     98     }
     99 
    100     @Override
    101     public void setVisible(boolean visible) {
    102         super.setVisible(visible);
    103         mYesRadio.setFocus();
    104     }
    105 
    106     boolean isUsageCollectionApproved() {
    107         return mYesRadio.getSelection();
    108     }
    109 
    110     @Override
    111     public void widgetSelected(SelectionEvent event) {
    112         if (event.getSource() == mLink) {
    113             try {
    114                 IWorkbench workbench = PlatformUI.getWorkbench();
    115                 IWebBrowser browser = workbench.getBrowserSupport().getExternalBrowser();
    116                 browser.openURL(new URL(event.text));
    117             } catch (Exception e) {
    118                 String message = String.format("Could not open browser. Vist\n%1$s\ninstead.",
    119                         event.text);
    120                 MessageDialog.openError(getWizard().getContainer().getShell(),
    121                         "Browser Error", message);
    122             }
    123         } else {
    124             // Radio buttons selected
    125             validatePage();
    126         }
    127     }
    128 
    129     @Override
    130     public void widgetDefaultSelected(SelectionEvent e) {
    131     }
    132 
    133     private void validatePage() {
    134         String error = null;
    135 
    136         if (!mYesRadio.getSelection() && !mNoRadio.getSelection()) {
    137             error = "Select Yes or No";
    138         }
    139 
    140         setPageComplete(error == null);
    141         if (error != null) {
    142             setMessage(error, IMessageProvider.ERROR);
    143         } else {
    144             setErrorMessage(null);
    145             setMessage(null);
    146         }
    147     }
    148 }
    149