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 777e3a7ab02024048de82032c597d17583fdf0c9..01acf522ccf07b50ed745aa97e78f23433b263f1 100644 |
--- a/ui/file_manager/file_manager/foreground/js/import_controller.js |
+++ b/ui/file_manager/file_manager/foreground/js/import_controller.js |
@@ -143,6 +143,7 @@ importer.ImportController.prototype.onScanEvent_ = function(event, scan) { |
importer.ImportController.prototype.onVolumeUnmounted_ = function(volumeId) { |
if (this.activeImport_) { |
this.activeImport_.task.requestCancel(); |
+ this.finalizeActiveImport_(); |
this.tracker_.send(metrics.ImportEvents.DEVICE_YANKED); |
} |
this.scanManager_.reset(); |
@@ -191,10 +192,7 @@ importer.ImportController.prototype.onSelectionChanged_ = function() { |
* @private |
*/ |
importer.ImportController.prototype.onImportFinished_ = function(task) { |
- console.assert(!!this.activeImport_, |
- 'Cannot finish import when none is running.'); |
- this.previousImport_ = this.activeImport_; |
- this.activeImport_ = null; |
+ this.finalizeActiveImport_(); |
this.scanManager_.reset(); |
this.storage_.set(importer.Setting.HAS_COMPLETED_IMPORT, true); |
this.commandWidget_.setDetailsBannerVisible(false); |
@@ -202,6 +200,17 @@ importer.ImportController.prototype.onImportFinished_ = function(task) { |
}; |
/** |
+ * Does book keeping necessary to finalize the active task. |
+ * @private |
+ */ |
+importer.ImportController.prototype.finalizeActiveImport_ = function() { |
+ console.assert(!!this.activeImport_, |
+ 'Cannot finish import when none is running.'); |
+ this.previousImport_ = this.activeImport_; |
+ this.activeImport_ = null; |
+}; |
+ |
+/** |
* Handles button clicks emenating from the panel or toolbar. |
* @param {!importer.ClickSource} source |
*/ |
@@ -210,13 +219,16 @@ importer.ImportController.prototype.onClick_ = |
switch (source) { |
case importer.ClickSource.MAIN: |
if (this.lastActivityState_ === importer.ActivityState.READY) { |
- this.execute(); |
+ this.execute_(); |
} else { |
this.commandWidget_.toggleDetails(); |
} |
break; |
- case importer.ClickSource.PANEL: |
- this.execute(); |
+ case importer.ClickSource.IMPORT: |
+ this.execute_(); |
+ break; |
+ case importer.ClickSource.CANCEL: |
+ this.cancel_(); |
break; |
case importer.ClickSource.DESTINATION: |
if (this.activeImport_) { |
@@ -239,8 +251,10 @@ importer.ImportController.prototype.onClick_ = |
* Executes import against the current directory. Should only |
* be called when the current directory has been validated |
* by calling "update" on this class. |
+ * |
+ * @private |
*/ |
-importer.ImportController.prototype.execute = function() { |
+importer.ImportController.prototype.execute_ = function() { |
console.assert(!this.activeImport_, |
'Cannot execute while an import task is already active.'); |
@@ -264,6 +278,19 @@ importer.ImportController.prototype.execute = function() { |
}; |
/** |
+ * Cancels the active task. |
+ * @private |
+ */ |
+importer.ImportController.prototype.cancel_ = function() { |
+ this.activeImport_.task.requestCancel(); |
+ this.finalizeActiveImport_(); |
+ this.tracker_.send(metrics.ImportEvents.IMPORT_CANCELLED); |
+ |
+ this.scanManager_.reset(); |
+ this.checkState_(); |
+}; |
+ |
+/** |
* Checks the environment and updates UI as needed. |
* @param {importer.ScanResult=} opt_scan If supplied, |
* @private |
@@ -440,9 +467,10 @@ importer.CommandWidget.prototype.setDetailsBannerVisible; |
* @enum {string} |
*/ |
importer.ClickSource = { |
+ CANCEL: 'cancel', |
DESTINATION: 'destination', |
+ IMPORT: 'import', |
MAIN: 'main', |
- PANEL: 'panel', |
SIDE: 'side' |
}; |
@@ -484,10 +512,16 @@ importer.RuntimeCommandWidget = function() { |
this, importer.ClickSource.SIDE); |
/** @private {Element} */ |
- this.panelButton_ = |
+ this.importButton_ = |
document.querySelector('#cloud-import-details paper-button.import'); |
- this.panelButton_.onclick = this.onButtonClicked_.bind( |
- this, importer.ClickSource.PANEL); |
+ this.importButton_.onclick = this.onButtonClicked_.bind( |
+ this, importer.ClickSource.IMPORT); |
+ |
+ /** @private {Element} */ |
+ this.cancelButton_ = |
+ document.querySelector('#cloud-import-details paper-button.cancel'); |
+ this.cancelButton_.onclick = this.onButtonClicked_.bind( |
+ this, importer.ClickSource.CANCEL); |
/** @private {Element} */ |
this.statusContent_ = |
@@ -565,7 +599,8 @@ importer.RuntimeCommandWidget.prototype.onButtonClicked_ = |
switch (source) { |
case importer.ClickSource.MAIN: |
- case importer.ClickSource.PANEL: |
+ case importer.ClickSource.IMPORT: |
+ case importer.ClickSource.CANCEL: |
this.clickListener_(source); |
break; |
case importer.ClickSource.DESTINATION: |
@@ -644,8 +679,6 @@ importer.RuntimeCommandWidget.prototype.update = |
case importer.ActivityState.HIDDEN: |
this.setDetailsVisible(false); |
- this.panelButton_.disabled = true; |
- |
this.mainButton_.hidden = true; |
this.sideButton_.hidden = true; |
@@ -665,11 +698,10 @@ importer.RuntimeCommandWidget.prototype.update = |
'CLOUD_IMPORT_STATUS_IMPORTING', |
opt_scan.getFileEntries().length); |
- this.panelButton_.disabled = true; |
- |
this.mainButton_.hidden = false; |
this.sideButton_.hidden = false; |
- this.panelButton_.hidden = true; |
+ this.importButton_.hidden = true; |
+ this.cancelButton_.hidden = false; |
this.toolbarIcon_.setAttribute('icon', 'autorenew'); |
this.statusIcon_.setAttribute('icon', 'autorenew'); |
@@ -685,11 +717,10 @@ importer.RuntimeCommandWidget.prototype.update = |
'CLOUD_IMPORT_STATUS_INSUFFICIENT_SPACE', |
opt_scan.getFileEntries().length); |
- this.panelButton_.disabled = true; |
- |
this.mainButton_.hidden = false; |
this.sideButton_.hidden = false; |
- this.panelButton_.hidden = true; |
+ this.importButton_.hidden = true; |
+ this.cancelButton_.hidden = true; |
this.toolbarIcon_.setAttribute('icon', 'cloud-off'); |
this.statusIcon_.setAttribute('icon', 'image:photo'); |
@@ -701,12 +732,10 @@ importer.RuntimeCommandWidget.prototype.update = |
this.statusContent_.innerHTML = str( |
'CLOUD_IMPORT_STATUS_NO_MEDIA'); |
- this.panelButton_.disabled = true; |
- |
this.mainButton_.hidden = false; |
this.sideButton_.hidden = false; |
- // Hidden for now, since this is also the "done" importing case. |
- this.panelButton_.hidden = true; |
+ this.importButton_.hidden = true; |
+ this.cancelButton_.hidden = true; |
this.toolbarIcon_.setAttribute('icon', 'cloud-done'); |
this.statusIcon_.setAttribute('icon', 'cloud-done'); |
@@ -722,11 +751,10 @@ importer.RuntimeCommandWidget.prototype.update = |
'CLOUD_IMPORT_STATUS_READY', |
opt_scan.getFileEntries().length); |
- this.panelButton_.disabled = false; |
- |
this.mainButton_.hidden = false; |
this.sideButton_.hidden = false; |
- this.panelButton_.hidden = false; |
+ this.importButton_.hidden = false; |
+ this.cancelButton_.hidden = true; |
this.toolbarIcon_.setAttribute('icon', 'cloud-upload'); |
this.statusIcon_.setAttribute('icon', 'image:photo'); |
@@ -741,11 +769,11 @@ importer.RuntimeCommandWidget.prototype.update = |
'CLOUD_IMPORT_STATUS_SCANNING', |
opt_scan.getFileEntries().length); |
- this.panelButton_.disabled = true; |
- |
this.mainButton_.hidden = false; |
this.sideButton_.hidden = false; |
- this.panelButton_.hidden = true; |
+ this.importButton_.hidden = true; |
+ // TODO(smckay): implement cancellation for scanning. |
+ this.cancelButton_.hidden = true; |
this.toolbarIcon_.setAttribute('icon', 'autorenew'); |
this.statusIcon_.setAttribute('icon', 'autorenew'); |