Skip to content

mena-rizkalla/Chat-App

Repository files navigation

🚀 ChatApp: A Modern Android Messenger

ChatApp Banner

ChatApp is a fully-featured, real-time messaging application for Android, built with the latest technologies. It showcases a modern, clean, and animated user interface following Material 3 design principles. Connect with users in private chats, join the global conversation, or even chat with a Gemini-powered AI, all within a robust and scalable architecture.!


✨ Features

  • 🔒 Authentication: Secure user sign-up and login using Firebase Authentication. Includes a "Forgot Password" flow.
  • 👤 User Directory: Browse a list of all registered users to start new conversations.
  • 💬 Private & Global Chat: Engage in one-on-one private messaging or join the public global chat room.
  • 🤖 AI Chat & Smart Replies: Have a conversation with Google's Gemini API and get AI-powered reply suggestions in your private chats.
  • ✍️ Full Message Control:
    • Edit & Delete: Easily correct typos or remove messages you've sent.
    • Reply to Message: Swipe on any message to reply directly, providing context to your conversations.
    • Message Reactions: React to messages with emojis (❤️, 👍, 😂, 😢, 😠).
  • 👀 Real-time Presence:
    • Typing Indicators: See when the other user is typing in real-time.
    • Read Receipts: Know when your messages have been seen with a double-check mark system (✔️✔️).
  • 🎨 Modern UI: A beautiful and responsive UI built with Jetpack Compose and Material 3, supporting both light and dark themes.
  • 🚀 Real-time Communication: Messages and reactions appear instantly thanks to Firebase Firestore's real-time listeners.
  • ✨ Fluid Animations: Smooth and fluid animations for message appearance and UI transitions, enhancing the user experience.

📸 Screenshots

Here's a glimpse of the beautiful new interface you'll experience in ChatApp.

Users List Private Chat Global Chat
Users Screen Private Chat Screen Global Chat Screen
AI Chat Login Screen Sign Up Screen
AI Chat Screen Login Screen Sign Up Screen

🛠️ Tech Stack & Architecture

This project leverages a modern Android development stack:

  • UI: Jetpack Compose for building the UI declaratively with Kotlin.
  • Architecture: Model-View-Intent (MVI)* using a single state object (UiState) and unidirectional data flow to ensure a predictable and maintainable state management.
  • State Management: Unidirectional Data Flow (UDF) within the ViewModels using Kotlin Flows and StateFlow.
  • Dependency Injection: Koin for managing dependencies and injecting ViewModels.
  • Backend: Firebase
    • Firestore: For real-time database functionality (messages, users, reactions).
    • Authentication: For handling user accounts.
  • Asynchronous Programming: Kotlin Coroutines and Flows for managing background tasks and handling data streams.
  • Navigation: Jetpack Navigation for Compose to handle screen transitions.
  • Automation (CI/CD):

🚀 CI/CD Pipeline

A full CI/CD pipeline is configured using GitHub Actions (.github/workflows/android_ci.yml). On every push to the develop branch, the workflow automatically:

  1. Checks out the latest code.
  2. Sets up the Java and Android SDK environment.
  3. Caches Gradle dependencies to speed up future builds.
  4. Runs lint checks and unit tests to ensure code quality.
  5. Builds a release-ready APK.
  6. Generates automatic release notes from the latest commit messages.
  7. Uploads and distributes the APK to testers via Firebase App Distribution.

⚙️ Setup & Installation

To get this project running on your own machine, follow these steps:

  1. Clone the repository:

    git clone [https://github.com/mena-rizkalla/chatapp.git](https://github.com/mena-rizkalla/chatapp.git)
  2. Connect to Firebase:

    • Go to the Firebase Console.
    • Create a new project.
    • Add an Android app to your Firebase project with the package name com.example.chatapp.
    • Download the google-services.json file and place it in the app/ directory of your project.
    • In the Firebase Console, enable Authentication (with the Email/Password provider) and Firestore Database.
  3. Build and Run:

    • Open the project in Android Studio.
    • Let Gradle sync the dependencies.
    • Build and run the app on an emulator or a physical device.

🤝 Contributing

Contributions are welcome! If you have ideas for new features or find a bug, please feel free to open an issue or submit a pull request.

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

About

Chat app using Jetpack Compose, MVI, Firebase, Coroutines, Koin

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages