Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/apps/system/js/voicemail.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/system/js/voicemail.js')
-rw-r--r--apps/system/js/voicemail.js93
1 files changed, 93 insertions, 0 deletions
diff --git a/apps/system/js/voicemail.js b/apps/system/js/voicemail.js
new file mode 100644
index 0000000..dea5116
--- /dev/null
+++ b/apps/system/js/voicemail.js
@@ -0,0 +1,93 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+
+// Custom voicemail notification -- This can be removed once DesktopNotification
+// supports removing notifications via API
+var Voicemail = {
+
+ icon: null,
+ notification: null,
+ // A random starting point that is unlikely to be used by other notifications
+ notificationId: 3000 + Math.floor(Math.random() * 999),
+
+ init: function vm_init() {
+ var voicemail = window.navigator.mozVoicemail;
+ if (!voicemail)
+ return;
+
+ voicemail.addEventListener('statuschanged', this);
+
+ this.icon = window.location.protocol + '//' +
+ window.location.hostname + '/style/icons/voicemail.png';
+ },
+
+ handleEvent: function vm_handleEvent(evt) {
+ var voicemail = window.navigator.mozVoicemail;
+ if (!voicemail.status)
+ return;
+
+ this.updateNotification(voicemail.status);
+ },
+
+ updateNotification: function vm_updateNotification(status) {
+ var _ = window.navigator.mozL10n.get;
+ var title = status.returnMessage;
+ var showCount = status.hasMessages && status.messageCount > 0;
+
+ if (!title) {
+ title = showCount ? _('newVoicemails', { n: status.messageCount }) :
+ _('newVoicemailsUnknown');
+ }
+
+ var text = title;
+ var voicemailNumber = navigator.mozVoicemail.number;
+ if (voicemailNumber) {
+ text = _('dialNumber', { number: voicemailNumber });
+ }
+
+ this.hideNotification();
+ if (status.hasMessages) {
+ this.showNotification(title, text, voicemailNumber);
+ }
+ },
+
+ showNotification: function vm_showNotification(title, text, voicemailNumber) {
+ this.notificationId++;
+ this.notification = NotificationScreen.addNotification({
+ id: this.notificationId, title: title, text: text, icon: this.icon
+ });
+
+ if (!voicemailNumber) {
+ return;
+ }
+
+ var self = this;
+ function vmNotification_onTap(event) {
+ self.notification.removeEventListener('tap', vmNotification_onTap);
+
+ var telephony = window.navigator.mozTelephony;
+ if (!telephony) {
+ return;
+ }
+
+ telephony.dial(voicemailNumber);
+ }
+
+ this.notification.addEventListener('tap', vmNotification_onTap);
+ },
+
+ hideNotification: function vm_hideNotification() {
+ if (!this.notification) {
+ return;
+ }
+
+ if (this.notification.parentNode) {
+ NotificationScreen.removeNotification(this.notificationId);
+ }
+
+ this.notification = null;
+ this.notificationId = 0;
+ }
+};
+
+Voicemail.init();