| Index: ui/file_manager/file_manager/foreground/js/ui/banners.js
|
| diff --git a/ui/file_manager/file_manager/foreground/js/ui/banners.js b/ui/file_manager/file_manager/foreground/js/ui/banners.js
|
| index 8d19ac0eb3a91d22bbd1f9f1fb05c89628c334ab..b8ae8e3884b0840866558194e33a719e7cb82520 100644
|
| --- a/ui/file_manager/file_manager/foreground/js/ui/banners.js
|
| +++ b/ui/file_manager/file_manager/foreground/js/ui/banners.js
|
| @@ -41,16 +41,23 @@ function Banners(
|
| chrome.storage.onChanged.addListener(this.onStorageChange_.bind(this));
|
| this.welcomeHeaderCounter_ = WELCOME_HEADER_COUNTER_LIMIT;
|
| this.warningDismissedCounter_ = 0;
|
| + this.downloadsWarningDismissedTime_ = 0;
|
|
|
| this.ready_ = Promise.all([
|
| new Promise(function(resolve, reject) {
|
| chrome.storage.local.get(
|
| - [WELCOME_HEADER_COUNTER_KEY, WARNING_DISMISSED_KEY],
|
| + [
|
| + WELCOME_HEADER_COUNTER_KEY,
|
| + DRIVE_WARNING_DISMISSED_KEY,
|
| + DOWNLOADS_WARNING_DISMISSED_KEY
|
| + ],
|
| function(values) {
|
| this.welcomeHeaderCounter_ =
|
| parseInt(values[WELCOME_HEADER_COUNTER_KEY], 10) || 0;
|
| this.warningDismissedCounter_ =
|
| - parseInt(values[WARNING_DISMISSED_KEY], 10) || 0;
|
| + parseInt(values[DRIVE_WARNING_DISMISSED_KEY], 10) || 0;
|
| + this.downloadsWarningDismissedTime_ =
|
| + parseInt(values[DOWNLOADS_WARNING_DISMISSED_KEY], 10) || 0;
|
|
|
| // If it's in test, override the counter to show the header by
|
| // force.
|
| @@ -96,7 +103,14 @@ var WELCOME_HEADER_COUNTER_KEY = 'driveWelcomeHeaderCounter';
|
| // If the warning was dismissed before, this key stores the quota value
|
| // (as of the moment of dismissal).
|
| // If the warning was never dismissed or was reset this key stores 0.
|
| -var WARNING_DISMISSED_KEY = 'driveSpaceWarningDismissed';
|
| +var DRIVE_WARNING_DISMISSED_KEY = 'driveSpaceWarningDismissed';
|
| +
|
| +/**
|
| + * If the warning was dismissed before, this key stores the moment of dismissal
|
| + * in milliseconds since the UNIX epoch (i.e. the value of Date.now()).
|
| + * @const {string}
|
| + */
|
| +var DOWNLOADS_WARNING_DISMISSED_KEY = 'downloadsSpaceWarningDismissed';
|
|
|
| /**
|
| * Maximum times Drive Welcome banner could have shown.
|
| @@ -104,6 +118,26 @@ var WARNING_DISMISSED_KEY = 'driveSpaceWarningDismissed';
|
| var WELCOME_HEADER_COUNTER_LIMIT = 25;
|
|
|
| /**
|
| + * If the remaining space in Drive is less than 10%, we'll show a warning.
|
| + * @const {number}
|
| + */
|
| +var DRIVE_SPACE_WARNING_THRESHOLD_RATIO = 0.1;
|
| +
|
| +/**
|
| + * If the remaining space in Downloads is less than 1GB, we'll show a warning.
|
| + * This value is in bytes.
|
| + * @const {number}
|
| + */
|
| +var DOWNLOADS_SPACE_WARNING_THRESHOLD_SIZE = 1 * 1024 * 1024 * 1024;
|
| +
|
| +/**
|
| + * After the warning banner is dismissed, we won't show it for 36 hours.
|
| + * This value is in milliseconds.
|
| + * @const {number}
|
| + */
|
| +var DOWNLOADS_SPACE_WARNING_DISMISS_DURATION = 36 * 60 * 60 * 1000;
|
| +
|
| +/**
|
| * Initializes the banner to promote DRIVE.
|
| * This method must be called before any of showing banner functions, and
|
| * also before registering them as callbacks.
|
| @@ -132,7 +166,7 @@ Banners.prototype.setWelcomeHeaderCounter_ = function(value) {
|
| */
|
| Banners.prototype.setWarningDismissedCounter_ = function(value) {
|
| var values = {};
|
| - values[WARNING_DISMISSED_KEY] = value;
|
| + values[DRIVE_WARNING_DISMISSED_KEY] = value;
|
| chrome.storage.local.set(values);
|
| };
|
|
|
| @@ -146,8 +180,13 @@ Banners.prototype.onStorageChange_ = function(changes, areaName) {
|
| if (areaName == 'local' && WELCOME_HEADER_COUNTER_KEY in changes) {
|
| this.welcomeHeaderCounter_ = changes[WELCOME_HEADER_COUNTER_KEY].newValue;
|
| }
|
| - if (areaName == 'local' && WARNING_DISMISSED_KEY in changes) {
|
| - this.warningDismissedCounter_ = changes[WARNING_DISMISSED_KEY].newValue;
|
| + if (areaName == 'local' && DRIVE_WARNING_DISMISSED_KEY in changes) {
|
| + this.warningDismissedCounter_ =
|
| + changes[DRIVE_WARNING_DISMISSED_KEY].newValue;
|
| + }
|
| + if (areaName == 'local' && DOWNLOADS_WARNING_DISMISSED_KEY in changes) {
|
| + this.downloadsWarningDismissedTime_ =
|
| + changes[DOWNLOADS_WARNING_DISMISSED_KEY].newValue;
|
| }
|
| };
|
|
|
| @@ -298,7 +337,7 @@ Banners.prototype.showLowDriveSpaceWarning_ = function(show, opt_sizeStats) {
|
| box.appendChild(close);
|
| close.addEventListener('click', function(total) {
|
| var values = {};
|
| - values[WARNING_DISMISSED_KEY] = total;
|
| + values[DRIVE_WARNING_DISMISSED_KEY] = total;
|
| chrome.storage.local.set(values);
|
| box.hidden = true;
|
| this.requestRelayout_(100);
|
| @@ -536,15 +575,12 @@ Banners.prototype.privateOnDirectoryChanged_ = function(event) {
|
| */
|
| Banners.prototype.maybeShowLowSpaceWarning_ = function(volume) {
|
| // TODO(kaznacheev): Unify the two low space warning.
|
| - var threshold = 0;
|
| switch (volume.volumeType) {
|
| case VolumeManagerCommon.VolumeType.DOWNLOADS:
|
| this.showLowDriveSpaceWarning_(false);
|
| - threshold = 0.2;
|
| break;
|
| case VolumeManagerCommon.VolumeType.DRIVE:
|
| this.showLowDownloadsSpaceWarning_(false);
|
| - threshold = 0.1;
|
| break;
|
| default:
|
| // If the current file system is neither the DOWNLOAD nor the DRIVE,
|
| @@ -572,12 +608,16 @@ Banners.prototype.maybeShowLowSpaceWarning_ = function(volume) {
|
| if (!sizeStats || sizeStats.totalSize == 0)
|
| return;
|
|
|
| - var remainingRatio = sizeStats.remainingSize / sizeStats.totalSize;
|
| - var isLowDiskSpace = remainingRatio < threshold;
|
| - if (volume.volumeType === VolumeManagerCommon.VolumeType.DOWNLOADS)
|
| - this.showLowDownloadsSpaceWarning_(isLowDiskSpace);
|
| - else
|
| - this.showLowDriveSpaceWarning_(isLowDiskSpace, sizeStats);
|
| + if (volume.volumeType === VolumeManagerCommon.VolumeType.DOWNLOADS) {
|
| + // Show the warning banner when the available space is less than 1GB.
|
| + this.showLowDownloadsSpaceWarning_(
|
| + sizeStats.remainingSize < DOWNLOADS_SPACE_WARNING_THRESHOLD_SIZE);
|
| + } else {
|
| + // Show the warning banner when the available space ls less than 10%.
|
| + var remainingRatio = sizeStats.remainingSize / sizeStats.totalSize;
|
| + this.showLowDriveSpaceWarning_(
|
| + remainingRatio < DRIVE_SPACE_WARNING_THRESHOLD_RATIO, sizeStats);
|
| + }
|
| }.bind(this));
|
| };
|
|
|
| @@ -609,12 +649,22 @@ Banners.prototype.requestRelayout_ = function(delay) {
|
| Banners.prototype.showLowDownloadsSpaceWarning_ = function(show) {
|
| var box = this.document_.querySelector('.downloads-warning');
|
|
|
| - if (box.hidden == !show) return;
|
| + if (box.hidden == !show)
|
| + return;
|
|
|
| + if (this.downloadsWarningDismissedTime_) {
|
| + if (Date.now() - this.downloadsWarningDismissedTime_ <
|
| + DOWNLOADS_SPACE_WARNING_DISMISS_DURATION) {
|
| + show = false;
|
| + }
|
| + }
|
| +
|
| + box.textContent = '';
|
| if (show) {
|
| var icon = this.document_.createElement('div');
|
| icon.className = 'warning-icon';
|
| var message = this.document_.createElement('div');
|
| + message.className = 'warning-message';
|
| message.innerHTML = util.htmlUnescape(str('DOWNLOADS_DIRECTORY_WARNING'));
|
| box.appendChild(icon);
|
| box.appendChild(message);
|
| @@ -622,8 +672,17 @@ Banners.prototype.showLowDownloadsSpaceWarning_ = function(show) {
|
| util.visitURL(str('DOWNLOADS_LOW_SPACE_WARNING_HELP_URL'));
|
| e.preventDefault();
|
| });
|
| - } else {
|
| - box.innerHTML = '';
|
| +
|
| + var close = this.document_.createElement('div');
|
| + close.className = 'banner-close';
|
| + box.appendChild(close);
|
| + close.addEventListener('click', function() {
|
| + var values = {};
|
| + values[DOWNLOADS_WARNING_DISMISSED_KEY] = Date.now();
|
| + chrome.storage.local.set(values);
|
| + box.hidden = true;
|
| + this.requestRelayout_(100);
|
| + }.bind(this));
|
| }
|
|
|
| box.hidden = !show;
|
|
|