[Dialog] Dialogs adapted to cordova plugin model.
authorPawel Andruszkiewicz <p.andruszkie@samsung.com>
Fri, 30 Oct 2015 09:18:40 +0000 (10:18 +0100)
committerHyunJin Park <hj.na.park@samsung.com>
Tue, 3 Nov 2015 02:18:06 +0000 (11:18 +0900)
[Verification] All tests pass.

Change-Id: Id724726f37a6c1ec4c3b76df08dde93e6482e6d4
Signed-off-by: Pawel Andruszkiewicz <p.andruszkie@samsung.com>
src/dialog/cordova_dialog_api.js
src/lib/cordova_plugins.js
src/lib/plugins/cordova-plugin-dialogs/www/notification.js [new file with mode: 0644]

index 37dbadf..a1f5aa6 100755 (executable)
  *    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
index f56a068..3ef753a 100644 (file)
@@ -8,6 +8,13 @@ module.exports = [
         ]
     },
     {
+        "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",
         "clobbers": [
@@ -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 (file)
index 0000000..9331997
--- /dev/null
@@ -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 ]);
+    }
+};
+
+});