🎬 An android app for exploring movies using the movie database API Implemented by Clean Architecture, MVVM, Compose, Coroutines, Flow, Hilt, Jetpack(Room, Datastore)
- Kotlin - is a modern and pragmatic programming language developed by JetBrains. It is fully interoperable with Java and widely adopted for Android app development.
- Asynchronous:
- Coroutines - Kotlin's coroutine library simplifies asynchronous programming and enhances concurrency management.
- Networking:
- Serialization:
- Kotlinx Serialization - Kotlinx Serialization is a Kotlin library that provides a powerful and flexible way to serialize and deserialize Kotlin data classes.
- Image loading:
- Coil - An image loading library for Android, designed to be lightweight and efficient in handling image processing tasks.
- Jetpack:
- Compose - A modern UI toolkit for declaring UI components in a declarative manner.
- Lifecycle - A tool for handling actions related to the app's lifecycle changes.
- ViewModel - Used to store and manage UI-related data in a lifecycle-aware way.
- Paging3 - A tool for managing pagination in large datasets.
- Room - An ORM library built on SQLite for handling local databases.
- Datastore - A modern data storage library for data management.
- Architecture:
- MVVM(Model-View-ViewModel)
- Android Architecture components - A set of libraries providing architecture components for Android app development.
- Android KTX - Kotlin extensions for Android app development, enhancing Kotlin usage convenience.
- Dependency Injection:
- Hilt - A dependency injection library for Android apps, providing a simple and efficient approach based on Dagger.
- Protocol buffers - protobuf is a method developed by Google for serializing structured data, similar to XML or JSON. It is designed to be more efficient and compact than traditional serialization formats.
- Testing:
- JUnit4 - JUnit4 is a unit testing framework for Java and Kotlin. It is used to write unit tests for business logic or utility methods in Android apps.
- Robolectric - Robolectric is a unit testing framework for Android. It provides a simulated Android environment for testing, allowing you to run tests on Android framework-dependent code without the need for a real Android device or emulator.
- Espresso - Espresso is a testing framework for Android UI tests. It is used to test the behavior of user interfaces by interacting with UI elements and verifying the outcomes.
- Static analysis tools:
- Gradle:
- Gradle Kotlin DSL + Gradle Convetion Plugins + Custom tasks
- Dependency
versions:
- Version catalog TOML file format - A convenient method in Gradle for managing dependency versions
- Continuous Integration:
- GitHub Actions - A CI tool provided by GitHub for automating workflows.
| Video Playback(Picture-in-Picture) | Dark(Light) theme |
|---|---|
This project requires The Movie Database (TMDB) API key to access external APIs. Follow the steps below to configure the API key:
-
Create a
local.propertiesfile in the project root directory. -
Add the
TMDB_API_KEYto thelocal.propertiesfile as shown below:TMDB_API_KEY=your TMDB_API key -
Build and run the project.
- Offline-first caching
- Add localization support (Korean, English, Japanese)
- Add dark and light theme support
- Implement video playback using YouTube IFrame API
- Add support for PIP(Picture-in-Picture) in video player
This project is developed with inspiration from the The Movies2 project.
Copyright 2024 seosh817 (Seunghwan Seo)
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.
Feel free to file an issue if you find a
problem or make pull requests.
All contributions are welcome 😁