Fixed ugly bug with Youtube videos not being loaded a second time.

Reason was the call sequence which kept the video container panel invisible for the Youtube API.
Changed the sequence making the panel visible before calling the Youtube API.
This commit is contained in:
Jens Rommel committed 2013-07-09 16:47:23 +02:00
1 parent 550fc52d24
commit f626db6992
2 files changed
+24 -27

No files matched your search

@@ -5,7 +5,9 @@ import java.util.Date;
import com.google.gwt.event.logical.shared.CloseEvent;
import com.google.gwt.event.logical.shared.CloseHandler;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.PopupPanel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.sap.sailing.domain.common.media.MediaTrack;
import com.sap.sailing.gwt.ui.client.ErrorReporter;
import com.sap.sailing.gwt.ui.client.MediaServiceAsync;
@@ -17,6 +19,8 @@ import com.sap.sailing.gwt.ui.client.shared.controls.dialog.WindowBox;
public class YoutubeEmbeddedPlayer extends AbstractMediaPlayer implements VideoPlayer, CloseHandler<PopupPanel>, MediaSynchAdapter {
private static int videoCounter;
private final WindowBox dialogBox;
private MediaSynchControl mediaSynchControl;
@@ -37,15 +41,14 @@ public class YoutubeEmbeddedPlayer extends AbstractMediaPlayer implements VideoP
FlowPanel rootPanel = new FlowPanel();
rootPanel.addStyleName("video-root-panel");
videoControl = new YoutubeVideoControl(videoTrack.url, showSynchControls);
rootPanel.add(videoControl.widget());
if (showSynchControls) {
mediaSynchControl = new MediaSynchControl(this, mediaService, errorReporter);
mediaSynchControl.widget().addStyleName("media-synch-control");
rootPanel.add(mediaSynchControl.widget());
}
Panel videoContainer = new SimplePanel();
String videoContainerId = "videoContainer-" + videoTrack.url + ++videoCounter;
videoContainer.getElement().setId(videoContainerId);
videoContainer.getElement().setInnerText("When the Youtube video doesn't show up, click the popout button at the upper right corner to open the video in a dedicated browser window.");
rootPanel.add(videoContainer.asWidget());
this.dialogBox = new WindowBox(videoTrack.title, videoTrack.toString(), rootPanel, new WindowBox.PopoutHandler() {
@Override
@@ -56,7 +59,19 @@ public class YoutubeEmbeddedPlayer extends AbstractMediaPlayer implements VideoP
});
dialogBox.addCloseHandler(this);
//first show dialog to make video container visible in DOM
show();
//then use Youtube API to render load video into video container
videoControl = new YoutubeVideoControl(videoTrack.url, videoContainerId, showSynchControls);
//then show media synch controls which refer to the video control
if (showSynchControls) {
mediaSynchControl = new MediaSynchControl(this, mediaService, errorReporter);
mediaSynchControl.widget().addStyleName("media-synch-control");
rootPanel.add(mediaSynchControl.widget());
}
}
private void show() {
@@ -1,18 +1,11 @@
package com.sap.sailing.gwt.ui.client.media;
import com.google.gwt.core.client.JavaScriptObject;
import com.google.gwt.user.client.ui.Panel;
import com.google.gwt.user.client.ui.SimplePanel;
import com.google.gwt.user.client.ui.Widget;
public class YoutubeVideoControl {
private static int containerId;
private JavaScriptObject youtubePlayer;
private final Panel containerPanel;
private boolean deferredIsPlaying;
private double deferredCurrentTime;
@@ -23,15 +16,8 @@ public class YoutubeVideoControl {
private double deferredPlaybackSpeed;
YoutubeVideoControl(String videoUrl, boolean showControls) {
YoutubeVideoControl(String videoUrl, String videoContainerId, boolean showControls) {
containerPanel = new SimplePanel();
String videoContainerId = "videoContainer-" + containerId++;
containerPanel.getElement().setId(videoContainerId);
containerPanel.getElement().setInnerText("When the Youtube video doesn't show up, click the popout button at the upper right corner to open the video in a dedicated browser window.");
if (!isYoutubeApiInitialized()) {
loadInitialYoutubePlayer(videoUrl, videoContainerId, showControls);
} else {
@@ -206,10 +192,6 @@ public class YoutubeVideoControl {
player.setPlaybackRate(newPlaySpeedFactor);
}-*/;
public Widget widget() {
return containerPanel;
}
public void setControlsVisible(boolean isVisible) {
if (this.youtubePlayer != null) {
nativeSetControlsVisible(isVisible);