| Index: ui/file_manager/file_manager/foreground/js/import_controller.js
|
| diff --git a/ui/file_manager/file_manager/foreground/js/import_controller.js b/ui/file_manager/file_manager/foreground/js/import_controller.js
|
| index 6825c30ee7f5b2f9aabd7b5920a0d4177a236d56..090d220c6abc710337ecf41a7cca83063b27a72e 100644
|
| --- a/ui/file_manager/file_manager/foreground/js/import_controller.js
|
| +++ b/ui/file_manager/file_manager/foreground/js/import_controller.js
|
| @@ -36,6 +36,9 @@ importer.ImportController =
|
| /** @private {!importer.ControllerEnvironment} */
|
| this.environment_ = environment;
|
|
|
| + /** @private {!importer.ChromeLocalStorage} */
|
| + this.storage_ = importer.ChromeLocalStorage.getInstance();
|
| +
|
| /** @private {!importer.ImportRunner} */
|
| this.importRunner_ = importRunner;
|
|
|
| @@ -88,6 +91,16 @@ importer.ImportController =
|
|
|
| this.commandWidget_.addClickListener(
|
| this.onClick_.bind(this));
|
| +
|
| + this.storage_.get(importer.Setting.HAS_COMPLETED_IMPORT, false)
|
| + .then(
|
| + /**
|
| + * @param {boolean} importCompleted If so, we hide the banner
|
| + * @this {importer.ImportController}
|
| + */
|
| + function(importCompleted) {
|
| + this.commandWidget_.setDetailsBannerVisible(!importCompleted);
|
| + }.bind(this));
|
| };
|
|
|
| /**
|
| @@ -175,6 +188,8 @@ importer.ImportController.prototype.onImportFinished_ = function(task) {
|
| this.previousImport_ = this.activeImport_;
|
| this.activeImport_ = null;
|
| this.scanManager_.reset();
|
| + this.storage_.set(importer.Setting.HAS_COMPLETED_IMPORT, true);
|
| + this.commandWidget_.setDetailsBannerVisible(false);
|
| this.checkState_();
|
| };
|
|
|
| @@ -318,7 +333,7 @@ importer.ImportController.prototype.checkState_ = function(opt_scan) {
|
| */
|
| importer.ImportController.prototype.updateUi_ =
|
| function(activityState, opt_scan) {
|
| - this.lastActivityState_ = activityState
|
| + this.lastActivityState_ = activityState;
|
| this.commandWidget_.update(activityState, opt_scan);
|
| };
|
|
|
| @@ -402,6 +417,11 @@ importer.CommandWidget.prototype.update;
|
| importer.CommandWidget.prototype.toggleDetails;
|
|
|
| /**
|
| + * Sets the details banner visibility.
|
| + */
|
| +importer.CommandWidget.prototype.setDetailsBannerVisible;
|
| +
|
| +/**
|
| * @enum {string}
|
| */
|
| importer.ClickSource = {
|
| @@ -421,6 +441,24 @@ importer.ClickSource = {
|
| importer.RuntimeCommandWidget = function() {
|
|
|
| /** @private {Element} */
|
| + this.detailsPanel_ = document.getElementById('cloud-import-details');
|
| + this.detailsPanel_.addEventListener(
|
| + 'transitionend',
|
| + this.onDetailsTransitionEnd_.bind(this),
|
| + false);
|
| +
|
| + // Any clicks on document outside of the details panel
|
| + // result in the panel being hidden.
|
| + document.onclick = this.onDetailsFocusLost_.bind(this);
|
| +
|
| + // Stop further propagation of click events.
|
| + // This allows us to listen for *any other* clicks
|
| + // to hide the panel.
|
| + this.detailsPanel_.onclick = function(event) {
|
| + event.stopPropagation();
|
| + };
|
| +
|
| + /** @private {Element} */
|
| this.mainButton_ = document.getElementById('cloud-import-button');
|
| this.mainButton_.onclick = this.onButtonClicked_.bind(
|
| this, importer.ClickSource.MAIN);
|
| @@ -443,18 +481,14 @@ importer.RuntimeCommandWidget = function() {
|
| this, importer.ClickSource.DESTINATION);
|
|
|
| /** @private {Element} */
|
| - this.detailsPanel_ = document.getElementById('cloud-import-details');
|
| - this.detailsPanel_.addEventListener(
|
| - 'transitionend',
|
| - this.onDetailsTransitionEnd_.bind(this),
|
| - false);
|
| -
|
| - /** @private {Element} */
|
| this.toolbarIcon_ =
|
| document.querySelector('#cloud-import-button core-icon');
|
| this.statusIcon_ =
|
| document.querySelector('#cloud-import-details .status core-icon');
|
|
|
| + /** @private {Element} */
|
| + this.detailsBanner_ = document.querySelector('#cloud-import-details .banner');
|
| +
|
| /** @private {function(!importer.ClickSource)} */
|
| this.clickListener_;
|
| };
|
| @@ -493,6 +527,8 @@ importer.RuntimeCommandWidget.prototype.onButtonClicked_ =
|
| default:
|
| assertNotReached('Unhandled click source: ' + source);
|
| }
|
| +
|
| + event.stopPropagation();
|
| };
|
|
|
| /** @override */
|
| @@ -500,6 +536,12 @@ importer.RuntimeCommandWidget.prototype.toggleDetails = function() {
|
| this.setDetailsVisible_(this.detailsPanel_.className === 'hidden');
|
| };
|
|
|
| +/** @override */
|
| +importer.RuntimeCommandWidget.prototype.setDetailsBannerVisible =
|
| + function(visible) {
|
| + this.detailsBanner_.hidden = !visible;
|
| +};
|
| +
|
| /**
|
| * @param {boolean} visible
|
| * @private
|
| @@ -507,9 +549,17 @@ importer.RuntimeCommandWidget.prototype.toggleDetails = function() {
|
| importer.RuntimeCommandWidget.prototype.setDetailsVisible_ = function(visible) {
|
| if (visible) {
|
| this.detailsPanel_.hidden = false;
|
| +
|
| + // The following line is a hacky way to force the container to lay out
|
| + // contents so that the transition is triggered.
|
| + // This line MUST appear before clearing the classname.
|
| + this.detailsPanel_.scrollTop += 0;
|
| +
|
| this.detailsPanel_.className = '';
|
| } else {
|
| this.detailsPanel_.className = 'hidden';
|
| + // transition duration is 200ms. Let's wait for 400ms.
|
| + ensureTransitionEndEvent(this.detailsPanel_, 400);
|
| }
|
| };
|
|
|
| @@ -524,6 +574,12 @@ importer.RuntimeCommandWidget.prototype.onDetailsTransitionEnd_ =
|
| }
|
| };
|
|
|
| +/** @private */
|
| +importer.RuntimeCommandWidget.prototype.onDetailsFocusLost_ =
|
| + function() {
|
| + this.setDetailsVisible_(false);
|
| +};
|
| +
|
| /** @override */
|
| importer.RuntimeCommandWidget.prototype.update =
|
| function(activityState, opt_scan) {
|
| @@ -536,12 +592,6 @@ importer.RuntimeCommandWidget.prototype.update =
|
| this.mainButton_.hidden = true;
|
| this.sideButton_.hidden = true;
|
|
|
| - this.mainButton_.setAttribute(
|
| - 'title',
|
| - '** SHOULD NOT BE VISIBLE **');
|
| - this.statusContent_.innerHTML =
|
| - '** SHOULD NOT BE VISIBLE **';
|
| -
|
| this.toolbarIcon_.setAttribute('icon', 'cloud-off');
|
| this.statusIcon_.setAttribute('icon', 'cloud-off');
|
|
|
|
|