Eliminate the concept of 'Recipients' (plural). There is now just
a 'Recipient', which contains an Address that is either an individual
or a group ID.
MMS groups now exist as part of the group database, just like push
groups.
// FREEBIE
This was a holdover from Signal's origins as a pure SMS app.
It causes problems, depends on undefined device specific behavior,
and should no longer be necessary now that we have all the
information we need to E164 all numbers.
// FREEBIE
1) The group ID for jobs that process received messages was
previously set to the sender's e164. This guaranteed
serialization of messages per-recipient, while allowing
processing of multiple recipients in parallel. Unfortunately
in the case of groups, this results in out of order
conversations, since the "sender" for each message is
different. And we can't determine that it was a group
message until *after* we process it. So this change just
puts all message processing from all senders in one big queue.
2) Synchronization messages were always being displayed before
received messages, due to the "received time" for those
being set to the time they were sent.
Fixes#3618Fixes#2385
// FREEBIE
1) Switch to new TextSecureAddress addressing, rather than mixing
long-based recipient IDs into libtextsecure.
2) Get rid of RecipientFormattingException throws in calls to
RecipientFactory.
Closes#2570
1) Migrate from GSON to Jackson everywhere.
2) Add support for storing identity key conflicts on message rows.
3) Add limited support for surfacing identity key conflicts in UI.
1) Change SessionBuilder to only establish sessions via
KeyExchangeMessage and PreKeyBundles.
2) Change SessionCipher to decrypt either WhisperMessage
or PreKeyWhisperMessage items, automatically building
a session for the latter.
3) Change SessionCipher to tear down new sessions built
with PreKeyWhisperMessages if the embedded WhsiperMessage
fails to decrypt.