Separate the sync layer from its clients. #112
This patch contains most of the work for #112 (closed). MessagingManager and ForumManager have been converted to BSP clients, and the sync layer's message and group formats no longer contain any client-specific data.
Each client has a MessageValidator that's called by the ValidationManager to validate messages belonging to the client. A new MessageValidatedEvent informs listeners when a message has been validated. This required some changes to the UI, especially the notification manager.
While working on the notification manager I realised it was calling Android API methods from background threads, which may be unsafe, and the notification logic was split across BriarService and AndroidNotificationManagerImpl. So I refactored those classes, along with AndroidExecutorImpl, which was using an unnecessary background thread.
Still to do:
- Synchronise blocks, not messages
- Add message type field to message header as per BSP spec
- Convert TransportPropertyManager into a BSP client
- Convert SubscriptionUpdates/Acks into forum client messages