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

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

Issue 1176483002: AudioPlayer.app: Migrate to Polymer 1.0. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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/audio_player/elements/audio_player.js
diff --git a/ui/file_manager/audio_player/elements/audio_player.js b/ui/file_manager/audio_player/elements/audio_player.js
index 979dc719d6e1c2bd3e7d9f6bad0a919a3edccc64..c2aa4220085438149181b733df142048edc8057b 100644
--- a/ui/file_manager/audio_player/elements/audio_player.js
+++ b/ui/file_manager/audio_player/elements/audio_player.js
@@ -9,46 +9,139 @@
var AudioPlayerElement = function() {};
AudioPlayerElement.prototype = {
+ is: 'audio-player',
+
// Child Elements
- audioController: null,
audioElement: null,
trackList: null,
- // Published values
- playing: true,
- currenttrackurl: '',
- playcount: 0,
-
- // 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: {
+ properties: {
+ /**
+ * Flag whether the audio is playing or paused. True if playing, or false
+ * paused.
+ */
playing: {
- value: true,
- reflect: true
+ type: Boolean,
+ observer: 'playingChanged',
+ reflectToAttribute: true
+ },
+
+ /**
+ * Current elapsed time in the current music in millisecond.
+ */
+ time: {
+ type: Number,
+ observer: 'timeChanged'
+ },
+
+ /**
+ * Whether the shuffle button is ON.
+ */
+ shuffle: {
+ type: Boolean,
+ observer: 'shuffleChanged'
+ },
+
+ /**
+ * Whether the repeat button is ON.
+ */
+ repeat: {
+ type: Boolean,
+ observer: 'repeatChanged'
+ },
+
+ /**
+ * The audio volume. 0 is silent, and 100 is maximum loud.
+ */
+ volume: {
+ type: Number,
+ observer: 'volumeChanged'
+ },
+
+ /**
+ * Whether the expanded button is ON.
+ */
+ expanded: {
+ type: Boolean,
+ observer: 'expandedChanged'
+ },
+
+ /**
+ * Track index of the current track.
+ */
+ currentTrackIndex: {
+ type: Number,
+ observer: 'currentTrackIndexChanged'
+ },
+
+ /**
+ * Model object of the Audio Player.
+ * @type {AudioPlayerModel}
+ */
+ model: {
+ type: Object,
+ observer: 'modelChanged'
},
+
+ /**
+ * URL of the current track. (exposed publicly for tests)
+ */
currenttrackurl: {
+ type: String,
value: '',
- reflect: true
+ reflectToAttribute: true
},
+
+ /**
+ * The number of played tracks. (exposed publicly for tests)
+ */
playcount: {
+ type: Number,
value: 0,
- reflect: true
+ reflectToAttribute: true
}
},
/**
- * Model object of the Audio Player.
- * @type {AudioPlayerModel}
+ * Handles change event for shuffle mode.
+ * @param {boolean} shuffle
+ */
+ shuffleChanged: function(shuffle) {
+ if (this.model)
+ this.model.shuffle = shuffle;
+ },
+
+ /**
+ * Handles change event for repeat mode.
+ * @param {boolean} repeat
*/
- model: null,
+ repeatChanged: function(repeat) {
+ if (this.model)
+ this.model.repeat = repeat;
+ },
+
+ /**
+ * Handles change event for audio volume.
+ * @param {boolean} volume
+ */
+ volumeChanged: function(volume) {
+ if (this.model)
+ this.model.volume = volume;
+ },
+
+ /**
+ * Handles change event for expanded state of track list.
+ */
+ expandedChanged: function(expanded) {
+ if (this.model)
+ this.model.expanded = expanded;
+ },
/**
* 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;
@@ -71,21 +164,14 @@ AudioPlayerElement.prototype = {
},
/**
- * 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.
+ * @param {number} oldValue old value.
*/
- onCurrentTrackIndexChanged: function(oldValue, newValue) {
+ currentTrackIndexChanged: function(newValue, oldValue) {
+ if (!this.trackList)
+ return;
+
var currentTrackUrl = '';
if (oldValue != newValue) {
@@ -93,7 +179,7 @@ AudioPlayerElement.prototype = {
if (currentTrack && currentTrack.url != this.audioElement.src) {
this.audioElement.src = currentTrack.url;
currentTrackUrl = this.audioElement.src;
- if (this.audioController.playing)
+ if (this.playing)
this.audioElement.play();
}
}
@@ -103,13 +189,11 @@ AudioPlayerElement.prototype = {
},
/**
- * Invoked when audioController.playing is changed.
- * @param {boolean} oldValue old value.
+ * Invoked when playing is changed.
* @param {boolean} newValue new value.
+ * @param {boolean} oldValue old value.
*/
- onControllerPlayingChanged: function(oldValue, newValue) {
- this.playing = newValue;
-
+ playingChanged: function(newValue, oldValue) {
if (newValue) {
if (!this.audioElement.src) {
var currentTrack = this.trackList.getCurrentTrack();
@@ -133,39 +217,32 @@ AudioPlayerElement.prototype = {
},
/**
- * 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.
+ * @param {AudioPlayerModel} newModel New model.
+ * @param {AudioPlayerModel} oldModel Old model.
*/
- modelChanged: function(oldValue, newValue) {
- this.trackList.model = newValue;
- this.audioController.model = newValue;
-
- // Invoke the handler manually.
- this.onVolumeChanged(0, newValue.volume);
+ modelChanged: function(newModel, oldModel) {
+ // Setting up the UI
+ if (newModel !== oldModel && newModel) {
+ this.shuffle = newModel.shuffle;
+ this.repeat = newModel.repeat;
+ this.volume = newModel.volume;
+ this.expanded = newModel.expanded;
+ }
},
/**
- * Invoked when audioController.time is changed.
- * @param {number} oldValue old time (in ms).
+ * Invoked when time is changed.
* @param {number} newValue new time (in ms).
+ * @param {number} oldValue old time (in ms).
*/
- onControllerTimeChanged: function(oldValue, newValue) {
+ timeChanged: function(newValue, oldValue) {
// Ignores updates from the audio element.
if (this.lastAudioUpdateTime_ === newValue)
return;
- if (this.audioElement.readyState !== 0)
- this.audioElement.currentTime = this.audioController.time / 1000;
+ if (this.audioElement && this.audioElement.readyState !== 0)
+ this.audioElement.currentTime = this.time / 1000;
},
/**
@@ -190,7 +267,7 @@ AudioPlayerElement.prototype = {
*/
onAudioEnded: function() {
this.playcount++;
- this.advance_(true /* forward */, this.model.repeat);
+ this.advance_(true /* forward */, this.repeat);
},
/**
@@ -198,7 +275,7 @@ AudioPlayerElement.prototype = {
* This handler is registered in this.ready().
*/
onAudioError: function() {
- this.scheduleAutoAdvance_(true /* forward */, this.model.repeat);
+ this.scheduleAutoAdvance_(true /* forward */, this.repeat);
},
/**
@@ -207,10 +284,10 @@ AudioPlayerElement.prototype = {
* @private
*/
onAudioStatusUpdate_: function() {
- this.audioController.time =
+ this.time =
(this.lastAudioUpdateTime_ = this.audioElement.currentTime * 1000);
- this.audioController.duration = this.audioElement.duration * 1000;
- this.audioController.playing = !this.audioElement.paused;
+ this.duration = this.audioElement.duration * 1000;
+ this.playing = !this.audioElement.paused;
},
/**
@@ -221,7 +298,7 @@ AudioPlayerElement.prototype = {
// Changes the current time back to the beginning, regardless of the current
// status (playing or paused).
this.audioElement.currentTime = 0;
- this.audioController.time = 0;
+ this.time = 0;
},
/**
@@ -237,7 +314,7 @@ AudioPlayerElement.prototype = {
var isNextTrackAvailable =
(this.trackList.getNextTrackIndex(forward, repeat) !== -1);
- this.audioController.playing = isNextTrackAvailable;
+ this.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.
@@ -303,19 +380,6 @@ AudioPlayerElement.prototype = {
},
/**
- * 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
@@ -354,27 +418,26 @@ AudioPlayerElement.prototype = {
onKeyDown_: function(event) {
switch (event.keyIdentifier) {
case 'Up':
- if (this.audioController.volumeSliderShown && this.model.volume < 100)
+ if (this.$.audioController.volumeSliderShown && this.model.volume < 100)
this.model.volume += 1;
break;
case 'Down':
- if (this.audioController.volumeSliderShown && this.model.volume > 0)
+ if (this.$.audioController.volumeSliderShown && this.model.volume > 0)
this.model.volume -= 1;
break;
case 'PageUp':
- if (this.audioController.volumeSliderShown && this.model.volume < 91)
+ if (this.$.audioController.volumeSliderShown && this.model.volume < 91)
this.model.volume += 10;
break;
case 'PageDown':
- if (this.audioController.volumeSliderShown && this.model.volume > 9)
+ 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);
+ this.playing = !this.playing;
break;
case 'MediaPreviousTrack':
this.onControllerPreviousClicked();
@@ -384,6 +447,15 @@ AudioPlayerElement.prototype = {
break;
}
},
+
+ /**
+ * Computes volume value for audio element. (should be in [0.0, 1.0])
+ * @param {number} volume Volume which is set in the UI. ([0, 100])
+ * @return {number}
+ */
+ computeAudioVolume_: function(volume) {
+ return volume / 100;
+ }
};
-Polymer('audio-player', AudioPlayerElement.prototype);
+Polymer(AudioPlayerElement.prototype);

Powered by Google App Engine
This is Rietveld 408576698