This is not right.

* if the message is read (it means you sent it)
** you want to scrollViewToBottom even if was scrolledManually. Therefore you want to call forceScrollViewToBottom if message.read is true
* if the message is not read (it means you received it)
** you want to scrollViewToBottom only it was not scrolled manually, otherwise you want to show the new message notice. (previous code)

So maybe it's better to keep this inside `onMessageReceived` and `onMessageSending` instead of having a common `onMessage` method: more linear code, less if-blocks.

Most of this code is already factorized in other methods (appendMessage, scrollViewToBottom, TimeHeaders, etc) so I don't feel the need of having a quite complex (complex because of its count of possible paths) `onMessage` function here.