package com.limegroup.gnutella.gui; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import com.limegroup.gnutella.RouterService; import com.limegroup.gnutella.util.CommonUtils; import com.limegroup.gnutella.util.SystemUtils; /** * Manages aspects of LimeWire depending on whether or not * it is in the foreground, or if the computer has been idle * for a while. */ class PowerManager implements RefreshListener, WindowListener { // The maximum idle time before we switch back to full power. private static final int MAX_IDLE_TIME = 5 * 60 * 1000; // 5 minutes /** * Whether or not the window is currently active. */ private boolean _active = true; /** * Callback for a window activation event. * * Sets LimeWire to use its full power. */ public void windowActivated(WindowEvent e) { _active = true; RouterService.setFullPower(true); } /** * Callback for a window deactivation event. * * If the deactivation was not from a child Java window, * sets LimeWire to use less power. */ public void windowDeactivated(WindowEvent e) { // If had an opposite, deactivated from another of our windows. if(e.getOppositeWindow() != null) return; _active = false; if(SystemUtils.getIdleTime() > MAX_IDLE_TIME) return; RouterService.setFullPower(false); } /** Stubbed our WindowListener method. */ public void windowClosed(WindowEvent e) {} /** Stubbed our WindowListener method. */ public void windowClosing(WindowEvent e) {} /** Stubbed our WindowListener method. */ public void windowDeiconified(WindowEvent e) {} /** Stubbed our WindowListener method. */ public void windowIconified(WindowEvent e) {} /** Stubbed our WindowListener method. */ public void windowOpened(WindowEvent e) {} /** * Callback for the every-second update. * * If the user has been idle for a specified amount of time, * let LimeWire use its full power. Otherwise, if LimeWire isn't * the foreground application, use less power. */ public void refresh() { if(SystemUtils.getIdleTime() > MAX_IDLE_TIME) RouterService.setFullPower(true); else if(!_active) RouterService.setFullPower(false); } }