diff --git a/apps/sms/js/activity_handler.js b/apps/sms/js/activity_handler.js index 1ede845809fd..d0ea43aed4c0 100644 --- a/apps/sms/js/activity_handler.js +++ b/apps/sms/js/activity_handler.js @@ -104,9 +104,8 @@ if (!window.location.hash.length) { // The SMS app is already displayed if (!document.mozHidden) { - var currentThread = MessageManager.currentNum; // If we are in the same thread, only we need to vibrate - if (number == currentThread) { + if (message.threadId === MessageManager.currentThread) { navigator.vibrate([200, 200, 200]); return; } diff --git a/apps/sms/js/message_manager.js b/apps/sms/js/message_manager.js index c9f87004e091..a54a6264e01b 100644 --- a/apps/sms/js/message_manager.js +++ b/apps/sms/js/message_manager.js @@ -32,6 +32,10 @@ var MessageManager = { var message = e.message; var num = message.receiver; if (window.location.hash == '#new') { + // We update the currentThread + if (!MessageManager.currentThread) { + MessageManager.currentThread = message.threadId; + } // If we are in 'new' we go to the right thread // 'num' has been internationalized by Gecko window.location.hash = '#num=' + num; @@ -56,6 +60,7 @@ var MessageManager = { // thread without requesting Gecko, so we increase the performance and we // reduce Gecko requests. return { + id: message.threadId, senderOrReceiver: message.sender, body: message.body, timestamp: message.timestamp, @@ -66,14 +71,10 @@ var MessageManager = { onMessageReceived: function mm_onMessageReceived(e) { var message = e.message; - var num; - if (this.currentNum) { - num = this.currentNum; - } - - var sender = message.sender; - if (num && num === sender) { - //Append message and mark as unread + var currentThread = this.currentThread; + var threadId = message.threadId; + if (currentThread != null && currentThread === threadId) { + // Append message and mark as read this.markMessagesRead([message.id], true, function() { MessageManager.getThreads(ThreadListUI.renderThreads); }); @@ -120,8 +121,8 @@ var MessageManager = { onVisibilityChange: function mm_onVisibilityChange(e) { LinkActionHandler.resetActivityInProgress(); ThreadListUI.updateContactsInfo(); - ThreadUI.updateHeaderData(); Utils.updateTimeHeaders(); + ThreadUI.updateHeaderData(); }, slide: function mm_slide(callback) { @@ -164,7 +165,7 @@ var MessageManager = { contactButton.parentNode.appendChild(contactButton); document.getElementById('messages-container').innerHTML = ''; ThreadUI.cleanFields(); - MessageManager.currentNum = null; + MessageManager.currentThread = null; threadMessages.classList.add('new'); MessageManager.slide(function() { receiverInput.focus(); @@ -174,7 +175,7 @@ var MessageManager = { //Keep the visible button the :last-child var editButton = document.getElementById('icon-edit'); editButton.parentNode.appendChild(editButton); - MessageManager.currentNum = null; + MessageManager.currentThread = null; if (mainWrapper.classList.contains('edit')) { mainWrapper.classList.remove('edit'); if (ThreadListUI.editDone) { @@ -211,14 +212,13 @@ var MessageManager = { var num = this.getNumFromHash(); if (num) { var filter = this.createFilter(num); - var input = document.getElementById('messages-input'); - MessageManager.currentNum = num; + if (mainWrapper.classList.contains('edit')) { mainWrapper.classList.remove('edit'); } else if (threadMessages.classList.contains('new')) { + ThreadUI.updateHeaderData(); ThreadUI.renderMessages(filter); threadMessages.classList.remove('new'); - ThreadUI.updateHeaderData(); } else { // As soon as we click in the thread, we visually mark it // as read. @@ -227,7 +227,8 @@ var MessageManager = { threadRead.getElementsByTagName('a')[0].classList .remove('unread'); } - + // Update the currentThread + MessageManager.currentThread = threadRead.dataset.threadId; var self = this; // Update Header ThreadUI.updateHeaderData(function headerReady() { diff --git a/apps/sms/js/sms_mock.js b/apps/sms/js/sms_mock.js index 9e44f779d228..c408a7bad0d3 100644 --- a/apps/sms/js/sms_mock.js +++ b/apps/sms/js/sms_mock.js @@ -3,6 +3,8 @@ Code below is for desktop testing! *********************************************************** */ +'use strict'; + (function(window) { var MockNavigatormozSms = window.MockNavigatormozSms = {}; @@ -12,6 +14,7 @@ id: 0, messages: [ { + threadId: 1, sender: null, receiver: '1977', body: 'Alo, how are you today, my friend? :)', @@ -20,6 +23,7 @@ timestamp: new Date(Date.now()) }, { + threadId: 1, sender: null, receiver: '1977', body: 'arr :)', @@ -28,6 +32,7 @@ timestamp: new Date(Date.now() - 8400000000) }, { + threadId: 2, sender: null, receiver: '436797', body: 'Sending :)', @@ -35,6 +40,7 @@ timestamp: new Date(Date.now() - 172800000) }, { + threadId: 3, sender: null, receiver: '197743697', body: 'Nothing :)', @@ -42,6 +48,7 @@ timestamp: new Date(Date.now() - 652800000) }, { + threadId: 4, sender: null, receiver: '197746797', body: 'Error message:)', @@ -50,6 +57,7 @@ timestamp: new Date(Date.now() - 822800000) }, { + threadId: 4, sender: null, receiver: '197746797', body: 'Nothing :)', @@ -57,6 +65,7 @@ timestamp: new Date(Date.now() - 1002800000) }, { + threadId: 4, sender: null, receiver: '197746797', body: 'Nothing :)', @@ -64,6 +73,7 @@ timestamp: new Date(Date.now() - 1002800000) }, { + threadId: 4, sender: '197746797', body: 'Recibido!', delivery: 'received', @@ -72,30 +82,35 @@ ], threads: [ { + id: 1, senderOrReceiver: '1977', body: 'Alo, how are you today, my friend? :)', timestamp: new Date(Date.now()), unreadCount: 0 }, { + id: 2, senderOrReceiver: '436797', body: 'Sending :)', timestamp: new Date(Date.now() - 172800000), unreadCount: 0 }, { + id: 3, senderOrReceiver: '197743697', body: 'Nothing :)', timestamp: new Date(Date.now() - 652800000), unreadCount: 0 }, { + id: 4, senderOrReceiver: '197746797', body: 'Recibido!', timestamp: new Date(Date.now() - 50000000), unreadCount: 0 }, { + id: 5, senderOrReceiver: '14886783487', body: 'Hello world!', timestamp: new Date(Date.now() - 60000000), @@ -112,6 +127,7 @@ // Procedurally generate a large amount of messages for a single thread for (var i = 0; i < 150; i++) { messagesDb.messages.push({ + threadId: 5, sender: '14886783487', body: 'Hello world!', delivery: 'received', @@ -169,6 +185,7 @@ }; MockNavigatormozSms.send = function(number, text, success, error) { + var threadId = MessageManager.currentThread; var sendId = messagesDb.id++; var request = { error: null @@ -176,6 +193,7 @@ var sendInfo = { type: 'sent', message: { + threadId: threadId, sender: null, receiver: number, delivery: 'sending', @@ -220,6 +238,7 @@ var receivedInfo = { type: 'received', message: { + threadId: threadId, sender: number, receiver: null, delivery: 'received', diff --git a/apps/sms/js/thread_list_ui.js b/apps/sms/js/thread_list_ui.js index e96cf77ba143..f905120eb5c1 100644 --- a/apps/sms/js/thread_list_ui.js +++ b/apps/sms/js/thread_list_ui.js @@ -269,6 +269,7 @@ var ThreadListUI = { var threadDOM = document.createElement('li'); threadDOM.id = 'thread_' + num; threadDOM.dataset.time = timestamp; + threadDOM.dataset.threadId = thread.id; // Retrieving params from thread var bodyText = (thread.body || '').split('\n')[0]; diff --git a/apps/sms/js/thread_ui.js b/apps/sms/js/thread_ui.js index 3fe3dd96390a..3227b3047b04 100644 --- a/apps/sms/js/thread_ui.js +++ b/apps/sms/js/thread_ui.js @@ -372,6 +372,15 @@ var ThreadUI = { }, // Method for updating the header with the info retrieved from Contacts API updateHeaderData: function thui_updateHeaderData(callback) { + if (MessageManager.currentThread === null) { + return; + } + // Retrieve phone number from Hash + var number = MessageManager.getNumFromHash(); + // Add data to contact activity interaction + this.headerText.dataset.phoneNumber = number; + this.headerText.textContent = number; + // For Desktop Testing, mozContacts it's mockuped but it's not working // completely. So in the case of Desktop testing we are going to execute // the callback directly in order to make it works! @@ -381,13 +390,6 @@ var ThreadUI = { return; } - var number = MessageManager.currentNum; - if (!number) { - return; - } - - // Add data to contact activity interaction - this.headerText.dataset.phoneNumber = number; Contacts.findByString(number, function gotContact(contacts) { var carrierTag = document.getElementById('contact-carrier'); @@ -778,8 +780,8 @@ var ThreadUI = { this.noResults.classList.add('hide'); this.container.classList.remove('hide'); - if (resendText && typeof resendText === 'string') { - num = MessageManager.currentNum; + if (resendText && (typeof(resendText) === 'string') && resendText !== '') { + num = MessageManager.getNumFromHash(); text = resendText; } else { // Retrieve num depending on hash @@ -791,7 +793,7 @@ var ThreadUI = { return; } } else { - num = MessageManager.currentNum; + num = MessageManager.getNumFromHash(); } // Retrieve text @@ -802,10 +804,6 @@ var ThreadUI = { } // Clean fields (this lock any repeated click in 'send' button) this.cleanFields(true); - // Remove when - // https://bugzilla.mozilla.org/show_bug.cgi?id=825604 landed - MessageManager.currentNum = num; - this.updateHeaderData(); // Send the SMS MessageManager.send(num, text); },