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() { |
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); |