Index: chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js |
diff --git a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js |
index c7b44d8a4187b59320960cc5df5917b3232c7d43..5682acc1e529b1cd3747ffc640914cf4778d96f4 100644 |
--- a/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js |
+++ b/chrome/browser/resources/chromeos/wallpaper_manager/js/wallpaper_manager.js |
@@ -236,6 +236,10 @@ function WallpaperManager(dialogDom) { |
$('close-error').addEventListener('click', function() { |
$('error-container').hidden = true; |
}); |
+ $('close-wallpaper-selection').addEventListener('click', function() { |
+ $('wallpaper-selection-container').hidden = true; |
+ $('set-wallpaper-layout').disabled = true; |
+ }); |
this.onResize_(); |
}; |
@@ -245,7 +249,8 @@ function WallpaperManager(dialogDom) { |
*/ |
WallpaperManager.prototype.presetCategory_ = function() { |
this.currentWallpaper_ = str('currentWallpaper'); |
- if (this.currentWallpaper_ && this.currentWallpaper_ == 'CUSTOM') { |
+ if (this.currentWallpaper_ && |
bshe
2013/02/26 19:07:26
the currentWallpaper is either a url contains High
flackr
2013/02/26 21:37:35
Great, I was going to comment on this. Can you add
bshe
2013/02/27 03:16:38
Done.
|
+ this.currentWallpaper_.indexOf(HighResolutionSuffix) == -1) { |
// Custom is the last one in the categories list. |
this.categoriesList_.selectionModel.selectedIndex = |
this.categoriesList_.dataModel.length - 1; |
@@ -257,12 +262,14 @@ function WallpaperManager(dialogDom) { |
// wallpaper as the default selected category when showing wallpaper |
// picker UI. |
var presetCategory = AllCategoryIndex; |
- for (var key in self.manifest_.wallpaper_list) { |
- var url = self.manifest_.wallpaper_list[key].base_url + |
- HighResolutionSuffix; |
- if (url.indexOf(self.currentWallpaper_) != -1) |
- presetCategory = self.manifest_.wallpaper_list[key].categories[0] + |
- OnlineCategoriesOffset; |
+ if (self.currentWallpaper_) { |
+ for (var key in self.manifest_.wallpaper_list) { |
+ var url = self.manifest_.wallpaper_list[key].base_url + |
+ HighResolutionSuffix; |
+ if (url.indexOf(self.currentWallpaper_) != -1) |
flackr
2013/02/26 21:37:35
nit: I believe you need braces for a multi-line lo
bshe
2013/02/27 03:16:38
Done.
|
+ presetCategory = self.manifest_.wallpaper_list[key].categories[0] + |
+ OnlineCategoriesOffset; |
flackr
2013/02/26 21:37:35
You should break when you've found the category.
bshe
2013/02/27 03:16:38
Done.
|
+ } |
} |
self.categoriesList_.selectionModel.selectedIndex = presetCategory; |
}; |
@@ -291,7 +298,7 @@ function WallpaperManager(dialogDom) { |
wallpapers.WallpaperThumbnailsGrid.decorate(this.wallpaperGrid_); |
this.wallpaperGrid_.addEventListener('change', |
- this.onThumbnailClicked_.bind(this)); |
+ this.onThumbnailSelectionChanged_.bind(this)); |
this.wallpaperGrid_.addEventListener('dblclick', this.onClose_.bind(this)); |
}; |
@@ -310,54 +317,84 @@ function WallpaperManager(dialogDom) { |
}; |
/** |
- * Sets wallpaper to the corresponding wallpaper of selected thumbnail. |
- */ |
- WallpaperManager.prototype.onThumbnailClicked_ = function() { |
- var selectedItem = this.wallpaperGrid_.selectedItem; |
- if (selectedItem && selectedItem.dynamicURL && |
- !this.wallpaperGrid_.inProgramSelection) { |
- var wallpaperURL = selectedItem.baseURL + HighResolutionSuffix; |
- var selectedGridItem = this.wallpaperGrid_.getListItem(selectedItem); |
- var self = this; |
+ * Sets wallpaper to the corresponding wallpaper of selected thumbnail. |
+ * @param {{baseURL: string, layout: string, source: string, |
+ * availableOffline: boolean, opt_dynamicURL: string, |
+ * opt_author: string, opt_authorWebsite: string}} |
+ * selectedItem the selected item in WallpaperThumbnailsGrid's data |
+ * model. |
+ */ |
bshe
2013/02/26 19:07:26
Most of the code in this function is moved from on
|
+ WallpaperManager.prototype.setSelectedWallpaper_ = function(selectedItem) { |
+ var self = this; |
+ var wallpaperURL = selectedItem.baseURL; |
+ if (selectedItem.source == 'ONLINE') |
flackr
2013/02/26 21:37:35
nit: constants for source values.
bshe
2013/02/27 03:16:38
Done.
|
+ wallpaperURL += HighResolutionSuffix; |
flackr
2013/02/26 21:37:35
TODO: Use non high resolution wallpaper when appro
bshe
2013/02/27 03:16:38
There are changes in the design on how to fetch wa
flackr
2013/02/27 14:39:52
In light of that, I'm surprised we have a high res
bshe
2013/03/01 17:43:56
Discussed offline. We should investigate removing
|
+ var selectedGridItem = this.wallpaperGrid_.getListItem(selectedItem); |
+ |
+ chrome.wallpaperPrivate.setWallpaperIfExist(wallpaperURL, |
+ selectedItem.layout, |
+ selectedItem.source, |
+ function() { |
+ if (chrome.runtime.lastError == undefined) { |
+ self.currentWallpaper_ = wallpaperURL; |
+ self.wallpaperGrid_.activeItem = selectedItem; |
+ return; |
+ } |
- chrome.wallpaperPrivate.setWallpaperIfExist(wallpaperURL, |
- selectedItem.layout, |
- 'ONLINE', |
- function() { |
- if (chrome.runtime.lastError == undefined) { |
+ if (selectedItem.source == 'CUSTOM') |
+ return; |
+ |
+ // Falls back to request wallpaper from server. |
+ if (self.wallpaperRequest_) |
+ self.wallpaperRequest_.abort(); |
+ |
+ self.wallpaperRequest_ = new XMLHttpRequest(); |
+ self.wallpaperRequest_.open('GET', wallpaperURL, true); |
+ self.wallpaperRequest_.responseType = 'arraybuffer'; |
+ self.progressManager_.reset(self.wallpaperRequest_, selectedGridItem); |
+ self.wallpaperRequest_.send(null); |
+ self.wallpaperRequest_.addEventListener('load', function(e) { |
+ if (self.wallpaperRequest_.status === 200) { |
+ var image = self.wallpaperRequest_.response; |
+ chrome.wallpaperPrivate.setWallpaper( |
+ image, |
+ selectedItem.layout, |
+ wallpaperURL, |
+ self.onFinished_.bind(self, selectedGridItem, selectedItem)); |
self.currentWallpaper_ = wallpaperURL; |
- self.wallpaperGrid_.activeItem = selectedItem; |
- return; |
+ } else { |
+ self.progressManager_.hideProgressBar(selectedGridItem); |
+ self.showError_(str('downloadFailed')); |
} |
+ self.wallpaperRequest_ = null; |
+ }); |
+ self.wallpaperRequest_.addEventListener('error', function() { |
+ self.showError_(str('downloadFailed')); |
+ }); |
+ }); |
+ }; |
- // Falls back to request wallpaper from server. |
- if (self.wallpaperRequest_) |
- self.wallpaperRequest_.abort(); |
- |
- self.wallpaperRequest_ = new XMLHttpRequest(); |
- self.wallpaperRequest_.open('GET', wallpaperURL, true); |
- self.wallpaperRequest_.responseType = 'arraybuffer'; |
- self.progressManager_.reset(self.wallpaperRequest_, selectedGridItem); |
- self.wallpaperRequest_.send(null); |
- self.wallpaperRequest_.addEventListener('load', function(e) { |
- if (self.wallpaperRequest_.status === 200) { |
- var image = self.wallpaperRequest_.response; |
- chrome.wallpaperPrivate.setWallpaper( |
- image, |
- selectedItem.layout, |
- wallpaperURL, |
- self.onFinished_.bind(self, selectedGridItem, selectedItem)); |
- self.currentWallpaper_ = wallpaperURL; |
- } else { |
- self.progressManager_.hideProgressBar(selectedGridItem); |
- self.showError_(str('downloadFailed')); |
- } |
- self.wallpaperRequest_ = null; |
- }); |
- self.wallpaperRequest_.addEventListener('error', function() { |
- self.showError_(str('downloadFailed')); |
+ /** |
+ * Handles click on a different thumbnail in wallpaper grid. |
+ */ |
+ WallpaperManager.prototype.onThumbnailSelectionChanged_ = function() { |
+ var selectedItem = this.wallpaperGrid_.selectedItem; |
+ if (selectedItem && selectedItem.source == 'ADDNEW') |
+ return; |
+ |
+ if (selectedItem && selectedItem.baseURL && |
+ !this.wallpaperGrid_.inProgramSelection) { |
flackr
2013/02/26 21:37:35
pardon my ignorance, but what does inProgramSelect
bshe
2013/02/27 03:16:38
Sorry for confusion. When the current thumbnail se
|
+ if (selectedItem.source == 'CUSTOM') { |
+ var items = {}; |
+ var key = selectedItem.baseURL; |
+ var self = this; |
+ this.storage_.get(key, function(items) { |
+ selectedItem.layout = items[key] ? items[key] : 'CENTER_CROPPED'; |
+ self.setSelectedWallpaper_(selectedItem); |
}); |
- }); |
+ } else { |
+ this.setSelectedWallpaper_(selectedItem); |
+ } |
} |
this.setWallpaperAttribution_(selectedItem); |
}; |
@@ -376,6 +413,7 @@ function WallpaperManager(dialogDom) { |
$('author-website').textContent = $('author-website').href = |
selectedItem.authorWebsite; |
chrome.wallpaperPrivate.getThumbnail(selectedItem.baseURL, |
+ selectedItem.source, |
function(data) { |
var img = $('attribute-image'); |
if (data) { |
@@ -477,32 +515,59 @@ function WallpaperManager(dialogDom) { |
}); |
reader.addEventListener('load', function(e) { |
self.customWallpaperData_ = e.target.result; |
- self.refreshWallpaper_(self.customWallpaperData_); |
+ var layout = self.getSelectedLayout_(); |
+ chrome.wallpaperPrivate.setCustomWallpaper(self.customWallpaperData_, |
+ layout, self.onSetCustomWallpaperFinished_.bind(self)); |
}); |
- this.generateThumbnail_(files[0]); |
}; |
/** |
- * Refreshes the custom wallpaper with the current selected layout. |
- * @param {ArrayBuffer} customWallpaper The raw wallpaper file data. |
+ * Retruns the current selected layout. |
+ * @return {string} The selected layout. |
*/ |
- WallpaperManager.prototype.refreshWallpaper_ = function(customWallpaper) { |
+ WallpaperManager.prototype.getSelectedLayout_ = function() { |
var setWallpaperLayout = $('set-wallpaper-layout'); |
- var layout = |
- setWallpaperLayout.options[setWallpaperLayout.selectedIndex].value; |
- chrome.wallpaperPrivate.setCustomWallpaper(customWallpaper, |
- layout, |
- this.onFinished_.bind(this)); |
- this.currentWallpaper_ = 'CUSTOM'; |
+ return setWallpaperLayout.options[setWallpaperLayout.selectedIndex].value; |
}; |
/** |
- * Sets wallpaper finished. Displays error message in butter bar if any. |
+ * Add new thumbnail to custom wallpaper grid and set it as active thumbnail. |
+ * @param {string=} opt_fileName The file name used to save the new selected |
flackr
2013/02/26 21:37:35
When is the filename optional / not passed?
bshe
2013/02/27 03:16:38
When custom wallpaper layout change finished, this
flackr
2013/02/27 14:39:52
Comment this please.
On 2013/02/27 03:16:38, bshe
bshe
2013/03/01 17:43:56
Done.
|
+ * custom wallpaper. |
+ */ |
+ WallpaperManager.prototype.onSetCustomWallpaperFinished_ = |
+ function(opt_fileName) { |
+ if (chrome.runtime.lastError != undefined) { |
+ this.showError_(chrome.runtime.lastError.message); |
+ $('set-wallpaper-layout').disabled = true; |
+ } else { |
+ var layout = this.getSelectedLayout_(); |
+ $('set-wallpaper-layout').disabled = false; |
+ if (opt_fileName) { |
+ var wallpaperInfo = { |
+ baseURL: opt_fileName, |
+ layout: layout, |
+ source: 'CUSTOM', |
+ availableOffline: true |
+ }; |
+ this.currentWallpaper_ = opt_fileName; |
+ var items = {}; |
+ items[this.currentWallpaper_] = layout; |
+ this.storage_.set(items, function() {}); |
+ this.wallpaperGrid_.dataModel.splice(0, 0, wallpaperInfo); |
+ this.wallpaperGrid_.selectedItem = wallpaperInfo; |
+ this.wallpaperGrid_.activeItem = wallpaperInfo; |
+ } |
+ } |
+ }; |
+ |
+ /** |
+ * Sets wallpaper finished. Displays error message if any. |
* @param {WallpaperThumbnailsGridItem=} opt_selectedGridItem The wallpaper |
* thumbnail grid item. It extends from cr.ui.ListItem. |
- * @param {{baseURL: string, dynamicURL: string, layout: string, |
- * author: string, authorWebsite: string, |
- * availableOffline: boolean}=} |
+ * @param {{baseURL: string, layout: string, source: string, |
+ * availableOffline: boolean, opt_dynamicURL: string, |
+ * opt_author: string, opt_authorWebsite: string}=} |
* opt_selectedItem the selected item in WallpaperThumbnailsGrid's data |
* model. |
*/ |
@@ -522,35 +587,12 @@ function WallpaperManager(dialogDom) { |
* Handles the layout setting change of custom wallpaper. |
*/ |
WallpaperManager.prototype.onWallpaperLayoutChanged_ = function() { |
- var setWallpaperLayout = $('set-wallpaper-layout'); |
- var layout = |
- setWallpaperLayout.options[setWallpaperLayout.selectedIndex].value; |
- chrome.wallpaperPrivate.setCustomWallpaperLayout(layout, |
- this.onFinished_.bind(this)); |
- }; |
- |
- /** |
- * Generates a thumbnail of user selected image file. |
- * @param {Object} file The file user selected from file manager. |
- */ |
- WallpaperManager.prototype.generateThumbnail_ = function(file) { |
- var img = $('preview'); |
- img.file = file; |
- var reader = new FileReader(); |
- reader.addEventListener('load', function(e) { |
- img.src = e.target.result; |
- }); |
- reader.readAsDataURL(file); |
- }; |
- |
- /** |
- * Toggle visibility of custom container and category container. |
- * @param {boolean} showCustom True if display custom container and hide |
- * category container. |
- */ |
- WallpaperManager.prototype.showCustomContainer_ = function(showCustom) { |
- $('category-container').hidden = showCustom; |
- $('custom-container').hidden = !showCustom; |
+ var layout = this.getSelectedLayout_(); |
+ var items = {}; |
+ items[this.currentWallpaper_] = layout; |
+ this.storage_.set(items, function() {}); |
+ chrome.wallpaperPrivate.setCustomWallpaperLayout(layout, |
+ this.onSetCustomWallpaperFinished_.bind(this)); |
}; |
/** |
@@ -566,23 +608,49 @@ function WallpaperManager(dialogDom) { |
bar.style.left = selectedListItem.offsetLeft + 'px'; |
bar.style.width = selectedListItem.offsetWidth + 'px'; |
+ var wallpapersDataModel = new cr.ui.ArrayDataModel([]); |
+ var selectedItem; |
if (selectedListItem.custom) { |
- this.showCustomContainer_(true); |
+ $('online-wallpaper-attribute').hidden = true; |
+ var self = this; |
+ chrome.wallpaperPrivate.getOfflineWallpaperList('CUSTOM', |
+ function(lists) { |
+ for (var i = 0; i < lists.length; i++) { |
+ var wallpaperInfo = { |
+ baseURL: lists[i], |
+ layout: 'CENTER_CROPPED', |
flackr
2013/02/26 21:37:35
So this is later replaced with the last used layou
bshe
2013/02/27 03:16:38
Right. It will be replaced by the value in local s
flackr
2013/02/27 14:39:52
Please add comment to this effect.
On 2013/02/27
bshe
2013/03/01 17:43:56
Done.
|
+ source: 'CUSTOM', |
+ availableOffline: true |
+ }; |
+ if (self.currentWallpaper_ == lists[i]) |
+ selectedItem = wallpaperInfo; |
+ wallpapersDataModel.push(wallpaperInfo); |
+ } |
+ var lastElement = { |
+ baseURL: '', |
+ layout: '', |
+ source: 'ADDNEW', |
+ availableOffline: true |
+ }; |
+ wallpapersDataModel.push(lastElement); |
+ self.wallpaperGrid_.dataModel = wallpapersDataModel; |
+ self.wallpaperGrid_.selectedItem = selectedItem; |
+ self.wallpaperGrid_.activeItem = selectedItem; |
+ }); |
} else { |
- this.showCustomContainer_(false); |
- var selectedItem; |
- var wallpapersDataModel = new cr.ui.ArrayDataModel([]); |
+ $('online-wallpaper-attribute').hidden = false; |
for (var key in this.manifest_.wallpaper_list) { |
if (selectedIndex == AllCategoryIndex || |
this.manifest_.wallpaper_list[key].categories.indexOf( |
selectedIndex - OnlineCategoriesOffset) != -1) { |
var wallpaperInfo = { |
baseURL: this.manifest_.wallpaper_list[key].base_url, |
- dynamicURL: this.manifest_.wallpaper_list[key].dynamic_url, |
layout: this.manifest_.wallpaper_list[key].default_layout, |
+ source: 'ONLINE', |
+ availableOffline: false, |
author: this.manifest_.wallpaper_list[key].author, |
authorWebsite: this.manifest_.wallpaper_list[key].author_website, |
- availableOffline: false |
+ dynamicURL: this.manifest_.wallpaper_list[key].dynamic_url |
}; |
var startIndex = wallpaperInfo.baseURL.lastIndexOf('/') + 1; |
var fileName = wallpaperInfo.baseURL.substring(startIndex) + |