For short messages in a cluster, the contact photo was sometimes taller
than the actual bubble, leading to extra weird space. So instead we use
a container to hold the width of the cell, and set the avatar to be GONE
instead of INVISIBLE.
The media size traditionally determines the bubble size, but the author
could make it wider, which would lead to rendering issues. In the case
of media attachments (images, videos, and shared contacts), we restrict
the width of the author name. When there's a number+profile name combo,
we split the space 50/50 between the two.
In particular, there were many issues with drawing corners.
Unfortunately, there's no pretty way to get masking working on every
Android version, so we have to switch back to using custom backgrounds
and then using multiple masking methods depending on Android version.
Also, I had to remove attr references in drawables. They crash on 4.x.
The "contact" option in the attachments tray now brings you through an
optimized contact sharing flow, allowing you to select specific fields
to share. The contact is then presented as a special message type,
allowing you to interact with the card to add the contact to your system
contacts, invite them to signal, initiate a signal message, etc.
Previously, we were always rendering images as squares. Instead of doing
that, we now render them as close to true-to-size as possible (within
reasonable min/max width/height boundaries).
1. Switch from 300 to 500 colors.
2. Colorize incoming conversation bubbles.
3. Colorize recipeint preference activity toolbar.
4. Support inverted colors in avatars.
5. Make status bar icons tint according to secondary color.
// FREEBIE
1) No more blue/green for outgoing messages. Just lock or no lock.
2) Use 9-patches instead of shapes for better bubble performance.
3) Use tinting rather than different colored assets.
4) Change outgoing status indicators so that they don't change
width of the bubble as they update.
5) Switch to using ..., check, double-check for pending, sent,
delivered rather than using bubble tone to indicate pending.
// FREEBIE
If the contact doesn't have an image, render a color-coded
background and the first letter of the contact's name.
1) Don't display anything during recipient resolution.
2) Display a # icon in material gray for recipients with no name.
3) Display a material group icon in material gray for groups with
no avatar icon set.
Closes#3104
// FREEBIE
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.