Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(891)

Unified Diff: ui/file_manager/file_manager/audio_player/elements/audio_player.js

Issue 641283002: Separate the audio player app from Files.app Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Clean up Created 6 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
- }
- },
-});

Powered by Google App Engine
This is Rietveld 408576698