Chromium Code Reviews| Index: ui/file_manager/audio_player/js/audio_player.js |
| diff --git a/ui/file_manager/audio_player/js/audio_player.js b/ui/file_manager/audio_player/js/audio_player.js |
| index 7af7ce31080bca1fc25526209ab74ed3528ad75f..56fb77657e07ce14c62fa5405de4bbb813dc472d 100644 |
| --- a/ui/file_manager/audio_player/js/audio_player.js |
| +++ b/ui/file_manager/audio_player/js/audio_player.js |
| @@ -34,6 +34,16 @@ function AudioPlayer(container) { |
| // Initial value is null. It'll be set in load(). |
| this.isPlaylistExpanded_ = null; |
| + /** |
| + * Whether if the trackinfo is expanded or not. |
| + * True: expanded, false: collapsed, null: unset. |
| + * |
| + * @type {?boolean} |
| + * @private |
| + */ |
| + // Initial value is null. It'll be set in load(). |
| + this.isTrackInfoExpanded_ = null; |
| + |
| this.player_ = |
| /** @type {AudioPlayerElement} */ (document.querySelector('audio-player')); |
| this.player_.tracks = []; |
| @@ -42,7 +52,11 @@ function AudioPlayer(container) { |
| // if the states are changed. |
| var STORAGE_PREFIX = 'audioplayer-'; |
| var KEYS_TO_SAVE_STATES = |
| - ['shuffle', 'repeat', 'volume', 'playlist-expanded']; |
| + ['shuffle', |
| + 'repeat', |
| + 'volume', |
| + 'playlist-expanded', |
| + 'track-info-expanded']; |
| var storageKeys = KEYS_TO_SAVE_STATES.map(a => STORAGE_PREFIX + a); |
| chrome.storage.local.get(storageKeys, function(results) { |
| // Update the UI by loaded state. |
| @@ -62,11 +76,16 @@ function AudioPlayer(container) { |
| } |
| }.bind(this)); |
| - // Update the window size when UI's 'expanded' state is changed. |
| + // Update the window size when UI's 'playlist-expanded' state is changed. |
| this.player_.addEventListener('playlist-expanded-changed', function(event) { |
| this.onPlaylistExpandedChanged_(event.detail.value); |
| }.bind(this)); |
| + // Update the window size when UI's 'track-info-expanded' state is changed. |
| + this.player_.addEventListener('track-info-expanded-changed', function(event) { |
| + this.onTrackInfoExpandedChanged_(event.detail.value); |
| + }.bind(this)); |
| + |
| // Run asynchronously after an event of model change is delivered. |
| setTimeout(function() { |
| this.errorString_ = ''; |
| @@ -148,6 +167,7 @@ AudioPlayer.prototype.load = function(playlist) { |
| util.saveAppState(); |
| this.isPlaylistExpanded_ = this.player_.playlistExpanded; |
| + this.isTrackInfoExpanded_ = this.player_.trackInfoExpanded; |
| // Resolving entries has to be done after the volume manager is initialized. |
| this.volumeManager_.ensureInitialized(function() { |
| @@ -312,12 +332,11 @@ AudioPlayer.prototype.onError_ = function() { |
| * @private |
| */ |
| AudioPlayer.prototype.onResize_ = function(event) { |
| - if (!this.isPlaylistExpanded_ && |
| - window.innerHeight > AudioPlayer.EXPANDED_MODE_MIN_HEIGHT) { |
| + var trackListHeight = this.player_.$.trackList.clientHeight; |
| + if (trackListHeight > AudioPlayer.TOP_PADDING_HEIGHT) { |
| this.isPlaylistExpanded_ = true; |
| this.player_.playlistExpanded = true; |
| - } else if (this.isPlaylistExpanded_ && |
| - window.innerHeight <= AudioPlayer.EXPANDED_MODE_MIN_HEIGHT) { |
| + } else { |
| this.isPlaylistExpanded_ = false; |
| this.player_.playlistExpanded = false; |
| } |
| @@ -382,6 +401,13 @@ AudioPlayer.TRACK_HEIGHT = 48; |
| AudioPlayer.CLOSED_ARTWORK_HEIGHT = 48; |
| /** |
| + * artwork panel height in pixels, when it's opened. |
| + * @type {number} |
| + * @const |
| + */ |
| +AudioPlayer.EXPANDED_ARTWORK_HEIGHT = 320; |
| + |
| +/** |
| * Controls bar height in pixels. |
| * @type {number} |
| * @const |
| @@ -401,11 +427,20 @@ AudioPlayer.DEFAULT_EXPANDED_ITEMS = 5; |
| * @const |
| */ |
| AudioPlayer.EXPANDED_MODE_MIN_HEIGHT = AudioPlayer.TOP_PADDING_HEIGHT + |
| - AudioPlayer.CLOSED_ARTWORK_HEIGHT + |
| + AudioPlayer.EXPANDED_ARTWORK_HEIGHT + |
| AudioPlayer.CONTROLS_HEIGHT; |
| /** |
| - * Invoked when the 'expanded' property in the model is changed. |
| + * Minimum size of the window in the mode in pixels. |
| + * @type {number} |
| + * @const |
| + */ |
| +AudioPlayer.CLOSED_MODE_MIN_HEIGHT = AudioPlayer.TOP_PADDING_HEIGHT + |
| + AudioPlayer.CLOSED_ARTWORK_HEIGHT + |
| + AudioPlayer.CONTROLS_HEIGHT; |
| + |
| +/** |
| + * Invoked when the 'playlist-expanded' property in the model is changed. |
| * @param {boolean} newValue New value. |
| * @private |
| */ |
| @@ -419,7 +454,7 @@ AudioPlayer.prototype.onPlaylistExpandedChanged_ = function(newValue) { |
| if (this.isPlaylistExpanded_ !== newValue) { |
| this.isPlaylistExpanded_ = newValue; |
| - this.syncHeight_(); |
| + this.syncHeightForPlaylist_(); |
| // Saves new state. |
| window.appState.playlistExpanded = newValue; |
| @@ -428,30 +463,77 @@ AudioPlayer.prototype.onPlaylistExpandedChanged_ = function(newValue) { |
| }; |
| /** |
| + * Invoked when the 'track-info-expanded' property in the model is changed. |
| + * @param {boolean} newValue New value. |
| * @private |
| */ |
| -AudioPlayer.prototype.syncHeight_ = function() { |
| +AudioPlayer.prototype.onTrackInfoExpandedChanged_ = function(newValue) { |
| + if (this.isTrackInfoExpanded_ !== null && |
| + this.isTrackInfoExpanded_ === newValue) |
| + return; |
| + |
| + this.lastExpandedInnerHeight_ = window.innerHeight; |
| + |
| + if (this.isTrackInfoExpanded_ !== newValue) { |
| + this.isTrackInfoExpanded_ = newValue; |
| + var state = chrome.app.window.current() |
| + var newHeight = window.outerHeight; |
| + if (newValue) { |
| + state.innerBounds.minHeight = AudioPlayer.EXPANDED_MODE_MIN_HEIGHT; |
| + newHeight += AudioPlayer.EXPANDED_MODE_MIN_HEIGHT - |
| + AudioPlayer.CLOSED_MODE_MIN_HEIGHT; |
| + } else { |
| + state.innerBounds.minHeight = AudioPlayer.CLOSED_MODE_MIN_HEIGHT; |
| + newHeight -= AudioPlayer.EXPANDED_MODE_MIN_HEIGHT - |
| + AudioPlayer.CLOSED_MODE_MIN_HEIGHT; |
| + } |
| + window.resizeTo(window.outerWidth, newHeight); |
| + |
| + // Saves new state. |
| + window.appState.isTrackInfoExpanded_ = newValue; |
| + util.saveAppState(); |
| + } |
| +}; |
| + |
| +/** |
| + * @private |
| + */ |
| +AudioPlayer.prototype.syncHeightForPlaylist_ = function() { |
|
fukino
2016/02/02 06:24:20
Somehow I see extra 4 or 5 pixel margin above the
ryoh
2016/02/02 08:15:49
Done.
|
| var targetInnerHeight; |
| if (this.player_.playlistExpanded) { |
| - // Expanded. |
| + // playllist expanded. |
| if (!this.lastExpandedInnerHeight_ || |
| this.lastExpandedInnerHeight_ < AudioPlayer.EXPANDED_MODE_MIN_HEIGHT) { |
| var expandedListHeight = |
| Math.min(this.entries_.length, AudioPlayer.DEFAULT_EXPANDED_ITEMS) * |
| AudioPlayer.TRACK_HEIGHT; |
| - targetInnerHeight = AudioPlayer.TOP_PADDING_HEIGHT + |
| - expandedListHeight + |
| - AudioPlayer.CONTROLS_HEIGHT; |
| + if (this.player_.trackInfoExpanded) { |
| + targetInnerHeight = AudioPlayer.TOP_PADDING_HEIGHT + |
| + AudioPlayer.EXPANDED_ARTWORK_HEIGHT + |
| + expandedListHeight + |
| + AudioPlayer.CONTROLS_HEIGHT; |
| + } else { |
| + targetInnerHeight = AudioPlayer.TOP_PADDING_HEIGHT + |
| + AudioPlayer.TRACK_HEIGHT + |
| + expandedListHeight + |
| + AudioPlayer.CONTROLS_HEIGHT; |
| + } |
| this.lastExpandedInnerHeight_ = targetInnerHeight; |
| } else { |
| targetInnerHeight = this.lastExpandedInnerHeight_; |
| } |
| } else { |
| - // Not expanded. |
| - targetInnerHeight = AudioPlayer.TOP_PADDING_HEIGHT + |
| - AudioPlayer.TRACK_HEIGHT + |
| - AudioPlayer.CONTROLS_HEIGHT; |
| + // playllist not expanded. |
| + if (this.player_.trackInfoExpanded) { |
| + targetInnerHeight = AudioPlayer.TOP_PADDING_HEIGHT + |
| + AudioPlayer.EXPANDED_ARTWORK_HEIGHT + |
| + AudioPlayer.CONTROLS_HEIGHT; |
| + } else { |
| + targetInnerHeight = AudioPlayer.TOP_PADDING_HEIGHT + |
| + AudioPlayer.TRACK_HEIGHT + |
| + AudioPlayer.CONTROLS_HEIGHT; |
| + } |
| } |
| window.resizeTo(window.outerWidth, |
| AudioPlayer.HEADER_HEIGHT + targetInnerHeight); |