diff --git a/addons/mail/static/src/js/models/threads/channel.js b/addons/mail/static/src/js/models/threads/channel.js index 266f5e3db6b4b7dc97d94fea0ef68435f8aa0f71..315e30efdb2f83ee7bd12ac71d7bc1aea3b84a87 100644 --- a/addons/mail/static/src/js/models/threads/channel.js +++ b/addons/mail/static/src/js/models/threads/channel.js @@ -5,6 +5,7 @@ var SearchableThread = require('mail.model.SearchableThread'); var ThreadTypingMixin = require('mail.model.ThreadTypingMixin'); var mailUtils = require('mail.utils'); +const config = require('web.config'); var session = require('web.session'); var time = require('web.time'); @@ -106,11 +107,15 @@ var Channel = SearchableThread.extend(ThreadTypingMixin, { */ close: function () { this._super.apply(this, arguments); - this._rpc({ - model: 'mail.channel', - method: 'channel_fold', - kwargs: { uuid: this.getUUID(), state: 'closed' }, - }, { shadow: true }); + // Do not notify the server to avoid desktop chat window from closing + // when a chat window is closed on mobile. + if (!config.device.isMobile) { + this._rpc({ + model: 'mail.channel', + method: 'channel_fold', + kwargs: { uuid: this.getUUID(), state: 'closed' }, + }, { shadow: true }); + } }, /** * Decrement the needaction counter of the channel @@ -131,13 +136,17 @@ var Channel = SearchableThread.extend(ThreadTypingMixin, { detach: function () { var self = this; return this._super.apply(this, arguments).then(function () { - self._rpc({ - model: 'mail.channel', - method: 'channel_minimize', - args: [self.getUUID(), true], - }, { - shadow: true, - }); + // Do not notify the server to avoid desktop chat window from opening + // when a chat window is opened on mobile. + if (!config.device.isMobile) { + self._rpc({ + model: 'mail.channel', + method: 'channel_minimize', + args: [self.getUUID(), true], + }, { + shadow: true, + }); + } }); }, /** diff --git a/addons/mail/static/src/js/services/mail_manager.js b/addons/mail/static/src/js/services/mail_manager.js index 83e9d68bc093950b1b1debb2da034a7079f82f9f..0837e983373e57d8bcfe8a41a791dc6d27b01bc5 100644 --- a/addons/mail/static/src/js/services/mail_manager.js +++ b/addons/mail/static/src/js/services/mail_manager.js @@ -890,6 +890,11 @@ var MailManager = AbstractService.extend({ args: [[channelID]], }) .then(function (result) { + // Prevent to automatically open chat window when a new message + // is received on mobile. + if (config.device.isMobile) { + options.silent = true; + } return self._addChannel(result, options); }); }, @@ -1215,9 +1220,16 @@ var MailManager = AbstractService.extend({ _updateChannelsFromServer: function (data) { var self = this; var proms = []; + const options = {}; + + // Prevent to automatically open all chat windows at initial loading. + if (config.device.isMobile) { + options.silent = true; + } + _.each(data.channel_slots, function (channels) { _.each(channels, function (channel) { - proms.push(self._addChannel(channel)); + proms.push(self._addChannel(channel, options)); }); }); return Promise.all(proms); diff --git a/addons/mail/static/src/js/services/mail_notification_manager.js b/addons/mail/static/src/js/services/mail_notification_manager.js index f3c6fdfb26c7e7dd97ab996c3345604b6faf9ced..9cef97427473d89317f6740eb0c308da488276b2 100644 --- a/addons/mail/static/src/js/services/mail_notification_manager.js +++ b/addons/mail/static/src/js/services/mail_notification_manager.js @@ -10,6 +10,7 @@ odoo.define('mail.Manager.Notification', function (require) { var MailManager = require('mail.Manager'); var MailFailure = require('mail.model.MailFailure'); +const config = require('web.config'); var core = require('web.core'); var session = require('web.session'); @@ -248,12 +249,15 @@ MailManager.include({ _t("You have been invited to: ") + channelData.name); } } - var channel = this.getChannel(channelData.id); - if (channel && channelData.info !== 'join') { - channel.updateWindowState({ - folded: channelData.state === 'folded' ? true : false, - detached: channelData.is_minimized, - }); + // Prevent to open/close a channel on mobile when you open/close it on desktop. + if (!config.device.isMobile) { + const channel = this.getChannel(channelData.id); + if (channel && channelData.info !== 'join') { + channel.updateWindowState({ + folded: channelData.state === 'folded' ? true : false, + detached: channelData.is_minimized, + }); + } } }, /** diff --git a/addons/mail/static/src/js/services/mail_window_manager.js b/addons/mail/static/src/js/services/mail_window_manager.js index d8174da5a73d9b9083f507c9e2f794c715272e38..57b7623e05ae1e938e93bdbf2d77271442e616d4 100644 --- a/addons/mail/static/src/js/services/mail_window_manager.js +++ b/addons/mail/static/src/js/services/mail_window_manager.js @@ -435,13 +435,15 @@ MailManager.include({ * @param {integer} partnerID * @returns {Promise<integer>} resolved with ID of the DM chat */ - _openAndDetachDMChat: function (partnerID) { - return this._rpc({ + _openAndDetachDMChat: async function (partnerID) { + const data = await this._rpc({ model: 'mail.channel', - method: 'channel_get_and_minimize', + method: config.device.isMobile ? 'channel_get' : 'channel_get_and_minimize', args: [[partnerID]], - }) - .then(this._addChannel.bind(this)); + }); + const channelID = await this._addChannel(data); + const channel = this.getChannel(channelID); + channel.detach(); }, /** * On opening a new thread window, place it with other thread windows: