📄 ui.java
字号:
oneppSettings.updateMediaRendererList();
LOG.debug("Starting to enum MR");
for(Enumeration e = oneppSettings.getMediaRendererList();
e.hasMoreElements(); )
{
MediaRenderer mr = (MediaRenderer)e.nextElement();
LOG.debug("MR Name: " + mr.getFriendlyName());
meRenderers.addChild(
new MediaRendererMenuElement(
mr,
UI.getInstance()));
}
} catch (Exception e) {
System.out.println("Exception occured while updating MR menu");
e.printStackTrace();
} finally {
LOG.debug("Update of media renderer menu finished, one way or the other way");
renderers = null;
meRenderers.addChild(meRenderersRefresh);
if (showAlert) {
Display d = Display.getDisplay(m);
if (d.getCurrent() == mua) {
LOG.debug("Current displayable is MUA");
d.setCurrent(mua.getPrevDisplayable());
} else {
LOG.debug("Current displayable is " + d.getCurrent());
LOG.debug("MUA is " + mua);
}
}
}
}
public void cancel() throws IOException {
oneppSettings.cancelUpdateMediaRendererList();
}
}
/**
* User navigates 'into' or 'right'.
*
* @param me MenuElement which is marked/selected by the user, and where
* the action occurs. Notice that for MenuElementComboShift
* the parent of a sub-MenuElement will be me, and not the
* selected sub-element.
*/
public int menuNavigateInto(MenuElementBase me) {
if (me == meSetupBack) {
return MENUACTION_DISPLAY_GRANDPARENT;
} else if (me == meSetupRepeat) {
oneppSettings.setRepeatSetting(!oneppSettings.getRepeatSetting());
LOG.debug(
"Repeat setting: " + oneppSettings.getRepeatSetting());
} else if (me == meSetupShuffle) {
oneppSettings.setShuffleSetting(!oneppSettings.getShuffleSetting());
LOG.debug(
"Shuffle setting: " + oneppSettings.getShuffleSetting());
} else if (me == meSetupHostingPort) {
oneppSettings.toggleHostingPortSetting();
LOG.debug(
"Hosting port setting: " + oneppSettings.getHostingPortSetting());
} else if (me == meBrowse) {
LOG.debug("Browse (into)");
// TODO Need to detect which media server is current
LOG.debug("" + meServers.getCurrentIndex() + " " +
meServers.getCurrentChild());
if (meServers.getCurrentChild() == meServersRefresh) {
return MENUACTION_DO_NOTHING;
}
currentMS = oneppSettings.getCurrentMediaServer();
LOG.debug(
"Selected server: " + currentMS.getFriendlyName());
return MENUACTION_DISPLAY_CHILDREN;
}
return MENUACTION_DO_NOTHING;
}
/**
* User navigates 'back' or 'left'.
*
* @param me MenuElement which is marked/selected by the user, and where
* the action occurs. Notice that for MenuElementComboShift
* the parent of a sub-MenuElement will be me, and not the
* selected sub-element.
*/
public int menuNavigateBack(MenuElementBase me) {
if (me == meSetupBack) {
return MENUACTION_DO_NOTHING;
} else if (me == meSetupRepeat) {
oneppSettings.setRepeatSetting(!oneppSettings.getRepeatSetting());
System.out.println("Repeat setting: " + oneppSettings.getRepeatSetting());
} else if (me == meSetupShuffle) {
oneppSettings.setShuffleSetting(!oneppSettings.getShuffleSetting());
System.out.println("Shuffle setting: " + oneppSettings.getShuffleSetting());
} else if (me == meSetupHostingPort) {
oneppSettings.toggleHostingPortSetting();
}
return MENUACTION_DO_NOTHING;
}
/**
* User activates the marked MenuElement.
*
* @param me MenuElement which is marked/selected by the user, and where
* the action occurs. Notice that for MenuElementComboShift
* the parent of a sub-MenuElement will be me, and not the
* selected sub-element.
*/
public int menuAction(MenuElementBase me) {
System.out.println("menuAction of UI\tme = " + me);
int ret = MENUACTION_DO_NOTHING;
if (me == meSetupBack) {
ret = MENUACTION_DISPLAY_GRANDPARENT;
} else if (me == meSetupRepeat) {
oneppSettings.setRepeatSetting(!oneppSettings.getRepeatSetting());
System.out.println(
"Repeat setting: " + oneppSettings.getRepeatSetting());
ret = MENUACTION_REPAINT;
} else if (me == meSetupHostingPort) {
if (oneppSettings.getHostingPortSetting() != -1) {
// TODO Show some popup screen to input port number
}
} else if (me == meSetupShuffle) {
oneppSettings.setShuffleSetting(!oneppSettings.getShuffleSetting());
System.out.println(
"Shuffle setting: " + oneppSettings.getShuffleSetting());
ret = MENUACTION_REPAINT;
} else if (me == meServersRefresh) {
LOG.debug("Refreshing server menu");
try {
updateMediaServerMenu();
} catch (IOException ioe) {
System.out.println(
"IOException caught while updating MS list");
ioe.printStackTrace();
} catch (InterruptedException ie) {
LOG.fatal("Interrupted while updating MS menu");
LOG.fatal(ie);
} finally {
LOG.debug("Finished refreshing MS menu");
}
ret = MENUACTION_REPAINT;
} else if (me instanceof MediaServerMenuElement) {
System.out.println("MediaServerMenuElement action");
setCurrentMediaServer();
ret = MENUACTION_REPAINT;
System.out.println("Updated current MS");
} else if (me == meRenderersRefresh) {
LOG.debug("Refreshing renderer menu");
try {
updateMediaRendererMenu();
} catch (IOException ioe) {
LOG.fatal("IOException caught while updating MS list");
LOG.fatal(ioe);
} catch (InterruptedException ie) {
LOG.fatal("Interrupted while updating MS list");
LOG.fatal(ie);
} finally {
LOG.debug("Finished refreshing MR menu");
}
ret = MENUACTION_REPAINT;
} else if (me instanceof MediaRendererMenuElement) {
setCurrentMediaRenderer();
ret = MENUACTION_REPAINT;
} else if (me == meExit) {
m.quit();
}
return ret;
}
public void setCurrentMediaRenderer() {
String udn = oneppSettings.currentMediaRendererUdn();
String currentMediaRendererPrefix = "* ";
if (udn != null) {
for (Enumeration e = meRenderers.children.elements();
e.hasMoreElements();)
{
Object o = e.nextElement();
if (!(o instanceof MediaRendererMenuElement)) {
continue;
}
MediaRendererMenuElement me = (MediaRendererMenuElement)o;
if (me.udn().equals(udn) &&
me.name.startsWith(currentMediaRendererPrefix))
{
me.name = me.name.substring(
currentMediaRendererPrefix.length());
meRenderers.children.setElementAt(
me,
meRenderers.children.indexOf(me));
break;
}
}
}
MediaRendererMenuElement me = (MediaRendererMenuElement)meRenderers.children.elementAt(
meRenderers.getCurrentIndex());
oneppSettings.setCurrentMediaRendererUdn(me.udn());
me.name = currentMediaRendererPrefix + me.name;
meRenderers.children.setElementAt(
me,
meRenderers.children.indexOf(me));
LOG.debug("Name of new current media renderer: " + me.name);
}
public void setCurrentMediaServer() {
String udn = oneppSettings.currentMediaServerUdn();
String currentMediaServerPrefix = "* ";
if (udn != null) {
for (Enumeration e = meServers.children.elements();
e.hasMoreElements();)
{
Object o = e.nextElement();
if (!(o instanceof MediaServerMenuElement)) {
continue;
}
MediaServerMenuElement me = (MediaServerMenuElement)o;
if (me.udn().equals(udn) &&
me.name.startsWith(currentMediaServerPrefix))
{
me.name = me.name.substring(
currentMediaServerPrefix.length());
meServers.children.setElementAt(
me,
meServers.children.indexOf(me));
}
}
}
MediaServerMenuElement me = (MediaServerMenuElement)meServers.children.elementAt(
meServers.getCurrentIndex());
oneppSettings.setCurrentMediaServer(me.udn());
meBrowse.setContentDirectoryService(
oneppSettings.getCurrentMediaServer().getContentDirectoryService());
me.name = currentMediaServerPrefix + me.name;
meServers.children.setElementAt(
me,
meServers.children.indexOf(me));
LOG.debug("Name of new current media server: " + me.name);
}
public void commandAction(Command c, Displayable d) {
LOG.debug("UI::commandAction (" + c + ", " + d + ")");
if (c == playCommand) {
LOG.debug("Show playscreen");
Display disp = Display.getDisplay(m);
disp.setCurrent(ps);
} else if (c == homeCommand) {
oneppMenu.setCurrentContainer(rootMenuContainer);
} else if (c == showLogCommand) {
Display disp = Display.getDisplay(m);
org.apache.log4j.LogCanvas lc = Logger.getLogCanvas();
lc.setPreviousScreen(disp.getCurrent());
disp.setCurrent(lc);
} else {
LOG.debug("Unknown command");
}
}
public void playMediaTrack(MediaContent mc) {
try {
LOG.debug("Play media element: " + mc);
MediaRenderer mr = Settings.getInstance().getCurrentMediaRenderer();
AVTransportService avts = mr.getAVTransportService();
avts.setAVTransportURI(mc);
avts.play();
PlayScreen ps = UI.getInstance().getPlayScreen();
ps.setTitle(mc.getName());
if (mc instanceof TrackInformation) {
TrackInformation ti = (TrackInformation)mc;
ps.setAlbum(ti.getAlbum());
ps.setArtist(ti.getArtist());
}
ps.notifyPlay();
// XXX Should also "tell" PlayScreen that it is in 'play' mode
// One possiblity:
// PS subscribes to the events by the current renderer,
// and will therefore get all this information seamlessly by UPnP.
// Now it should work even if some other device chooses to change
// the current URI.
} catch (java.io.IOException ioe) {
LOG.fatal("IOException while starting to play a song...");
LOG.fatal(ioe);
} catch (Exception e) {
LOG.fatal("Exception while starting to play");
LOG.fatal(e);
} finally {
LOG.debug("Finished start to play :)");
}
}
private final class MediaServerMenuElement extends MenuElement {
private MediaServer ms = null;
public MediaServerMenuElement(MediaServer ms, MenuEventListener mel) {
super(ms.getFriendlyName(), mel);
this.ms = ms;
}
public String udn() {
return ms.getDeviceUDN();
}
}
private final class MediaRendererMenuElement extends MenuElement {
private MediaRenderer mr = null;
public MediaRendererMenuElement(MediaRenderer mr, MenuEventListener mel) {
super(mr.getFriendlyName(), mel);
this.mr = mr;
}
public String udn() {
return mr.getDeviceUDN();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -