A messaging application, a mobile client for the Zulip API

A messaging application, a mobile client for the Zulip API

ChatApp

Description

A messaging application, a mobile client for the Zulip API.

Features

  • Single Activity
  • Multi-module architecture
  • Light and Dark theme
  • Ability to create your own channel (“+” button on the screen with channels Channels Fragment)
  • The ability to open messages for both the channel (long tap on the channel in Channels Fragment) and the topic (click on the topic in Channels Fragment)
  • The ability to write to different topics (only from the chat channel in ChatFragment)
  • Ability to go to the channel topic from channel chat to ChatFragment (click on the topic)
  • The ability to put a reaction, delete, edit and copy a message (long tap on message in Chat Fragment)

Requirements

To fully work with the Zulip API used in the application, an API key is required. How to get an API key. After receiving the key, you need to add the following lines to the local.properties file:

username=<login>
password=<API-key>
base_url=<URL>

Arhitecture

The application follows the principles of pure architecture, the representation layer implements the UDF architectureusing the Elmslie library. Example implementation of the feature:channel module

ChatApp-Architecture

Modularization

МодульТип модуляОписание
:appAndroid ApplicationCombines everything necessary for the correct operation of the application.
core:commonJava/Kotlin LibraryCommon classes, for use by other modules.
core:componentsAndroid LibraryUI components, extension functions, base classes.
core:networkAndroid LibraryAPI for processing network requests and responses from a remote data source.
core:databaseAndroid LibraryImplementation of a local database using the Room library.
core:authAndroid LibraryClasses responsible for authorization logic.
core:uiAndroid LibraryResources used by modules.
feature:channelsAndroid LibraryDisplaying channels using Channel Fragment and HolderChannelFragment, the ability to add a channel (AddChannelFragment).
feature:chatAndroid LibraryDisplaying channel/topic messages (ChatFragment), the ability to change the message (Action Fragment and EditMessageFragment), choosing an emoji to add a reaction (SelectEmojiFragment).
feature:profileAndroid LibraryDisplaying the user profile using the Profile Fragment.
feature:usersAndroid LibraryDisplaying information about all users in the organization using the Users Fragment

Технологии

  • Coroutines, Flow – Asynchronous operation.
  • Retrofit 2 – Requests to the network.
  • Ok Http – Requests to the network.
  • Kotlin Serialization – Serialization of data.
  • Coil – Uploading images over the network, caching downloaded images.
  • Jetpack Paging 3 – Loading data in small parts.
  • Android Navigation Component – Navigation through the application.
  • ViewBinding – Improvement and optimization of the code associated with the view layer.
  • Shimmer – Data loading display.
  • Dagger2 – Dependency injection.
  • Elmslie – Simplification of the implementation of the ELM architecture.
  • Room – Abstraction layer on top of SQLite, allowing free access to the database.
  • DataStore – Storing data in the form of key-value pairs using Coroutines and Flow.
  • Timber is a Logger that provides a utility on top of the usual Log class.
  • Leak Canary – Detection of memory leaks.

Screenshots

Light theme

ChatApp-LightTheme

Dark theme

ChatApp-DarkTheme

GitHub

View Github

Leave a Reply

Your email address will not be published. Required fields are marked *