* Substitute unread view for unseen view until unseen view is ready.
* Register as many views as possible async.
* Perform blocking, safe migrations before async registration of views.
* Add debug settings view for internal app stats.
* Show blocking overlay until async registration of database views is complete.
* Convert version migrations to use AppVersions.
// FREEBIE
* Add “tap for options” to verification banner copy.
* Add close button to banners.
* Always use shield icon for verification row in conversation settings view.
* Add action sheet to verification banner.
// FREEBIE
* Add “tap for options” to verification banner copy.
* Add close button to banners.
* Always use shield icon for verification row in conversation settings view.
* Add action sheet to verification banner.
// FREEBIE
* Check for identity key before presenting fingerprint view.
* Show verification state in a separate subtitle in conversation view.
* Let users verify from group members view.
// FREEBIE
The old "blocking" style SN alerts are deprecated. We maintain the
functionality to decrypt incoming messages from legacy SN alerts so that
users have time to recover their undecrypted messages.
// FREEBIE
There's a problem with this approach - specifically we need to dismiss
the external file share view controller eventually.
But more generally, because SN can present a view controller, it's kind
success/retry handling is contextual to it's presenting view controller.
So, probably the thing to do is duplicate this logic at it's various
presentation contexts.
// FREEBIE