Index: chrome/browser/resources/file_manager/js/media/media_controls.js |
diff --git a/chrome/browser/resources/file_manager/js/media/media_controls.js b/chrome/browser/resources/file_manager/js/media/media_controls.js |
index 670900d0cf4b6768cdd72e0e94572113389a211f..2f3feec84e860313eedd694f89e6c159ce1c6143 100644 |
--- a/chrome/browser/resources/file_manager/js/media/media_controls.js |
+++ b/chrome/browser/resources/file_manager/js/media/media_controls.js |
@@ -165,7 +165,7 @@ MediaControls.prototype.togglePlayState = function() { |
*/ |
MediaControls.prototype.initPlayButton = function(opt_parent) { |
this.playButton_ = this.createButton('play media-control', |
- this.togglePlayState.bind(this), opt_parent, 3 /* States. */); |
+ this.onPlayButtonClicked.bind(this), opt_parent, 3 /* States. */); |
}; |
/* |
@@ -961,21 +961,21 @@ MediaControls.PreciseSlider.prototype.onInputDrag_ = function(on) { |
* |
* @param {HTMLElement} containerElement The container for the controls. |
* @param {function} onMediaError Function to display an error message. |
+ * @param {function(string):string} stringFunction Function providing localized |
+ * strings. |
* @param {function=} opt_fullScreenToggle Function to toggle fullscreen mode. |
* @param {HTMLElement=} opt_stateIconParent The parent for the icon that |
* gives visual feedback when the playback state changes. |
* @constructor |
*/ |
-function VideoControls(containerElement, onMediaError, |
+function VideoControls(containerElement, onMediaError, stringFunction, |
opt_fullScreenToggle, opt_stateIconParent) { |
MediaControls.call(this, containerElement, onMediaError); |
+ this.stringFunction_ = stringFunction; |
this.container_.classList.add('video-controls'); |
- |
this.initPlayButton(); |
- |
this.initTimeControls(true /* show seek mark */); |
- |
this.initVolumeControls(); |
if (opt_fullScreenToggle) { |
@@ -986,6 +986,7 @@ function VideoControls(containerElement, onMediaError, |
if (opt_stateIconParent) { |
this.stateIcon_ = this.createControl( |
'playback-state-icon', opt_stateIconParent); |
+ this.textBanner_ = this.createControl('text-banner', opt_stateIconParent); |
} |
var videoControls = this; |
@@ -1011,6 +1012,47 @@ VideoControls.RESUME_REWIND = 5; // seconds. |
VideoControls.prototype = { __proto__: MediaControls.prototype }; |
/** |
+ * Shows icon feedback for the current state of the video player. |
+ * @private |
+ */ |
+VideoControls.prototype.showIconFeedback_ = function() { |
+ this.stateIcon_.removeAttribute('state'); |
+ setTimeout(function() { |
+ this.stateIcon_.setAttribute('state', this.isPlaying() ? 'play' : 'pause'); |
+ }.bind(this), 0); |
+}; |
+ |
+/** |
+ * Shows a text banner. |
+ * |
+ * @param {string} identifier String identifier. |
+ * @private |
+ */ |
+VideoControls.prototype.showTextBanner_ = function(identifier) { |
+ this.textBanner_.removeAttribute('visible'); |
+ this.textBanner_.textContent = this.stringFunction_(identifier); |
+ setTimeout(function() { |
+ this.textBanner_.setAttribute('visible', 'true'); |
+ }.bind(this), 0); |
+}; |
+ |
+/** |
+ * Toggle play/pause state on a mouse click on the play/pause button. Can be |
+ * called externally. |
+ * |
+ * @param {Event} event Mouse click event. |
+ */ |
+VideoControls.prototype.onPlayButtonClicked = function(event) { |
+ if (event.ctrlKey) { |
+ this.toggleLoopedModeWithFeedback(true); |
+ if (!this.isPlaying()) |
+ this.togglePlayState(); |
+ } else { |
+ this.togglePlayState(); |
+ } |
+}; |
+ |
+/** |
* Media completion handler. |
*/ |
VideoControls.prototype.onMediaComplete = function() { |
@@ -1019,33 +1061,51 @@ VideoControls.prototype.onMediaComplete = function() { |
}; |
/** |
- * Toggle play/pause state and flash an icon over the video. |
+ * Toggles the looped mode with feedback. |
+ * @param {boolean} on Whether enabled or not. |
+ */ |
+VideoControls.prototype.toggleLoopedModeWithFeedback = function(on) { |
+ if (!this.getMedia().duration) |
+ return; |
+ |
+ this.toggleLoopedMode(on); |
+ if (on) |
+ this.showTextBanner_('GALLERY_VIDEO_LOOPED_MODE'); |
+}; |
+ |
+/** |
+ * Toggles the looped mode. |
+ * @param {boolean} on Whether enabled or not. |
+ */ |
+VideoControls.prototype.toggleLoopedMode = function(on) { |
+ this.getMedia().loop = on; |
+}; |
+ |
+/** |
+ * Toggles play/pause state and flash an icon over the video. |
*/ |
VideoControls.prototype.togglePlayStateWithFeedback = function() { |
if (!this.getMedia().duration) |
return; |
this.togglePlayState(); |
- |
- this.stateIcon_.removeAttribute('state'); |
- setTimeout(function() { |
- this.stateIcon_.setAttribute('state', this.isPlaying() ? 'play' : 'pause'); |
- }.bind(this), 0); |
+ this.showIconFeedback_(); |
}; |
/** |
- * Toggle play/pause state. |
+ * Toggles play/pause state. |
*/ |
VideoControls.prototype.togglePlayState = function() { |
if (this.isPlaying()) { |
- // User gave the Pause command. |
+ // User gave the Pause command. Save the state and reset the loop mode. |
+ this.toggleLoopedMode(false); |
this.savePosition(); |
} |
MediaControls.prototype.togglePlayState.apply(this, arguments); |
}; |
/** |
- * Save the playback position to the persistent storage. |
+ * Saves the playback position to the persistent storage. |
* @param {boolean=} opt_sync True if the position must be saved synchronously |
* (required when closing app windows). |
*/ |
@@ -1079,7 +1139,7 @@ VideoControls.prototype.savePosition = function(opt_sync) { |
}; |
/** |
- * Resume the playback position saved in the persistent storage. |
+ * Resumes the playback position saved in the persistent storage. |
*/ |
VideoControls.prototype.restorePlayState = function() { |
if (this.media_.duration >= VideoControls.RESUME_THRESHOLD) { |
@@ -1091,7 +1151,7 @@ VideoControls.prototype.restorePlayState = function() { |
}; |
/** |
- * Update style to best fit the size of the container. |
+ * Updates style to best fit the size of the container. |
*/ |
VideoControls.prototype.updateStyle = function() { |
// We assume that the video controls element fills the parent container. |
@@ -1115,7 +1175,7 @@ VideoControls.prototype.updateStyle = function() { |
}; |
/** |
- * Create audio controls. |
+ * Creates audio controls. |
* |
* @param {HTMLElement} container Parent container. |
* @param {function(boolean)} advanceTrack Parameter: true=forward. |