From: Pawel Andruszkiewicz Date: Fri, 30 Oct 2015 09:18:40 +0000 (+0100) Subject: [Dialog] Dialogs adapted to cordova plugin model. X-Git-Tag: submit/tizen/20151221.111205^2~74 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ba41a80e2f366295fef348e6a0211badfcda2529;p=platform%2Fcore%2Fapi%2Fcordova-plugins.git [Dialog] Dialogs adapted to cordova plugin model. [Verification] All tests pass. Change-Id: Id724726f37a6c1ec4c3b76df08dde93e6482e6d4 Signed-off-by: Pawel Andruszkiewicz --- diff --git a/src/dialog/cordova_dialog_api.js b/src/dialog/cordova_dialog_api.js index 37dbadf..a1f5aa6 100755 --- a/src/dialog/cordova_dialog_api.js +++ b/src/dialog/cordova_dialog_api.js @@ -14,14 +14,19 @@ * limitations under the License. */ -var _navigator = navigator || {}; +// TODO: remove when added to public cordova repository -> begin +var plugin_name = 'cordova-plugin-dialogs.tizen.Notification'; + +cordova.define(plugin_name, function(require, exports, module) { +// TODO: remove -> end + var _document = document || {}; var playback = (function() { var soundElement; var counter = 1; - tizen.systemsetting.getProperty("NOTIFICATION_EMAIL", function(v) { + tizen.systemsetting && tizen.systemsetting.getProperty("NOTIFICATION_EMAIL", function(v) { soundElement = new Audio(v); soundElement.addEventListener('ended', function() { if (--counter > 0) { @@ -279,66 +284,51 @@ var popup = (function () { }; })(); -var notification = { - alert: function(message, alertCallback, title, buttonName) { - title = title || 'Alert'; - buttonName = buttonName || 'OK'; +exports = { + alert: function(successCallback, errorCallback, args) { popup.show({ - message: message, - callback: alertCallback, - title: title, - buttons: [buttonName] + message: args[0], + callback: successCallback, + title: args[1], + buttons: [args[2]] }); }, - confirm: function(message, confirmCallback, title, buttonLabels) { - title = title || 'Confirm'; - buttonLabels = buttonLabels || ['OK', 'Cancel']; - if (!Array.isArray(buttonLabels)) { - if (typeof buttonLabels === 'string') { - buttonLabels = buttonLabels.split(','); // deprecated way of specifying the labels - } else { - buttonLabels = [buttonLabels]; - } - } + confirm: function(successCallback, errorCallback, args) { popup.show({ - message: message, - callback: confirmCallback, - title: title, - buttons: buttonLabels + message: args[0], + callback: successCallback, + title: args[1], + buttons: args[2] }); }, - prompt: function(message, promptCallback, title, buttonLabels, defaultText) { - title = title || 'Prompt'; - buttonLabels = buttonLabels || ['OK', 'Cancel']; - if (!Array.isArray(buttonLabels)) { - buttonLabels = [buttonLabels]; - } - defaultText = defaultText || ''; + prompt: function(successCallback, errorCallback, args) { popup.show({ - message: message, + message: args[0], callback: function(idx, text) { - promptCallback({buttonIndex: idx, input1: text}); + successCallback({buttonIndex: idx, input1: text}); }, - title: title, - buttons: buttonLabels, + title: args[1], + buttons: args[2], prompt: true, - promptDefaultText: defaultText + promptDefaultText: args[3] }); }, - beep: function(times) { - playback.beep(times); + beep: function(successCallback, errorCallback, args) { + playback.beep(args[0]); } }; -Object.freeze(notification); -Object.defineProperty(_navigator, 'notification', { - configurable: false, - enumerable: true, - writable: false, - value: notification -}); +require("cordova/exec/proxy").add("Notification", exports); console.log('Loaded cordova.dialog API'); +//TODO: remove when added to public cordova repository -> begin +}); + exports = function(require) { + // this plugin is not loaded via cordova_plugins.js, we need to manually add + // it to module mapper + var mm = require('cordova/modulemapper'); + mm.runs(plugin_name); }; +//TODO: remove -> end diff --git a/src/lib/cordova_plugins.js b/src/lib/cordova_plugins.js index f56a068..3ef753a 100644 --- a/src/lib/cordova_plugins.js +++ b/src/lib/cordova_plugins.js @@ -7,6 +7,13 @@ module.exports = [ "device" ] }, + { + "file": "plugins/cordova-plugin-dialogs/www/notification.js", + "id": "cordova-plugin-dialogs.notification", + "merges": [ + "navigator.notification" + ] + }, { "file": "plugins/cordova-plugin-file/www/DirectoryEntry.js", "id": "cordova-plugin-file.DirectoryEntry", @@ -150,6 +157,7 @@ module.exports.metadata = // TOP OF METADATA { "cordova-plugin-device": "1.0.1", + "cordova-plugin-dialogs": "1.1.1", "cordova-plugin-file": "3.0.0", } // BOTTOM OF METADATA diff --git a/src/lib/plugins/cordova-plugin-dialogs/www/notification.js b/src/lib/plugins/cordova-plugin-dialogs/www/notification.js new file mode 100644 index 0000000..9331997 --- /dev/null +++ b/src/lib/plugins/cordova-plugin-dialogs/www/notification.js @@ -0,0 +1,114 @@ +cordova.define("cordova-plugin-dialogs.notification", function(require, exports, module) { /* + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * +*/ + +var exec = require('cordova/exec'); +var platform = require('cordova/platform'); + +/** + * Provides access to notifications on the device. + */ + +module.exports = { + + /** + * Open a native alert dialog, with a customizable title and button text. + * + * @param {String} message Message to print in the body of the alert + * @param {Function} completeCallback The callback that is called when user clicks on a button. + * @param {String} title Title of the alert dialog (default: Alert) + * @param {String} buttonLabel Label of the close button (default: OK) + */ + alert: function(message, completeCallback, title, buttonLabel) { + var _title = (title || "Alert"); + var _buttonLabel = (buttonLabel || "OK"); + exec(completeCallback, null, "Notification", "alert", [message, _title, _buttonLabel]); + }, + + /** + * Open a native confirm dialog, with a customizable title and button text. + * The result that the user selects is returned to the result callback. + * + * @param {String} message Message to print in the body of the alert + * @param {Function} resultCallback The callback that is called when user clicks on a button. + * @param {String} title Title of the alert dialog (default: Confirm) + * @param {Array} buttonLabels Array of the labels of the buttons (default: ['OK', 'Cancel']) + */ + confirm: function(message, resultCallback, title, buttonLabels) { + var _title = (title || "Confirm"); + var _buttonLabels = (buttonLabels || ["OK", "Cancel"]); + + // Strings are deprecated! + if (typeof _buttonLabels === 'string') { + console.log("Notification.confirm(string, function, string, string) is deprecated. Use Notification.confirm(string, function, string, array)."); + } + + // Some platforms take an array of button label names. + // Other platforms take a comma separated list. + // For compatibility, we convert to the desired type based on the platform. + if (platform.id == "amazon-fireos" || platform.id == "android" || platform.id == "ios" || + platform.id == "windowsphone" || platform.id == "firefoxos" || platform.id == "ubuntu" || + platform.id == "windows8" || platform.id == "windows" || platform.id == "tizen") { + + if (typeof _buttonLabels === 'string') { + _buttonLabels = _buttonLabels.split(","); // not crazy about changing the var type here + } + } else { + if (Array.isArray(_buttonLabels)) { + var buttonLabelArray = _buttonLabels; + _buttonLabels = buttonLabelArray.toString(); + } + } + exec(resultCallback, null, "Notification", "confirm", [message, _title, _buttonLabels]); + }, + + /** + * Open a native prompt dialog, with a customizable title and button text. + * The following results are returned to the result callback: + * buttonIndex Index number of the button selected. + * input1 The text entered in the prompt dialog box. + * + * @param {String} message Dialog message to display (default: "Prompt message") + * @param {Function} resultCallback The callback that is called when user clicks on a button. + * @param {String} title Title of the dialog (default: "Prompt") + * @param {Array} buttonLabels Array of strings for the button labels (default: ["OK","Cancel"]) + * @param {String} defaultText Textbox input value (default: empty string) + */ + prompt: function(message, resultCallback, title, buttonLabels, defaultText) { + var _message = (message || "Prompt message"); + var _title = (title || "Prompt"); + var _buttonLabels = (buttonLabels || ["OK","Cancel"]); + var _defaultText = (defaultText || ""); + exec(resultCallback, null, "Notification", "prompt", [_message, _title, _buttonLabels, _defaultText]); + }, + + /** + * Causes the device to beep. + * On Android, the default notification ringtone is played "count" times. + * + * @param {Integer} count The number of beeps. + */ + beep: function(count) { + var defaultedCount = count || 1; + exec(null, null, "Notification", "beep", [ defaultedCount ]); + } +}; + +});