| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 'use strict'; | 5 'use strict'; |
| 6 | 6 |
| 7 Polymer('audio-player', { | 7 Polymer('audio-player', { |
| 8 /** | 8 /** |
| 9 * Child Elements | 9 * Child Elements |
| 10 */ | 10 */ |
| 11 audioController: null, | 11 audioController: null, |
| 12 audioElement: null, | 12 audioElement: null, |
| 13 trackList: null, | 13 trackList: null, |
| 14 | 14 |
| 15 // Attributes of the element (little charactor only) | 15 // Attributes of the element (little charactor only). |
| 16 // These value must be used only to data binding and shouldn't be assignred |
| 17 // anu value nowhere except in the handler. |
| 16 playing: false, | 18 playing: false, |
| 17 currenttrackurl: '', | 19 currenttrackurl: '', |
| 18 | 20 |
| 19 /** | 21 /** |
| 20 * Model object of the Audio Player. | 22 * Model object of the Audio Player. |
| 21 * @type {AudioPlayerModel} | 23 * @type {AudioPlayerModel} |
| 22 */ | 24 */ |
| 23 model: null, | 25 model: null, |
| 24 | 26 |
| 25 /** | 27 /** |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 63 * @param {number} newValue new value. | 65 * @param {number} newValue new value. |
| 64 */ | 66 */ |
| 65 onCurrentTrackIndexChanged: function(oldValue, newValue) { | 67 onCurrentTrackIndexChanged: function(oldValue, newValue) { |
| 66 var currentTrackUrl = ''; | 68 var currentTrackUrl = ''; |
| 67 | 69 |
| 68 if (oldValue != newValue) { | 70 if (oldValue != newValue) { |
| 69 var currentTrack = this.trackList.getCurrentTrack(); | 71 var currentTrack = this.trackList.getCurrentTrack(); |
| 70 if (currentTrack && currentTrack.url != this.audioElement.src) { | 72 if (currentTrack && currentTrack.url != this.audioElement.src) { |
| 71 this.audioElement.src = currentTrack.url; | 73 this.audioElement.src = currentTrack.url; |
| 72 currentTrackUrl = this.audioElement.src; | 74 currentTrackUrl = this.audioElement.src; |
| 73 this.audioElement.play(); | 75 if (this.audioController.playing) |
| 76 this.audioElement.play(); |
| 74 } | 77 } |
| 75 } | 78 } |
| 76 | 79 |
| 77 // The attributes may be being watched, so we change it at the last. | 80 // The attributes may be being watched, so we change it at the last. |
| 78 this.currenttrackurl = currentTrackUrl; | 81 this.currenttrackurl = currentTrackUrl; |
| 79 }, | 82 }, |
| 80 | 83 |
| 81 /** | 84 /** |
| 82 * Invoked when audioController.playing is changed. | 85 * Invoked when audioController.playing is changed. |
| 83 * @param {boolean} oldValue old value. | 86 * @param {boolean} oldValue old value. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 96 | 99 |
| 97 if (this.audioElement.src) { | 100 if (this.audioElement.src) { |
| 98 this.currenttrackurl = this.audioElement.src; | 101 this.currenttrackurl = this.audioElement.src; |
| 99 this.audioElement.play(); | 102 this.audioElement.play(); |
| 100 return; | 103 return; |
| 101 } | 104 } |
| 102 } | 105 } |
| 103 | 106 |
| 104 // When the new status is "stopped". | 107 // When the new status is "stopped". |
| 105 this.cancelAutoAdvance_(); | 108 this.cancelAutoAdvance_(); |
| 106 this.audioController.playing = false; | |
| 107 this.audioElement.pause(); | 109 this.audioElement.pause(); |
| 108 this.currenttrackurl = ''; | 110 this.currenttrackurl = ''; |
| 109 this.lastAudioUpdateTime_ = null; | 111 this.lastAudioUpdateTime_ = null; |
| 110 }, | 112 }, |
| 111 | 113 |
| 112 /** | 114 /** |
| 113 * Invoked when audioController.volume is changed. | 115 * Invoked when audioController.volume is changed. |
| 114 * @param {number} oldValue old value. | 116 * @param {number} oldValue old value. |
| 115 * @param {number} newValue new value. | 117 * @param {number} newValue new value. |
| 116 */ | 118 */ |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 * @param {boolean} repeat True if repeat-mode is enabled. False otherwise. | 197 * @param {boolean} repeat True if repeat-mode is enabled. False otherwise. |
| 196 * @private | 198 * @private |
| 197 */ | 199 */ |
| 198 advance_: function(forward, repeat) { | 200 advance_: function(forward, repeat) { |
| 199 this.cancelAutoAdvance_(); | 201 this.cancelAutoAdvance_(); |
| 200 | 202 |
| 201 var nextTrackIndex = this.trackList.getNextTrackIndex(forward, true); | 203 var nextTrackIndex = this.trackList.getNextTrackIndex(forward, true); |
| 202 var isNextTrackAvailable = | 204 var isNextTrackAvailable = |
| 203 (this.trackList.getNextTrackIndex(forward, repeat) !== -1); | 205 (this.trackList.getNextTrackIndex(forward, repeat) !== -1); |
| 204 | 206 |
| 207 this.audioController.playing = isNextTrackAvailable; |
| 205 this.trackList.currentTrackIndex = nextTrackIndex; | 208 this.trackList.currentTrackIndex = nextTrackIndex; |
| 206 | 209 |
| 207 if (isNextTrackAvailable) { | 210 Platform.performMicrotaskCheckpoint(); |
| 208 var nextTrack = this.trackList.tracks[nextTrackIndex]; | |
| 209 this.audioElement.src = nextTrack.url; | |
| 210 this.audioElement.play(); | |
| 211 } else { | |
| 212 this.audioElement.pause(); | |
| 213 } | |
| 214 }, | 211 }, |
| 215 | 212 |
| 216 /** | 213 /** |
| 217 * Timeout ID of auto advance. Used internally in scheduleAutoAdvance_() and | 214 * Timeout ID of auto advance. Used internally in scheduleAutoAdvance_() and |
| 218 * cancelAutoAdvance_(). | 215 * cancelAutoAdvance_(). |
| 219 * @type {number} | 216 * @type {number} |
| 220 * @private | 217 * @private |
| 221 */ | 218 */ |
| 222 autoAdvanceTimer_: null, | 219 autoAdvanceTimer_: null, |
| 223 | 220 |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 } | 286 } |
| 290 }, | 287 }, |
| 291 | 288 |
| 292 /** | 289 /** |
| 293 * Invoked when the audio player is being unloaded. | 290 * Invoked when the audio player is being unloaded. |
| 294 */ | 291 */ |
| 295 onPageUnload: function() { | 292 onPageUnload: function() { |
| 296 this.audioElement.src = ''; // Hack to prevent crashing. | 293 this.audioElement.src = ''; // Hack to prevent crashing. |
| 297 }, | 294 }, |
| 298 }); | 295 }); |
| OLD | NEW |