ChatApp
ChatApp is a free messaging app inspired by messaging & social media apps. Written in Kotlin implements the Jetpack libraries, Firebase services.
Screenshots
Used Tech
- Kotlin
- MVVM
- Coroutines - Asynchronous programming
- Data Binding - Declaratively bind observable data to UI elements.
- Lifecycles - Create a UI that automatically responds to lifecycle events.
- LiveData - Build data objects that notify views when the underlying database changes.
- Navigation - Handle everything needed for in-app navigation.
- Paging - Load and display small chunks of data at a time.
- Room - Access your app's SQLite database with in-app objects and compile-time checks.
- ViewModel - Store UI-related data that isn't destroyed on app rotations. Easily schedule asynchronous tasks.
- WorkManager - Schedule deferrable, asynchronous tasks even if the app exits or device restarts.
- Firebase - Tools to develop high-quality apps.
- Authentication - Allows an app to securely save user data in the cloud.
- Cloud Firestore - Flexible, scalable NoSQL cloud database to store and sync data.
- Cloud Functions - Automatically run backend code in response to events triggered by Firebase
- Cloud Messaging - Notify a client app.
- Cloud Storage - Store and serve user-generated content.
- Remote Config - Change the settings of app without requiring users to download an app update.
- Dagger 2 - Compile-time framework for dependency injection.
- Hilt - Compile-time framework for dependency injection.
- Glide - Load and cache images by URL.
- Moshi - Serialize Kotlin objects and deserialize JSON objects.
- Retrofit 2 - Handle REST api communication.
- Test - An Android testing framework for unit and runtime UI tests.
- ktlint - Enforce Kotlin coding styles.
Features
- Firebase:
- Authentication (Email, Facebook, Google, Phone)
- Cloud Firestore
- Cloud Messaging
- Functions
- Remote Config
- Storage
- Create user profile (Username).
- Search users by Username
- Send text, graphic, audio messages.
- Take a picture from camera or gallery.
- Record/play audio.
- Display graphics in full screen view, zoom in/out, drag and rotate.
- Check user online status.
- Check message read/delivery status.
- Get notifications about new messages.
Report issues
Something not working quite as expected? Do you need a feature that has not been implemented yet? Check the issue tracker and add a new one if your problem is not already listed. Please try to provide a detailed description of your problem, including the steps to reproduce it.
Contribute
Awesome! If you would like to contribute with a new feature or submit a bugfix, fork this repo and send a pull request. Please, make sure all the unit tests, integration tests & ./gradlew spotlessApply
are passing before submitting and add new ones in case you introduced new features.
How to run the project in development mode
- Clone or download repository as a zip file.
- Open project in Android Studio.
- Set Facebook API key in build.gradle.
- Run 'app'
SHIFT+F10
.
Getting Started
- Create Firebase project.
- In Firebase console enable all Firebase services listed in section Features.
- To turn on notifications deploy following function to Firebase functions service.
Android Studio IDE setup
ChatApp uses ktlint to enforce Kotlin coding styles. Here's how to configure it for use with Android Studio (instructions adapted from the ktlint README):
- Close Android Studio if it's open
- Download ktlint using these installation instructions
- Inside the project root directory run:
./ktlint --apply-to-idea-project --android
- Remove ktlint if desired:
rm ktlint
- Start Android Studio
License
Copyright 2019 Artur Gniewowski
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.