Stream offers 3 building blocks for adding chat to your Android app:
The low level client
LiveData objects with offline support powered by Room (RX Java support is on the roadmap)
UI components implemented using custom views
The low level client/ SDK
The low level client uses an event based system to update chat messages. The examples in these docs are all written using the low level client. You can find the Github repo for the low level client here. The benefits of using the low level client are:
A small set of dependencies, so easy to install
Infinite flexibility to build any type of chat or messaging experience you want
Keeping a list of messages updated using events can be quite complicated. The livedata package abstracts a couple dozen events and simply exposes a LiveData object with Messages.
Currently the code for the livedata implementation is part of the stream-chat-android package. In the future we will probably split that out into it's own package.
The UI library provides 4 reusable chat views to help you quickly add chat to your application. The channel list shows a list of channels/conversations. The message list renders a conversation/list of messages. The message input view creates a message input view that supports threads, editing, image uploads, typing and slash commands. Last, the channel header view implements a basic channel overview.
This screenshot shows the channel list. Note how it shows the last active time, last read event, avatars of participating users and the last message text.
The next screenshot shows the channel header, message list and message input. Note how the message list supports advanced features such link previews, user read state, typing indicators, reactions, threads and editing messages.
All 4 custom views are heavily customizable using styleable attributes, custom layouts and custom view holders. The WhatsApp clone tutorial gives a good idea about what level of customizability is possible. If your UI is very different from the standard UX components we provide we recommend using either the livedata objects or low level SDK.
The Github repo for both the LiveData and UX components can be found here.