Fix NPE in ForumSharingStatusActivity by only accessing group in contact list
Only access group in contact list where it is guaranteed to exist.
Closes#430
See merge request !211
Client layer events for messaging
Adds and uses a new `PrivateMessageReceivedEvent` and eliminate the need for an event for adding local messages. Both done in separate commits.
This addresses part of #309
See merge request !208
Address Race-Condition in Forum Sharing
When Two Contacts Share Same Forum with each other at the same time a race condition causes them both to delete each other's invitation. This is solved by an Alice/Bob test as suggested in #388.
See merge request !205
Adds badges to the forum list that indicate unread posts
This MR adds badges to the forum list that indicate unread posts. It does so by extending the compound view `TextAvatarView` and provides convenient setters that take care of the required UI changes. The new badge can also be used to indicate a problem with the forum.

I decided not to check if the forum is shared from someone or with someone and indicate a problem in this case, because this requires iterating two times over all contacts and their group metadata for each forum. If someone considers it important to check for this information, we can create a ticket for doing this within the forum and not in the forum list.
See merge request !207
Blog Fragment in Navigation Drawer with Tabs
This replaces the custom layouts in the navigation drawer with a
`NavigationView` and adds a menu entry for Blogs.
A Main Blogs fragment is added that holds a `TabLayout` and a
`ViewPager`. Five tabs are already added, but they just have a single
placeholder fragment that is to be replaced by the actual fragments.
Please note that the header in the navigation drawer is just provisional. I am sure @Megalox can design a better one.


Closes#409
See merge request !210
This replaces the custom layouts in the navigation drawer with a
`NavigationView` and adds a menu entry for Blogs.
A Main Blogs fragment is added that holds a `TabLayout` and a
`ViewPager`. Five tabs are already added, but they just have a single
placeholder fragment that is to be replaced by the actual fragments.
Closes#409
It does so by extending the compound view `TextAvatarView` and provides
convienient setters that take care of the required UI changes.
The new badge can also be used to indicate a problem with the forum.
Closes#408
122 threaded discussions
This branch contains the complete code for the nested forums (UI & back-end).
* This branch has an optional randomized set of dummy test data, uncomment one line in ForumActivity.java and then open up any forum.
See merge request !201
Message Dependencies
This MR adds a new table to the database to hold message dependencies.
It introduces two more message states (pending and delivered) and completely changes the validation and message delivery logic.
Since this is a **very invasive** change, please **review carefully**. It is better to catch issues now than having to debug things later. If you notice an area without tests, please let me know. I tried to have tests for all changes.
Unfortunately, this MR turned out rather large, but most of it are actually tests and you can review one commit after the other without needing to see the full changelog.
In order to reflect the new states, things that were previously true for `VALID` messages have been changed to now be true for `DELIVERED` messages. This might have changed the semantics in some places and can have unindented side-effects.
The `DatabaseComponent` was extended with methods for:
* adding dependencies
* getting dependencies and states of a message
* getting messages that depend on a message (dependents) and their states
* getting messages to be delivered (by startup hook)
* getting pending messages to be possibly delivered (by startup hook)
The `valid` column in the database was renamed to `state` along with the associated methods to better reflect its new extended meaning.
Since pending messages should not be available to clients, many database queries have been modified to only return results for delivered messages. I might have missed some. Please check carefully. Also you might want to think about how you could create arbitrarily large transactions by sending malicious messages.
Please note that the database version was bumped in this MR.
Closes#382
See merge request !198
that handles message dependencies reported from clients.
The MessageValidatedEvent has been renamed into a MessageDeliveredEvent
since there were no real use cases for the former any more.
This adds a new table to the database to hold message dependencies.
It introduces two more message states: pending and delivered
The valid column in the database was renamed to state to better reflect
its new extended meaning.
The DatabaseComponent was extended with three methods for:
* adding dependencies
* getting dependencies of a message
* getting messages that depend on a message (dependents)
* getting messages to be delivered (by startup hook)
* getting pending messages to be possibly delivered (by startup hook)
In order to reflect the new states, things that were previously true for
VALID messages have been changed to now be true for DELIVERED messages.
Since pending messages should not be available to clients, many database
queries have been modified to only return results for delivered
messages.
All added methods and changes should come with updated unit tests.
Please note that the database version was bumped in this commit.
added parent id to metadata and a unit test
The parent id, a necessary attribute for nested forums, was not being added to the metadata in the forum manager. Additionally, a simple forum manager unit was created.
See merge request !202
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