Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Unified Diff: ui/file_manager/file_manager/foreground/js/import_controller.js

Issue 883973002: Move cloud import button to toolbar, make material designey. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add test coverage for new command update logic. Fix a type, and undo some early debug code. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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 b6f99d4d09ac9c18fe272a07b5e45f4f7f58179c..8c3be8059ee25dd12c7eac2e2b972ad84d4b0c15 100644
--- a/ui/file_manager/file_manager/foreground/js/import_controller.js
+++ b/ui/file_manager/file_manager/foreground/js/import_controller.js
@@ -18,7 +18,8 @@ importer.ResponseId = {
* id: !importer.ResponseId,
* label: string,
* visible: boolean,
- * executable: boolean
+ * executable: boolean,
+ * coreIcon: string
* }}
*/
importer.CommandUpdate;
@@ -67,6 +68,8 @@ importer.ImportController =
}.bind(this));
this.environment_.addVolumeUnmountListener(
this.onVolumeUnmounted_.bind(this));
+ this.environment_.addDirectoryChangedListener(
+ this.onDirectoryChanged_.bind(this));
};
/**
@@ -170,28 +173,32 @@ importer.ImportController.createUpdate_ =
id: responseId,
visible: false,
executable: false,
- label: '** SHOULD NOT BE VISIBLE **'
+ label: '** SHOULD NOT BE VISIBLE **',
+ coreIcon: 'cloud-off'
};
case importer.ResponseId.SCANNING:
return {
id: responseId,
visible: true,
executable: false,
- label: str('CLOUD_IMPORT_SCANNING_BUTTON_LABEL')
+ label: str('CLOUD_IMPORT_SCANNING_BUTTON_LABEL'),
+ coreIcon: 'autorenew'
};
case importer.ResponseId.NO_MEDIA:
return {
id: responseId,
visible: true,
executable: false,
- label: str('CLOUD_IMPORT_EMPTY_SCAN_BUTTON_LABEL')
+ label: str('CLOUD_IMPORT_EMPTY_SCAN_BUTTON_LABEL'),
+ coreIcon: 'cloud-done'
};
case importer.ResponseId.EXECUTABLE:
return {
id: responseId,
label: strf('CLOUD_IMPORT_BUTTON_LABEL', opt_fileCount),
visible: true,
- executable: true
+ executable: true,
+ coreIcon: 'cloud-upload'
};
default:
assertNotReached('Unrecognized response id: ' + responseId);
@@ -268,6 +275,14 @@ importer.ImportController.prototype.onVolumeUnmounted_ = function(volumeId) {
};
/**
+ * @param {string} volumeId
+ * @private
+ */
+importer.ImportController.prototype.onDirectoryChanged_ = function() {
+ this.updateCommands_();
+};
+
+/**
* Interface abstracting away the concrete file manager available
* to commands. By hiding file manager we make it easy to test
* ImportController.
@@ -308,6 +323,13 @@ importer.ControllerEnvironment.prototype.isGoogleDriveMounted;
importer.ControllerEnvironment.prototype.addVolumeUnmountListener;
/**
+ * Installs an 'directory-changed' listener. Listener is called when
+ * the directory changed.
+ * @param {function()} listener
+ */
+importer.ControllerEnvironment.prototype.addDirectoryChangedListener;
+
+/**
* Class providing access to various pieces of information in the
* FileManager environment, like the current directory, volumeinfo lookup
* By hiding file manager we make it easy to test importer.ImportController.
@@ -358,6 +380,7 @@ importer.RuntimeControllerEnvironment.prototype.isGoogleDriveMounted =
/** @override */
importer.RuntimeControllerEnvironment.prototype.addVolumeUnmountListener =
function(listener) {
+ // TODO(smckay): remove listeners when the page is torn down.
chrome.fileManagerPrivate.onMountCompleted.addListener(
/**
* @param {!MountCompletedEvent} event
@@ -369,3 +392,63 @@ importer.RuntimeControllerEnvironment.prototype.addVolumeUnmountListener =
}
});
};
+
+/** @override */
+importer.RuntimeControllerEnvironment.prototype.addDirectoryChangedListener =
+ function(listener) {
+ // TODO(smckay): remove listeners when the page is torn down.
+ this.fileManager_.directoryModel.addEventListener(
+ 'directory-changed',
+ listener);
+};
+
+/**
+ * Class that adapts from the new non-command button to the old
+ * command style interface.
+ *
+ * <p>NOTE: This adapter is a stop gap bridge between the old-style
+ * Command button and our new do-it-yourself toolbar button. We used
+ * an adapter to minimize changes to RuntimeImportController while other
+ * people are working on that file. Once the dust settles we can make
+ * more transformative changes.
+ *
+ * @constructor
+ * @struct
+ *
+ * @param {!FileManager} fileManager
+ */
+importer.ButtonCommandAdapter = function(fileManager) {
+
+ /** @param {!FileManager} */
+ this.fileManager_ = fileManager;
+
+ /** @param {Element} */
+ this.buttonElement_ = document.querySelector('#cloud-import-button');
+
+ this.buttonElement_.onclick = this.execute_.bind(this);
+
+ /** @param {Element} */
+ this.iconElement_ = document.querySelector('#cloud-import-button core-icon');
+};
+
+/** @private */
+importer.ButtonCommandAdapter.prototype.execute_ = function() {
+ this.fileManager_.importController.execute();
+};
+
+/**
+ * @param {!Event} event Command event.
+ * @param {!FileManager} fileManager
+ */
+importer.ButtonCommandAdapter.prototype.update = function() {
+ if (this.fileManager_.importController) {
+ var update = fileManager.importController.getCommandUpdate();
+ this.buttonElement_.setAttribute('title', update.label);
+ this.buttonElement_.disabled = !update.executable;
+ this.buttonElement_.style.display = update.visible ? 'block' : 'none';
+ this.iconElement_.setAttribute('icon', update.coreIcon);
+ } else {
+ this.buttonElement_.setAttribute('display', 'none');
+ this.iconElement_.setAttribute('icon', 'cloud-off');
+ }
+};

Powered by Google App Engine
This is Rietveld 408576698