local-notification.js 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271
  1. /*
  2. Copyright 2013-2014 appPlant UG
  3. Licensed to the Apache Software Foundation (ASF) under one
  4. or more contributor license agreements. See the NOTICE file
  5. distributed with this work for additional information
  6. regarding copyright ownership. The ASF licenses this file
  7. to you under the Apache License, Version 2.0 (the
  8. "License"); you may not use this file except in compliance
  9. with the License. You may obtain a copy of the License at
  10. http://www.apache.org/licenses/LICENSE-2.0
  11. Unless required by applicable law or agreed to in writing,
  12. software distributed under the License is distributed on an
  13. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  14. KIND, either express or implied. See the License for the
  15. specific language governing permissions and limitations
  16. under the License.
  17. */
  18. var LocalNotification = function () {
  19. this._defaults = {
  20. message: '',
  21. title: '',
  22. autoCancel: false,
  23. badge: 0,
  24. id: '0',
  25. json: '',
  26. repeat: ''
  27. };
  28. };
  29. LocalNotification.prototype = {
  30. /**
  31. * Returns the default settings
  32. *
  33. * @return {Object}
  34. */
  35. getDefaults: function () {
  36. return this._defaults;
  37. },
  38. /**
  39. * Overwrite default settings
  40. *
  41. * @param {Object} defaults
  42. */
  43. setDefaults: function (newDefaults) {
  44. var defaults = this.getDefaults();
  45. for (var key in defaults) {
  46. if (newDefaults[key] !== undefined) {
  47. defaults[key] = newDefaults[key];
  48. }
  49. }
  50. },
  51. /**
  52. * @private
  53. *
  54. * Merges custom properties with the default values.
  55. *
  56. * @param {Object} options
  57. * Set of custom values
  58. *
  59. * @retrun {Object}
  60. * The merged property list
  61. */
  62. mergeWithDefaults: function (options) {
  63. var defaults = this.getDefaults();
  64. for (var key in defaults) {
  65. if (options[key] === undefined) {
  66. options[key] = defaults[key];
  67. }
  68. }
  69. return options;
  70. },
  71. /**
  72. * @private
  73. *
  74. * Merges the platform specific properties into the default properties.
  75. *
  76. * @return {Object}
  77. * The default properties for the platform
  78. */
  79. applyPlatformSpecificOptions: function () {
  80. var defaults = this._defaults;
  81. switch (device.platform) {
  82. case 'Android':
  83. defaults.icon = 'icon';
  84. defaults.smallIcon = null;
  85. defaults.ongoing = false;
  86. defaults.sound = 'TYPE_NOTIFICATION'; break;
  87. case 'iOS':
  88. defaults.sound = ''; break;
  89. case 'WinCE': case 'Win32NT':
  90. defaults.smallImage = null;
  91. defaults.image = null;
  92. defaults.wideImage = null;
  93. };
  94. return defaults;
  95. },
  96. /**
  97. * Add a new entry to the registry
  98. *
  99. * @param {Object} options
  100. * The notification properties
  101. *
  102. * @return {Number}
  103. * The notification's ID
  104. */
  105. add: function (options) {
  106. var options = this.mergeWithDefaults(options),
  107. callbackFn = null;
  108. if (options.id) {
  109. options.id = options.id.toString();
  110. }
  111. if (options.date === undefined) {
  112. options.date = new Date();
  113. }
  114. if (typeof options.date == 'object') {
  115. options.date = Math.round(options.date.getTime()/1000);
  116. }
  117. if (['WinCE', 'Win32NT'].indexOf(device.platform)) {
  118. callbackFn = function (cmd) {
  119. eval(cmd);
  120. };
  121. }
  122. cordova.exec(callbackFn, null, 'LocalNotification', 'add', [options]);
  123. return options.id;
  124. },
  125. /**
  126. * Cancels the specified notification.
  127. *
  128. * @param {String} id
  129. * The ID of the notification
  130. */
  131. cancel: function (id) {
  132. var id = id.toString();
  133. cordova.exec(null, null, 'LocalNotification', 'cancel', [id]);
  134. },
  135. /**
  136. * Removes all previously registered notifications.
  137. */
  138. cancelAll: function () {
  139. cordova.exec(null, null, 'LocalNotification', 'cancelAll', []);
  140. },
  141. /**
  142. * Retrieves a list with all currently pending notifications.
  143. *
  144. * @param {Function} callback
  145. * A callback function to be called with the list
  146. */
  147. getScheduledIds: function (callback) {
  148. cordova.exec(callback, null, 'LocalNotification', 'getScheduledIds', []);
  149. },
  150. /**
  151. * Checks wether a notification with an ID is scheduled.
  152. *
  153. * @param {String} id
  154. * The ID of the notification
  155. * @param {Function} callback
  156. * A callback function to be called with the list
  157. */
  158. isScheduled: function (id, callback) {
  159. var id = id.toString();
  160. cordova.exec(callback, null, 'LocalNotification', 'isScheduled', [id]);
  161. },
  162. /**
  163. * Occurs when a notification was added.
  164. *
  165. * @param {String} id
  166. * The ID of the notification
  167. * @param {String} state
  168. * Either "foreground" or "background"
  169. * @param {String} json
  170. * A custom (JSON) string
  171. */
  172. onadd: function (id, state, json) {},
  173. /**
  174. * Occurs when the notification is triggered.
  175. *
  176. * @param {String} id
  177. * The ID of the notification
  178. * @param {String} state
  179. * Either "foreground" or "background"
  180. * @param {String} json
  181. * A custom (JSON) string
  182. */
  183. ontrigger: function (id, state, json) {},
  184. /**
  185. * Fires after the notification was clicked.
  186. *
  187. * @param {String} id
  188. * The ID of the notification
  189. * @param {String} state
  190. * Either "foreground" or "background"
  191. * @param {String} json
  192. * A custom (JSON) string
  193. */
  194. onclick: function (id, state, json) {},
  195. /**
  196. * Fires if the notification was canceled.
  197. *
  198. * @param {String} id
  199. * The ID of the notification
  200. * @param {String} state
  201. * Either "foreground" or "background"
  202. * @param {String} json
  203. * A custom (JSON) string
  204. */
  205. oncancel: function (id, state, json) {}
  206. };
  207. var plugin = new LocalNotification(),
  208. channel = require('cordova/channel');
  209. // Called after all 'deviceready' listener are called
  210. channel.deviceready.subscribe( function () {
  211. // Device is ready now, the listeners are registered and all queued events
  212. // can be executed now.
  213. cordova.exec(null, null, 'LocalNotification', 'deviceready', []);
  214. });
  215. channel.onCordovaReady.subscribe( function () {
  216. // The cordova device plugin is ready now
  217. channel.onCordovaInfoReady.subscribe( function () {
  218. if (device.platform == 'Android') {
  219. channel.onPause.subscribe( function () {
  220. // Necessary to set the state to `background`
  221. cordova.exec(null, null, 'LocalNotification', 'pause', []);
  222. });
  223. channel.onResume.subscribe( function () {
  224. // Necessary to set the state to `foreground`
  225. cordova.exec(null, null, 'LocalNotification', 'resume', []);
  226. });
  227. // Necessary to set the state to `foreground`
  228. cordova.exec(null, null, 'LocalNotification', 'resume', []);
  229. }
  230. // Merges the platform specific properties into the default properties
  231. plugin.applyPlatformSpecificOptions();
  232. });
  233. });
  234. module.exports = plugin;