| Index: ui/file_manager/file_manager/audio_player/elements/audio_player.js
|
| diff --git a/ui/file_manager/file_manager/audio_player/elements/audio_player.js b/ui/file_manager/file_manager/audio_player/elements/audio_player.js
|
| deleted file mode 100644
|
| index ee71220c5904ca606aad4c5f7a35a19a01af967b..0000000000000000000000000000000000000000
|
| --- a/ui/file_manager/file_manager/audio_player/elements/audio_player.js
|
| +++ /dev/null
|
| @@ -1,382 +0,0 @@
|
| -// Copyright 2014 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -'use strict';
|
| -
|
| -Polymer('audio-player', {
|
| - /**
|
| - * Child Elements
|
| - */
|
| - audioController: null,
|
| - audioElement: null,
|
| - trackList: null,
|
| -
|
| - // Attributes of the element (lower characters only).
|
| - // These values must be used only to data binding and shouldn't be assigned
|
| - // any value nowhere except in the handler.
|
| - publish: {
|
| - playing: {
|
| - value: true,
|
| - reflect: true
|
| - },
|
| - currenttrackurl: {
|
| - value: '',
|
| - reflect: true
|
| - },
|
| - playcount: {
|
| - value: 0,
|
| - reflect: true
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * Model object of the Audio Player.
|
| - * @type {AudioPlayerModel}
|
| - */
|
| - model: null,
|
| -
|
| - /**
|
| - * Initializes an element. This method is called automatically when the
|
| - * element is ready.
|
| - */
|
| - ready: function() {
|
| - this.audioController = this.$.audioController;
|
| - this.audioElement = this.$.audio;
|
| - this.trackList = this.$.trackList;
|
| -
|
| - this.addEventListener('keydown', this.onKeyDown_.bind(this));
|
| -
|
| - this.audioElement.volume = 0; // Temporary initial volume.
|
| - this.audioElement.addEventListener('ended', this.onAudioEnded.bind(this));
|
| - this.audioElement.addEventListener('error', this.onAudioError.bind(this));
|
| -
|
| - var onAudioStatusUpdatedBound = this.onAudioStatusUpdate_.bind(this);
|
| - this.audioElement.addEventListener('timeupdate', onAudioStatusUpdatedBound);
|
| - this.audioElement.addEventListener('ended', onAudioStatusUpdatedBound);
|
| - this.audioElement.addEventListener('play', onAudioStatusUpdatedBound);
|
| - this.audioElement.addEventListener('pause', onAudioStatusUpdatedBound);
|
| - this.audioElement.addEventListener('suspend', onAudioStatusUpdatedBound);
|
| - this.audioElement.addEventListener('abort', onAudioStatusUpdatedBound);
|
| - this.audioElement.addEventListener('error', onAudioStatusUpdatedBound);
|
| - this.audioElement.addEventListener('emptied', onAudioStatusUpdatedBound);
|
| - this.audioElement.addEventListener('stalled', onAudioStatusUpdatedBound);
|
| - },
|
| -
|
| - /**
|
| - * Registers handlers for changing of external variables
|
| - */
|
| - observe: {
|
| - 'trackList.currentTrackIndex': 'onCurrentTrackIndexChanged',
|
| - 'audioController.playing': 'onControllerPlayingChanged',
|
| - 'audioController.time': 'onControllerTimeChanged',
|
| - 'model.volume': 'onVolumeChanged',
|
| - },
|
| -
|
| - /**
|
| - * Invoked when trackList.currentTrackIndex is changed.
|
| - * @param {number} oldValue old value.
|
| - * @param {number} newValue new value.
|
| - */
|
| - onCurrentTrackIndexChanged: function(oldValue, newValue) {
|
| - var currentTrackUrl = '';
|
| -
|
| - if (oldValue != newValue) {
|
| - var currentTrack = this.trackList.getCurrentTrack();
|
| - if (currentTrack && currentTrack.url != this.audioElement.src) {
|
| - this.audioElement.src = currentTrack.url;
|
| - currentTrackUrl = this.audioElement.src;
|
| - if (this.audioController.playing)
|
| - this.audioElement.play();
|
| - }
|
| - }
|
| -
|
| - // The attributes may be being watched, so we change it at the last.
|
| - this.currenttrackurl = currentTrackUrl;
|
| - },
|
| -
|
| - /**
|
| - * Invoked when audioController.playing is changed.
|
| - * @param {boolean} oldValue old value.
|
| - * @param {boolean} newValue new value.
|
| - */
|
| - onControllerPlayingChanged: function(oldValue, newValue) {
|
| - this.playing = newValue;
|
| -
|
| - if (newValue) {
|
| - if (!this.audioElement.src) {
|
| - var currentTrack = this.trackList.getCurrentTrack();
|
| - if (currentTrack && currentTrack.url != this.audioElement.src) {
|
| - this.audioElement.src = currentTrack.url;
|
| - }
|
| - }
|
| -
|
| - if (this.audioElement.src) {
|
| - this.currenttrackurl = this.audioElement.src;
|
| - this.audioElement.play();
|
| - return;
|
| - }
|
| - }
|
| -
|
| - // When the new status is "stopped".
|
| - this.cancelAutoAdvance_();
|
| - this.audioElement.pause();
|
| - this.currenttrackurl = '';
|
| - this.lastAudioUpdateTime_ = null;
|
| - },
|
| -
|
| - /**
|
| - * Invoked when audioController.volume is changed.
|
| - * @param {number} oldValue old value.
|
| - * @param {number} newValue new value.
|
| - */
|
| - onVolumeChanged: function(oldValue, newValue) {
|
| - this.audioElement.volume = newValue / 100;
|
| - },
|
| -
|
| - /**
|
| - * Invoked when the model changed.
|
| - * @param {AudioPlayerModel} oldValue Old Value.
|
| - * @param {AudioPlayerModel} newValue New Value.
|
| - */
|
| - modelChanged: function(oldValue, newValue) {
|
| - this.trackList.model = newValue;
|
| - this.audioController.model = newValue;
|
| -
|
| - // Invoke the handler manually.
|
| - this.onVolumeChanged(0, newValue.volume);
|
| - },
|
| -
|
| - /**
|
| - * Invoked when audioController.time is changed.
|
| - * @param {number} oldValue old time (in ms).
|
| - * @param {number} newValue new time (in ms).
|
| - */
|
| - onControllerTimeChanged: function(oldValue, newValue) {
|
| - // Ignores updates from the audio element.
|
| - if (this.lastAudioUpdateTime_ === newValue)
|
| - return;
|
| -
|
| - if (this.audioElement.readyState !== 0)
|
| - this.audioElement.currentTime = this.audioController.time / 1000;
|
| - },
|
| -
|
| - /**
|
| - * Invoked when the next button in the controller is clicked.
|
| - * This handler is registered in the 'on-click' attribute of the element.
|
| - */
|
| - onControllerNextClicked: function() {
|
| - this.advance_(true /* forward */, true /* repeat */);
|
| - },
|
| -
|
| - /**
|
| - * Invoked when the previous button in the controller is clicked.
|
| - * This handler is registered in the 'on-click' attribute of the element.
|
| - */
|
| - onControllerPreviousClicked: function() {
|
| - this.advance_(false /* forward */, true /* repeat */);
|
| - },
|
| -
|
| - /**
|
| - * Invoked when the playback in the audio element is ended.
|
| - * This handler is registered in this.ready().
|
| - */
|
| - onAudioEnded: function() {
|
| - this.playcount++;
|
| - this.advance_(true /* forward */, this.model.repeat);
|
| - },
|
| -
|
| - /**
|
| - * Invoked when the playback in the audio element gets error.
|
| - * This handler is registered in this.ready().
|
| - */
|
| - onAudioError: function() {
|
| - this.scheduleAutoAdvance_(true /* forward */, this.model.repeat);
|
| - },
|
| -
|
| - /**
|
| - * Invoked when the time of playback in the audio element is updated.
|
| - * This handler is registered in this.ready().
|
| - * @private
|
| - */
|
| - onAudioStatusUpdate_: function() {
|
| - this.audioController.time =
|
| - (this.lastAudioUpdateTime_ = this.audioElement.currentTime * 1000);
|
| - this.audioController.duration = this.audioElement.duration * 1000;
|
| - this.audioController.playing = !this.audioElement.paused;
|
| - },
|
| -
|
| - /**
|
| - * Invoked when receiving a request to replay the current music from the track
|
| - * list element.
|
| - */
|
| - onReplayCurrentTrack: function() {
|
| - // Changes the current time back to the beginning, regardless of the current
|
| - // status (playing or paused).
|
| - this.audioElement.currentTime = 0;
|
| - this.audioController.time = 0;
|
| - },
|
| -
|
| - /**
|
| - * Goes to the previous or the next track.
|
| - * @param {boolean} forward True if next, false if previous.
|
| - * @param {boolean} repeat True if repeat-mode is enabled. False otherwise.
|
| - * @private
|
| - */
|
| - advance_: function(forward, repeat) {
|
| - this.cancelAutoAdvance_();
|
| -
|
| - var nextTrackIndex = this.trackList.getNextTrackIndex(forward, true);
|
| - var isNextTrackAvailable =
|
| - (this.trackList.getNextTrackIndex(forward, repeat) !== -1);
|
| -
|
| - this.audioController.playing = isNextTrackAvailable;
|
| -
|
| - // If there is only a single file in the list, 'currentTrackInde' is not
|
| - // changed and the handler is not invoked. Instead, plays here.
|
| - // TODO(yoshiki): clean up the code around here.
|
| - if (isNextTrackAvailable &&
|
| - this.trackList.currentTrackIndex == nextTrackIndex) {
|
| - this.audioElement.play();
|
| - }
|
| -
|
| - this.trackList.currentTrackIndex = nextTrackIndex;
|
| -
|
| - Platform.performMicrotaskCheckpoint();
|
| - },
|
| -
|
| - /**
|
| - * Timeout ID of auto advance. Used internally in scheduleAutoAdvance_() and
|
| - * cancelAutoAdvance_().
|
| - * @type {number}
|
| - * @private
|
| - */
|
| - autoAdvanceTimer_: null,
|
| -
|
| - /**
|
| - * Schedules automatic advance to the next track after a timeout.
|
| - * @param {boolean} forward True if next, false if previous.
|
| - * @param {boolean} repeat True if repeat-mode is enabled. False otherwise.
|
| - * @private
|
| - */
|
| - scheduleAutoAdvance_: function(forward, repeat) {
|
| - this.cancelAutoAdvance_();
|
| - var currentTrackIndex = this.currentTrackIndex;
|
| -
|
| - var timerId = setTimeout(
|
| - function() {
|
| - // If the other timer is scheduled, do nothing.
|
| - if (this.autoAdvanceTimer_ !== timerId)
|
| - return;
|
| -
|
| - this.autoAdvanceTimer_ = null;
|
| -
|
| - // If the track has been changed since the advance was scheduled, do
|
| - // nothing.
|
| - if (this.currentTrackIndex !== currentTrackIndex)
|
| - return;
|
| -
|
| - // We are advancing only if the next track is not known to be invalid.
|
| - // This prevents an endless auto-advancing in the case when all tracks
|
| - // are invalid (we will only visit each track once).
|
| - this.advance_(forward, repeat, true /* only if valid */);
|
| - }.bind(this),
|
| - 3000);
|
| -
|
| - this.autoAdvanceTimer_ = timerId;
|
| - },
|
| -
|
| - /**
|
| - * Cancels the scheduled auto advance.
|
| - * @private
|
| - */
|
| - cancelAutoAdvance_: function() {
|
| - if (this.autoAdvanceTimer_) {
|
| - clearTimeout(this.autoAdvanceTimer_);
|
| - this.autoAdvanceTimer_ = null;
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * The index of the current track.
|
| - * If the list has no tracks, the value must be -1.
|
| - *
|
| - * @type {number}
|
| - */
|
| - get currentTrackIndex() {
|
| - return this.trackList.currentTrackIndex;
|
| - },
|
| - set currentTrackIndex(value) {
|
| - this.trackList.currentTrackIndex = value;
|
| - },
|
| -
|
| - /**
|
| - * The list of the tracks in the playlist.
|
| - *
|
| - * When it changed, current operation including playback is stopped and
|
| - * restarts playback with new tracks if necessary.
|
| - *
|
| - * @type {Array.<AudioPlayer.TrackInfo>}
|
| - */
|
| - get tracks() {
|
| - return this.trackList ? this.trackList.tracks : null;
|
| - },
|
| - set tracks(tracks) {
|
| - if (this.trackList.tracks === tracks)
|
| - return;
|
| -
|
| - this.cancelAutoAdvance_();
|
| -
|
| - this.trackList.tracks = tracks;
|
| - var currentTrack = this.trackList.getCurrentTrack();
|
| - if (currentTrack && currentTrack.url != this.audioElement.src) {
|
| - this.audioElement.src = currentTrack.url;
|
| - this.audioElement.play();
|
| - }
|
| - },
|
| -
|
| - /**
|
| - * Invoked when the audio player is being unloaded.
|
| - */
|
| - onPageUnload: function() {
|
| - this.audioElement.src = ''; // Hack to prevent crashing.
|
| - },
|
| -
|
| - /**
|
| - * Invoked when the 'keydown' event is fired.
|
| - * @param {Event} event The event object.
|
| - */
|
| - onKeyDown_: function(event) {
|
| - switch (event.keyIdentifier) {
|
| - case 'Up':
|
| - if (this.audioController.volumeSliderShown && this.model.volume < 100)
|
| - this.model.volume += 1;
|
| - break;
|
| - case 'Down':
|
| - if (this.audioController.volumeSliderShown && this.model.volume > 0)
|
| - this.model.volume -= 1;
|
| - break;
|
| - case 'PageUp':
|
| - if (this.audioController.volumeSliderShown && this.model.volume < 91)
|
| - this.model.volume += 10;
|
| - break;
|
| - case 'PageDown':
|
| - if (this.audioController.volumeSliderShown && this.model.volume > 9)
|
| - this.model.volume -= 10;
|
| - break;
|
| - case 'MediaNextTrack':
|
| - this.onControllerNextClicked();
|
| - break;
|
| - case 'MediaPlayPause':
|
| - var playing = this.audioController.playing;
|
| - this.onControllerPlayingChanged(playing, !playing);
|
| - break;
|
| - case 'MediaPreviousTrack':
|
| - this.onControllerPreviousClicked();
|
| - break;
|
| - case 'MediaStop':
|
| - // TODO: Define "Stop" behavior.
|
| - break;
|
| - }
|
| - },
|
| -});
|
|
|