1) Switch back from AsyncTasks to an Executor and Futures.
2) Make the Executor operate LIFO.
3) Make the Executor thread a BACKGROUND_PRIORITY thread.
1) Refactor recipient class to support asynchronous loading operations.
2) Refactor recipient factory to simplify recipient access.
3) Consoliate everything into one recipient provider that is capable of
doing async lookups and intelligent caching.
1) Add configuration options for APN information in TextSecure settings.
2) Fall back to TextSecure settings if system settings are unavailable
while sending/receiving MMS.
3) Catch sqlite exception when devices randomly don't have the same
APN db or table structure.
1) When sending an SMS or MMS to multiple recipients, only show one
ConversationItem, but provide statistics on the number of recipients
delivered to.
2) Still break up the messages for secure and insecure messages.
Mostly, the inheritance graph for MessageRecord/MmsMessageRecord was
all messed up, and each class was overloaded for things it shouldn't
have been.
1) Broke MessageRecord/MmsMessageRecord up into: DisplayRecord, ThreadRecord,
MessageRecord, SmsMessageRecord, NotificationMmsMessageRecord, and
MediaMmsMessageRecord.
2) Updated all the adapters/views to keep pace with that change.
1) Add >= ICS profile support (the system-supported "me" contact).
2) Improve <= Gingerbread support for me contact by auto-detecting
contacts that have the same number as the SIM card.
3) Tie in identity key import/export support to the "me" contact.
4) Don't display a "me" selection option in preference if it can
be auto-detected.
5) Refactor out the ContactAccessorNewApi back into the base class.
1) Change the MessageSender logic so that individual SMS messages
are encrypted whenever there is a secure session, unless the UI
explicitly specifies otherwise.
2) Change the MMS logic so that messages to a recipient with a
secure session are all sent individually, instead of including
those recipients into the batch plaintext message.
The code we use for PDU parsing and composing comes straight from
the Android framework, but it's an internal API, so we duplicate
the code here. These changes represent updates that have been
made as of the JB release.