Skip to content

🎞 A demo movie android app that demonstrates Clean Architecture and is written in Kotlin. (Offline-first App)

License

Notifications You must be signed in to change notification settings

DroidDump/Android-Clean-Architecture

 
 

Repository files navigation

Android Clean Architecture Codacy Badge

A demo movie android app that demonstrates Clean Architecture and is written in Kotlin.💯🎞

Features

  • Offline-first app, allowing users to access the app even without an internet connection.
  • Pagination to efficiently load large amounts of data and improve the user experience.
  • Search functionality to quickly find specific information within the app.
  • Auto Sync using both NetworkConnectivityStream and WorkManager to ensure data is always up-to-date.
  • The ability to add movies to a favorite.

For a basic version of the app without pagination, check out the basic_app branch.

The Motivation behind the app

This repository was created with the intention of stepping outside of my comfort zone as much as possible, tackling topics outside of my area of expertise, and using it to implement new challenges and ideas.

API: https://movies-mock-server.vercel.app/

API (Repository): https://github.com/AliAsadi/movies-mock-server

⚠️NOTE

If you are here trying to learn a new architecture and asking yourself what is the best architecture, I will share my thoughts on the topic.

It's important to note that there is no such thing as "the perfect architecture."

Architecture by its nature is dynamic and ever-evolving, there are always several solutions to every problem, and what works best will depend on the specific requirements and constraints of your project.

image

Screenshots

Mode Feed Favorites Movie Details Search
Dark
Light
Orientation Feed
Landscape

Clean Architecture

The core principles of the clean approach can be summarized as followed:

1. The application code is separated into layers.

These layers define the separation of concerns inside the code base.

2. The layers follow a strict dependency rule.

Each layer can only interact with the layers below it.

3. As we move toward the bottom layer — the code becomes generic.

The bottom layers dictate policies and rules, and the upper layers dictate implementation details such as the database, networking manager, and UI.

Architecture Layers

The application consists of three layers:

The domain layer, the data layer, and the presentation layer.

Looking at project’s high-level structure, you’ll see that each layer is represented by a module in the project.

image

I like it because it helps me avoid accidentals “leaks” between the layers.

Structure

Built With 🛠

  • Kotlin - First class and official programming language for Android development.

  • Coroutines - For asynchronous and more..

  • Flow - A cold asynchronous data stream that sequentially emits values and completes normally or with an exception.

  • StateFlow - A live data replacement.

  • Android Architecture Components - Collection of libraries that help you design robust, testable, and maintainable apps.

    • Paging3 - Load and display small chunks of data at a time.
    • LiveData - Data objects that notify views when the underlying database changes.
    • ViewModel - Stores UI-related data that isn't destroyed on UI changes.
    • SavedStateHandle - A handle to saved state passed down to androidx.lifecycle.ViewModel.
    • ViewBinding - Generates a binding class for each XML layout file present in that module and allows you to more easily write code that interacts with views.
    • Navigation Components - Navigate fragments easier.
    • Room - Persistence library provides an abstraction layer over SQLite to allow for more robust database access while harnessing the full power of SQLite.
    • WorkManager - Schedule deferrable, asynchronous tasks
  • Dependency Injection

    • Hilt - Easier way to incorporate Dagger DI into Android application.
  • Retrofit - A type-safe HTTP client for Android and Java.

  • Mockito - For Mocking and Unit Testing

Code Style

The code style in this project was ensured using Detekt.

Check command:

./gradlew detekt

Feel free to submit any type of issues and suggestions for improving the coding standard

Happy Coding!!!


License

   Copyright (C) 2020 Ali Asadi
   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.

Contributing

Just make pull request. You are in!

About

🎞 A demo movie android app that demonstrates Clean Architecture and is written in Kotlin. (Offline-first App)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Kotlin 100.0%