/******************************************************************************* * Copyright (c) 2011 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.commons.activity.ui; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.mylyn.commons.activity.ui.spi.AbstractUserActivityMonitor; import org.eclipse.mylyn.commons.core.ExtensionPointReader; import org.eclipse.mylyn.internal.commons.activity.ui.ActivityUiPlugin; import org.eclipse.mylyn.internal.commons.activity.ui.DefaultUserActivityMonitor; import org.eclipse.mylyn.internal.commons.activity.ui.IActivityUiConstants; import org.eclipse.mylyn.internal.commons.activity.ui.UserActivityManager; /** * Entry point for registering listener to monitor user activity. * * @author Steffen Pingel * @since 3.7 */ public class ActivityUi { private final static IPropertyChangeListener PROPERTY_LISTENER = new IPropertyChangeListener() { public void propertyChange(org.eclipse.jface.util.PropertyChangeEvent event) { if (event.getProperty().equals(IActivityUiConstants.ACTIVITY_TIMEOUT) || event.getProperty().equals(IActivityUiConstants.ACTIVITY_TIMEOUT_ENABLED) || event.getProperty().equals(IActivityUiConstants.ACTIVITY_TRACKING_ENABLED)) { updateUserActivityMonitor(); } } }; private static UserActivityManager userActivityManager; /** * Registers a user activity listener. * * @since 3.7 * @param listener * listener to add */ public static void addUserAttentionListener(UserActivityListener listener) { getUserActivityMonitor().addAttentionListener(listener); } /** * Unregisters a user activity listener. * * @since 3.7 * @param listener * listener to remote */ public static void removeUserAttentionListener(UserActivityListener listener) { getUserActivityMonitor().removeAttentionListener(listener); } private static IPreferenceStore getPreferenceStore() { return ActivityUiPlugin.getDefault().getPreferenceStore(); } synchronized static UserActivityManager getUserActivityMonitor() { if (userActivityManager == null) { // create default activity monitor List<AbstractUserActivityMonitor> items = new ArrayList<AbstractUserActivityMonitor>(); items.add(new DefaultUserActivityMonitor()); // read contributed activity monitors ExtensionPointReader<AbstractUserActivityMonitor> reader = new ExtensionPointReader<AbstractUserActivityMonitor>( IActivityUiConstants.ID_PLUGIN, "userActivityMonitors", "osActivityTimer", //$NON-NLS-1$ //$NON-NLS-2$ AbstractUserActivityMonitor.class); reader.read(); // rank by highest priority first items.addAll(reader.getItems()); Collections.sort(items, new Comparator<AbstractUserActivityMonitor>() { public int compare(AbstractUserActivityMonitor o1, AbstractUserActivityMonitor o2) { return o2.getPriority() - o1.getPriority(); } }); getPreferenceStore().addPropertyChangeListener(PROPERTY_LISTENER); userActivityManager = new UserActivityManager(items); updateUserActivityMonitor(); // TODO only start if enabled userActivityManager.start(); } return userActivityManager; } synchronized static void updateUserActivityMonitor() { if (userActivityManager == null) { return; } if (getPreferenceStore().getBoolean(IActivityUiConstants.ACTIVITY_TIMEOUT_ENABLED)) { userActivityManager.setInactivityTimeout(getPreferenceStore().getInt(IActivityUiConstants.ACTIVITY_TIMEOUT)); } else { userActivityManager.setInactivityTimeout(0); } // TODO stop if disabled } public static boolean isActivityTrackingEnabled() { return getPreferenceStore().getBoolean(IActivityUiConstants.ACTIVITY_TRACKING_ENABLED); } public synchronized static boolean isTrackingOsTime() { if (userActivityManager == null) { return false; } return userActivityManager.isTrackingOsTime(); } }