| /******************************************************************************* |
| * Copyright (c) 2009 Tasktop Technologies and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Tasktop Technologies - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.mylyn.internal.monitor.usage; |
| |
| import java.util.Date; |
| |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| import org.eclipse.jface.dialogs.IDialogConstants; |
| import org.eclipse.jface.dialogs.MessageDialog; |
| import org.eclipse.jface.wizard.WizardDialog; |
| import org.eclipse.mylyn.internal.context.core.ContextCorePlugin; |
| import org.eclipse.mylyn.internal.monitor.ui.MonitorUiPlugin; |
| import org.eclipse.mylyn.internal.monitor.usage.wizards.UsageSubmissionWizard; |
| import org.eclipse.mylyn.internal.monitor.usage.wizards.UsageSubmissionWizardDialog; |
| import org.eclipse.osgi.util.NLS; |
| import org.eclipse.swt.widgets.Display; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.progress.UIJob; |
| |
| /** |
| * @author Shawn Minto |
| */ |
| public class CheckForUploadJob extends UIJob { |
| |
| public CheckForUploadJob(Display display) { |
| super(display, Messages.CheckForUploadJob_Check_For_Upload); |
| } |
| |
| @Override |
| public IStatus runInUIThread(IProgressMonitor monitor) { |
| if (getDisplay() == null || getDisplay().isDisposed() || PlatformUI.getWorkbench().isClosing()) { |
| return Status.CANCEL_STATUS; |
| } |
| if (!MonitorUiPlugin.getDefault().suppressConfigurationWizards() && ContextCorePlugin.getDefault() != null) { |
| checkForStatisticsUpload(); |
| } |
| return Status.OK_STATUS; |
| } |
| |
| synchronized void checkForStatisticsUpload() { |
| |
| Date currentTime = new Date(); |
| if (shouldAskForUpload(currentTime)) { |
| |
| String ending = getUserPromptDelay() == 1 ? "" : "s"; //$NON-NLS-1$//$NON-NLS-2$ |
| MessageDialog message = new MessageDialog(Display.getDefault().getActiveShell(), |
| Messages.UiUsageMonitorPlugin_Send_Usage_Feedback, null, |
| Messages.UiUsageMonitorPlugin_Help_Improve_Eclipse_And_Mylyn, MessageDialog.QUESTION, new String[] { |
| Messages.UiUsageMonitorPlugin_Submit_Feedback, |
| NLS.bind(Messages.UiUsageMonitorPlugin_Remind_Me_In_X_Days, getUserPromptDelay(), ending), |
| Messages.UiUsageMonitorPlugin_Dont_Ask_Again, }, 0); |
| int result = message.open(); |
| if (result == 0) { |
| // time must be stored right away into preferences, to prevent |
| // other threads |
| UiUsageMonitorPlugin.getDefault().getPreferenceStore().setValue( |
| MonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE, currentTime.getTime()); |
| |
| if (!UiUsageMonitorPlugin.getDefault().getPreferenceStore().contains( |
| MonitorPreferenceConstants.PREF_MONITORING_MYLYN_ECLIPSE_ORG_CONSENT_VIEWED) |
| || !UiUsageMonitorPlugin.getDefault().getPreferenceStore().getBoolean( |
| MonitorPreferenceConstants.PREF_MONITORING_MYLYN_ECLIPSE_ORG_CONSENT_VIEWED)) { |
| MessageDialog consentMessage = new MessageDialog(Display.getDefault().getActiveShell(), |
| Messages.UiUsageMonitorPlugin_Consent, null, Messages.UiUsageMonitorPlugin_All_Data_Public, |
| MessageDialog.INFORMATION, new String[] { IDialogConstants.OK_LABEL }, 0); |
| consentMessage.open(); |
| UiUsageMonitorPlugin.getDefault().getPreferenceStore().setValue( |
| MonitorPreferenceConstants.PREF_MONITORING_MYLYN_ECLIPSE_ORG_CONSENT_VIEWED, true); |
| } |
| |
| UsageSubmissionWizard wizard = new UsageSubmissionWizard(); |
| wizard.init(PlatformUI.getWorkbench(), null); |
| // Instantiates the wizard container with the wizard and |
| // opens it |
| WizardDialog dialog = new UsageSubmissionWizardDialog(Display.getDefault().getActiveShell(), wizard); |
| dialog.create(); |
| dialog.open(); |
| |
| /* |
| * the UI usage report is loaded asynchronously so there's no |
| * synchronous way to know if it failed if (wizard.failed()) { |
| * lastTransmit.setTime(currentTime.getTime() + DELAY_ON_FAILURE - |
| * studyParameters.getTransmitPromptPeriod()); |
| * plugin.getPreferenceStore().setValue(MylynMonitorPreferenceConstants.PREF_PREVIOUS_TRANSMIT_DATE, |
| * currentTime.getTime()); } |
| */ |
| |
| } else { |
| if (result == 1) { |
| UiUsageMonitorPlugin.getDefault().userCancelSubmitFeedback(currentTime, true); |
| } else { |
| UiUsageMonitorPlugin.getDefault().getPreferenceStore().setValue( |
| MonitorPreferenceConstants.PREF_MONITORING_ENABLE_SUBMISSION, false); |
| } |
| } |
| message.close(); |
| } |
| } |
| |
| private boolean shouldAskForUpload(Date currentTime) { |
| if (UiUsageMonitorPlugin.getDefault().isSubmissionWizardOpen()) { |
| return false; |
| } |
| |
| StudyParameters studyParameters = UiUsageMonitorPlugin.getDefault().getStudyParameters(); |
| if (!UiUsageMonitorPlugin.getDefault().isMonitoringEnabled() || studyParameters == null |
| || !studyParameters.shouldPromptForSubmission()) { |
| return false; |
| } |
| |
| Date lastTransmit = UiUsageMonitorPlugin.getDefault().getLastTransmitDate(); |
| |
| if (currentTime.getTime() > lastTransmit.getTime() + studyParameters.getTransmitPromptPeriod() |
| && UiUsageMonitorPlugin.getDefault().getPreferenceStore().getBoolean( |
| MonitorPreferenceConstants.PREF_MONITORING_ENABLE_SUBMISSION)) { |
| return true; |
| |
| } |
| return false; |
| } |
| |
| private long getUserPromptDelay() { |
| return UiUsageMonitorPlugin.DELAY_ON_USER_REQUEST / UiUsageMonitorPlugin.DAY; |
| } |
| |
| } |