diff options
Diffstat (limited to 'mobile/android/modules/Snackbars.jsm')
-rw-r--r-- | mobile/android/modules/Snackbars.jsm | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/mobile/android/modules/Snackbars.jsm b/mobile/android/modules/Snackbars.jsm new file mode 100644 index 000000000..066a28c56 --- /dev/null +++ b/mobile/android/modules/Snackbars.jsm @@ -0,0 +1,72 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +"use strict"; + +const { classes: Cc, interfaces: Ci, utils: Cu } = Components; + +this.EXPORTED_SYMBOLS = ["Snackbars"]; + +Cu.import("resource://gre/modules/XPCOMUtils.jsm"); + +XPCOMUtils.defineLazyModuleGetter(this, "Messaging", "resource://gre/modules/Messaging.jsm"); + +const LENGTH_INDEFINITE = -2; +const LENGTH_LONG = 0; +const LENGTH_SHORT = -1; + +var Snackbars = { + LENGTH_INDEFINITE: LENGTH_INDEFINITE, + LENGTH_LONG: LENGTH_LONG, + LENGTH_SHORT: LENGTH_SHORT, + + show: function(aMessage, aDuration, aOptions) { + + // Takes care of the deprecated toast calls + if (typeof aDuration === "string") { + [aDuration, aOptions] = migrateToastIfNeeded(aDuration, aOptions); + } + + let msg = { + type: 'Snackbar:Show', + message: aMessage, + duration: aDuration, + }; + + if (aOptions && aOptions.backgroundColor) { + msg.backgroundColor = aOptions.backgroundColor; + } + + if (aOptions && aOptions.action) { + msg.action = {}; + + if (aOptions.action.label) { + msg.action.label = aOptions.action.label; + } + + Messaging.sendRequestForResult(msg).then(result => aOptions.action.callback()); + } else { + Messaging.sendRequest(msg); + } + } +}; + +function migrateToastIfNeeded(aDuration, aOptions) { + let duration; + if (aDuration === "long") { + duration = LENGTH_LONG; + } + else { + duration = LENGTH_SHORT; + } + + let options = {}; + if (aOptions && aOptions.button) { + options.action = { + label: aOptions.button.label, + callback: () => aOptions.button.callback(), + }; + } + return [duration, options]; +}
\ No newline at end of file |