Currently we're flipping the radio in "MMS" mode, and connecting through
any proxies specified in the APN. This always work, or at least doesn't
seem to work on Sprint, since the configured mms proxy rejects proxy
requests.
Instead we try the following in this order:
1) Connect over normal data connection directly to MMSC.
2) Connect over MMS radio connection to MMSC.
3) Connect over MMS radio connection with any configured proxy to MMSC.
Hopefully this doesn't fuck up shit on other unknown networks.
1) Don't add a notification item to the notification bar if the thread the
message is for is active and visible.
2) Only sound the notification ringtone at 1/4th volume if the thread the
message is for is active and visible.
3) Auto-clear the notification in the notification bar when a thread becomes
visible from a screen-off situation.
4) Make notification updates asynchronous.
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.
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) Change all instances which use concatenation to build strings
with variables in them to use string formatting instead.
2) Extract all string literals from layouts and menus into strings.xml
3) Extract all string literals from code into strings.xml