Awesome
<p align="center"> <a href="https://opensource.org/licenses/Apache-2.0"><img alt="License" src="https://img.shields.io/badge/License-Apache%202.0-blue.svg"/></a> <a href="https://android-arsenal.com/api?level=21"><img alt="API" src="https://img.shields.io/badge/API-21%2B-brightgreen.svg?style=flat"/></a> <a href="https://github.com/GetStream/stream-slack-clone-android/actions/workflows/android.yml"><img alt="Build Status" src="https://github.com/GetStream/stream-slack-clone-android/actions/workflows/android.yml/badge.svg"/></a> </p>This is a Slack clone app built with Jetpack Compose and Stream Chat SDK for Compose following clean architecture principles.
This repository serves as a demonstration for the following:
- Building the entire UI using Jetpack Compose.
- Implementing Android architecture components with Jetpack libraries such as Hilt for dependency injection.
- Managing background tasks using Kotlin Coroutines.
- Integrating real-time chat functionality and authentication using the Stream Chat SDK for seamless event handling.
:bulb: Additional Repositories
If you're interested in additional repositories that were built with Jetpack Compose and Stream SDK, check out the repositories below:
- Chat GPT Android: π² ChatGPT Android demonstrates a Chatbot application using OpenAI's chat API on Android with Stream Chat SDK for Compose.
- Gemini Android: β¨ Gemini Android demonstrates Google's Generative AI on Android with Stream Chat SDK for Compose.
- WhatsApp Clone Compose: π± WhatsApp clone project demonstrates modern Android development built with Jetpack Compose and Stream Chat SDK for Compose.
- Stream Draw Android: π₯ Stream Draw is a real-time multiplayer drawing & chat game app built entirely with Jetpack Compose.
- Facebook Messenger Clone: Facebook Messenger clone using Stream SDK & Jetpack Compose.
π² Download
Go to the Releases to download the latest APK.
<a href="https://getstream.io/chat/sdk/compose?utm_source=Github&utm_medium=Jaewoong_OSS&utm_content=Developer&utm_campaign=Github_May2022_SlackAndroidClone&utm_term=DevRelOss"> <img src="https://user-images.githubusercontent.com/24237865/138428440-b92e5fb7-89f8-41aa-96b1-71a5486c5849.png" align="right" width="12%"/> </a>π₯ Stream Chat SDK
Stream Slack Android clone was built with Stream Chat SDK for Compose to implement messaging systems. If youβre interested in adding powerful In-App Messaging to your app, check out the Android Chat Messaging Tutorial!
- Stream Chat SDK for Android on GitHub
- Android Samples for Stream Chat SDK on GitHub
- Stream Chat Compose UI Componenets Guidelines
π· Previews
<p align="center"> <img src="art/art0.gif" alt="drawing" width="270" /> <img src="art/art1.png" alt="drawing" width="270" /> <img src="art/art2.png" alt="drawing" width="270" /> <img src="art/art3.png" alt="drawing" width="270" /> <img src="art/art4.png" alt="drawing" width="270" /> <img src="art/art5.png" alt="drawing" width="270" /> <img src="art/art6.png" alt="drawing" width="270" /> <img src="art/art7.png" alt="drawing" width="270" /> <img src="art/art8.png" alt="drawing" width="270" /> </p>ποΈ Architecture
Stream Slack Clone Android follows the principles of Clean Architecture with Android Architecture Components.
Architecture's layers & boundaries:
<img src="art/architecture.png" />- User Interface Layer: The responsibility of the UI layer is to render the application data on the screen. UI elements must be updated whenever the application data changes from user interaction or external communication with the network and database.
- Presentation Layer: The responsibility of the Presentation layer is to interact and notify data changes between UI layers and Domain layers. It also holds and restores data in configuration changes.
- Domain Layer: The domain layer is responsible for abstracting complex business logic and improving its reusability. This layer transforms the complex application data into suitable types for Presentation layers and groups similar business logic as a single feature.
- Data Layer: The responsibility of the data layer is to deliver the result of business logic executions, such as CRUD operations (Create, Retrieve, Update, Delete β all system events). This layer can be designed with various strategies, like Repository or DataSource, for dividing the responsibility of executions.
For more information, check out the The 2022 Android Developer Roadmap: Part 3, Architecture Components.
π‘ The Android Developer Roadmap
For more Android-specific knowledge, be sure to check out the Android Developer Roadmap, which outlines essential topics, skills, and resources for Android development.
- The Android Platform: The 2022 Android Developer Roadmap β Part 1
- App Components: The Android Developer Roadmap β Part 2
- App Navigation and Jetpack: The Android Developer Roadmap β Part 3
- Design Patterns and Architecture: The Android Developer Roadmap β Part 4
- Jetpack Compose: The Android Developer Roadmap β Part 5
π Tech Stack & Open Source Libraries
- Minimum SDK level 21.
- 100% Jetpack Compose based + Coroutines + Flow for asynchronous.
- Compose Chat SDK for Messaging: The Jetpack Compose Chat Messaging SDK is built on a low-level chat client and provides modular, customizable Compose UI components that you can easily drop into your app.
- Jetpack
- Compose: Androidβs modern toolkit for building native UI.
- Lifecycle: Observe lifecycle changes.
- ViewModel: UI related data holder and lifecycle aware.
- Room Persistence: Constructs Database by providing an abstraction layer over SQLite to allow fluent database access.
- Paging3: Loads and displays pages of data from a larger dataset from local storage or over network.
- App Startup: Provides a straightforward, performant way to initialize components at application startup.
- Hilt: Dependency Injection.
- Landscapist-Glide: Jetpack Compose image loading library that fetches and displays network images with Glide, Coil, and Fresco.
- Retrofit2 & OkHttp3: Construct the REST APIs and paging network data.
- Timber: A logger with a small, extensible API which provides utility.
Copyrights & Credits
All copyrights of the resources, logo, branding, content, concepts, and phrases that are used in this open-source project belong to Slack. Also, this project was forked from SlackAndroidClone and the original credit goes to Anmol92verma.
<a href="https://getstream.io/chat/sdk/compose?utm_source=Github&utm_medium=Jaewoong_OSS&utm_content=Developer&utm_campaign=Github_May2022_SlackAndroidClone&utm_term=DevRelOss"> <img src="https://user-images.githubusercontent.com/24237865/138428440-b92e5fb7-89f8-41aa-96b1-71a5486c5849.png" align="right" width="12%"/></a>Find this repository useful? π
Support it by joining stargazers for this repository. :star: <br> Also, follow maintainers on GitHub for our next creations! π€©
License
Copyright 2022 Stream.IO, Inc. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.