GithubHelp home page GithubHelp logo

smarttoolfactory / propertyfindar Goto Github PK

View Code? Open in Web Editor NEW
259.0 14.0 39.0 42.44 MB

๐Ÿ˜ ๐ŸŽƒ 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.

Kotlin 99.92% Shell 0.08%
android kotlin-android coroutines-flow rxjava3 room-persistence-library retrofit2 offline-first clean-architecture dynamic-feature-module dynamic-feature

propertyfindar's Introduction

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

ktlint Kotlin Version API

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

propertyfindar's People

Contributors

smarttoolfactory avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.