/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package org.lee.echo360.tray;
import org.lee.echo360.tray.icon.TrayIconManager;
import java.awt.AWTException;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.lee.echo360.control.ControllerAction;
import org.lee.echo360.control.ControllerListener;
import org.lee.echo360.control.controllers.DownloadProgressListener;
import org.lee.echo360.control.controllers.MainController;
import org.lee.echo360.model.ActionResult;
import static org.lee.echo360.model.ActionResult.FAILED;
import org.lee.echo360.model.DownloadType;
import org.lee.echo360.model.Lecture;
import org.lee.echo360.model.Subject;
/**
*
* @author lee
*/
public class TrayManager implements ControllerListener, DownloadProgressListener {
private final TrayIcon icon;
private final PopupManager manager;
private final MainController ctl;
private ControllerAction currentState = null;
private final List<Subject> downloadingSubjects = new ArrayList<Subject>();
public TrayManager(MainController ctl) throws AWTException {
this.ctl = ctl;
icon = new TrayIcon(TrayIconManager.DEFAULT.getImage());
manager = new PopupManager(ctl);
icon.setPopupMenu(manager.getPopup());
ctl.addControllerListener(this);
ctl.addDownloadProgressListener(this);
SystemTray.getSystemTray().add(icon);
}
public void setIcon(TrayIconManager type) {
icon.setImage(type.getImage());
}
public void setToolTip(String tooltip) {
icon.setToolTip(tooltip);
}
@Override
public void start(ControllerAction action) {
currentState = action;
setIcon(TrayIconManager.PROCESSING);
}
@Override
public void finished(ControllerAction action, ActionResult r) {
currentState = null;
switch (r) {
case SUCCEDED:
setIcon(TrayIconManager.DEFAULT);
break;
case FAILED:
case FATAL:
setIcon(TrayIconManager.ERROR);
setToolTip("Unknown Error");
break;
case INVALID_CREDENTIALS:
case NOT_LOGGED_IN:
setIcon(TrayIconManager.ERROR);
setToolTip("Credential Error");
break;
case NOT_CONNECTED:
setIcon(TrayIconManager.NO_CONNECTION);
setToolTip("No Connection Detected");
}
}
@Override
public void error(Throwable e) {
if (e instanceof IOException) {
setIcon(TrayIconManager.NO_CONNECTION);
} else {
setIcon(TrayIconManager.ERROR);
}
}
@Override
public void downloadingStarted(Subject subject) {
setIcon(TrayIconManager.DOWNLOADING);
downloadingSubjects.add(subject);
}
@Override
public void downloadingFinished(Subject subject) {
downloadingSubjects.remove(subject);
if (downloadingSubjects.isEmpty()) {
setIcon(TrayIconManager.DEFAULT);
}
}
@Override
public void downloadStarting(Subject s, Lecture l, DownloadType t) {
// TODO change
}
@Override
public void downloadCompleted(Subject s, Lecture l, DownloadType t) {
// TODO change
}
}