Introduce a MessageContext class to be used by all validators
This change will allow to pass message dependencies from the client validators to the `ValidationManager`.
Please see my thoughts in #382 for more details.
See merge request !197
Forum Sharing Status
The new activity shows who you are sharing a forum with and who shares a
forum with you. It is accessible from the overflow menu when in a forum.

Closes#398
See merge request !191
The new activity shows who you are sharing a forum with and who shares a
forum with you. It is accessible from the overflow menu when in a forum.
Closes#398
Handle invitations to the same forum by multiple contacts
This also uses the new metadata queries in the forum sharing client.
Please note that this is based on !184.
See merge request !188
Replace BDF data structures with classes in forum sharing client
This introduces two new classes for protocol session states: One for the sharer and one for the invitee.
The respective classes for protocol state machines and actions have been moved into these classes as inner classes.
The two new classes replace the `BdfDictionary` that was used before to represent the local state information of a forum sharing session.
A similar technique is used for local actions and protocol messages.
Local actions are just represented by one Enum and protocol messages have their own classes now that also handle serialization into BdfDictionaries and BdfLists.
Closes#378
See merge request !184
Contact List Unread Messages
Adds unread count as bubble to avatar image in contact list.
Please note that this is based on !190.

Closes#399
See merge request !192
Increase Avatar border and change shadow color


See merge request !190
Extract ForumFactory from ForumManager
The code for creating forums in ForumManager was used by
ForumSharingManager and also needed by InviteeEngine.
This extracts it into its own class.
Closes#375
See merge request !195
The code for creating forums in ForumManager was used by
ForumSharingManager and also needed by InviteeEngine.
This extracts it into its own class.
Closes#375
Clean up Introduction Session States
...for introducer when both introducees have been deleted.
It can't be deleted when only one introducee is removed, because then all messages in the private conversation with the other introducee will disappear, because their corresponding session state can't be found anymore.
Closes#372
See merge request !189
Simple metadata queries
Adds support for retrieving metadata that matches all key/value pairs in a query object. This is a minimal version of #222 that can be extended if we need other query capabilities.
See merge request !187
Rotate crash fix
The problem was that two controllers were trying to unbind the Briar service where of course only one was needed.
I did the following
* Restructured the relevant Controllers
* Made a more permanent solution so that the last fragment will always be reloaded on config changes and Activity restarts.
Closes#386
See merge request !183
Add forum avatars to list of available forums

Closes#374
See merge request !182
Forum Avatars
These new forum avatars are using the first letter of the forum and calculate the background color from forum's group ID.
Closes#337

See merge request !178
Start plugins asynchronously
This prevents other services from getting stuck behind the plugin manager while the Tor plugin is starting, which takes several seconds. The plugin manager waits for each plugin to start before stopping it.
I've also added some canaries to plugins and services to ensure instances aren't started more than once.
See merge request !181
Poller refactoring, replace Timer with ScheduledExecutorService
* Replace Timer with ScheduledExecutorService (closes#258)
* Move automatic connection logic from PluginManager to Poller
* Reschedule polling when connections are opened or closed, making the poller more responsive to reductions in the polling interval
See merge request !180