/PropertyFindAR

๐Ÿ˜ ๐ŸŽƒ Real Estate Sample App with RxJava3+Coroutines Flow, Dynamic Feature Modules, Dagger Hilt, Offline First, ConcatAdapter, Animations and tests for Room, Retrofit, useCase and ViewModels with TDD.

Primary LanguageKotlin

๐Ÿ˜ Real Estate App with MVVM Clean Architecture RxJava3+Coroutines Flow, Static Code Analysis, Dagger Hilt, Dynamic Features

ktlint Kotlin Version API

Note: โš ๏ธ Augmented Reality and maps COMING SOONโ€ผ๏ธ After Notification, Account and Search modules are completed

About

Sample project that build with MVVM clean architecture and various cool techs including RxJava3 and Coroutines Flow, Dynamic Feature modules as base of BottomNavigationView or ViewPager2, with both OfflineFirst and OfflineLast approaches as database Single Source of Truth Merge Adapter, ViewBinders for setting inner RecyclerViews, RecycledViewPools, SavedStateHandle, and more.

Unit tests are written with JUnit4, JUnit5, MockK, Truth, MockWebServer. Data(including for both RxJava and Coroutines tests for Room and Retrofit), Domain, and ViewModel tests in Home module are written with Test Driven Development.

Flow RxJava3 Pagination
Dashboard Notification Account

๐Ÿค“ Overview

  • Gradle Kotlin DSL is used for setting up gradle files with buildSrc folder and extensions.
  • KtLint, Detekt, and Git Hooks is used for checking, and formatting code and validating code before commits.
  • Dagger Hilt, Dynamic Feature Modules with Navigation Components, ViewModel, Retrofit, Room, RxJava, Coroutines libraries and dependencies are set up.
  • features and libraries folders are used to include android libraries and dynamic feature modules
  • In core module dagger hilt dependencies and @EntryPoint is created
  • Data module uses Retrofit and Room to provide Local and Remote data sources
  • Room database has many-to-many and one-to many relation with Junction/Association table.
  • Repository provides offline and remote sources and mappers, local save, delete and fetch functions
  • Domain module uses useCase classes to implement business logic to fetch and forward data
  • ViewModel uses LiveData with data-binding to display LOADING, and ERROR or SUCCESS states.
  • Home dynamic feature module has a ViewPager2 that hosts property lists
  • Dashboard module contains list with different type of layouts using ViewBinder classes, and Recommendations based on users history and ConcatAdapter to merge different type of Adapters.

Built With ๐Ÿ› 

Some of the popular libraries and MVVM clean architecture used with offline-first and offline-last with Room database and Retrofit as data source

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

  • Coroutines - Threads on steroids for Kotlin

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

  • RxJava3 - Newest version of famous reactive programming library for Java, and other languages

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

    • LiveData - Data objects that notify views when the underlying database changes.
    • ViewModel - Stores UI-related data that isn't destroyed on UI changes.
    • DataBinding - 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 as never easier before
    • Dynamic Feature Modules Dynamic modules for adding or removing based on preference
    • SavedStateHandle A handle to saved state passed down to androidx.lifecycle.ViewModel. You should use SavedStateViewModelFactory if you want to receive this object in ViewModel's constructor.
    • Room Persistence library provides an abstraction layer over SQLite to allow for more robust database access while harnessing the full power of SQLite.
  • Material Components for Android - Modular and customizable Material Design UI components for Android.

  • Dependency Injection -

    • Hilt-Dagger - Standard library to incorporate Dagger dependency injection into an Android application.
    • Hilt-ViewModel - DI for injecting ViewModel.
  • Retrofit - A type-safe HTTP client for Android and Java.

  • Glide - Image loading library.

  • ConcatAdapter RecyclerView adapter which enables you to sequentially combine multiple adapters to be displayed in a single RecyclerView.

  • Lottie - Animation library from AirBnB

  • MpChart - โšก๏ธ MPAndroidChart is a powerful & easy to use chart library for Android โšก๏ธ

  • Chucker - OkHttp interceptor providing a UI for inspecting and sharing their content.

  • Architecture

  • Tests

  • Gradle

Modularaization, Library and Feature Modules

Uses both library modules and dynamic feature modules

Architecture

Uses concepts of clean architecture

Data Module

Domain Module

Database and Table Relations with Junction Table