├── .gitattributes ├── .github └── workflows │ └── update_readme.yml ├── .gitignore ├── .idea ├── artifacts │ └── awesome_android_kotlin_apps_main_jar.xml ├── awesome-android-kotlin-apps.iml ├── codeStyles │ ├── Project.xml │ └── codeStyleConfig.xml ├── compiler.xml ├── jarRepositories.xml ├── libraries-with-intellij-classes.xml ├── misc.xml └── vcs.xml ├── AUTHORS ├── CONTRIBUTING.md ├── META-INF └── MANIFEST.MF ├── README.md ├── README.model.md ├── assets ├── android.svg ├── androiddevnotes.png ├── count.svg └── kotlin.svg ├── awesome-android-kotlin-apps.main.jar ├── build.gradle ├── gpm.json ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── input_data.json ├── settings.gradle ├── src └── main │ └── kotlin │ └── com │ └── github │ └── aaka │ ├── App.kt │ ├── core │ └── ReadMeGenerator.kt │ ├── data │ ├── local │ │ ├── InputProjectCategory.kt │ │ └── Project.kt │ ├── remote │ │ ├── GetRepoResponse.kt │ │ └── GitHubApi.kt │ └── repo │ │ ├── GitHubRepo.kt │ │ ├── InputDataRepo.kt │ │ └── ReadMeRepo.kt │ ├── di │ ├── AppComponent.kt │ └── modules │ │ ├── MoshiModule.kt │ │ └── NetworkModule.kt │ ├── tasks │ └── convert │ │ └── MarkdownToJsonConvertor.kt │ └── utils │ └── DateTimeUtils.kt ├── stale_outputs_checked └── test.file /.gitattributes: -------------------------------------------------------------------------------- 1 | *.md linguist-language=kotlin -------------------------------------------------------------------------------- /.github/workflows/update_readme.yml: -------------------------------------------------------------------------------- 1 | name: Update README 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | schedule: 8 | - cron: '0 */6 * * *' 9 | 10 | jobs: 11 | build: 12 | 13 | runs-on: ubuntu-latest 14 | 15 | steps: 16 | - name: Set up JDK 1.8 17 | uses: actions/setup-java@v1 18 | with: 19 | java-version: 1.8 20 | - name: Get latest repo 21 | uses: actions/checkout@master 22 | - name: Create local changes 23 | run: java -jar awesome-android-kotlin-apps.main.jar 24 | env: 25 | GITHUB_ACCESS_TOKEN: ${{ secrets.THE_GITHUB_ACCESS_TOKEN }} 26 | - name: Commit files 27 | run: | 28 | git config --local user.email "theapache64bot@gmail.com" 29 | git config --local user.name "theapache64-bot" 30 | git commit -m "🚀 UPDATE README!" -a 31 | - name: Push changes 32 | uses: ad-m/github-push-action@master 33 | with: 34 | github_token: ${{ secrets.THE_GITHUB_ACCESS_TOKEN }} 35 | branch: master 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | # Created by https://www.toptal.com/developers/gitignore/api/kotlin,intellij,gradle 3 | # Edit at https://www.toptal.com/developers/gitignore?templates=kotlin,intellij,gradle 4 | 5 | ### Intellij ### 6 | # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider 7 | # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 8 | 9 | # User-specific stuff 10 | .idea/**/workspace.xml 11 | .idea/**/tasks.xml 12 | .idea/**/usage.statistics.xml 13 | .idea/**/dictionaries 14 | .idea/**/shelf 15 | 16 | # Generated files 17 | .idea/**/contentModel.xml 18 | 19 | # Sensitive or high-churn files 20 | .idea/**/dataSources/ 21 | .idea/**/dataSources.ids 22 | .idea/**/dataSources.local.xml 23 | .idea/**/sqlDataSources.xml 24 | .idea/**/dynamic.xml 25 | .idea/**/uiDesigner.xml 26 | .idea/**/dbnavigator.xml 27 | 28 | # Gradle 29 | .idea/**/gradle.xml 30 | .idea/**/libraries 31 | 32 | # Gradle and Maven with auto-import 33 | # When using Gradle or Maven with auto-import, you should exclude module files, 34 | # since they will be recreated, and may cause churn. Uncomment if using 35 | # auto-import. 36 | # .idea/artifacts 37 | # .idea/compiler.xml 38 | # .idea/jarRepositories.xml 39 | # .idea/modules.xml 40 | # .idea/*.iml 41 | # .idea/modules 42 | # *.iml 43 | # *.ipr 44 | 45 | # CMake 46 | cmake-build-*/ 47 | 48 | # Mongo Explorer plugin 49 | .idea/**/mongoSettings.xml 50 | 51 | # File-based project format 52 | *.iws 53 | 54 | # IntelliJ 55 | out/ 56 | 57 | # mpeltonen/sbt-idea plugin 58 | .idea_modules/ 59 | 60 | # JIRA plugin 61 | atlassian-ide-plugin.xml 62 | 63 | # Cursive Clojure plugin 64 | .idea/replstate.xml 65 | 66 | # Crashlytics plugin (for Android Studio and IntelliJ) 67 | com_crashlytics_export_strings.xml 68 | crashlytics.properties 69 | crashlytics-build.properties 70 | fabric.properties 71 | 72 | # Editor-based Rest Client 73 | .idea/httpRequests 74 | 75 | # Android studio 3.1+ serialized cache file 76 | .idea/caches/build_file_checksums.ser 77 | 78 | ### Intellij Patch ### 79 | # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 80 | 81 | # *.iml 82 | # modules.xml 83 | # .idea/misc.xml 84 | # *.ipr 85 | 86 | # Sonarlint plugin 87 | # https://plugins.jetbrains.com/plugin/7973-sonarlint 88 | .idea/**/sonarlint/ 89 | 90 | # SonarQube Plugin 91 | # https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin 92 | .idea/**/sonarIssues.xml 93 | 94 | # Markdown Navigator plugin 95 | # https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced 96 | .idea/**/markdown-navigator.xml 97 | .idea/**/markdown-navigator-enh.xml 98 | .idea/**/markdown-navigator/ 99 | 100 | # Cache file creation bug 101 | # See https://youtrack.jetbrains.com/issue/JBR-2257 102 | .idea/$CACHE_FILE$ 103 | 104 | # CodeStream plugin 105 | # https://plugins.jetbrains.com/plugin/12206-codestream 106 | .idea/codestream.xml 107 | 108 | ### Kotlin ### 109 | # Compiled class file 110 | *.class 111 | 112 | # Log file 113 | *.log 114 | 115 | # BlueJ files 116 | *.ctxt 117 | 118 | # Mobile Tools for Java (J2ME) 119 | .mtj.tmp/ 120 | 121 | # Package Files # 122 | *.jar 123 | *.war 124 | *.nar 125 | *.ear 126 | *.zip 127 | *.tar.gz 128 | *.rar 129 | 130 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml 131 | hs_err_pid* 132 | 133 | ### Gradle ### 134 | .gradle/ 135 | build/ 136 | 137 | # Ignore Gradle GUI config 138 | gradle-app.setting 139 | 140 | # Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) 141 | !gradle-wrapper.jar 142 | 143 | # Cache of project 144 | .gradletasknamecache 145 | 146 | # # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 147 | # gradle/wrapper/gradle-wrapper.properties 148 | 149 | ### Gradle Patch ### 150 | **/build/ 151 | 152 | # End of https://www.toptal.com/developers/gitignore/api/kotlin,intellij,gradle 153 | SecretConstants.kt 154 | !awesome-android-kotlin-apps.main.jar -------------------------------------------------------------------------------- /.idea/artifacts/awesome_android_kotlin_apps_main_jar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | $PROJECT_DIR$ 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /.idea/awesome-android-kotlin-apps.iml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 17 | 18 | -------------------------------------------------------------------------------- /.idea/codeStyles/codeStyleConfig.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | -------------------------------------------------------------------------------- /.idea/libraries-with-intellij-classes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 64 | 65 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | The open-source work on androiddevnotes is developed on the efforts of open-source contributors. 2 | 3 | Here is a list of helpful contributors to the project. These contributors have contributed resources, translations and ideas to the project. 4 | 5 | This will forever be an incomplete list of contributors. 6 | 7 | Sarvesh Prajapati 8 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guide 2 | 3 | ## How to contribute 4 | 5 | - Fork the project from the `master` branch and submit a Pull Request (PR) 6 | 7 | - Explain what the PR fixes or improves. 8 | 9 | - If you want to add a new repo: 10 | 11 | - Open the [input_data.json](https://github.com/androiddevnotes/awesome-android-kotlin-apps/blob/master/input_data.json) 12 | 13 | - Add repo url and tech stack there. 14 | 15 | - If you want to add more content or modify the content in the [README](https://github.com/androiddevnotes/awesome-android-kotlin-apps/blob/master/README.md) file, then modify the [README.model.md](https://github.com/androiddevnotes/awesome-android-kotlin-apps/blob/master/README.model.md) file. DO NOT DIRECTLY MODIFY THE [README](https://github.com/androiddevnotes/awesome-android-kotlin-apps/blob/master/README.md) file, the changes won't persist. Go to [README.model.md](https://github.com/androiddevnotes/awesome-android-kotlin-apps/blob/master/README.model.md) file and then edit there. Your edits in the [README.model.md](https://github.com/androiddevnotes/awesome-android-kotlin-apps/blob/master/README.model.md) will sync to [README](https://github.com/androiddevnotes/awesome-android-kotlin-apps/blob/master/README.md) in few moments. 16 | 17 | - For example, if you want to add new table to the [README](https://github.com/androiddevnotes/awesome-android-kotlin-apps/blob/master/README.md), you open the [README.model.md](https://github.com/androiddevnotes/awesome-android-kotlin-apps/blob/master/README.model.md) file, and add there. 18 | 19 | - Use sensible commit messages 20 | 21 | - If your PR fixes a separate issue number, include it in the commit message. 22 | 23 | - Use a sensible number of commit messages as well 24 | 25 | - e.g. Your PR should not have 1000s of commits. -------------------------------------------------------------------------------- /META-INF/MANIFEST.MF: -------------------------------------------------------------------------------- 1 | Manifest-Version: 1.0 2 | Main-Class: com.github.aaka.AppKt 3 | 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 8 | 9 | 10 |

Awesome Android Kotlin Apps


11 | 12 |

13 | :eyeglasses: A curated list of awesome android kotlin apps by open-source contributors. 14 |

15 |
16 | 17 |

18 | Awesome Android Kotlin Apps Count badge 19 | Android Language Badge 20 | Kotlin Language Badge 21 | androiddevnotes GitHub badge 22 | 23 |

24 | 25 |
26 |

27 | androiddevnotes logo 28 |


29 | 30 | 31 | **Awesome Android Kotlin Apps** aims to be the starting point for developers to find an Android app with a particular Tech Stack / Libraries. 32 | 33 | ___🔃 Last updated : Thu Jul 22 06:02:42 UTC 2021___ 34 | 35 | ## Contents 36 | 37 | :art: [**Pattern**](#art-pattern) 38 | 39 | 40 | - [Jetpack Compose Apps](#jetpack-compose-apps) 41 | 42 | - [Model View ViewModel (MVVM)](#mvvm) 43 | 44 | - [Normal](#normal) 45 | - [Clean Architecture](#clean-architecture) 46 | 47 | - [Model View Intent (MVI)](#mvi) 48 | 49 | - [Normal](#normal-1) 50 | - [Clean Architecture](#clean-architecture-1) 51 | 52 | - [Model View Presenter (MVP)](#mvp) 53 | 54 | - [Model View Controller (MVC) and Other Patterns](#other) 55 | 56 | 57 | :books: [**Tech Stack/Libraries**](#books-tech-stacklibraries) 58 | 59 | :memo: [**Contributing**](#memo-contributing) 60 | 61 | :moyai: [**Core Contributors**](#moyai-core-contributors) 62 | 63 | 64 | ## :art: Pattern 65 | 66 | ### Jetpack Compose Apps 67 | 68 | | Name | Author ✍️ | Description 🗒️ | Reputation 💪 | 69 | |--------------------------------------------------|-------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------| 70 | | [awesome-jetpack-compose-android-apps](https://github.com/androiddevnotes/awesome-jetpack-compose-android-apps) | [androiddevnotes](https://github.com/androiddevnotes) | 👓 A curated list of awesome Jetpack Compose android apps by open-source contributors.

Last commit: 2 weeks ago | 🌟 327
🍴 32
👁️ 9 | 71 | 72 | ### MVVM 73 | 74 | #### Normal 75 | 76 | | Name | Author ✍️ | Description 🗒️ | Reputation 💪 | 77 | |--------------------------------------------------|-------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------| 78 | | [muzei](https://github.com/muzei/muzei) | [muzei](https://github.com/muzei) | Muzei Live Wallpaper for Android

Tech Stack : Coroutines, Testing, Retrofit, Room, Firebase Perf, WorkManager, Paging, Navigation, LiveData, ViewModel

Last commit: 43 minutes ago | 🌟 4276
🍴 946
👁️ 186 | 79 | | [Presently](https://github.com/alisonthemonster/Presently) | [alisonthemonster](https://github.com/alisonthemonster) | Android app for recording gratitude journal entries

Tech Stack : Dagger, Coroutines, RxJava, Testing, Room, Firebase Messaging, WorkManager, Dropbox, Calendar view, Paging, Biometric, LiveData, ViewModel

Last commit: 1 hour ago | 🌟 139
🍴 44
👁️ 8 | 80 | | [fenix](https://github.com/mozilla-mobile/fenix) | [mozilla-mobile](https://github.com/mozilla-mobile) | Firefox for Android

Tech Stack : Coroutines, Testing, Retrofit, Room, Firebase Perf, WorkManager, Paging, Navigation, LiveData, ViewModel

Last commit: 3 hours ago | 🌟 5039
🍴 876
👁️ 140 | 81 | | [NYTimes-App](https://github.com/TheCodeMonks/NYTimes-App) | [TheCodeMonks](https://github.com/TheCodeMonks) | 🗽 A Simple Demonstration of the New York Times App 📱 using Jsoup web crawler with MVVM Architecture 🔥

Tech Stack : Coroutines, Room, JSoup, Navigation, LiveData, ViewModel

Last commit: 7 hours ago | 🌟 343
🍴 44
👁️ 14 | 82 | | [open-event-attendee-android](https://github.com/fossasia/open-event-attendee-android) | [fossasia](https://github.com/fossasia) | Open Event Attendee Android General App https://github.com/fossasia/open-event-android/blob/apk/open-event-dev-app-playStore-debug.apk

Tech Stack : Koin, RxJava, Testing, Retrofit, Room, Stripe, PayPal, Mapbox, Paging, Data Binding, Navigation, LiveData, ViewModel

Last commit: 9 hours ago | 🌟 1785
🍴 560
👁️ 35 | 83 | | [apturicovid-android](https://github.com/ApturiCOVID/apturicovid-android) | [ApturiCOVID](https://github.com/ApturiCOVID) | Apturi Covid Android lietotne

Tech Stack : Dagger, Coroutines, RxJava, Testing, Retrofit, Room, WorkManager, Data Binding, ShortcutBadger, LiveData, ViewModel

Last commit: 11 hours ago | 🌟 30
🍴 5
👁️ 11 | 84 | | [Nekome](https://github.com/Chesire/Nekome) | [Chesire](https://github.com/Chesire) | Nekome is an Android application to manage tracked Anime and Manga lists.

Tech Stack : Dagger, Coroutines, Testing, Retrofit, Room, WorkManager, Navigation, LiveData, ViewModel

Last commit: 12 hours ago | 🌟 104
🍴 19
👁️ 3 | 85 | | [The-Movie-DB-Kotlin](https://github.com/dangquanuet/The-Movie-DB-Kotlin) | [dangquanuet](https://github.com/dangquanuet) | The Movie DB app using Kotlin with updated Android features

Tech Stack : Koin, Coroutines, RxJava, Testing, Retrofit, Room, Paging, Data Binding, Easy Permissions, Navigation, LiveData, ViewModel

Last commit: 1 day ago | 🌟 207
🍴 62
👁️ 7 | 86 | | [NotyKT](https://github.com/PatilShreyas/NotyKT) | [PatilShreyas](https://github.com/PatilShreyas) | 📒 NotyKT is a complete 💎Kotlin-stack (Backend + Android) 📱 application built to demonstrate the use of Modern development tools with best practices implementation🦸.

Tech Stack : Backend - Ktor, PostgreSQL; Android = Coroutines, Flow, Navigation Architecture, LiveData, ViewModel, Room DB, DataStore, Jetpack Security, WorkManager, Dagger Hilt DI, Jetpack Compose, Material UI, Retrofit, Moshi

Last commit: 1 day ago | 🌟 727
🍴 82
👁️ 18 | 87 | | [expenses](https://github.com/nominalista/expenses) | [nominalista](https://github.com/nominalista) | App written in Kotlin for budget tracking.

Tech Stack : Dagger, Coroutines, RxJava, Testing, Retrofit, Room, Firestore, Firebase Auth, Firebase Messaging, WorkManager, Navigation, LiveData, ViewModel

Last commit: 1 day ago | 🌟 292
🍴 59
👁️ 15 | 88 | | [Inure](https://github.com/Hamza417/Inure) | [Hamza417](https://github.com/Hamza417) | An elegant and beautiful Android app manager for both rooted and non-rooted devices and a built-in terminal, device info and analytics panel.

Tech Stack : LiveData, ViewModel, WebKit, APK Parser, libsu

Last commit: 2 days ago | 🌟 74
🍴 8
👁️ 5 | 89 | | [Pokedex](https://github.com/skydoves/Pokedex) | [skydoves](https://github.com/skydoves) | 🗡️ Android Pokedex using Hilt, Motion, Coroutines, Flow, Jetpack (Room, ViewModel) based on MVVM architecture.

Tech Stack : Dagger Hilt, Coroutines, Testing, Retrofit, Room, Data Binding, LiveData, ViewModel

Last commit: 2 days ago | 🌟 4498
🍴 519
👁️ 207 | 90 | | [habitica-android](https://github.com/HabitRPG/habitica-android) | [HabitRPG](https://github.com/HabitRPG) | Native Android app for Habitica

Tech Stack : Dagger, Coroutines, RxJava, Retrofit, Realm, Firebase Messaging, Paging, Navigation, Facebook, FlowLayout, LiveData, ViewModel

Last commit: 2 days ago | 🌟 880
🍴 392
👁️ 61 | 91 | | [rugby-ranker](https://github.com/ricknout/rugby-ranker) | [ricknout](https://github.com/ricknout) | An Android app for viewing and predicting the latest World Rugby rankings 🏉

Tech Stack : Dagger Hilt, Coroutines, Testing, Retrofit, Room, WorkManager, Navigation, insetter, LiveData, ViewModel

Last commit: 2 days ago | 🌟 254
🍴 40
👁️ 8 | 92 | | [DrawingsApp](https://github.com/Sharkaboi/DrawingsApp) | [Sharkaboi](https://github.com/Sharkaboi) | An app to add and manage floor plan drawings with markers.

Tech Stack : Dagger Hilt, Coroutines, Room, Dhaval2404/ImagePicker, Subsampling Scale Image View, Navigation, LiveData, ViewModel

Last commit: 2 days ago | 🌟 16
🍴 3
👁️ 1 | 93 | | [plees-tracker](https://github.com/vmiklos/plees-tracker) | [vmiklos](https://github.com/vmiklos) | Plees Tracker is a simple sleep tracker for your Android phone.

Tech Stack : Room, LiveData, ViewModel

Last commit: 2 days ago | 🌟 53
🍴 14
👁️ 6 | 94 | | [MovieMan](https://github.com/calvinnor/MovieMan) | [calvinnor](https://github.com/calvinnor) | An open-source Android app for viewing Movies / TV information.

Tech Stack : Koin, Coroutines, Testing, Retrofit, Room, Navigation, LiveData, ViewModel

Last commit: 5 days ago | 🌟 64
🍴 13
👁️ 5 | 95 | | [space-app](https://github.com/ValterKasper/space-app) | [ValterKasper](https://github.com/ValterKasper) | An Android app which shows timeline of upcoming rocket launches and showcases architecture of real application.

Tech Stack : Dagger, Coroutines, Testing, Retrofit, Room, WorkManager, Data Binding, Navigation, LiveData, ViewModel

Last commit: 5 days ago | 🌟 123
🍴 12
👁️ 5 | 96 | | [alkaa](https://github.com/igorescodro/alkaa) | [igorescodro](https://github.com/igorescodro) | Open-source app to manage your tasks quickly and easily

Tech Stack : Koin, Espresso, UiAutomator, Mockk, Coroutines, Navigation, Room, MotionLayout, KTX, Modularization, Dynamic Delivery, Dark Theme, klint, Detekt, codebeat, CodeFactor, Codacy, MPAndroidChart, Groupie, LiveData, ViewModel

Last commit: 7 days ago | 🌟 427
🍴 42
👁️ 13 | 97 | | [Instant-Weather](https://github.com/mayokunadeniyi/Instant-Weather) | [mayokunadeniyi](https://github.com/mayokunadeniyi) | An Android weather application implemented using the MVVM pattern, Retrofit2, Dagger2, LiveData, ViewModel, Coroutines, Room, Navigation Components, Data Binding and some other libraries from the Android Jetpack.

Tech Stack : Dagger, Coroutines, Testing, Retrofit, Room, WorkManager, Paging, Data Binding, Navigation, Algolia Search, LiveData, ViewModel

Last commit: 7 days ago | 🌟 537
🍴 93
👁️ 19 | 98 | | [showly-2.0](https://github.com/michaldrabik/showly-2.0) | [michaldrabik](https://github.com/michaldrabik) | Showly 2.0 is modern, slick, open-sourced Android TV Shows Tracker.

Tech Stack : Dagger, Coroutines, Testing, Retrofit, Room, Firebase Messaging, WorkManager, Navigation, Dynamicanimation, LiveData, ViewModel

Last commit: 7 days ago | 🌟 205
🍴 17
👁️ 13 | 99 | | [iiCnma](https://github.com/ImnIrdst/iiCnma) | [ImnIrdst](https://github.com/ImnIrdst) | A playground android app, showcasing the latest technologies and architectures using the Movie Database APIs.

Tech Stack : Dagger Hilt, Testing, Coroutines + Flow, Retrofit, Room, LiveData, ViewModel, Paging, Navigation

Last commit: 1 week ago | 🌟 8
🍴 3
👁️ 1 | 100 | | [Dads](https://github.com/ErickSumargo/Dads) | [ErickSumargo](https://github.com/ErickSumargo) | *BA DUM TSSS*

Tech Stack : Hilt, Coroutines + Flow, UI Testing, Room, ViewModel, WorkManager, Apollo

Last commit: 1 week ago | 🌟 205
🍴 14
👁️ 4 | 101 | | [flexbooru](https://github.com/flexbooru/flexbooru) | [flexbooru](https://github.com/flexbooru) | A booru client for Android, support Danbooru, Moebooru, Gelbooru, Shimmie, etc.

Tech Stack : Kodein, Coroutines, Testing, Retrofit, Room, WorkManager, Exoplayer, Navigation, Tikxml, LiveData, ViewModel

Last commit: 2 weeks ago | 🌟 431
🍴 40
👁️ 25 | 102 | | [iosched](https://github.com/google/iosched) | [google](https://github.com/google) | The Google I/O Android App

Tech Stack : Dagger Hilt, Coroutines, Testing, Room, Firestore, Firebase Auth, Firebase Messaging, Firebase Functions, Navigation, ARCore, LiveData, ViewModel

Last commit: 2 weeks ago | 🌟 20628
🍴 6135
👁️ 1478 | 103 | | [Foodium](https://github.com/PatilShreyas/Foodium) | [PatilShreyas](https://github.com/PatilShreyas) | 🍲Foodium is a sample food blog Android application 📱 built to demonstrate the use of Modern Android development tools - (Kotlin, Coroutines, Flow, Dagger 2/Hilt, Architecture Components, MVVM, Room, Retrofit, Moshi, Material Components).

Tech Stack : Dagger Hilt, Coroutines, Testing, Retrofit, Room, LiveData, ViewModel

Last commit: 3 weeks ago | 🌟 1830
🍴 313
👁️ 53 | 104 | | [WallpaperApp](https://github.com/GeorgCantor/WallpaperApp) | [GeorgCantor](https://github.com/GeorgCantor) | App for viewing and downloading wallpapers

Tech Stack : Koin, Coroutines, Retrofit, Room, Lottie, Zoomy, Navigation, LiveData, ViewModel

Last commit: 3 weeks ago | 🌟 39
🍴 9
👁️ 3 | 105 | | [Eyepetizer](https://github.com/VIPyinzhiwei/Eyepetizer) | [VIPyinzhiwei](https://github.com/VIPyinzhiwei) | 🔥基于 Kotlin 语言仿写「开眼 Eyepetizer」的一个短视频 Android 客户端项目,采用 Jetpack + 协程实现的 MVVM 架构。

Tech Stack : Coroutines, Testing, Retrofit, WorkManager, GSYVideoPlayer, Data Binding, PermissionX, EventBus, LiveData, ViewModel

Last commit: 3 weeks ago | 🌟 1169
🍴 292
👁️ 27 | 106 | | [libbra](https://github.com/nuhkoca/libbra) | [nuhkoca](https://github.com/nuhkoca) | A currency tracker app demonstration. It refreshes currency list every single second based on the main currency. In addition to that, main currency is selectable.

Tech Stack : Dagger, Coroutines, Testing, Retrofit, Data Binding, Navigation, LiveData, ViewModel

Last commit: 3 weeks ago | 🌟 39
🍴 6
👁️ 3 | 107 | | [MovieHunt](https://github.com/enginebai/MovieHunt) | [enginebai](https://github.com/enginebai) | Movie Android App written in Kotlin, MVVM, RxJava, Android Architecture Components.

Tech Stack : Koin, RxJava, Room, Paging, Navigation, Epoxy, LiveData, ViewModel

Last commit: 3 weeks ago | 🌟 257
🍴 32
👁️ 12 | 108 | | [Pokedex-AR](https://github.com/skydoves/Pokedex-AR) | [skydoves](https://github.com/skydoves) | 🦄 Android Pokedex-AR using ARCore, Sceneform, Hilt, Coroutines, Flow, Jetpack (Room, ViewModel, LiveData) based on MVVM architecture.

Tech Stack : Dagger Hilt, Coroutines, Retrofit, Room, ARCore, Sceneform, ViewModel, Data Binding, LiveData.

Last commit: 3 weeks ago | 🌟 409
🍴 25
👁️ 13 | 109 | | [Resplash](https://github.com/b-lam/Resplash) | [b-lam](https://github.com/b-lam) | Unofficial Unsplash Android App

Tech Stack : Koin, Coroutines, Testing, Retrofit, Room, Firestore, Firebase In-App Messaging, Paging, Navigation, Google Play Billing, Muzei, LiveData, ViewModel

Last commit: 4 weeks ago | 🌟 431
🍴 86
👁️ 17 | 110 | | [MVVM-Architecture](https://github.com/qingmei2/MVVM-Architecture) | [qingmei2](https://github.com/qingmei2) | The practice of MVVM + Jetpack architecture in Android.

Tech Stack : Dagger Hilt, Coroutines, RxJava, Testing, Retrofit, Room, Paging, Navigation, LiveData, ViewModel

Last commit: 1 month ago | 🌟 1561
🍴 248
👁️ 43 | 111 | | [topcorn](https://github.com/theapache64/topcorn) | [theapache64](https://github.com/theapache64) | A minimalistic movie listing app to browse IMDB's top 250 movies, built to demonstrate MVVM with latest hot-trending Android development tools.

Tech Stack : Dagger, Coroutines, Testing, Retrofit, Room, LiveData, ViewModel

Last commit: 1 month ago | 🌟 149
🍴 21
👁️ 11 | 112 | | [Praxis](https://github.com/mutualmobile/Praxis) | [mutualmobile](https://github.com/mutualmobile) | Example Android project using MVVM, DaggerAndroid, Jetpack, Data Binding, Retrofit, RxJava and Coroutines

Tech Stack : Dagger, Retrofit, Coroutines, RXJava2, ViewModel, Data Binding

Last commit: 1 month ago | 🌟 73
🍴 17
👁️ 7 | 113 | | [DeezerClone](https://github.com/fevziomurtekin/DeezerClone) | [fevziomurtekin](https://github.com/fevziomurtekin) | This Application using Dagger Hilt, Coroutines, Flow, Jetpack (Room, ViewModel, LiveData),Navigation based on MVVM architecture.

Tech Stack : Dagger Hilt, Coroutines, Flow, Jetpack (Room, ViewModel,Navigation LiveData), Retrofit, Paging, Testing

Last commit: 1 month ago | 🌟 69
🍴 5
👁️ 2 | 114 | | [WallPortal](https://github.com/zedlabs/WallPortal) | [zedlabs](https://github.com/zedlabs) | Minimal Wallpapers for Android using Kotlin+Compose+MVVM+Hilt+Coroutines+Jetpack(Room, Paging, Navigation)

Tech Stack : Dagger Hilt, Coroutines, Retrofit, Room, Paging, Navigation, LiveData, ViewModel

Last commit: 2 months ago | 🌟 113
🍴 29
👁️ 4 | 115 | | [MovieCatalogue](https://github.com/ryanrvldo/MovieCatalogue) | [ryanrvldo](https://github.com/ryanrvldo) |

Tech Stack : ViewModel, LiveData, Coroutines, Firebase Cloud Messaging, Retrofit, Room, Glide, Dagger Hilt, and Google Material.

Last commit: 2 months ago | 🌟 11
🍴 1
👁️ 1 | 116 | | [ForgetMeNot](https://github.com/tema6120/ForgetMeNot) | [tema6120](https://github.com/tema6120) | A flashcard app for Android.

Tech Stack : Coroutines + Flow, SQLDelight, Kotlin Serialization, Klock, Brackeys-IDE EditorKit

Last commit: 2 months ago | 🌟 129
🍴 11
👁️ 3 | 117 | | [qksms](https://github.com/moezbhatti/qksms) | [moezbhatti](https://github.com/moezbhatti) | The most beautiful SMS messenger for Android

Tech Stack : Dagger, Coroutines, RxJava, Testing, Retrofit, Realm, ExoPlayer, Conductor, Data Binding, ShortcutBadger, LiveData, ViewModel

Last commit: 2 months ago | 🌟 3329
🍴 960
👁️ 132 | 118 | | [AnimeXStream](https://github.com/mukul500/AnimeXStream) | [mukul500](https://github.com/mukul500) | An Android app to watch anime on your phone without ads.

Tech Stack : Retrofit, RxJava, Epoxy, ViewModel, LiveData, Navigation, Realm, ExoPlayer v2.0, Glide

Last commit: 2 months ago | 🌟 1328
🍴 126
👁️ 97 | 119 | | [MyCuration](https://github.com/phicdy/MyCuration) | [phicdy](https://github.com/phicdy) | RSS Reader for Android with article filtering and curation

Tech Stack : Koin, Coroutines, Testing, Retrofit, Jsoup, WorkManager, Data Binding, Navigation, LiveData, ViewModel

Last commit: 3 months ago | 🌟 11
🍴 6
👁️ 1 | 120 | | [Photos](https://github.com/SIKV/Photos) | [SIKV](https://github.com/SIKV) |

Tech Stack : Dagger, Coroutines, RxJava, Testing, Retrofit, Room, Firestore, Firebase-ML, Firebase-Analytics, Paging, Navigation, LiveData, ViewModel

Last commit: 3 months ago | 🌟 38
🍴 6
👁️ 7 | 121 | | [Updoot](https://github.com/adityam49/Updoot) | [adityam49](https://github.com/adityam49) | A reddit client built for android

Tech Stack : Dagger Hilt, Coroutines, Testing, Retrofit, Room, ExoPlayer, WorkManager, Data Binding, Navigation, LiveData, ViewModel, Compose

Last commit: 3 months ago | 🌟 37
🍴 6
👁️ 4 | 122 | | [GithubVisualizer](https://github.com/dheerajkotwani/GithubVisualizer) | [dheerajkotwani](https://github.com/dheerajkotwani) | 📲 Android Application to track any user activity on Github built using the Github Developers API. Used Retrofit to fetch data and MVVM Architecture.

Tech Stack : Retrofit, Firebase Auth, Coroutines, LiveData, ViewModel

Last commit: 3 months ago | 🌟 60
🍴 14
👁️ 2 | 123 | | [apkupdater](https://github.com/rumboalla/apkupdater) | [rumboalla](https://github.com/rumboalla) | APKUpdater is an open source tool that simplifies the process of finding updates for your installed apps.

Tech Stack : Koin, JSoup, Navigation, LiveData, ViewModel

Last commit: 3 months ago | 🌟 1143
🍴 131
👁️ 87 | 124 | | [Kotlin-Pokedex](https://github.com/mrcsxsiq/Kotlin-Pokedex) | [mrcsxsiq](https://github.com/mrcsxsiq) | :cyclone: A Pokedex app using ViewModel, LiveData, Room and Navigation

Tech Stack : LiveData, Navigation Jetpack, ViewModel, Room, Gradle Kotlin DSL, Databinding, Retrofit, Koin and Ktlint

Last commit: 3 months ago | 🌟 1205
🍴 179
👁️ 25 | 125 | | [wanandroid](https://github.com/jianjunxiao/wanandroid) | [jianjunxiao](https://github.com/jianjunxiao) | Kotlin+JetPack+协程实现的MVVM架构Wanandroid客户端

Tech Stack : Coroutines, Retrofit, Room, LiveData, ViewModel

Last commit: 3 months ago | 🌟 219
🍴 38
👁️ 6 | 126 | | [Tedu](https://github.com/PHELAT/Tedu) | [PHELAT](https://github.com/PHELAT) | Todo app but minimal, open-source, and free.

Tech Stack : Dagger, Room, Coroutines, Firebase Messaging, Navigation, LiveData, ViewModel

Last commit: 4 months ago | 🌟 110
🍴 17
👁️ 2 | 127 | | [MixUp](https://github.com/GerardBradshaw/MixUp) | [GerardBradshaw](https://github.com/GerardBradshaw) | An Android app for creating photo collages. This app demonstrates NavigationUI, Espresso testing, Robolectric testing, custom views, low-level UI manipulation, and more.

Tech Stack : Dagger, Coroutines, Testing, Navigation, ColorPicker, ViewModel

Last commit: 4 months ago | 🌟 16
🍴 8
👁️ 1 | 128 | | [roka-recipe-app](https://github.com/fabirt/roka-recipe-app) | [fabirt](https://github.com/fabirt) | Android recipes search App

Tech Stack : Dagger Hilt, Coroutines, Retrofit, Room, LiveData, ViewModel, Paging, Navigation, DataStore

Last commit: 4 months ago | 🌟 13
🍴 1
👁️ 2 | 129 | | [MusicPlayer](https://github.com/ZahraHeydari/MusicPlayer) | [ZahraHeydari](https://github.com/ZahraHeydari) | Implemented using Clean Arch, MVVM, LiveData, Room, Koin, Coil, Service, Notification and ExoPlayer

Tech Stack : Koin, Testing, Room, Firebase Storage, Firebase Auth, Firebase Messaging, Firebase Perf, Firebase Functions, Navigation, LiveData, ViewModel

Last commit: 4 months ago | 🌟 431
🍴 63
👁️ 9 | 130 | | [jetpack-release-tracker](https://github.com/lmj0011/jetpack-release-tracker) | [lmj0011](https://github.com/lmj0011) | Stay up to date on the latest AndroidX library releases.

Tech Stack : Coroutines, Testing, Fuel, Room, WorkManager, Data Binding, Navigation, LiveData, ViewModel

Last commit: 4 months ago | 🌟 82
🍴 15
👁️ 3 | 131 | | [Bitlue](https://github.com/androiddevnotesforks/Bitlue) | [androiddevnotesforks](https://github.com/androiddevnotesforks) | Bitlue is an app where you can check the Bitcoin's current market price value (Bitcoin + value = Bitlue) and its records.

Tech Stack : Dagger Hilt, Coroutines + Flow, MPAndroidChart, Retrofit, LiveData, ViewModel

Last commit: 4 months ago | 🌟 10
🍴 4
👁️ 1 | 132 | | [flows-guide](https://github.com/Shivamdhuria/flows_guide) | [Shivamdhuria](https://github.com/Shivamdhuria) | Android Application 🐕 based on offline first approach built using Dagger Hilt, Material Motion, Coroutines + Flow, Jetpack (Room, ViewModel, LiveData) based on MVVM architecture.

Tech Stack : Dagger Hilt, Coroutines, Flows, Retrofit, Room, Material Design Components, Navigation, LiveData, ViewModel

Last commit: 4 months ago | 🌟 146
🍴 21
👁️ 8 | 133 | | [droidconKE2020App](https://github.com/droidconKE/droidconKE2020App) | [droidconKE](https://github.com/droidconKE) | Android app fully written in Kotlin for droidconKE2020

Tech Stack : Koin, Coroutines, Testing, Retrofit, Room, Google Auth, Data Binding, Navigation, LiveData, ViewModel

Last commit: 5 months ago | 🌟 116
🍴 40
👁️ 15 | 134 | | [SpaceXFollower](https://github.com/OMIsie11/SpaceXFollower) | [OMIsie11](https://github.com/OMIsie11) | Android app that helps You keep up with SpaceX 🚀

Tech Stack : Koin, Coroutines, Testing, Retrofit, Room, WorkManager, MPAndroidChart, Navigation, LiveData, ViewModel

Last commit: 5 months ago | 🌟 41
🍴 7
👁️ 2 | 135 | | [android-modular-architecture](https://github.com/vmadalin/android-modular-architecture) | [vmadalin](https://github.com/vmadalin) | 📚 Sample Android Components Architecture on a modular word focused on the scalability, testability and maintainability written in Kotlin, following best practices using Jetpack.

Tech Stack : Dagger, Coroutines, Testing, Retrofit, Room, Navigation, Paging, Data Binding, LiveData, ViewModel

Last commit: 6 months ago | 🌟 1878
🍴 313
👁️ 87 | 136 | | [PexWalls](https://github.com/GreyLabsDev/PexWalls) | [GreyLabsDev](https://github.com/GreyLabsDev) | Wallpaper app based on pexels.com API. Kotlin/Clean/MVVM-like/SingleActivity

Tech Stack : Koin, Coroutines, RxJava, Retrofit, Room, Navigation, Markwon, LiveData, ViewModel

Last commit: 6 months ago | 🌟 21
🍴 7
👁️ 3 | 137 | | [Noted-Android](https://github.com/YahiaAngelo/Noted-Android) | [YahiaAngelo](https://github.com/YahiaAngelo) | Noted app for android

Tech Stack : Koin dependency injection, Coroutines, Realm db, Material Components, Markdown, Navigation, LiveData, ViewModel

Last commit: 6 months ago | 🌟 60
🍴 7
👁️ 1 | 138 | | [feedapp](https://github.com/dievskiy/feedapp) | [dievskiy](https://github.com/dievskiy) | Calorie tracker for android that supports recipes and products search.

Tech Stack : Dagger, Coroutines, RxJava, Testing, Retrofit, Room, Firestore, Firebase Auth, Facebook Login, WorkManager, MPAndroidChart, Data Binding, Navigation, LiveData, ViewModel

Last commit: 6 months ago | 🌟 39
🍴 7
👁️ 1 | 139 | | [vocable-android](https://github.com/willowtreeapps/vocable-android) | [willowtreeapps](https://github.com/willowtreeapps) | Vocable for Android

Tech Stack : Koin, Coroutines, Testing, Room, Data Binding, AR, LiveData, ViewModel

Last commit: 6 months ago | 🌟 82
🍴 5
👁️ 61 | 140 | | [TrackMyPath](https://github.com/gs-ts/TrackMyPath) | [gs-ts](https://github.com/gs-ts) | An Android app written in Kotlin that demonstrates a clean architecture with MVVM, Fused Location Provider, LifecycleService, and Coroutines. It is used as lab to test new Android features.

Tech Stack : Koin, Coroutines, Testing, Retrofit, Room, LiveData, ViewModel

Last commit: 6 months ago | 🌟 51
🍴 8
👁️ 2 | 141 | | [BitfinexClient](https://github.com/gs-ts/BitfinexClient) | [gs-ts](https://github.com/gs-ts) | An Android app written in Kotlin that demonstrates a clean architecture with MVVM, websockets using WebScoket client Scarlet, and RxAndroid/RxKotlin.

Tech Stack : Koin, RxJava, Testing, Scarlet, Room, Data Binding, LiveData, ViewModel

Last commit: 7 months ago | 🌟 10
🍴 5
👁️ 1 | 142 | | [Gallerit](https://github.com/auron567/Gallerit) | [auron567](https://github.com/auron567) | A sample Android gallery to search images posted on Reddit built using modern Android development tools (Architecture Components, MVVM, Coroutines, Flow, Navigation, Retrofit, Room, Koin)

Tech Stack : Koin, Coroutines, Testing, Retrofit, Room, Navigation, Data Binding, LiveData, ViewModel

Last commit: 7 months ago | 🌟 192
🍴 17
👁️ 4 | 143 | | [hiya-hiya-hiya](https://github.com/utsmannn/hiya-hiya-hiya) | [utsmannn](https://github.com/utsmannn) | Whatsapp Clone base on Firebase Cloud Messaging

Tech Stack : Koin, Coroutines, Retrofit, Room, Firebase Messaging, Firebase Auth, WorkManager, Google Maps, Paging, JSoup, vanniktech/Emoji, afollestad/inline-activity-result, LiveData, ViewModel

Last commit: 7 months ago | 🌟 151
🍴 36
👁️ 4 | 144 | | [TvFlix](https://github.com/reactivedroid/TvFlix) | [reactivedroid](https://github.com/reactivedroid) | TvFlix android app using Dagger Hilt, Coroutines, Flow, KTX, Jetpack(Room, ViewModel, Paging3, Lifecycle) based on MVVM architecture purely written in Kotlin

Tech Stack : Dagger Hilt, Coroutines, Testing, Retrofit, Room, Paging, Navigation, LiveData, ViewModel

Last commit: 7 months ago | 🌟 304
🍴 45
👁️ 13 | 145 | | [Covid-19-Tracker](https://github.com/HariKulhari06/Covid-19-Tracker) | [HariKulhari06](https://github.com/HariKulhari06) | Android app to track COVID-19 cases in India and globally.

Tech Stack : Dagger Hilt, Coroutines, Retrofit, Room, Firestore, WorkManager, Navigation, MPAndroidChart, LiveData, ViewModel

Last commit: 7 months ago | 🌟 108
🍴 29
👁️ 3 | 146 | | [Cryptotracker](https://github.com/CharlieChristensen/Cryptotracker) | [CharlieChristensen](https://github.com/CharlieChristensen) |

Tech Stack : Dagger, Coroutines, Testing, socketIO, Retrofit, Room, MPAndroidChart, Navigation, LiveData, ViewModel

Last commit: 8 months ago | 🌟 3
🍴 1
👁️ 1 | 147 | | [NotesSync](https://github.com/KumarManas04/NotesSync) | [KumarManas04](https://github.com/KumarManas04) | Notes Sync is the answer to your everyday note taking requirements. It can encrypt and sync everything to the user's own Google Drive or Dropbox accounts

Tech Stack : Coroutines, Testing, Room, Google Drive, Dropbox, WorkManager, Navigation, LiveData, ViewModel

Last commit: 8 months ago | 🌟 33
🍴 13
👁️ 1 | 148 | | [Photosen](https://github.com/commonpepper/Photosen) | [commonpepper](https://github.com/commonpepper) | Android app for viewing and downloading Flickr photos.

Tech Stack : Retrofit, Room, Paging, LiveData, ViewModel

Last commit: 8 months ago | 🌟 4
🍴 2
👁️ 0 | 149 | | [wanandroid](https://github.com/lulululbj/wanandroid) | [lulululbj](https://github.com/lulululbj) | Jetpack MVVM For Wanandroid 最佳实践 !

Tech Stack : Koin, Coroutines, Testing, Retrofit, Navigation, FlowLayout, LiveData, ViewModel

Last commit: 9 months ago | 🌟 1059
🍴 198
👁️ 19 | 150 | | [ChangeDetection](https://github.com/bernaferrari/ChangeDetection) | [bernaferrari](https://github.com/bernaferrari) | Automatically track websites changes on Android in background.

Tech Stack : Dagger, Coroutines, RxJava, Retrofit, Room, Firestore, WorkManager, Paging, Data Binding, Navigation, JSoup, js-evaluator-for-android, LiveData, ViewModel

Last commit: 9 months ago | 🌟 590
🍴 74
👁️ 18 | 151 | | [flexbooru-ap](https://github.com/flexbooru/flexbooru-ap) | [flexbooru](https://github.com/flexbooru) | An anime-pictures.net client for Android.

Tech Stack : Kodein, Coroutines, Retrofit, Room, WorkManager, Navigation, Markwon, LiveData, ViewModel

Last commit: 9 months ago | 🌟 44
🍴 7
👁️ 3 | 152 | | [MoonShot](https://github.com/haroldadmin/MoonShot) | [haroldadmin](https://github.com/haroldadmin) | A SpaceX companion app for Android

Tech Stack : Dagger, Coroutines, Testing, Retrofit, Room, WorkManager, Navigation, LiveData, ViewModel

Last commit: 10 months ago | 🌟 155
🍴 17
👁️ 8 | 153 | | [PukaPuka](https://github.com/Devansh-Maurya/PukaPuka) | [Devansh-Maurya](https://github.com/Devansh-Maurya) | An Android app to identify books from their covers and give info, built using ML Kit's Text Recognition API, Android Jetpack Libraries and Google Books API

Tech Stack : LiveData, ViewModel, Navigation Components, CameraKit, Firebase ML Kit Text Recognition API, Glide, Volley, Lottie

Last commit: 10 months ago | 🌟 10
🍴 1
👁️ 1 | 154 | | [Football-App](https://github.com/fionicholas/Football-App) | [fionicholas](https://github.com/fionicholas) | :soccer: Football App using MVVM, LiveData, RxJava2, DI, Room, Repository Patern

Tech Stack : LiveData, ViewModel, Retrofit, Room, Koin, RxJava, etc

Last commit: 10 months ago | 🌟 15
🍴 3
👁️ 1 | 155 | | [Knote](https://github.com/Tristankluivert/Knote) | [Tristankluivert](https://github.com/Tristankluivert) | Knote is a standard note taking app

Tech Stack : ViewModel, LiveData, Koin, Room db, Coroutines etc

Last commit: 10 months ago | 🌟 5
🍴 1
👁️ 2 | 156 | | [kotlin-mvvm-covid19](https://github.com/rizmaulana/kotlin-mvvm-covid19) | [rizmaulana](https://github.com/rizmaulana) | This repository contains simple COVID19 data monitoring with android stack MVVM, Live Data, Koin, RxJava, RxBinding, Offline first with simple caching, etc

Tech Stack : LiveData, Koin, RxJava, RxBinding, Offline first with simple caching, Spek2Framwework for Unit Testing, etc

Last commit: 11 months ago | 🌟 390
🍴 111
👁️ 12 | 157 | | [AwesomeGithub](https://github.com/idisfkj/AwesomeGithub) | [idisfkj](https://github.com/idisfkj) | 🔥Android Github客户端,基于组件化开发,支持账户密码与认证登陆。使用Kotlin语言进行开发,项目架构是基于JetPack&DataBinding的MVVM;项目中使用了Arouter、Retrofit、Coroutine、Glide、Dagger与Hilt等流行开源技术。

Tech Stack : Coroutines, RxJava, Retrofit, Room, WorkManager, Paging, Navigation, Data Binding, ARouter, LiveData, ViewModel

Last commit: 11 months ago | 🌟 153
🍴 25
👁️ 5 | 158 | | [raffler-kotlin](https://github.com/fibelatti/raffler-kotlin) | [fibelatti](https://github.com/fibelatti) | A raffling app developed as a playground to study many topics related to Android. Kotlin + Coroutines + MVVM

Tech Stack : Dagger, Coroutines, Testing, Room, LiveData, ViewModel

Last commit: 11 months ago | 🌟 43
🍴 3
👁️ 3 | 159 | | [CovidNow](https://github.com/OMIsie11/CovidNow) | [OMIsie11](https://github.com/OMIsie11) | Simple application for tracking Covid-19 info. Stay safe.😷

Tech Stack : Koin, Coroutines, Testing, Retrofit, Room, MPAndroidChart, LiveData, ViewModel

Last commit: 11 months ago | 🌟 17
🍴 7
👁️ 2 | 160 | | [LetsChat](https://github.com/satyamurti/LetsChat) | [satyamurti](https://github.com/satyamurti) | 🇮🇳 Open source Indian Chat application with new cool concepts.

Tech Stack : Coroutines, Retrofit, Firestore, Firebase Auth, Firebase Messaging, Firebase Storage, Cloud Functions, Data Binding, Navigation, LiveData, ViewModel

Last commit: 12 months ago | 🌟 64
🍴 22
👁️ 6 | 161 | | [Yet-Another-Anime-List](https://github.com/sanmiAde/Yet_Another_Anime_List) | [sanmiAde](https://github.com/sanmiAde) | A personal anime list app that shows currently airing animes, upcoming animes developed using TDD. That's the plan anyway. Essential dependencies are Dagger2 , RxKotlin with RxAndroid, Room, Retrofit, Junit, mockito, mockwebserver, Truth, MVVM , bitrise, Firebase

Tech Stack : Dagger, RxJava, Testing using Fakes, MockWebserver, RxRetrofit, Room, Navigation Components, Lottie, LiveData, ViewModel

Last commit: 1 year ago | 🌟 10
🍴 1
👁️ 2 | 162 | | [PasswordVault](https://github.com/abhinav0612/PasswordVault) | [abhinav0612](https://github.com/abhinav0612) | An application where you can store all your password, bank details, card details in one place and access everything with only one master PIN. The application works totally offline.

Tech Stack : Dagger Hilt, Room, Navigation, LiveData, ViewModel

Last commit: 1 year ago | 🌟 22
🍴 6
👁️ 2 | 163 | | [PokemonGo](https://github.com/jnkforks/PokemonGo) | [jnkforks](https://github.com/jnkforks) | Jetpack 实战项目 PokemonGo(神奇宝贝)基于 MVVM 架构和 Repository 设计模式,如果这个仓库对你有帮助,请仓库右上角帮我 star 一下,非常感谢。

Tech Stack : Dagger Hilt, Koin, Coroutines, RxJava, Testing, Retrofit, Room, WorkManager, Paging, LiveData, ViewModel

Last commit: 1 year ago | 🌟 0
🍴 0
👁️ 1 | 164 | | [AppDevToolbox](https://github.com/andyb129/AppDevToolbox) | [andyb129](https://github.com/andyb129) | Collection of tools for Android app development in one place 🔧 🔨

Tech Stack : Dagger, Coroutines, RxJava, Room, Venom, LiveData, ViewModel

Last commit: 1 year ago | 🌟 19
🍴 4
👁️ 2 | 165 | | [PopularPeople](https://github.com/KhaledSherifSayed/PopularPeople) | [KhaledSherifSayed](https://github.com/KhaledSherifSayed) | A 📱 Popular People app using Shared Elements between fragments with transformation motions based on MVVM (ViewModel, Coroutines, LiveData, Repository, Koin) architecture.

Tech Stack : Koin, Coroutines, Testing, Retrofit, Data Binding, Sandwich, LiveData, ViewModel

Last commit: 1 year ago | 🌟 10
🍴 3
👁️ 2 | 166 | | [Movie](https://github.com/weylar/Movie) | [weylar](https://github.com/weylar) | A simple movie app

Tech Stack : Dagger, Coroutines, Retrofit, Room, WorkManager, Paging, Data Binding, Navigation, LiveData, ViewModel

Last commit: 1 year ago | 🌟 7
🍴 2
👁️ 1 | 167 | | [wiqaytna-android](https://github.com/Wiqaytna-app/wiqaytna_android) | [Wiqaytna-app](https://github.com/Wiqaytna-app) |

Tech Stack : RxJava, Testing, Room, Firebase Storage, Firebase Auth, Firebase Messaging, Firebase Perf, Firebase Functions, Navigation, LiveData, ViewModel

Last commit: 1 year ago | 🌟 166
🍴 68
👁️ 28 | 168 | | [GitExplorer-Android](https://github.com/Shashank02051997/GitExplorer-Android) | [Shashank02051997](https://github.com/Shashank02051997) | Find the right git commands 🔥 without digging through the web.😊😊😉

Tech Stack : LiveData, ViewModel

Last commit: 1 year ago | 🌟 79
🍴 13
👁️ 6 | 169 | | [awaker](https://github.com/nahzur-h/awaker) | [nahzur-h](https://github.com/nahzur-h) | article app for android

Tech Stack : RxJava, Testing, Retrofit, Room, ExoPlayer, LiveData, ViewModel

Last commit: 1 year ago | 🌟 525
🍴 90
👁️ 17 | 170 | | [NewsFeed](https://github.com/KevinGitonga/NewsFeed) | [KevinGitonga](https://github.com/KevinGitonga) | A localized News reader Android app powered by newsapi.org

Tech Stack : Coroutines, Retrofit, Room, Pretty Time, LiveData, ViewModel

Last commit: 1 year ago | 🌟 7
🍴 2
👁️ 1 | 171 | | [MVVM-Architecture-Android-Beginners](https://github.com/MindorksOpenSource/MVVM-Architecture-Android-Beginners) | [MindorksOpenSource](https://github.com/MindorksOpenSource) | This repository contains a sample app that implements MVVM architecture using Kotlin, ViewModel, LiveData, and etc.

Tech Stack : Dagger, Coroutines, RXJava2, ViewModel, Data Binding, LiveData.

Last commit: 1 year ago | 🌟 214
🍴 67
👁️ 12 | 172 | | [TukoNewsClient](https://github.com/KevinGitonga/TukoNewsClient) | [KevinGitonga](https://github.com/KevinGitonga) | A simple and sleek Android client consuming the Tuko News Api..I built to demonstrate use of Modern Android development tools - (Kotlin, Coroutines, Architecture Components, MVVM, Room, Retrofit, Material Components). !! https://www.tuko.co.ke/

Tech Stack : Coroutines, Retrofit, Room, LiveData, ViewModel

Last commit: 1 year ago | 🌟 5
🍴 0
👁️ 0 | 173 | | [ArchApp](https://github.com/PhilippeBoisney/ArchApp) | [PhilippeBoisney](https://github.com/PhilippeBoisney) | Simple Android app to show how to design a multi-modules MVVM Android app (fully tested)

Tech Stack : Koin, Coroutines, Testing, Retrofit, Room, Data Binding, Navigation, LiveData, ViewModel

Last commit: 1 year ago | 🌟 560
🍴 99
👁️ 16 | 174 | | [Upgur](https://github.com/xiprox/Upgur) | [xiprox](https://github.com/xiprox) | A very simple offline-first Imgur client app

Tech Stack : Dagger, Retrofit, Room, WorkManager, Navigation, android-upload-service, LiveData, ViewModel

Last commit: 1 year ago | 🌟 8
🍴 2
👁️ 1 | 175 | | [Heyyoo](https://github.com/ardakazanci/Heyyoo) | [ardakazanci](https://github.com/ardakazanci) | Heyyoo is a sample social media Android application 📱 built to demonstrate use of Modern Android development tools - (Kotlin, Coroutines, Architecture Components, MVVM, Room, Retrofit, Material Components).

Tech Stack : Coroutines, Retrofit, Room, Algolia, LocGetter, EasyValidation, Dexter, Splashy, secure-preferences, Paging, Data Binding, Navigation, LiveData, ViewModel

Last commit: 1 year ago | 🌟 42
🍴 3
👁️ 3 | 176 | | [Our-chat](https://github.com/ganainy/Our_chat) | [ganainy](https://github.com/ganainy) | Private chat app with realtime notification and support audio messages,image sharing,file sharing using MVVM architecture,Firebase authentication firestore,storage,FCM,cloud functions and facebook login

Tech Stack : Coroutines, Retrofit, Room, Firestore, Firebase Auth, Firebase Messaging, Facebook Login, WorkManager, Dexter, Data Binding, Navigation, LiveData, ViewModel

Last commit: 1 year ago | 🌟 13
🍴 4
👁️ 1 | 177 | | [AppLocker](https://github.com/iammert/AppLocker) | [iammert](https://github.com/iammert) | 🔐 Open source app locker, vault, call blocker application

Tech Stack : Dagger, RxJava, Room, WorkManager, Data Binding, RxPermissions, LiveData, ViewModel

Last commit: 2 years ago | 🌟 347
🍴 77
👁️ 19 | 178 | | [software-engineering-daily-android](https://github.com/SoftwareEngineeringDaily/software-engineering-daily-android) | [SoftwareEngineeringDaily](https://github.com/SoftwareEngineeringDaily) | Android client for Software Engineering Daily

Tech Stack : Koin, Coroutines, Testing, Retrofit, Room, WorkManager, Exoplayer, Navigation, Android-Permissions, LiveData, ViewModel

Last commit: 2 years ago | 🌟 81
🍴 25
👁️ 15 | 179 | | [Social-Note](https://github.com/mars-amn/Social-Note) | [mars-amn](https://github.com/mars-amn) | Social Note - Note-taking, sharing, time & location reminder

Tech Stack : Koin, RxJava, Room, Firestore, Firebase Auth, Firebase Storage, Firebase Messaging, WorkManager, Data Binding, Paging, LiveData, ViewModel

Last commit: 2 years ago | 🌟 41
🍴 8
👁️ 3 | 180 | | [ExchangeRateApp](https://github.com/kacperczyk-dev-old-projects/ExchangeRateApp) | [kacperczyk-dev-old-projects](https://github.com/kacperczyk-dev-old-projects) | Exchange Rates application written in Kotlin using Android Architecture Components (MVVM), Dagger 2, Retrofit, Room, Lottie, Coroutines and WorkManager

Tech Stack : Dagger, Coroutines, Retrofit, Room, WorkManager, Data Binding, MPAndroidChart, Navigation, LiveData, ViewModel

Last commit: 2 years ago | 🌟 0
🍴 1
👁️ 1 | 181 | | [youtube-dl-android](https://github.com/cuongpm/youtube-dl-android) | [cuongpm](https://github.com/cuongpm) | 📦📦Video downloader for Android - Download videos from Youtube, Facebook, Twitter, Instagram, Dailymotion, Vimeo and more than 1000 other sites

Tech Stack : Dagger, RxJava, Testing, Retrofit, Room, Data Binding, LiveData, ViewModel

Last commit: 2 years ago | 🌟 344
🍴 116
👁️ 20 | 182 | | [file.io-Android-Client](https://github.com/rumaan/file.io-Android-Client) | [rumaan](https://github.com/rumaan) | ☁️ Unofficial file.io Android App 📱

Tech Stack : Testing, Fuel, Room, WorkManager, Navigation, PermissionsDispatcher, LiveData, ViewModel

Last commit: 2 years ago | 🌟 17
🍴 12
👁️ 2 | 183 | 184 | #### Clean Architecture 185 | 186 | | Name | Author ✍️ | Description 🗒️ | Reputation 💪 | 187 | |--------------------------------------------------|-------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------| 188 | | [android-showcase](https://github.com/igorwojda/android-showcase) | [igorwojda](https://github.com/igorwojda) | 💎 Android application following best practices: Kotlin, Coroutines, JetPack, Clean Architecture, Feature Modules, Tests, MVVM, DI, Static Analysis...

Tech Stack : Kodein, Coroutines, Testing, Retrofit, KAndroid, Lottie, Detekt, Navigation, Dynamic Feature Modules, LiveData, ViewModel

Last commit: 18 hours ago | 🌟 4898
🍴 660
👁️ 139 | 189 | | [Coroutines-Flows-Modularised](https://github.com/ferPrieto/Coroutines-Flows-Modularised) | [ferPrieto](https://github.com/ferPrieto) | Clean Architecture Modular Project: MVVM + Coroutines+ Flows + Dagger2 + LiveData + UnitTests + UITests + MockWebServer

Tech Stack : Dagger, Coroutines, Testing, Retrofit, Data Binding, Navigation, LiveData, ViewModel

Last commit: 3 days ago | 🌟 217
🍴 25
👁️ 3 | 190 | | [Rick-and-Morty](https://github.com/akhilesh0707/Rick-and-Morty) | [akhilesh0707](https://github.com/akhilesh0707) | The Rick And Morty - MVVM with a clean architecture approach using some of the best practices in Android Development.

Tech Stack : Kotlin, Coroutines, Flow, Dagger-Hilt, Kotlin-DSL, LiveData, Lifecycle, ViewModel, Room, Navigation, Data Binding, Material-Components, Retrofit, OkHttp, Moshi, Timber, Glide

Last commit: 3 weeks ago | 🌟 25
🍴 1
👁️ 2 | 191 | | [Android-Clean-Architecture](https://github.com/happysingh23828/Android-Clean-Architecture) | [happysingh23828](https://github.com/happysingh23828) | This is a sample movie list Android application built to demonstrate use of Clean Architecture tools. Dedicated to all Android Developers - (Kotlin, MVVM, Clean Architecture, Rx-Java, Dagger, OkHttp, Unit Testing, SOLID principles, Code Coverage)

Tech Stack : Dagger, Unit Testing for modules, Mockito, RxJava, Retrofit, Room, CI-CD, SOLID, Code Coverage, Jacoco, Detekt, ktlint, Stetho, LiveData, ViewModel

Last commit: 1 month ago | 🌟 130
🍴 31
👁️ 6 | 192 | | [Clean-MVVM-ArchComponents](https://github.com/odaridavid/Clean-MVVM-ArchComponents) | [odaridavid](https://github.com/odaridavid) | 👽 Built with MVVM pattern, Koin , Coroutines + Flows ,Architecture Components, Data Binding , Firebase , Unit/UI Tests ,Motion Layout

Tech Stack : Koin, Coroutines, Testing, Retrofit, Room, Data Binding, Motion Layout, LiveData, ViewModel

Last commit: 1 month ago | 🌟 380
🍴 75
👁️ 20 | 193 | | [Android-Kotlin-Clean-Architecture](https://github.com/sanogueralorenzo/Android-Kotlin-Clean-Architecture) | [sanogueralorenzo](https://github.com/sanogueralorenzo) | Android Sample Clean Architecture App written in Kotlin

Tech Stack : Dagger Hilt, Testing, RxJava, Retrofit, AssistedInject, Epoxy, RxPaper, MvRx, ViewModel

Last commit: 2 months ago | 🌟 1490
🍴 294
👁️ 57 | 194 | | [BLTaxi](https://github.com/VladimirWrites/BLTaxi) | [VladimirWrites](https://github.com/VladimirWrites) | 🚕 BL Taxi is a simple app for calling a taxi in the city Banja Luka built using modern Android development tools

Tech Stack : Koin, Retrofit, Room, Data Binding, LiveData, View Model, Work Manager, Material Components

Last commit: 6 months ago | 🌟 339
🍴 39
👁️ 6 | 195 | | [PropertyFindAR](https://github.com/SmartToolFactory/PropertyFindAR) | [SmartToolFactory](https://github.com/SmartToolFactory) | 🏘 🎃 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.

Tech Stack : RxJava3, Coroutines Flow, Retrofit, Room, Dagger Hilt, Dynamic Feature Modules, ConcatAdapter, LiveData, ViewModel, SavedStateHandle, WorkManager, Glide, Lottie, MpCharts, MockWebServer, MockK, FlowTestObserver, ktLint, detekt, Git Hooks, Git Flow

Last commit: 8 months ago | 🌟 150
🍴 23
👁️ 12 | 196 | | [android-clean-architecture](https://github.com/sansets/android-clean-architecture) | [sansets](https://github.com/sansets) | Sample for Android Clean Architecture.

Tech Stack : Navigation Component, Dagger, Coroutines Flow, Room, Retrofit, LiveData, ViewModel, View Binding, Dynamic Feature Modules.

Last commit: 9 months ago | 🌟 50
🍴 4
👁️ 1 | 197 | | [CoronavirusWorldStatus](https://github.com/HamdiBoumaiza/CoronavirusWorldStatus) | [HamdiBoumaiza](https://github.com/HamdiBoumaiza) | An app to stay up to date with the latest stats of the coronavirus , using Kotlin with MVVM ,Coroutines , Android Architecture Components and Dagger

Tech Stack : Dagger, Coroutines, Retrofit, Room, LiveData, ViewModel , Stetho

Last commit: 10 months ago | 🌟 16
🍴 0
👁️ 1 | 198 | | [CoolWeather](https://github.com/akoufa/CoolWeather) | [akoufa](https://github.com/akoufa) | Weather App that uses Android best practices. Android Jetpack, clean architecture. Written in Kotlin

Tech Stack : Dagger Hilt, Coroutines, Testing, Retrofit, Room, Navigation, LiveData, ViewModel

Last commit: 1 year ago | 🌟 164
🍴 11
👁️ 8 | 199 | | [Theatre](https://github.com/andremion/Theatre) | [andremion](https://github.com/andremion) | Pet project using Clean Architecture + MVVM + Reactive Extensions + Android Architecture Components. The data are fetched from LondonTheatreDirect API. 🎭

Tech Stack : Dagger, RxJava, Testing, Retrofit, Room, Navigation, Data Binding, LiveData, ViewModel

Last commit: 1 year ago | 🌟 579
🍴 94
👁️ 26 | 200 | 201 | ### MVI 202 | 203 | #### Normal 204 | 205 | | Name | Author ✍️ | Description 🗒️ | Reputation 💪 | 206 | |--------------------------------------------------|-------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------| 207 | | [Open-API-Android-App](https://github.com/mitchtabian/Open-API-Android-App) | [mitchtabian](https://github.com/mitchtabian) | Kotlin, MVI, Hilt, Retrofit2, Coroutines, Room Persistence, REST API, Token Authentication

Tech Stack : Dagger, Coroutines, Retrofit, Room, Navigation, LiveData, ViewModel

Last commit: 1 day ago | 🌟 401
🍴 186
👁️ 24 | 208 | | [ComicReaderApp-MVI-Coroutine-RxKotlin-Jetpack](https://github.com/hoc081098/ComicReaderApp_MVI_Coroutine_RxKotlin_Jetpack) | [hoc081098](https://github.com/hoc081098) | ⚡️Comic reader app 📘 Learning MVVM / MVI with :cyclone: RxKotlin, Retrofit, Kotlinx Coroutine, Work Manager, Room, Firebase, AndroidX Startup, Clean Architecture, Arrow.Kt Functional Programming ... ❄️ androidx-startup, androidx-room, androidx-viewmodel, arrow-kt

Tech Stack : Koin, Coroutines, RxJava, Retrofit, Room, Firestore, Firebase Auth, Firebase Storage, WorkManager, Navigation, Paging, LiveData, ViewModel

Last commit: 2 weeks ago | 🌟 93
🍴 18
👁️ 5 | 209 | | [GameDealz](https://github.com/R4md4c/GameDealz) | [R4md4c](https://github.com/R4md4c) | A non-official Android client for IsThereAnyDeal.com

Tech Stack : Dagger, Coroutines, Testing, Retrofit, Room, WorkManager, acra, fastAdapter, Paging, JSoup, dropbox/Store, LiveData, ViewModel

Last commit: 10 months ago | 🌟 23
🍴 1
👁️ 4 | 210 | | [NewsFeed-MVI-Dagger](https://github.com/HadySalhab/NewsFeed-MVI-Dagger) | [HadySalhab](https://github.com/HadySalhab) | Android News Application built in kotlin: MVI+Dagger+NetworkBoundResource+ViewModel+Livedata.

Tech Stack : Dagger, Coroutines, Testing, Retrofit, Room, WorkManager, Data Binding, Navigation, LiveData, ViewModel

Last commit: 1 year ago | 🌟 9
🍴 6
👁️ 1 | 211 | 212 | #### Clean Architecture 213 | 214 | | Name | Author ✍️ | Description 🗒️ | Reputation 💪 | 215 | |--------------------------------------------------|-------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------| 216 | | [CleanRxArchitecture](https://github.com/lopspower/CleanRxArchitecture) | [lopspower](https://github.com/lopspower) | Clean Rx Kotlin Architecture sample on GitHub Api 🚀

Tech Stack : Dagger, RxJava, Retrofit, Room, Clean Architecture, LiveData, ViewModel

Last commit: 2 days ago | 🌟 335
🍴 42
👁️ 14 | 217 | | [StarWarsSearch-MVI](https://github.com/Ezike/StarWarsSearch-MVI) | [Ezike](https://github.com/Ezike) | Star wars sample android project showcasing the use of View components for rendering UI in Fragments and Activities. Uses Android Jetpack, clean architecture with MVI (Uni-directional data flow), dagger hilt, and kotlin coroutines with StateFlow

Tech Stack : Jetpack, Dagger hilt, Coroutines & StateFlow, Room, Retrofit, FlowBinding

Last commit: 2 weeks ago | 🌟 108
🍴 16
👁️ 6 | 218 | | [Clean-Notes](https://github.com/mitchtabian/Clean-Notes) | [mitchtabian](https://github.com/mitchtabian) | Clean Architecture by layer

Tech Stack : Dagger, Coroutines, Testing, Retrofit, Room, Firestore, Firebase Auth, Navigation, Markdown Processor, LiveData, ViewModel

Last commit: 3 months ago | 🌟 291
🍴 94
👁️ 13 | 219 | | [Baking-App-Kotlin](https://github.com/Ezike/Baking-App-Kotlin) | [Ezike](https://github.com/Ezike) | Android architecture sample with dynamic feature modularisation, clean architecture with MVI (Uni-directional data flow), dagger hilt, DFM Navigation, kotlin coroutines with StateFlow and Exo player.

Tech Stack : Dagger hilt, Coroutines & StateFlow, Unit Testing, Retrofit, DFM Navigation, FlowBinding, Exoplayer

Last commit: 5 months ago | 🌟 313
🍴 66
👁️ 11 | 220 | 221 | ### MVP 222 | 223 | | Name | Author ✍️ | Description 🗒️ | Reputation 💪 | 224 | |--------------------------------------------------|-------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------| 225 | | [tachiyomi](https://github.com/tachiyomiorg/tachiyomi) | [tachiyomiorg](https://github.com/tachiyomiorg) | Free and open source manga reader for Android.

Tech Stack : Inorichi injekt, Coroutines, RxJava, Testing, Retrofit, DiskLruCache, Jsoup, WorkManager, Duktape Android, Conductor

Last commit: 28 minutes ago | 🌟 12076
🍴 1528
👁️ 510 | 226 | | [UTair-MVP-Sample](https://github.com/ImangazalievM/UTair-MVP-Sample) | [ImangazalievM](https://github.com/ImangazalievM) | Android Clean Architecture + MVP Sample written in Kotlin

Tech Stack : Clean Architecture, Coroutines, RxJava 2, Coroutines, Toothpick, Moxy, Unit-tests (Spek, Mockk), UI-tests (Kaspresso)

Last commit: 6 months ago | 🌟 27
🍴 4
👁️ 3 | 227 | 228 | ## Other 229 | 230 | | Name | Author ✍️ | Description 🗒️ | Reputation 💪 | 231 | |--------------------------------------------------|-------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------| 232 | | [shadowsocks-android](https://github.com/shadowsocks/shadowsocks-android) | [shadowsocks](https://github.com/shadowsocks) | A shadowsocks client for Android

Tech Stack : Testing, Room, Firebase Ads, WorkManager

Last commit: 2 weeks ago | 🌟 31646
🍴 11471
👁️ 1637 | 233 | | [Scarlet-Notes](https://github.com/BijoySingh/Scarlet-Notes) | [BijoySingh](https://github.com/BijoySingh) | Simple yet powerful rich note taking android application, with a lot of flexibilty of usage

Tech Stack : Dagger, Coroutines, Room, Firebase Auth, Firebase Database, Paging, Navigation, Evernote android-job, Facebook Litho, Facebook SoLoader, Biometric

Last commit: 7 months ago | 🌟 311
🍴 91
👁️ 19 | 234 | | [Screenaway](https://github.com/DimaBrody/Screenaway) | [DimaBrody](https://github.com/DimaBrody) | Phone Screen Forced Locker

Tech Stack : Room, Play Install Referrer Library

Last commit: 11 months ago | 🌟 8
🍴 1
👁️ 1 | 235 | 236 | ## :books: Tech Stack/Libraries 237 | 238 | - [Dagger](https://github.com/google/dagger), [Koin](https://github.com/InsertKoinIO/koin), [Kodein](https://github.com/Kodein-Framework/Kodein-DI), [Inorichi Injekt](https://jitpack.io/p/inorichi/injekt), [Coroutines](https://github.com/Kotlin/kotlinx.coroutines), [Rx](https://github.com/ReactiveX/RxJava), [Testing](https://developer.android.com/studio/test), [Retrofit](https://github.com/square/retrofit), [Fuel](https://github.com/kittinunf/fuel), [Room](https://developer.android.com/topic/libraries/architecture/room), [Realm](https://github.com/realm/realm-java), [Firebase Products](https://firebase.google.com/), [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager), [ExoPlayer](https://github.com/google/ExoPlayer), [Paging](https://developer.android.com/topic/libraries/architecture/paging), [Navigation](https://developer.android.com/guide/navigation), [Lottie](https://github.com/airbnb/lottie-android), [Zoomy](https://github.com/imablanco/Zoomy), [JSoup](https://jsoup.org/download), [js-evaluator-for-android](https://github.com/evgenyneu/js-evaluator-for-android), [Algolia Search](https://www.algolia.com/doc/guides/getting-started/quick-start/tutorials/quick-start-with-the-api-client/android/), [Conductor](https://github.com/bluelinelabs/Conductor), [Call Control DataShare](https://github.com/CallControl/Call-Control-DataShare), [libphonenumber-android](https://github.com/MichaelRocks/libphonenumber-android), [Mixpanel Android](https://github.com/mixpanel/mixpanel-android), [Venom](https://github.com/YarikSOffice/venom), [FlowLayout](https://github.com/nex3z/FlowLayout), [ARCore](https://developers.google.com/ar/discover), [GSYVideoPlayer](https://github.com/CarGuo/GSYVideoPlayer), [PermissionX](https://github.com/guolindev/PermissionX), [EventBus](https://github.com/greenrobot/EventBus), [Dynamicanimation](https://developer.android.com/jetpack/androidx/releases/dynamicanimation), [Google Drive](https://developers.google.com/drive/android), [Dropbox](https://github.com/dropbox), [MPAndroidChart](https://github.com/PhilJay/MPAndroidChart), [Facebook Products](https://developers.facebook.com/docs/facebook-login/android/), [PayPal](https://developer.paypal.com/docs/), [Stripe](https://github.com/stripe/stripe-android), [Easy Permissions](https://github.com/googlesamples/easypermissions), [socketIO](https://socket.io/), [Dexter](https://github.com/Karumi/Dexter), [Tikxml](https://github.com/Tickaroo/tikxml), [Markwon](https://github.com/noties/Markwon), [Scarlet](https://github.com/Tinder/Scarlet), [Android-Permissions](https://github.com/nabinbhandari/Android-Permissions), [RxPermissions](https://github.com/tbruyelle/RxPermissions), [android-upload-service](https://github.com/gotev/android-upload-service), [PermissionsDispatcher](https://github.com/permissions-dispatcher/PermissionsDispatcher), [ShortcutBadger](https://github.com/leolin310148/ShortcutBadger), [ARouter](https://github.com/alibaba/ARouter), [Sandwich](https://github.com/skydoves/Sandwich), [Calendar view](https://github.com/kizitonwose/CalendarView), [Biometric](https://developer.android.com/jetpack/androidx/releases/biometric), [Pretty Time](https://github.com/ocpsoft/prettytime), [Markdown Processor](https://github.com/yydcdut/RxMarkdown), [DiskLruCache](https://github.com/JakeWharton/DiskLruCache), [Duktape Android](https://github.com/square/duktape-android), [Evernote android-job](https://github.com/evernote/android-job), [Facebook Litho](https://github.com/facebook/litho), [Facebook SoLoader](https://github.com/facebook/SoLoader), [Data Binding](https://developer.android.com/topic/libraries/data-binding), [TimelineView](https://github.com/anacoimbrag/timeline-view) 239 | 240 | ## :memo: Contributing 241 | 242 | See [contributing.md](CONTRIBUTING.md) 243 | 244 | ## :moyai: Core Contributors 245 | 246 | - [@theapache64](https://github.com/theapache64) [automated this repo](https://github.com/androiddevnotes/awesome-android-kotlin-apps/pull/51) and designed a beautiful layout for awesome-android-kotlin-apps. 247 | 248 | ## :hatching_chick: Contributors 249 | 250 | Contributors are cool people. 251 | 252 | If you contributed and are missing in this list, please send a PR including your entry in the list below! 🐣 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 |
KevinGitongaHamdiBoumaizaDevansh-MauryaAnnie-Sultanaiamsurajgiri
saifali25Tristankluivertanacoimbragalpharomeo911adityakamath16
ImangazalievMEzikeviveksharma2382000sridevshenoysatyamurti
sansetssanmiAdesaif71ryanrvldorizmaulana
pedrofsnodaridavidihilalahmadigorescodrohappysingh23828
fionicholasenginebaidheerajkotwaniauron567abhinav0612
YahiaAngeloVladimirWritesSpikeysanjuSmartToolFactoryShivamdhuria
PatilShreyasPHELATMargu86MageshVSKhaledSherifSayed
312 | 313 | ## :computer: Find us on 314 | 315 |
316 | GitHub / Discord / Twitter / Instagram / YouTube / Medium 317 |

318 | androiddevnotes logo 319 |
320 | 321 | 322 | 327 | 328 | -------------------------------------------------------------------------------- /README.model.md: -------------------------------------------------------------------------------- 1 | 2 |

Awesome Android Kotlin Apps


3 | 4 |

5 | :eyeglasses: A curated list of awesome android kotlin apps by open-source contributors. 6 |

7 |
8 | 9 |

10 | Awesome Android Kotlin Apps Count badge 11 | Android Language Badge 12 | Kotlin Language Badge 13 | androiddevnotes GitHub badge 14 | 15 |

16 | 17 |
18 |

19 | androiddevnotes logo 20 |


21 | 22 | 23 | **Awesome Android Kotlin Apps** aims to be the starting point for developers to find an Android app with a particular Tech Stack / Libraries. 24 | 25 | ___🔃 Last updated : $LAST_UPDATED___ 26 | 27 | ## Contents 28 | 29 | :art: [**Pattern**](#art-pattern) 30 | 31 | 32 | - [Jetpack Compose Apps](#jetpack-compose-apps) 33 | 34 | - [Model View ViewModel (MVVM)](#mvvm) 35 | 36 | - [Normal](#normal) 37 | - [Clean Architecture](#clean-architecture) 38 | 39 | - [Model View Intent (MVI)](#mvi) 40 | 41 | - [Normal](#normal-1) 42 | - [Clean Architecture](#clean-architecture-1) 43 | 44 | - [Model View Presenter (MVP)](#mvp) 45 | 46 | - [Model View Controller (MVC) and Other Patterns](#other) 47 | 48 | 49 | :books: [**Tech Stack/Libraries**](#books-tech-stacklibraries) 50 | 51 | :memo: [**Contributing**](#memo-contributing) 52 | 53 | :moyai: [**Core Contributors**](#moyai-core-contributors) 54 | 55 | 56 | ## :art: Pattern 57 | 58 | ### Jetpack Compose Apps 59 | 60 | $JETPACK_COMPOSE_REPOS 61 | 62 | ### MVVM 63 | 64 | #### Normal 65 | 66 | $MVVM_NORMAL_REPOS 67 | 68 | #### Clean Architecture 69 | 70 | $MVVM_CLEAN_ARCH_REPOS 71 | 72 | ### MVI 73 | 74 | #### Normal 75 | 76 | $MVI_NORMAL_REPOS 77 | 78 | #### Clean Architecture 79 | 80 | $MVI_CLEAN_ARCH_REPOS 81 | 82 | ### MVP 83 | 84 | $MVP_REPOS 85 | 86 | ## Other 87 | 88 | $OTHER_REPOS 89 | 90 | ## :books: Tech Stack/Libraries 91 | 92 | - [Dagger](https://github.com/google/dagger), [Koin](https://github.com/InsertKoinIO/koin), [Kodein](https://github.com/Kodein-Framework/Kodein-DI), [Inorichi Injekt](https://jitpack.io/p/inorichi/injekt), [Coroutines](https://github.com/Kotlin/kotlinx.coroutines), [Rx](https://github.com/ReactiveX/RxJava), [Testing](https://developer.android.com/studio/test), [Retrofit](https://github.com/square/retrofit), [Fuel](https://github.com/kittinunf/fuel), [Room](https://developer.android.com/topic/libraries/architecture/room), [Realm](https://github.com/realm/realm-java), [Firebase Products](https://firebase.google.com/), [WorkManager](https://developer.android.com/topic/libraries/architecture/workmanager), [ExoPlayer](https://github.com/google/ExoPlayer), [Paging](https://developer.android.com/topic/libraries/architecture/paging), [Navigation](https://developer.android.com/guide/navigation), [Lottie](https://github.com/airbnb/lottie-android), [Zoomy](https://github.com/imablanco/Zoomy), [JSoup](https://jsoup.org/download), [js-evaluator-for-android](https://github.com/evgenyneu/js-evaluator-for-android), [Algolia Search](https://www.algolia.com/doc/guides/getting-started/quick-start/tutorials/quick-start-with-the-api-client/android/), [Conductor](https://github.com/bluelinelabs/Conductor), [Call Control DataShare](https://github.com/CallControl/Call-Control-DataShare), [libphonenumber-android](https://github.com/MichaelRocks/libphonenumber-android), [Mixpanel Android](https://github.com/mixpanel/mixpanel-android), [Venom](https://github.com/YarikSOffice/venom), [FlowLayout](https://github.com/nex3z/FlowLayout), [ARCore](https://developers.google.com/ar/discover), [GSYVideoPlayer](https://github.com/CarGuo/GSYVideoPlayer), [PermissionX](https://github.com/guolindev/PermissionX), [EventBus](https://github.com/greenrobot/EventBus), [Dynamicanimation](https://developer.android.com/jetpack/androidx/releases/dynamicanimation), [Google Drive](https://developers.google.com/drive/android), [Dropbox](https://github.com/dropbox), [MPAndroidChart](https://github.com/PhilJay/MPAndroidChart), [Facebook Products](https://developers.facebook.com/docs/facebook-login/android/), [PayPal](https://developer.paypal.com/docs/), [Stripe](https://github.com/stripe/stripe-android), [Easy Permissions](https://github.com/googlesamples/easypermissions), [socketIO](https://socket.io/), [Dexter](https://github.com/Karumi/Dexter), [Tikxml](https://github.com/Tickaroo/tikxml), [Markwon](https://github.com/noties/Markwon), [Scarlet](https://github.com/Tinder/Scarlet), [Android-Permissions](https://github.com/nabinbhandari/Android-Permissions), [RxPermissions](https://github.com/tbruyelle/RxPermissions), [android-upload-service](https://github.com/gotev/android-upload-service), [PermissionsDispatcher](https://github.com/permissions-dispatcher/PermissionsDispatcher), [ShortcutBadger](https://github.com/leolin310148/ShortcutBadger), [ARouter](https://github.com/alibaba/ARouter), [Sandwich](https://github.com/skydoves/Sandwich), [Calendar view](https://github.com/kizitonwose/CalendarView), [Biometric](https://developer.android.com/jetpack/androidx/releases/biometric), [Pretty Time](https://github.com/ocpsoft/prettytime), [Markdown Processor](https://github.com/yydcdut/RxMarkdown), [DiskLruCache](https://github.com/JakeWharton/DiskLruCache), [Duktape Android](https://github.com/square/duktape-android), [Evernote android-job](https://github.com/evernote/android-job), [Facebook Litho](https://github.com/facebook/litho), [Facebook SoLoader](https://github.com/facebook/SoLoader), [Data Binding](https://developer.android.com/topic/libraries/data-binding), [TimelineView](https://github.com/anacoimbrag/timeline-view) 93 | 94 | ## :memo: Contributing 95 | 96 | See [contributing.md](CONTRIBUTING.md) 97 | 98 | ## :moyai: Core Contributors 99 | 100 | - [@theapache64](https://github.com/theapache64) [automated this repo](https://github.com/androiddevnotes/awesome-android-kotlin-apps/pull/51) and designed a beautiful layout for awesome-android-kotlin-apps. 101 | 102 | ## :hatching_chick: Contributors 103 | 104 | Contributors are cool people. 105 | 106 | If you contributed and are missing in this list, please send a PR including your entry in the list below! 🐣 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 |
KevinGitongaHamdiBoumaizaDevansh-MauryaAnnie-Sultanaiamsurajgiri
saifali25Tristankluivertanacoimbragalpharomeo911adityakamath16
ImangazalievMEzikeviveksharma2382000sridevshenoysatyamurti
sansetssanmiAdesaif71ryanrvldorizmaulana
pedrofsnodaridavidihilalahmadigorescodrohappysingh23828
fionicholasenginebaidheerajkotwaniauron567abhinav0612
YahiaAngeloVladimirWritesSpikeysanjuSmartToolFactoryShivamdhuria
PatilShreyasPHELATMargu86MageshVSKhaledSherifSayed
166 | 167 | ## :computer: Find us on 168 | 169 |
170 | GitHub / Discord / Twitter / Instagram / YouTube / Medium 171 |

172 | androiddevnotes logo 173 |
174 | -------------------------------------------------------------------------------- /assets/android.svg: -------------------------------------------------------------------------------- 1 | Layer 1 -------------------------------------------------------------------------------- /assets/androiddevnotes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bandhan-singh-katoch/awesome-android-kotlin-apps/03a112f76de56064a0aa4efee568d28dc514bf7f/assets/androiddevnotes.png -------------------------------------------------------------------------------- /assets/count.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /assets/kotlin.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /awesome-android-kotlin-apps.main.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bandhan-singh-katoch/awesome-android-kotlin-apps/03a112f76de56064a0aa4efee568d28dc514bf7f/awesome-android-kotlin-apps.main.jar -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'java' 3 | id 'org.jetbrains.kotlin.jvm' version '1.3.72' 4 | } 5 | apply plugin: 'kotlin-kapt' 6 | 7 | 8 | group 'com.github' 9 | version '1.0-SNAPSHOT' 10 | 11 | repositories { 12 | mavenCentral() 13 | } 14 | 15 | dependencies { 16 | implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" 17 | testCompile group: 'junit', name: 'junit', version: '4.12' 18 | 19 | // Moshi:A modern JSON API for Android and Java 20 | implementation 'com.squareup.moshi:moshi:1.11.0' 21 | 22 | // Moshi Kotlin Codegen:A modern JSON API for Android and Java 23 | kapt 'com.squareup.moshi:moshi-kotlin-codegen:1.11.0' 24 | 25 | // OkHttp:Square’s meticulous HTTP client for Java and Kotlin. 26 | implementation 'com.squareup.okhttp3:okhttp:4.10.0-RC1' 27 | 28 | // Retrofit:A type-safe HTTP client for Android and Java. 29 | implementation 'com.squareup.retrofit2:retrofit:2.9.0' 30 | 31 | // Dagger 32 | api 'com.google.dagger:dagger:2.27' 33 | kapt 'com.google.dagger:dagger-compiler:2.27' 34 | 35 | // Kotlinx Coroutines Core:Coroutines support libraries for Kotlin 36 | implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.1' 37 | 38 | // Converter: Moshi:A Retrofit Converter which uses Moshi for serialization. 39 | implementation 'com.squareup.retrofit2:converter-moshi:2.9.0' 40 | 41 | // OkHttp Logging Interceptor:Square’s meticulous HTTP client for Java and Kotlin. 42 | implementation 'com.squareup.okhttp3:logging-interceptor:4.10.0-RC1' 43 | 44 | // PrettyTime Core:PrettyTime Core 45 | implementation 'org.ocpsoft.prettytime:prettytime:4.0.6.Final' 46 | } 47 | 48 | compileKotlin { 49 | kotlinOptions.jvmTarget = "1.8" 50 | } 51 | compileTestKotlin { 52 | kotlinOptions.jvmTarget = "1.8" 53 | } -------------------------------------------------------------------------------- /gpm.json: -------------------------------------------------------------------------------- 1 | { 2 | "added": [ 3 | { 4 | "id": 1, 5 | "type": "implementation", 6 | "installed_name": "moshi", 7 | "gpm_dep": { 8 | "artifact_id": "moshi", 9 | "default_type": "implementation", 10 | "docs": "https://mvnrepository.com/artifact/com.squareup.moshi/moshi", 11 | "get_from": "Central", 12 | "group_id": "com.squareup.moshi", 13 | "name": "Moshi", 14 | "description": "A modern JSON API for Android and Java" 15 | } 16 | }, 17 | { 18 | "id": 2, 19 | "type": "kapt", 20 | "installed_name": "moshi-codegen", 21 | "gpm_dep": { 22 | "artifact_id": "moshi-kotlin-codegen", 23 | "default_type": "implementation", 24 | "docs": "https://mvnrepository.com/artifact/com.squareup.moshi/moshi-kotlin-codegen", 25 | "get_from": "Central", 26 | "group_id": "com.squareup.moshi", 27 | "name": "Moshi Kotlin Codegen", 28 | "description": "A modern JSON API for Android and Java" 29 | } 30 | }, 31 | { 32 | "id": 3, 33 | "type": "implementation", 34 | "installed_name": "egit-github", 35 | "gpm_dep": { 36 | "artifact_id": "org.eclipse.egit.github.core", 37 | "default_type": "implementation", 38 | "docs": "https://mvnrepository.com/artifact/org.eclipse.mylyn.github/org.eclipse.egit.github.core", 39 | "get_from": "Central", 40 | "group_id": "org.eclipse.mylyn.github", 41 | "name": "Eclipse EGit GitHub API Core", 42 | "description": "Eclipse EGit GitHub API Core" 43 | } 44 | }, 45 | { 46 | "id": 4, 47 | "type": "implementation", 48 | "installed_name": "okhttp", 49 | "gpm_dep": { 50 | "artifact_id": "okhttp", 51 | "default_type": "implementation", 52 | "docs": "https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp", 53 | "get_from": "Central", 54 | "group_id": "com.squareup.okhttp3", 55 | "name": "OkHttp", 56 | "description": "Square’s meticulous HTTP client for Java and Kotlin." 57 | } 58 | }, 59 | { 60 | "id": 5, 61 | "type": "implementation", 62 | "installed_name": "json", 63 | "gpm_dep": { 64 | "artifact_id": "json", 65 | "default_type": "implementation", 66 | "docs": "https://mvnrepository.com/artifact/org.json/json", 67 | "get_from": "Central", 68 | "group_id": "org.json", 69 | "name": "JSON In Java", 70 | "description": "JSON is a light-weight, language independent, data interchange format.See http://www.JSON.org/The files in this package implement JSON encoders/decoders in Java.It also includes the capability to convert between JSON and XML, HTTPheaders, Cookies, and CDL.This is a reference implementation. There is a large number of JSON packagesin Java. Perhaps someday the Java community will standardize on one. Untilthen, choose carefully.The license includes this restriction: \"The software ..." 71 | } 72 | }, 73 | { 74 | "id": 6, 75 | "type": "implementation", 76 | "installed_name": "retrofit2", 77 | "gpm_dep": { 78 | "artifact_id": "retrofit", 79 | "default_type": "implementation", 80 | "docs": "https://mvnrepository.com/artifact/com.squareup.retrofit2/retrofit", 81 | "get_from": "Central", 82 | "group_id": "com.squareup.retrofit2", 83 | "name": "Retrofit", 84 | "description": "A type-safe HTTP client for Android and Java." 85 | } 86 | }, 87 | { 88 | "id": 7, 89 | "type": "implementation", 90 | "installed_name": "coroutines", 91 | "gpm_dep": { 92 | "artifact_id": "kotlinx-coroutines-core", 93 | "default_type": "implementation", 94 | "docs": "https://mvnrepository.com/artifact/org.jetbrains.kotlinx/kotlinx-coroutines-core", 95 | "get_from": "Central", 96 | "group_id": "org.jetbrains.kotlinx", 97 | "name": "Kotlinx Coroutines Core", 98 | "description": "Coroutines support libraries for Kotlin" 99 | } 100 | }, 101 | { 102 | "id": 8, 103 | "type": "implementation", 104 | "installed_name": "moshi-converter", 105 | "gpm_dep": { 106 | "artifact_id": "converter-moshi", 107 | "default_type": "implementation", 108 | "docs": "https://mvnrepository.com/artifact/com.squareup.retrofit2/converter-moshi", 109 | "get_from": "Central", 110 | "group_id": "com.squareup.retrofit2", 111 | "name": "Converter: Moshi", 112 | "description": "A Retrofit Converter which uses Moshi for serialization." 113 | } 114 | }, 115 | { 116 | "id": 9, 117 | "type": "implementation", 118 | "installed_name": "okhttp3-logging", 119 | "gpm_dep": { 120 | "artifact_id": "logging-interceptor", 121 | "default_type": "implementation", 122 | "docs": "https://mvnrepository.com/artifact/com.squareup.okhttp3/logging-interceptor", 123 | "get_from": "Central", 124 | "group_id": "com.squareup.okhttp3", 125 | "name": "OkHttp Logging Interceptor", 126 | "description": "Square’s meticulous HTTP client for Java and Kotlin." 127 | } 128 | }, 129 | { 130 | "id": 10, 131 | "type": "implementation", 132 | "installed_name": "prettytime", 133 | "gpm_dep": { 134 | "artifact_id": "prettytime", 135 | "default_type": "implementation", 136 | "docs": "https://mvnrepository.com/artifact/org.ocpsoft.prettytime/prettytime", 137 | "get_from": "Central", 138 | "group_id": "org.ocpsoft.prettytime", 139 | "name": "PrettyTime Core", 140 | "description": "PrettyTime Core" 141 | } 142 | } 143 | ] 144 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | kotlin.code.style=official 2 | kotlin.code.style=official -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bandhan-singh-katoch/awesome-android-kotlin-apps/03a112f76de56064a0aa4efee568d28dc514bf7f/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Nov 06 14:36:08 IST 2020 2 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip 3 | distributionBase=GRADLE_USER_HOME 4 | distributionPath=wrapper/dists 5 | zipStorePath=wrapper/dists 6 | zipStoreBase=GRADLE_USER_HOME 7 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | # 4 | # Copyright 2015 the original author or authors. 5 | # 6 | # Licensed under the Apache License, Version 2.0 (the "License"); 7 | # you may not use this file except in compliance with the License. 8 | # You may obtain a copy of the License at 9 | # 10 | # https://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # 18 | 19 | ############################################################################## 20 | ## 21 | ## Gradle start up script for UN*X 22 | ## 23 | ############################################################################## 24 | 25 | # Attempt to set APP_HOME 26 | # Resolve links: $0 may be a link 27 | PRG="$0" 28 | # Need this for relative symlinks. 29 | while [ -h "$PRG" ] ; do 30 | ls=`ls -ld "$PRG"` 31 | link=`expr "$ls" : '.*-> \(.*\)$'` 32 | if expr "$link" : '/.*' > /dev/null; then 33 | PRG="$link" 34 | else 35 | PRG=`dirname "$PRG"`"/$link" 36 | fi 37 | done 38 | SAVED="`pwd`" 39 | cd "`dirname \"$PRG\"`/" >/dev/null 40 | APP_HOME="`pwd -P`" 41 | cd "$SAVED" >/dev/null 42 | 43 | APP_NAME="Gradle" 44 | APP_BASE_NAME=`basename "$0"` 45 | 46 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 47 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' 48 | 49 | # Use the maximum available, or set MAX_FD != -1 to use that value. 50 | MAX_FD="maximum" 51 | 52 | warn () { 53 | echo "$*" 54 | } 55 | 56 | die () { 57 | echo 58 | echo "$*" 59 | echo 60 | exit 1 61 | } 62 | 63 | # OS specific support (must be 'true' or 'false'). 64 | cygwin=false 65 | msys=false 66 | darwin=false 67 | nonstop=false 68 | case "`uname`" in 69 | CYGWIN* ) 70 | cygwin=true 71 | ;; 72 | Darwin* ) 73 | darwin=true 74 | ;; 75 | MINGW* ) 76 | msys=true 77 | ;; 78 | NONSTOP* ) 79 | nonstop=true 80 | ;; 81 | esac 82 | 83 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 84 | 85 | 86 | # Determine the Java command to use to start the JVM. 87 | if [ -n "$JAVA_HOME" ] ; then 88 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 89 | # IBM's JDK on AIX uses strange locations for the executables 90 | JAVACMD="$JAVA_HOME/jre/sh/java" 91 | else 92 | JAVACMD="$JAVA_HOME/bin/java" 93 | fi 94 | if [ ! -x "$JAVACMD" ] ; then 95 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 96 | 97 | Please set the JAVA_HOME variable in your environment to match the 98 | location of your Java installation." 99 | fi 100 | else 101 | JAVACMD="java" 102 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 103 | 104 | Please set the JAVA_HOME variable in your environment to match the 105 | location of your Java installation." 106 | fi 107 | 108 | # Increase the maximum file descriptors if we can. 109 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 110 | MAX_FD_LIMIT=`ulimit -H -n` 111 | if [ $? -eq 0 ] ; then 112 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 113 | MAX_FD="$MAX_FD_LIMIT" 114 | fi 115 | ulimit -n $MAX_FD 116 | if [ $? -ne 0 ] ; then 117 | warn "Could not set maximum file descriptor limit: $MAX_FD" 118 | fi 119 | else 120 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 121 | fi 122 | fi 123 | 124 | # For Darwin, add options to specify how the application appears in the dock 125 | if $darwin; then 126 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 127 | fi 128 | 129 | # For Cygwin or MSYS, switch paths to Windows format before running java 130 | if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then 131 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 132 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 133 | 134 | JAVACMD=`cygpath --unix "$JAVACMD"` 135 | 136 | # We build the pattern for arguments to be converted via cygpath 137 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 138 | SEP="" 139 | for dir in $ROOTDIRSRAW ; do 140 | ROOTDIRS="$ROOTDIRS$SEP$dir" 141 | SEP="|" 142 | done 143 | OURCYGPATTERN="(^($ROOTDIRS))" 144 | # Add a user-defined pattern to the cygpath arguments 145 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 146 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 147 | fi 148 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 149 | i=0 150 | for arg in "$@" ; do 151 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 152 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 153 | 154 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 155 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 156 | else 157 | eval `echo args$i`="\"$arg\"" 158 | fi 159 | i=`expr $i + 1` 160 | done 161 | case $i in 162 | 0) set -- ;; 163 | 1) set -- "$args0" ;; 164 | 2) set -- "$args0" "$args1" ;; 165 | 3) set -- "$args0" "$args1" "$args2" ;; 166 | 4) set -- "$args0" "$args1" "$args2" "$args3" ;; 167 | 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 168 | 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 169 | 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 170 | 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 171 | 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 172 | esac 173 | fi 174 | 175 | # Escape application args 176 | save () { 177 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 178 | echo " " 179 | } 180 | APP_ARGS=`save "$@"` 181 | 182 | # Collect all arguments for the java command, following the shell quoting and substitution rules 183 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 184 | 185 | exec "$JAVACMD" "$@" 186 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @rem 2 | @rem Copyright 2015 the original author or authors. 3 | @rem 4 | @rem Licensed under the Apache License, Version 2.0 (the "License"); 5 | @rem you may not use this file except in compliance with the License. 6 | @rem You may obtain a copy of the License at 7 | @rem 8 | @rem https://www.apache.org/licenses/LICENSE-2.0 9 | @rem 10 | @rem Unless required by applicable law or agreed to in writing, software 11 | @rem distributed under the License is distributed on an "AS IS" BASIS, 12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | @rem See the License for the specific language governing permissions and 14 | @rem limitations under the License. 15 | @rem 16 | 17 | @if "%DEBUG%" == "" @echo off 18 | @rem ########################################################################## 19 | @rem 20 | @rem Gradle startup script for Windows 21 | @rem 22 | @rem ########################################################################## 23 | 24 | @rem Set local scope for the variables with windows NT shell 25 | if "%OS%"=="Windows_NT" setlocal 26 | 27 | set DIRNAME=%~dp0 28 | if "%DIRNAME%" == "" set DIRNAME=. 29 | set APP_BASE_NAME=%~n0 30 | set APP_HOME=%DIRNAME% 31 | 32 | @rem Resolve any "." and ".." in APP_HOME to make it shorter. 33 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi 34 | 35 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 36 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" 37 | 38 | @rem Find java.exe 39 | if defined JAVA_HOME goto findJavaFromJavaHome 40 | 41 | set JAVA_EXE=java.exe 42 | %JAVA_EXE% -version >NUL 2>&1 43 | if "%ERRORLEVEL%" == "0" goto init 44 | 45 | echo. 46 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 47 | echo. 48 | echo Please set the JAVA_HOME variable in your environment to match the 49 | echo location of your Java installation. 50 | 51 | goto fail 52 | 53 | :findJavaFromJavaHome 54 | set JAVA_HOME=%JAVA_HOME:"=% 55 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 56 | 57 | if exist "%JAVA_EXE%" goto init 58 | 59 | echo. 60 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 61 | echo. 62 | echo Please set the JAVA_HOME variable in your environment to match the 63 | echo location of your Java installation. 64 | 65 | goto fail 66 | 67 | :init 68 | @rem Get command-line arguments, handling Windows variants 69 | 70 | if not "%OS%" == "Windows_NT" goto win9xME_args 71 | 72 | :win9xME_args 73 | @rem Slurp the command line arguments. 74 | set CMD_LINE_ARGS= 75 | set _SKIP=2 76 | 77 | :win9xME_args_slurp 78 | if "x%~1" == "x" goto execute 79 | 80 | set CMD_LINE_ARGS=%* 81 | 82 | :execute 83 | @rem Setup the command line 84 | 85 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 86 | 87 | 88 | @rem Execute Gradle 89 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 90 | 91 | :end 92 | @rem End local scope for the variables with windows NT shell 93 | if "%ERRORLEVEL%"=="0" goto mainEnd 94 | 95 | :fail 96 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 97 | rem the _cmd.exe /c_ return code! 98 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 99 | exit /b 1 100 | 101 | :mainEnd 102 | if "%OS%"=="Windows_NT" endlocal 103 | 104 | :omega 105 | -------------------------------------------------------------------------------- /input_data.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "pattern": "Jetpack Compose Apps", 4 | "key": "$JETPACK_COMPOSE_REPOS", 5 | "projects": [ 6 | { 7 | "github_url": "https://github.com/androiddevnotes/awesome-jetpack-compose-android-apps" 8 | } 9 | ] 10 | }, 11 | { 12 | "pattern": "MVVM - Normal", 13 | "key": "$MVVM_NORMAL_REPOS", 14 | "projects": [ 15 | { 16 | "github_url": "https://github.com/ImnIrdst/iiCnma", 17 | "stack": "Dagger Hilt, Testing, Coroutines + Flow, Retrofit, Room, LiveData, ViewModel, Paging, Navigation" 18 | }, 19 | { 20 | "github_url": "https://github.com/fabirt/roka-recipe-app", 21 | "stack": "Dagger Hilt, Coroutines, Retrofit, Room, LiveData, ViewModel, Paging, Navigation, DataStore" 22 | }, 23 | { 24 | "github_url": "https://github.com/Hamza417/Inure", 25 | "stack": "LiveData, ViewModel, WebKit, APK Parser, libsu" 26 | }, 27 | { 28 | "github_url": "https://github.com/ErickSumargo/Dads", 29 | "stack": "Hilt, Coroutines + Flow, UI Testing, Room, ViewModel, WorkManager, Apollo" 30 | }, 31 | { 32 | "github_url": "https://github.com/tema6120/ForgetMeNot", 33 | "stack": "Coroutines + Flow, SQLDelight, Kotlin Serialization, Klock, Brackeys-IDE EditorKit" 34 | }, 35 | { 36 | "github_url": "https://github.com/GerardBradshaw/MixUp", 37 | "stack": "Dagger, Coroutines, Testing, Navigation, ColorPicker, ViewModel" 38 | }, 39 | { 40 | "github_url": "https://github.com/androiddevnotesforks/Bitlue", 41 | "stack": "Dagger Hilt, Coroutines + Flow, MPAndroidChart, Retrofit, LiveData, ViewModel" 42 | }, 43 | { 44 | "github_url": "https://github.com/mukul500/AnimeXStream", 45 | "stack": "Retrofit, RxJava, Epoxy, ViewModel, LiveData, Navigation, Realm, ExoPlayer v2.0, Glide" 46 | }, 47 | { 48 | "github_url": "https://github.com/PatilShreyas/NotyKT", 49 | "stack": "Backend - Ktor, PostgreSQL; Android = Coroutines, Flow, Navigation Architecture, LiveData, ViewModel, Room DB, DataStore, Jetpack Security, WorkManager, Dagger Hilt DI, Jetpack Compose, Material UI, Retrofit, Moshi" 50 | }, 51 | { 52 | "github_url": "https://github.com/Sharkaboi/DrawingsApp", 53 | "stack": "Dagger Hilt, Coroutines, Room, Dhaval2404/ImagePicker, Subsampling Scale Image View, Navigation, LiveData, ViewModel" 54 | }, 55 | { 56 | "github_url": "https://github.com/b-lam/Resplash", 57 | "stack": "Koin, Coroutines, Testing, Retrofit, Room, Firestore, Firebase In-App Messaging, Paging, Navigation, Google Play Billing, Muzei, LiveData, ViewModel" 58 | }, 59 | { 60 | "github_url": "https://github.com/utsmannn/hiya-hiya-hiya", 61 | "stack": "Koin, Coroutines, Retrofit, Room, Firebase Messaging, Firebase Auth, WorkManager, Google Maps, Paging, JSoup, vanniktech/Emoji, afollestad/inline-activity-result, LiveData, ViewModel" 62 | }, 63 | { 64 | "github_url": "https://github.com/ashwini009/TvFlix", 65 | "stack": "Dagger Hilt, Coroutines, Testing, Retrofit, Room, Paging, Navigation, LiveData, ViewModel" 66 | }, 67 | { 68 | "github_url": "https://github.com/fevziomurtekin/DeezerClone", 69 | "stack": "Dagger Hilt, Coroutines, Flow, Jetpack (Room, ViewModel,Navigation LiveData), Retrofit, Paging, Testing" 70 | }, 71 | { 72 | "github_url": "https://github.com/jnkforks/PokemonGo", 73 | "stack": "Dagger Hilt, Koin, Coroutines, RxJava, Testing, Retrofit, Room, WorkManager, Paging, LiveData, ViewModel" 74 | }, 75 | { 76 | "github_url": "https://github.com/andyb129/AppDevToolbox", 77 | "stack": "Dagger, Coroutines, RxJava, Room, Venom, LiveData, ViewModel" 78 | }, 79 | { 80 | "github_url": "https://github.com/nahzur-h/awaker", 81 | "stack": "RxJava, Testing, Retrofit, Room, ExoPlayer, LiveData, ViewModel" 82 | }, 83 | { 84 | "github_url": "https://github.com/theapache64/topcorn", 85 | "stack": "Dagger, Coroutines, Testing, Retrofit, Room, LiveData, ViewModel" 86 | }, 87 | { 88 | "github_url": "https://github.com/vmiklos/plees-tracker", 89 | "stack": "Room, LiveData, ViewModel" 90 | }, 91 | { 92 | "github_url": "https://github.com/Chesire/Nekome", 93 | "stack": "Dagger, Coroutines, Testing, Retrofit, Room, WorkManager, Navigation, LiveData, ViewModel" 94 | }, 95 | { 96 | "github_url": "https://github.com/ardakazanci/Heyyoo", 97 | "stack": "Coroutines, Retrofit, Room, Algolia, LocGetter, EasyValidation, Dexter, Splashy, secure-preferences, Paging, Data Binding, Navigation, LiveData, ViewModel" 98 | }, 99 | { 100 | "github_url": "https://github.com/lulululbj/wanandroid", 101 | "stack": "Koin, Coroutines, Testing, Retrofit, Navigation, FlowLayout, LiveData, ViewModel" 102 | }, 103 | { 104 | "github_url": "https://github.com/SIKV/Photos", 105 | "stack": "Dagger, Coroutines, RxJava, Testing, Retrofit, Room, Firestore, Firebase-ML, Firebase-Analytics, Paging, Navigation, LiveData, ViewModel" 106 | }, 107 | { 108 | "github_url": "https://github.com/ValterKasper/space-app", 109 | "stack": "Dagger, Coroutines, Testing, Retrofit, Room, WorkManager, Data Binding, Navigation, LiveData, ViewModel" 110 | }, 111 | { 112 | "github_url": "https://github.com/nominalista/expenses", 113 | "stack": "Dagger, Coroutines, RxJava, Testing, Retrofit, Room, Firestore, Firebase Auth, Firebase Messaging, WorkManager, Navigation, LiveData, ViewModel" 114 | }, 115 | { 116 | "github_url": "https://github.com/lmj0011/jetpack-release-tracker", 117 | "stack": "Coroutines, Testing, Fuel, Room, WorkManager, Data Binding, Navigation, LiveData, ViewModel" 118 | }, 119 | { 120 | "github_url": "https://github.com/willowtreeapps/vocable-android", 121 | "stack": "Koin, Coroutines, Testing, Room, Data Binding, AR, LiveData, ViewModel" 122 | }, 123 | { 124 | "github_url": "https://github.com/Shashank02051997/GitExplorer-Android", 125 | "stack": "LiveData, ViewModel" 126 | }, 127 | { 128 | "github_url": "https://github.com/VIPyinzhiwei/Eyepetizer", 129 | "stack": "Coroutines, Testing, Retrofit, WorkManager, GSYVideoPlayer, Data Binding, PermissionX, EventBus, LiveData, ViewModel" 130 | }, 131 | { 132 | "github_url": "https://github.com/PatilShreyas/Foodium", 133 | "stack": "Dagger Hilt, Coroutines, Testing, Retrofit, Room, LiveData, ViewModel" 134 | }, 135 | { 136 | "github_url": "https://github.com/michaldrabik/Showly-2.0", 137 | "stack": "Dagger, Coroutines, Testing, Retrofit, Room, Firebase Messaging, WorkManager, Navigation, Dynamicanimation, LiveData, ViewModel" 138 | }, 139 | { 140 | "github_url": "https://github.com/bernaferrari/ChangeDetection", 141 | "stack": "Dagger, Coroutines, RxJava, Retrofit, Room, Firestore, WorkManager, Paging, Data Binding, Navigation, JSoup, js-evaluator-for-android, LiveData, ViewModel" 142 | }, 143 | { 144 | "github_url": "https://github.com/YahiaAngelo/Noted-Android", 145 | "stack": "Koin dependency injection, Coroutines, Realm db, Material Components, Markdown, Navigation, LiveData, ViewModel" 146 | }, 147 | { 148 | "github_url": "https://github.com/igorescodro/alkaa", 149 | "stack": "Koin, Espresso, UiAutomator, Mockk, Coroutines, Navigation, Room, MotionLayout, KTX, Modularization, Dynamic Delivery, Dark Theme, klint, Detekt, codebeat, CodeFactor, Codacy, MPAndroidChart, Groupie, LiveData, ViewModel" 150 | }, 151 | { 152 | "github_url": "https://github.com/HariKulhari06/Covid-19-Tracker", 153 | "stack": "Dagger Hilt, Coroutines, Retrofit, Room, Firestore, WorkManager, Navigation, MPAndroidChart, LiveData, ViewModel" 154 | }, 155 | { 156 | "github_url": "https://github.com/zedlabs/WallPortal", 157 | "stack": "Dagger Hilt, Coroutines, Retrofit, Room, Paging, Navigation, LiveData, ViewModel" 158 | }, 159 | { 160 | "github_url": "https://github.com/ricknout/rugby-ranker", 161 | "stack": "Dagger Hilt, Coroutines, Testing, Retrofit, Room, WorkManager, Navigation, insetter, LiveData, ViewModel" 162 | }, 163 | { 164 | "github_url": "https://github.com/GeorgCantor/WallpaperApp", 165 | "stack": "Koin, Coroutines, Retrofit, Room, Lottie, Zoomy, Navigation, LiveData, ViewModel" 166 | }, 167 | { 168 | "github_url": "https://github.com/DheerajKotwani/GithubVisualizer", 169 | "stack": "Retrofit, Firebase Auth, Coroutines, LiveData, ViewModel" 170 | }, 171 | { 172 | "github_url": "https://github.com/PHELAT/Tedu", 173 | "stack": "Dagger, Room, Coroutines, Firebase Messaging, Navigation, LiveData, ViewModel" 174 | }, 175 | { 176 | "github_url": "https://github.com/abhinav0612/PasswordVault", 177 | "stack": "Dagger Hilt, Room, Navigation, LiveData, ViewModel" 178 | }, 179 | { 180 | "github_url": "https://github.com/TheCodeMonks/NYTimes-App", 181 | "stack": "Coroutines, Room, JSoup, Navigation, LiveData, ViewModel" 182 | }, 183 | { 184 | "github_url": "https://github.com/satyamurti/LetsChat", 185 | "stack": "Coroutines, Retrofit, Firestore, Firebase Auth, Firebase Messaging, Firebase Storage, Cloud Functions, Data Binding, Navigation, LiveData, ViewModel" 186 | }, 187 | { 188 | "github_url": "https://github.com/mayokunthefirst/Instant-Weather", 189 | "stack": "Dagger, Coroutines, Testing, Retrofit, Room, WorkManager, Paging, Data Binding, Navigation, Algolia Search, LiveData, ViewModel" 190 | }, 191 | { 192 | "github_url": "https://github.com/qingmei2/MVVM-Architecture", 193 | "stack": "Dagger Hilt, Coroutines, RxJava, Testing, Retrofit, Room, Paging, Navigation, LiveData, ViewModel" 194 | }, 195 | { 196 | "github_url": "https://github.com/nuhkoca/libbra", 197 | "stack": "Dagger, Coroutines, Testing, Retrofit, Data Binding, Navigation, LiveData, ViewModel" 198 | }, 199 | { 200 | "github_url": "https://github.com/adityam49/Updoot", 201 | "stack": "Dagger Hilt, Coroutines, Testing, Retrofit, Room, ExoPlayer, WorkManager, Data Binding, Navigation, LiveData, ViewModel, Compose" 202 | }, 203 | { 204 | "github_url": "https://github.com/weylar/Movie", 205 | "stack": "Dagger, Coroutines, Retrofit, Room, WorkManager, Paging, Data Binding, Navigation, LiveData, ViewModel" 206 | }, 207 | { 208 | "github_url": "https://github.com/xiaoyanger0825/wanandroid", 209 | "stack": "Coroutines, Retrofit, Room, LiveData, ViewModel" 210 | }, 211 | { 212 | "github_url": "https://github.com/gs-ts/TrackMyPath", 213 | "stack": "Koin, Coroutines, Testing, Retrofit, Room, LiveData, ViewModel" 214 | }, 215 | { 216 | "github_url": "https://github.com/KumarManas04/NotesSync", 217 | "stack": "Coroutines, Testing, Room, Google Drive, Dropbox, WorkManager, Navigation, LiveData, ViewModel" 218 | }, 219 | { 220 | "github_url": "https://github.com/CalvinNor/MovieMan/", 221 | "stack": "Koin, Coroutines, Testing, Retrofit, Room, Navigation, LiveData, ViewModel" 222 | }, 223 | { 224 | "github_url": "https://github.com/commonpepper/Photosen", 225 | "stack": "Retrofit, Room, Paging, LiveData, ViewModel" 226 | }, 227 | { 228 | "github_url": "https://github.com/OMIsie11/SpaceXFollower", 229 | "stack": "Koin, Coroutines, Testing, Retrofit, Room, WorkManager, MPAndroidChart, Navigation, LiveData, ViewModel" 230 | }, 231 | { 232 | "github_url": "https://github.com/dievskiy/feedapp", 233 | "stack": "Dagger, Coroutines, RxJava, Testing, Retrofit, Room, Firestore, Firebase Auth, Facebook Login, WorkManager, MPAndroidChart, Data Binding, Navigation, LiveData, ViewModel" 234 | }, 235 | { 236 | "github_url": "https://github.com/phicdy/MyCuration", 237 | "stack": "Koin, Coroutines, Testing, Retrofit, Jsoup, WorkManager, Data Binding, Navigation, LiveData, ViewModel" 238 | }, 239 | { 240 | "github_url": "https://github.com/droidconKE/droidconKE2020App", 241 | "stack": "Koin, Coroutines, Testing, Retrofit, Room, Google Auth, Data Binding, Navigation, LiveData, ViewModel" 242 | }, 243 | { 244 | "github_url": "https://github.com/fossasia/open-event-attendee-android", 245 | "stack": "Koin, RxJava, Testing, Retrofit, Room, Stripe, PayPal, Mapbox, Paging, Data Binding, Navigation, LiveData, ViewModel" 246 | }, 247 | { 248 | "github_url": "https://github.com/dangquanuet/The-Movie-DB-Kotlin", 249 | "stack": "Koin, Coroutines, RxJava, Testing, Retrofit, Room, Paging, Data Binding, Easy Permissions, Navigation, LiveData, ViewModel" 250 | }, 251 | { 252 | "github_url": "https://github.com/CharlieChristensen/Cryptotracker", 253 | "stack": "Dagger, Coroutines, Testing, socketIO, Retrofit, Room, MPAndroidChart, Navigation, LiveData, ViewModel" 254 | }, 255 | { 256 | "github_url": "https://github.com/haroldadmin/MoonShot", 257 | "stack": "Dagger, Coroutines, Testing, Retrofit, Room, WorkManager, Navigation, LiveData, ViewModel" 258 | }, 259 | { 260 | "github_url": "https://github.com/ganainy/Our_chat", 261 | "stack": "Coroutines, Retrofit, Room, Firestore, Firebase Auth, Firebase Messaging, Facebook Login, WorkManager, Dexter, Data Binding, Navigation, LiveData, ViewModel" 262 | }, 263 | { 264 | "github_url": "https://github.com/flexbooru/flexbooru", 265 | "stack": "Kodein, Coroutines, Testing, Retrofit, Room, WorkManager, Exoplayer, Navigation, Tikxml, LiveData, ViewModel" 266 | }, 267 | { 268 | "github_url": "https://github.com/flexbooru/flexbooru-ap", 269 | "stack": "Kodein, Coroutines, Retrofit, Room, WorkManager, Navigation, Markwon, LiveData, ViewModel" 270 | }, 271 | { 272 | "github_url": "https://github.com/gs-ts/BitfinexClient", 273 | "stack": "Koin, RxJava, Testing, Scarlet, Room, Data Binding, LiveData, ViewModel" 274 | }, 275 | { 276 | "github_url": "https://github.com/SoftwareEngineeringDaily/software-engineering-daily-android", 277 | "stack": "Koin, Coroutines, Testing, Retrofit, Room, WorkManager, Exoplayer, Navigation, Android-Permissions, LiveData, ViewModel" 278 | }, 279 | { 280 | "github_url": "https://github.com/GreyLabsDev/PexWalls", 281 | "stack": "Koin, Coroutines, RxJava, Retrofit, Room, Navigation, Markwon, LiveData, ViewModel" 282 | }, 283 | { 284 | "github_url": "https://github.com/iammert/AppLocker", 285 | "stack": "Dagger, RxJava, Room, WorkManager, Data Binding, RxPermissions, LiveData, ViewModel" 286 | }, 287 | { 288 | "github_url": "https://github.com/xiprox/Upgur", 289 | "stack": "Dagger, Retrofit, Room, WorkManager, Navigation, android-upload-service, LiveData, ViewModel" 290 | }, 291 | { 292 | "github_url": "https://github.com/AbduallahAtta/Social-Note", 293 | "stack": "Koin, RxJava, Room, Firestore, Firebase Auth, Firebase Storage, Firebase Messaging, WorkManager, Data Binding, Paging, LiveData, ViewModel" 294 | }, 295 | { 296 | "github_url": "https://github.com/kacperczyk-dev/ExchangeRateApp", 297 | "stack": "Dagger, Coroutines, Retrofit, Room, WorkManager, Data Binding, MPAndroidChart, Navigation, LiveData, ViewModel" 298 | }, 299 | { 300 | "github_url": "https://github.com/cuongpm/youtube-dl-android", 301 | "stack": "Dagger, RxJava, Testing, Retrofit, Room, Data Binding, LiveData, ViewModel" 302 | }, 303 | { 304 | "github_url": "https://github.com/PhilippeBoisney/ArchApp", 305 | "stack": "Koin, Coroutines, Testing, Retrofit, Room, Data Binding, Navigation, LiveData, ViewModel" 306 | }, 307 | { 308 | "github_url": "https://github.com/rumaan/file.io-Android-Client", 309 | "stack": "Testing, Fuel, Room, WorkManager, Navigation, PermissionsDispatcher, LiveData, ViewModel" 310 | }, 311 | { 312 | "github_url": "https://github.com/skydoves/Pokedex", 313 | "stack": "Dagger Hilt, Coroutines, Testing, Retrofit, Room, Data Binding, LiveData, ViewModel" 314 | }, 315 | { 316 | "github_url": "https://github.com/Wiqaytna-app/wiqaytna_android", 317 | "stack": "RxJava, Testing, Room, Firebase Storage, Firebase Auth, Firebase Messaging, Firebase Perf, Firebase Functions, Navigation, LiveData, ViewModel" 318 | }, 319 | { 320 | "github_url": "https://github.com/ZahraHeydari/MusicPlayer", 321 | "stack": "Koin, Testing, Room, Firebase Storage, Firebase Auth, Firebase Messaging, Firebase Perf, Firebase Functions, Navigation, LiveData, ViewModel" 322 | }, 323 | { 324 | "github_url": "https://github.com/google/iosched", 325 | "stack": "Dagger Hilt, Coroutines, Testing, Room, Firestore, Firebase Auth, Firebase Messaging, Firebase Functions, Navigation, ARCore, LiveData, ViewModel" 326 | }, 327 | { 328 | "github_url": "https://github.com/romannurik/muzei", 329 | "stack": "Coroutines, Testing, Retrofit, Room, Firebase Perf, WorkManager, Paging, Navigation, LiveData, ViewModel" 330 | }, 331 | { 332 | "github_url": "https://github.com/mozilla-mobile/fenix", 333 | "stack": "Coroutines, Testing, Retrofit, Room, Firebase Perf, WorkManager, Paging, Navigation, LiveData, ViewModel" 334 | }, 335 | { 336 | "github_url": "https://github.com/rumboalla/apkupdater", 337 | "stack": "Koin, JSoup, Navigation, LiveData, ViewModel" 338 | }, 339 | { 340 | "github_url": "https://github.com/VMadalin/android-modular-architecture", 341 | "stack": "Dagger, Coroutines, Testing, Retrofit, Room, Navigation, Paging, Data Binding, LiveData, ViewModel" 342 | }, 343 | { 344 | "github_url": "https://github.com/moezbhatti/qksms", 345 | "stack": "Dagger, Coroutines, RxJava, Testing, Retrofit, Realm, ExoPlayer, Conductor, Data Binding, ShortcutBadger, LiveData, ViewModel" 346 | }, 347 | { 348 | "github_url": "https://github.com/ApturiCOVID/apturicovid-android", 349 | "stack": "Dagger, Coroutines, RxJava, Testing, Retrofit, Room, WorkManager, Data Binding, ShortcutBadger, LiveData, ViewModel" 350 | }, 351 | { 352 | "github_url": "https://github.com/idisfkj/AwesomeGithub", 353 | "stack": "Coroutines, RxJava, Retrofit, Room, WorkManager, Paging, Navigation, Data Binding, ARouter, LiveData, ViewModel" 354 | }, 355 | { 356 | "github_url": "https://github.com/HabitRPG/habitica-android", 357 | "stack": "Dagger, Coroutines, RxJava, Retrofit, Realm, Firebase Messaging, Paging, Navigation, Facebook, FlowLayout, LiveData, ViewModel" 358 | }, 359 | { 360 | "github_url": "https://github.com/KhaledSherifSayed/PopularPeople", 361 | "stack": "Koin, Coroutines, Testing, Retrofit, Data Binding, Sandwich, LiveData, ViewModel" 362 | }, 363 | { 364 | "github_url": "https://github.com/alisonthemonster/Presently", 365 | "stack": "Dagger, Coroutines, RxJava, Testing, Room, Firebase Messaging, WorkManager, Dropbox, Calendar view, Paging, Biometric, LiveData, ViewModel" 366 | }, 367 | { 368 | "github_url": "https://github.com/fibelatti/raffler-kotlin", 369 | "stack": "Dagger, Coroutines, Testing, Room, LiveData, ViewModel" 370 | }, 371 | { 372 | "github_url": "https://github.com/sanmiAde/Yet_Another_Anime_List", 373 | "stack": "Dagger, RxJava, Testing using Fakes, MockWebserver, RxRetrofit, Room, Navigation Components, Lottie, LiveData, ViewModel" 374 | }, 375 | { 376 | "github_url": "https://github.com/OMIsie11/CovidNow", 377 | "stack": "Koin, Coroutines, Testing, Retrofit, Room, MPAndroidChart, LiveData, ViewModel" 378 | }, 379 | { 380 | "github_url": "https://github.com/KevinGitonga/TukoNewsClient", 381 | "stack": "Coroutines, Retrofit, Room, LiveData, ViewModel" 382 | }, 383 | { 384 | "github_url": "https://github.com/KevinGitonga/NewsFeed", 385 | "stack": "Coroutines, Retrofit, Room, Pretty Time, LiveData, ViewModel" 386 | }, 387 | { 388 | "github_url": "https://github.com/auron567/Gallerit", 389 | "stack": "Koin, Coroutines, Testing, Retrofit, Room, Navigation, Data Binding, LiveData, ViewModel" 390 | }, 391 | { 392 | "github_url": "https://github.com/enginebai/MovieHunt", 393 | "stack": "Koin, RxJava, Room, Paging, Navigation, Epoxy, LiveData, ViewModel" 394 | }, 395 | { 396 | "github_url": "https://github.com/Shivamdhuria/flows_guide", 397 | "stack": "Dagger Hilt, Coroutines, Flows, Retrofit, Room, Material Design Components, Navigation, LiveData, ViewModel" 398 | }, 399 | { 400 | "github_url": "https://github.com/rizmaulana/kotlin-mvvm-covid19", 401 | "stack": "LiveData, Koin, RxJava, RxBinding, Offline first with simple caching, Spek2Framwework for Unit Testing, etc" 402 | }, 403 | { 404 | "github_url": "https://github.com/Tristankluivert/Knote", 405 | "stack": "ViewModel, LiveData, Koin, Room db, Coroutines etc" 406 | }, 407 | { 408 | "github_url": "https://github.com/Devansh-Maurya/PukaPuka", 409 | "stack": "LiveData, ViewModel, Navigation Components, CameraKit, Firebase ML Kit Text Recognition API, Glide, Volley, Lottie" 410 | }, 411 | { 412 | "github_url": "https://github.com/fionicholas/Football-App", 413 | "stack": "LiveData, ViewModel, Retrofit, Room, Koin, RxJava, etc" 414 | }, 415 | { 416 | "github_url": "https://github.com/ryanrvldo/MovieCatalogue", 417 | "stack": "ViewModel, LiveData, Coroutines, Firebase Cloud Messaging, Retrofit, Room, Glide, Dagger Hilt, and Google Material." 418 | }, 419 | { 420 | "github_url": "https://github.com/mutualmobile/Praxis", 421 | "stack": "Dagger, Retrofit, Coroutines, RXJava2, ViewModel, Data Binding" 422 | }, 423 | { 424 | "github_url": "https://github.com/MindorksOpenSource/MVVM-Architecture-Android-Beginners", 425 | "stack": "Dagger, Coroutines, RXJava2, ViewModel, Data Binding, LiveData." 426 | }, 427 | { 428 | "github_url": "https://github.com/skydoves/Pokedex-AR", 429 | "stack": "Dagger Hilt, Coroutines, Retrofit, Room, ARCore, Sceneform, ViewModel, Data Binding, LiveData." 430 | }, 431 | { 432 | "github_url": "https://github.com/mrcsxsiq/Kotlin-Pokedex", 433 | "stack": "LiveData, Navigation Jetpack, ViewModel, Room, Gradle Kotlin DSL, Databinding, Retrofit, Koin and Ktlint" 434 | } 435 | ] 436 | }, 437 | { 438 | "pattern": "MVVM - Clean Architecture", 439 | "key": "$MVVM_CLEAN_ARCH_REPOS", 440 | "projects": [ 441 | { 442 | "github_url": "https://github.com/sanogueralorenzo/Android-Kotlin-Clean-Architecture", 443 | "stack": "Dagger Hilt, Testing, RxJava, Retrofit, AssistedInject, Epoxy, RxPaper, MvRx, ViewModel" 444 | }, 445 | { 446 | "github_url": "https://github.com/happysingh23828/Android-Clean-Architecture", 447 | "stack": "Dagger, Unit Testing for modules, Mockito, RxJava, Retrofit, Room, CI-CD, SOLID, Code Coverage, Jacoco, Detekt, ktlint, Stetho, LiveData, ViewModel" 448 | }, 449 | { 450 | "github_url": "https://github.com/igorwojda/android-showcase", 451 | "stack": "Kodein, Coroutines, Testing, Retrofit, KAndroid, Lottie, Detekt, Navigation, Dynamic Feature Modules, LiveData, ViewModel" 452 | }, 453 | { 454 | "github_url": "https://github.com/ferPrieto/Coroutines-Flows-Modularised", 455 | "stack": "Dagger, Coroutines, Testing, Retrofit, Data Binding, Navigation, LiveData, ViewModel" 456 | }, 457 | { 458 | "github_url": "https://github.com/akoufa/CoolWeather", 459 | "stack": "Dagger Hilt, Coroutines, Testing, Retrofit, Room, Navigation, LiveData, ViewModel" 460 | }, 461 | { 462 | "github_url": "https://github.com/odaridavid/Clean-MVVM-ArchComponents", 463 | "stack": "Koin, Coroutines, Testing, Retrofit, Room, Data Binding, Motion Layout, LiveData, ViewModel" 464 | }, 465 | { 466 | "github_url": "https://github.com/andremion/Theatre", 467 | "stack": "Dagger, RxJava, Testing, Retrofit, Room, Navigation, Data Binding, LiveData, ViewModel" 468 | }, 469 | { 470 | "github_url": "https://github.com/HamdiBoumaiza/CoronavirusWorldStatus", 471 | "stack": "Dagger, Coroutines, Retrofit, Room, LiveData, ViewModel , Stetho" 472 | }, 473 | { 474 | "github_url": "https://github.com/SmartToolFactory/PropertyFindAR", 475 | "stack": "RxJava3, Coroutines Flow, Retrofit, Room, Dagger Hilt, Dynamic Feature Modules, ConcatAdapter, LiveData, ViewModel, SavedStateHandle, WorkManager, Glide, Lottie, MpCharts, MockWebServer, MockK, FlowTestObserver, ktLint, detekt, Git Hooks, Git Flow" 476 | }, 477 | { 478 | "github_url": "https://github.com/sansets/android-clean-architecture", 479 | "stack": "Navigation Component, Dagger, Coroutines Flow, Room, Retrofit, LiveData, ViewModel, View Binding, Dynamic Feature Modules." 480 | }, 481 | { 482 | "github_url": "https://github.com/VladimirWrites/BLTaxi", 483 | "stack": "Koin, Retrofit, Room, Data Binding, LiveData, View Model, Work Manager, Material Components" 484 | }, 485 | { 486 | "github_url": "https://github.com/akhilesh0707/Rick-and-Morty", 487 | "stack": "Kotlin, Coroutines, Flow, Dagger-Hilt, Kotlin-DSL, LiveData, Lifecycle, ViewModel, Room, Navigation, Data Binding, Material-Components, Retrofit, OkHttp, Moshi, Timber, Glide" 488 | } 489 | ] 490 | }, 491 | { 492 | "pattern": "MVI - Normal", 493 | "key": "$MVI_NORMAL_REPOS", 494 | "projects": [ 495 | { 496 | "github_url": "https://github.com/HadySalhab/NewsFeed-MVI-Dagger", 497 | "stack": "Dagger, Coroutines, Testing, Retrofit, Room, WorkManager, Data Binding, Navigation, LiveData, ViewModel" 498 | }, 499 | { 500 | "github_url": "https://github.com/hoc081098/ComicReaderApp_MVI_Coroutine_RxKotlin_Jetpack", 501 | "stack": "Koin, Coroutines, RxJava, Retrofit, Room, Firestore, Firebase Auth, Firebase Storage, WorkManager, Navigation, Paging, LiveData, ViewModel" 502 | }, 503 | { 504 | "github_url": "https://github.com/R4md4c/GameDealz", 505 | "stack": "Dagger, Coroutines, Testing, Retrofit, Room, WorkManager, acra, fastAdapter, Paging, JSoup, dropbox/Store, LiveData, ViewModel" 506 | }, 507 | { 508 | "github_url": "https://github.com/mitchtabian/Open-API-Android-App", 509 | "stack": "Dagger, Coroutines, Retrofit, Room, Navigation, LiveData, ViewModel" 510 | } 511 | ] 512 | }, 513 | { 514 | "pattern": "MVI - Clean Architecture", 515 | "key": "$MVI_CLEAN_ARCH_REPOS", 516 | "projects": [ 517 | { 518 | "github_url": "https://github.com/lopspower/CleanRxArchitecture", 519 | "stack": "Dagger, RxJava, Retrofit, Room, Clean Architecture, LiveData, ViewModel" 520 | }, 521 | { 522 | "github_url": "https://github.com/mitchtabian/Clean-Notes", 523 | "stack": "Dagger, Coroutines, Testing, Retrofit, Room, Firestore, Firebase Auth, Navigation, Markdown Processor, LiveData, ViewModel" 524 | }, 525 | { 526 | "github_url": "https://github.com/Ezike/Baking-App-Kotlin", 527 | "stack": "Dagger hilt, Coroutines & StateFlow, Unit Testing, Retrofit, DFM Navigation, FlowBinding, Exoplayer" 528 | }, 529 | { 530 | "github_url": "https://github.com/Ezike/MVI_UIComponents", 531 | "stack": "Jetpack, Dagger hilt, Coroutines & StateFlow, Room, Retrofit, FlowBinding" 532 | } 533 | ] 534 | }, 535 | { 536 | "pattern": "MVP", 537 | "key": "$MVP_REPOS", 538 | "projects": [ 539 | { 540 | "github_url": "https://github.com/inorichi/tachiyomi", 541 | "stack": "Inorichi injekt, Coroutines, RxJava, Testing, Retrofit, DiskLruCache, Jsoup, WorkManager, Duktape Android, Conductor" 542 | }, 543 | { 544 | "github_url": "https://github.com/ImangazalievM/UTair-MVP-Sample", 545 | "stack": "Clean Architecture, Coroutines, RxJava 2, Coroutines, Toothpick, Moxy, Unit-tests (Spek, Mockk), UI-tests (Kaspresso)" 546 | } 547 | ] 548 | }, 549 | { 550 | "pattern": "Other", 551 | "key": "$OTHER_REPOS", 552 | "projects": [ 553 | { 554 | "github_url": "https://github.com/shadowsocks/shadowsocks-android", 555 | "stack": "Testing, Room, Firebase Ads, WorkManager" 556 | }, 557 | { 558 | "github_url": "https://github.com/DimaBrody/Screenaway", 559 | "stack": "Room, Play Install Referrer Library" 560 | }, 561 | { 562 | "github_url": "https://github.com/BijoySingh/Scarlet-Notes", 563 | "stack": "Dagger, Coroutines, Room, Firebase Auth, Firebase Database, Paging, Navigation, Evernote android-job, Facebook Litho, Facebook SoLoader, Biometric" 564 | } 565 | ] 566 | } 567 | ] 568 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'awesome-android-kotlin-apps' 2 | 3 | -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/App.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka 2 | 3 | import com.github.aaka.core.ReadMeGenerator 4 | import com.github.aaka.data.local.InputProjectCategory 5 | import com.github.aaka.data.local.Project 6 | import com.github.aaka.data.repo.GitHubRepo 7 | import com.github.aaka.data.repo.InputDataRepo 8 | import com.github.aaka.data.repo.ReadMeRepo 9 | import com.github.aaka.di.DaggerAppComponent 10 | import com.github.aaka.utils.DateTimeUtils 11 | import kotlinx.coroutines.runBlocking 12 | import retrofit2.HttpException 13 | import javax.inject.Inject 14 | import kotlin.system.exitProcess 15 | 16 | fun main(args: Array) = runBlocking { 17 | App().run() 18 | } 19 | 20 | class App { 21 | 22 | @Inject 23 | lateinit var githubRepo: GitHubRepo 24 | 25 | @Inject 26 | lateinit var inputDataRepo: InputDataRepo 27 | 28 | @Inject 29 | lateinit var readMeRepo: ReadMeRepo 30 | 31 | suspend fun run() { 32 | 33 | // Init DI first 34 | DaggerAppComponent 35 | .builder() 36 | .build() 37 | .inject(this) 38 | 39 | 40 | val inputProjectCategories = inputDataRepo.getInputProjectCategories() 41 | val totalInputProjectCount = inputProjectCategories.sumBy { it.inputProjects.size } 42 | val projectMap = getProjectsMap(inputProjectCategories) 43 | 44 | // This is to make sure that all project details are collected 45 | require(projectMap.size == totalInputProjectCount) { 46 | """ 47 | Expected $totalInputProjectCount but found only ${projectMap.size}. 48 | Failed to get some project details. 49 | """.trimIndent() 50 | } 51 | 52 | // Now let's go build the README.md 53 | val readMeModel = readMeRepo.getReadMeModel() 54 | val updatedReadMe = ReadMeGenerator.generateReadMe(readMeModel, inputProjectCategories, projectMap) 55 | readMeRepo.saveReadMe(updatedReadMe) 56 | println("Done!") 57 | exitProcess(0) 58 | } 59 | 60 | 61 | /** 62 | * To convert all projects into one single map with all details collected from GitHub API 63 | */ 64 | private suspend fun getProjectsMap(inputProjectCategories: List): Map { 65 | val projectsMap = mutableMapOf() 66 | 67 | for (projectCategory in inputProjectCategories) { 68 | for (inputProject in projectCategory.inputProjects) { 69 | 70 | val url = inputProject.githubUrl 71 | val s1 = url.split("/") 72 | 73 | val username = s1[3] 74 | val repoName = s1[4] 75 | 76 | try { 77 | val githubRepo = githubRepo.getRepo(username, repoName) 78 | val project = Project( 79 | githubRepo.name!!, 80 | githubRepo.htmlUrl!!, 81 | githubRepo.description, 82 | githubRepo.owner!!.login!!, 83 | githubRepo.owner.htmlUrl!!, 84 | Project.Reputation( 85 | githubRepo.forks!!, 86 | githubRepo.stargazersCount!!, 87 | githubRepo.subscribersCount!! 88 | ), 89 | DateTimeUtils.fromUtcToUtcMillis(githubRepo.pushedAt), 90 | inputProject.stack 91 | ) 92 | projectsMap[inputProject.githubUrl] = project 93 | println("Finished : ${inputProject.githubUrl} -> $project") 94 | } catch (e: HttpException) { 95 | println("Failed: ${inputProject.githubUrl}") 96 | throw e 97 | } 98 | } 99 | } 100 | 101 | return projectsMap 102 | } 103 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/core/ReadMeGenerator.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka.core 2 | 3 | import com.github.aaka.data.local.InputProjectCategory 4 | import com.github.aaka.data.local.Project 5 | import com.github.aaka.data.repo.ReadMeRepo 6 | import com.github.aaka.utils.DateTimeUtils 7 | import java.lang.StringBuilder 8 | import java.util.* 9 | 10 | object ReadMeGenerator { 11 | 12 | private val MODIFY_NOTICE = """ 13 | 14 | 15 | 20 | 21 | 22 | """.trimIndent() 23 | 24 | private const val KEY_LAST_UPDATED = "\$LAST_UPDATED" 25 | private const val KEY_APPS_COUNT = "\$APPS_COUNT" 26 | 27 | fun generateReadMe( 28 | _readMeModel: String, 29 | inputProjectCategories: List, 30 | projectMap: Map 31 | ): String { 32 | 33 | var readMeModel = _readMeModel 34 | 35 | 36 | for (category in inputProjectCategories) { 37 | val tableBuilder = StringBuilder( 38 | """ 39 | | Name | Author ✍️ | Description 🗒️ | Reputation 💪 | 40 | |--------------------------------------------------|-------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------| 41 | """.trimIndent() 42 | ) 43 | 44 | // Sorting project by last commit 45 | category.inputProjects = 46 | category.inputProjects.sortedByDescending { projectMap[it.githubUrl]?.lastCommitInUtcMillis } 47 | 48 | for (inputProject in category.inputProjects) { 49 | 50 | val project = 51 | projectMap[inputProject.githubUrl] ?: error("Couldn't find ${inputProject.githubUrl} in projectMap") 52 | 53 | var description = "" 54 | if (project.description != null) { 55 | description = project.description 56 | } 57 | 58 | if (project.stack != null) { 59 | description += "

Tech Stack : ${project.stack} " 60 | } 61 | 62 | description += "

Last commit: ${DateTimeUtils.getRelativeTimeSpan(project.lastCommitInUtcMillis)}" 63 | 64 | tableBuilder.append( 65 | """ 66 | 67 | | [${ 68 | project.repo.replace( 69 | "_", 70 | "-" 71 | ) 72 | }](${project.repoUrl}) | [${project.owner}](${project.ownerUrl}) | $description | 🌟 ${project.reputation.stars}
🍴 ${project.reputation.fork}
👁️ ${project.reputation.watchers} | 73 | """.trimIndent() 74 | ) 75 | } 76 | 77 | readMeModel = readMeModel.replace(category.key, tableBuilder.toString()) 78 | } 79 | 80 | 81 | readMeModel = MODIFY_NOTICE + readMeModel 82 | // Add last updated date 83 | .replace(KEY_LAST_UPDATED, Date().toString()) 84 | // Update total apps count 85 | .replace(KEY_APPS_COUNT, projectMap.size.toString()) + MODIFY_NOTICE 86 | 87 | 88 | 89 | return readMeModel 90 | } 91 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/data/local/InputProjectCategory.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka.data.local 2 | 3 | import com.squareup.moshi.JsonClass 4 | 5 | import com.squareup.moshi.Json 6 | 7 | 8 | @JsonClass(generateAdapter = true) 9 | data class InputProjectCategory( 10 | @Json(name = "key") 11 | val key: String, // $OTHER_REPOS 12 | @Json(name = "pattern") 13 | val pattern: String, // Other 14 | @Json(name = "projects") 15 | var inputProjects: List 16 | ) { 17 | @JsonClass(generateAdapter = true) 18 | data class InputProject( 19 | @Json(name = "github_url") 20 | val githubUrl: String, // https://github.com/shadowsocks/shadowsocks-android 21 | @Json(name = "stack") 22 | val stack: String? // Testing, Room, Firebase Ads, WorkManager 23 | ) 24 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/data/local/Project.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka.data.local 2 | 3 | import com.squareup.moshi.JsonClass 4 | import com.squareup.moshi.Json 5 | 6 | @JsonClass(generateAdapter = true) 7 | data class Project( 8 | @Json(name = "repo") 9 | val repo: String, // NotyKT 10 | @Json(name = "repo_url") 11 | val repoUrl: String, // https://github.com/PatilShreyas/NotyKT 12 | @Json(name = "description") 13 | val description: String?, // NotyKT is a complete Kotlin-stack (Backend + Android) application built to demonstrate the use of Modern development tools with best practices implementation. 14 | @Json(name = "owner") 15 | val owner: String, // PatilShreyas 16 | @Json(name = "owner_url") 17 | val ownerUrl: String, // https://github.com/PatilShreyas 18 | @Json(name = "reputation") 19 | val reputation: Reputation, 20 | @Json(name = "lastCommitInUtcMillis") 21 | val lastCommitInUtcMillis: Long?, 22 | @Json(name = "stack") 23 | val stack: String? // This is stack information 24 | ) { 25 | @JsonClass(generateAdapter = true) 26 | data class Reputation( 27 | @Json(name = "fork") 28 | val fork: Int, // 2 29 | @Json(name = "stars") 30 | val stars: Int, // 12 31 | @Json(name = "watchers") 32 | val watchers: Int // 2 33 | ) 34 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/data/remote/GetRepoResponse.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka.data.remote 2 | import com.squareup.moshi.JsonClass 3 | 4 | import com.squareup.moshi.Json 5 | 6 | 7 | @JsonClass(generateAdapter = true) 8 | data class GetRepoResponse( 9 | @Json(name = "archive_url") 10 | val archiveUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/{archive_format}{/ref} 11 | @Json(name = "archived") 12 | val archived: Boolean?, // false 13 | @Json(name = "assignees_url") 14 | val assigneesUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/assignees{/user} 15 | @Json(name = "blobs_url") 16 | val blobsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/git/blobs{/sha} 17 | @Json(name = "branches_url") 18 | val branchesUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/branches{/branch} 19 | @Json(name = "clone_url") 20 | val cloneUrl: String?, // https://github.com/androiddevnotes/awesome-jetpack-compose-android-apps.git 21 | @Json(name = "collaborators_url") 22 | val collaboratorsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/collaborators{/collaborator} 23 | @Json(name = "comments_url") 24 | val commentsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/comments{/number} 25 | @Json(name = "commits_url") 26 | val commitsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/commits{/sha} 27 | @Json(name = "compare_url") 28 | val compareUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/compare/{base}...{head} 29 | @Json(name = "contents_url") 30 | val contentsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/contents/{+path} 31 | @Json(name = "contributors_url") 32 | val contributorsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/contributors 33 | @Json(name = "created_at") 34 | val createdAt: String?, // 2020-08-28T19:50:05Z 35 | @Json(name = "default_branch") 36 | val defaultBranch: String?, // master 37 | @Json(name = "deployments_url") 38 | val deploymentsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/deployments 39 | @Json(name = "description") 40 | val description: String?, // [Hacktoberfest] 👓 A curated list of awesome Jetpack Compose android apps by open-source contributors. 41 | @Json(name = "disabled") 42 | val disabled: Boolean?, // false 43 | @Json(name = "downloads_url") 44 | val downloadsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/downloads 45 | @Json(name = "events_url") 46 | val eventsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/events 47 | @Json(name = "fork") 48 | val fork: Boolean?, // false 49 | @Json(name = "forks") 50 | val forks: Int?, // 9 51 | @Json(name = "forks_count") 52 | val forksCount: Int?, // 9 53 | @Json(name = "forks_url") 54 | val forksUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/forks 55 | @Json(name = "full_name") 56 | val fullName: String?, // androiddevnotes/awesome-jetpack-compose-android-apps 57 | @Json(name = "git_commits_url") 58 | val gitCommitsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/git/commits{/sha} 59 | @Json(name = "git_refs_url") 60 | val gitRefsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/git/refs{/sha} 61 | @Json(name = "git_tags_url") 62 | val gitTagsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/git/tags{/sha} 63 | @Json(name = "git_url") 64 | val gitUrl: String?, // git://github.com/androiddevnotes/awesome-jetpack-compose-android-apps.git 65 | @Json(name = "has_downloads") 66 | val hasDownloads: Boolean?, // true 67 | @Json(name = "has_issues") 68 | val hasIssues: Boolean?, // true 69 | @Json(name = "has_pages") 70 | val hasPages: Boolean?, // false 71 | @Json(name = "has_projects") 72 | val hasProjects: Boolean?, // true 73 | @Json(name = "has_wiki") 74 | val hasWiki: Boolean?, // true 75 | @Json(name = "homepage") 76 | val homepage: String?, 77 | @Json(name = "hooks_url") 78 | val hooksUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/hooks 79 | @Json(name = "html_url") 80 | val htmlUrl: String?, // https://github.com/androiddevnotes/awesome-jetpack-compose-android-apps 81 | @Json(name = "id") 82 | val id: Int?, // 291133502 83 | @Json(name = "issue_comment_url") 84 | val issueCommentUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/issues/comments{/number} 85 | @Json(name = "issue_events_url") 86 | val issueEventsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/issues/events{/number} 87 | @Json(name = "issues_url") 88 | val issuesUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/issues{/number} 89 | @Json(name = "keys_url") 90 | val keysUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/keys{/key_id} 91 | @Json(name = "labels_url") 92 | val labelsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/labels{/name} 93 | @Json(name = "language") 94 | val language: String?, // Kotlin 95 | @Json(name = "languages_url") 96 | val languagesUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/languages 97 | @Json(name = "license") 98 | val license: Any?, // null 99 | @Json(name = "merges_url") 100 | val mergesUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/merges 101 | @Json(name = "milestones_url") 102 | val milestonesUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/milestones{/number} 103 | @Json(name = "mirror_url") 104 | val mirrorUrl: Any?, // null 105 | @Json(name = "name") 106 | val name: String?, // awesome-jetpack-compose-android-apps 107 | @Json(name = "network_count") 108 | val networkCount: Int?, // 9 109 | @Json(name = "node_id") 110 | val nodeId: String?, // MDEwOlJlcG9zaXRvcnkyOTExMzM1MDI= 111 | @Json(name = "notifications_url") 112 | val notificationsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/notifications{?since,all,participating} 113 | @Json(name = "open_issues") 114 | val openIssues: Int?, // 1 115 | @Json(name = "open_issues_count") 116 | val openIssuesCount: Int?, // 1 117 | @Json(name = "owner") 118 | val owner: Owner?, 119 | @Json(name = "private") 120 | val `private`: Boolean?, // false 121 | @Json(name = "pulls_url") 122 | val pullsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/pulls{/number} 123 | @Json(name = "pushed_at") 124 | val pushedAt: String?, // 2020-10-16T19:33:59Z 125 | @Json(name = "releases_url") 126 | val releasesUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/releases{/id} 127 | @Json(name = "size") 128 | val size: Int?, // 408 129 | @Json(name = "ssh_url") 130 | val sshUrl: String?, // git@github.com:androiddevnotes/awesome-jetpack-compose-android-apps.git 131 | @Json(name = "stargazers_count") 132 | val stargazersCount: Int?, // 83 133 | @Json(name = "stargazers_url") 134 | val stargazersUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/stargazers 135 | @Json(name = "statuses_url") 136 | val statusesUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/statuses/{sha} 137 | @Json(name = "subscribers_count") 138 | val subscribersCount: Int?, // 1 139 | @Json(name = "subscribers_url") 140 | val subscribersUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/subscribers 141 | @Json(name = "subscription_url") 142 | val subscriptionUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/subscription 143 | @Json(name = "svn_url") 144 | val svnUrl: String?, // https://github.com/androiddevnotes/awesome-jetpack-compose-android-apps 145 | @Json(name = "tags_url") 146 | val tagsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/tags 147 | @Json(name = "teams_url") 148 | val teamsUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/teams 149 | @Json(name = "temp_clone_token") 150 | val tempCloneToken: Any?, // null 151 | @Json(name = "trees_url") 152 | val treesUrl: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps/git/trees{/sha} 153 | @Json(name = "updated_at") 154 | val updatedAt: String?, // 2020-11-06T09:30:05Z 155 | @Json(name = "url") 156 | val url: String?, // https://api.github.com/repos/androiddevnotes/awesome-jetpack-compose-android-apps 157 | @Json(name = "watchers") 158 | val watchers: Int?, // 83 159 | @Json(name = "watchers_count") 160 | val watchersCount: Int? // 83 161 | ) { 162 | @JsonClass(generateAdapter = true) 163 | data class Owner( 164 | @Json(name = "avatar_url") 165 | val avatarUrl: String?, // https://avatars2.githubusercontent.com/u/66256957?v=4 166 | @Json(name = "events_url") 167 | val eventsUrl: String?, // https://api.github.com/users/androiddevnotes/events{/privacy} 168 | @Json(name = "followers_url") 169 | val followersUrl: String?, // https://api.github.com/users/androiddevnotes/followers 170 | @Json(name = "following_url") 171 | val followingUrl: String?, // https://api.github.com/users/androiddevnotes/following{/other_user} 172 | @Json(name = "gists_url") 173 | val gistsUrl: String?, // https://api.github.com/users/androiddevnotes/gists{/gist_id} 174 | @Json(name = "gravatar_id") 175 | val gravatarId: String?, 176 | @Json(name = "html_url") 177 | val htmlUrl: String?, // https://github.com/androiddevnotes 178 | @Json(name = "id") 179 | val id: Int?, // 66256957 180 | @Json(name = "login") 181 | val login: String?, // androiddevnotes 182 | @Json(name = "node_id") 183 | val nodeId: String?, // MDQ6VXNlcjY2MjU2OTU3 184 | @Json(name = "organizations_url") 185 | val organizationsUrl: String?, // https://api.github.com/users/androiddevnotes/orgs 186 | @Json(name = "received_events_url") 187 | val receivedEventsUrl: String?, // https://api.github.com/users/androiddevnotes/received_events 188 | @Json(name = "repos_url") 189 | val reposUrl: String?, // https://api.github.com/users/androiddevnotes/repos 190 | @Json(name = "site_admin") 191 | val siteAdmin: Boolean?, // false 192 | @Json(name = "starred_url") 193 | val starredUrl: String?, // https://api.github.com/users/androiddevnotes/starred{/owner}{/repo} 194 | @Json(name = "subscriptions_url") 195 | val subscriptionsUrl: String?, // https://api.github.com/users/androiddevnotes/subscriptions 196 | @Json(name = "type") 197 | val type: String?, // User 198 | @Json(name = "url") 199 | val url: String? // https://api.github.com/users/androiddevnotes 200 | ) 201 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/data/remote/GitHubApi.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka.data.remote 2 | 3 | import retrofit2.http.GET 4 | import retrofit2.http.Header 5 | import retrofit2.http.Path 6 | 7 | interface GitHubApi { 8 | 9 | @GET("repos/{username}/{repo}") 10 | suspend fun getRepo( 11 | @Header("Authorization") authToken: String, 12 | @Path("username") username: String, 13 | @Path("repo") repo: String, 14 | @Header("Accept") accept: String = "application/vnd.github.v3+json" 15 | ): GetRepoResponse 16 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/data/repo/GitHubRepo.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka.data.repo 2 | 3 | import com.github.aaka.data.remote.GitHubApi 4 | import com.github.aaka.data.remote.GetRepoResponse 5 | import javax.inject.Inject 6 | 7 | class GitHubRepo @Inject constructor( 8 | val gitHubApi: GitHubApi 9 | ) { 10 | 11 | suspend fun getRepo(username: String, repoName: String): GetRepoResponse { 12 | val githubToken = System.getenv("GITHUB_ACCESS_TOKEN") 13 | return gitHubApi.getRepo( 14 | authToken = "token $githubToken", 15 | username = username, 16 | repo = repoName 17 | ) 18 | } 19 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/data/repo/InputDataRepo.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka.data.repo 2 | 3 | import com.github.aaka.data.local.InputProjectCategory 4 | import com.squareup.moshi.Moshi 5 | import com.squareup.moshi.Types 6 | import java.io.File 7 | import javax.inject.Inject 8 | 9 | class InputDataRepo @Inject constructor( 10 | val moshi: Moshi 11 | ) { 12 | 13 | /** 14 | * Get input projects 15 | */ 16 | fun getInputProjectCategories(): List { 17 | // Parsing data 18 | val dataJson = File("input_data.json").readText() 19 | val dataItemListType = Types.newParameterizedType(List::class.java, InputProjectCategory::class.java) 20 | val inputDataAdapter = moshi.adapter>(dataItemListType) 21 | return inputDataAdapter.fromJson(dataJson)!! 22 | /*.map { 23 | it.copy( 24 | inputProjects = if (it.inputProjects.size > 5) { 25 | it.inputProjects.subList(0, 2) 26 | } else { 27 | it.inputProjects.subList(0, 1) 28 | } 29 | ) 30 | }*/ 31 | } 32 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/data/repo/ReadMeRepo.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka.data.repo 2 | 3 | import java.io.File 4 | import javax.inject.Inject 5 | 6 | class ReadMeRepo @Inject constructor() { 7 | fun getReadMeModel(): String { 8 | return File("README.model.md").readText() 9 | } 10 | 11 | fun saveReadMe(readMe: String) { 12 | File("README.md").writeText(readMe) 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/di/AppComponent.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka.di 2 | 3 | import com.github.aaka.App 4 | import com.github.aaka.di.modules.MoshiModule 5 | import com.github.aaka.di.modules.NetworkModule 6 | import dagger.Component 7 | import javax.inject.Singleton 8 | 9 | @Component( 10 | modules = [ 11 | NetworkModule::class, 12 | MoshiModule::class 13 | ] 14 | ) 15 | @Singleton 16 | interface AppComponent { 17 | fun inject(app: App) 18 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/di/modules/MoshiModule.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka.di.modules 2 | 3 | import com.squareup.moshi.Moshi 4 | import dagger.Module 5 | import dagger.Provides 6 | 7 | @Module 8 | class MoshiModule { 9 | 10 | @Provides 11 | fun provideMoshi(): Moshi { 12 | return Moshi.Builder().build() 13 | } 14 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/di/modules/NetworkModule.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka.di.modules 2 | 3 | import com.github.aaka.data.remote.GitHubApi 4 | import dagger.Module 5 | import dagger.Provides 6 | import okhttp3.OkHttpClient 7 | import okhttp3.logging.HttpLoggingInterceptor 8 | import retrofit2.Retrofit 9 | import retrofit2.converter.moshi.MoshiConverterFactory 10 | import javax.inject.Singleton 11 | 12 | @Module 13 | class NetworkModule { 14 | 15 | @Singleton 16 | @Provides 17 | fun provideLogger(): HttpLoggingInterceptor { 18 | return HttpLoggingInterceptor() 19 | .setLevel(HttpLoggingInterceptor.Level.NONE) 20 | } 21 | 22 | @Singleton 23 | @Provides 24 | fun provideOkHttpClient(httpLoggingInterceptor: HttpLoggingInterceptor): OkHttpClient { 25 | return OkHttpClient.Builder() 26 | .addInterceptor(httpLoggingInterceptor) 27 | .build() 28 | } 29 | 30 | @Singleton 31 | @Provides 32 | fun provideGithubApi(okHttpClient: OkHttpClient): GitHubApi { 33 | return Retrofit.Builder() 34 | .client(okHttpClient) 35 | .baseUrl("https://api.github.com/") 36 | .addConverterFactory(MoshiConverterFactory.create()) 37 | .build() 38 | .create(GitHubApi::class.java) 39 | } 40 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/tasks/convert/MarkdownToJsonConvertor.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka.tasks.convert 2 | 3 | import java.lang.StringBuilder 4 | 5 | val input = """ 6 | 7 | - https://github.com/shadowsocks/shadowsocks-android 8 | 9 | - A shadowsocks client for Android 10 | 11 | - Tech Stack = Testing, Room, Firebase Ads, WorkManager 12 | 13 | 14 | - https://github.com/BijoySingh/Scarlet-Notes 15 | 16 | - Simple yet powerful rich note taking android application, with a lot of flexibilty of usage 17 | 18 | 19 | - Tech Stack = Dagger, Coroutines, Room, Firebase Auth, Firebase Database, Paging, Navigation, Evernote android-job, Facebook Litho, Facebook SoLoader, Biometric 20 | 21 | 22 | 23 | """.trimIndent() 24 | 25 | private val urlRegEx = "(?https:\\/\\/github\\.com\\/.+?\\/.+)".toRegex() 26 | private val techStackRegEx = "Tech Stack = (?.+)".toRegex() 27 | 28 | fun main(args: Array) { 29 | 30 | // Parsing URL 31 | val urlResults = urlRegEx.findAll(input) 32 | val urls = mutableListOf() 33 | for (url in urlResults) { 34 | urls.add(url.value) 35 | } 36 | 37 | // Parsing Stack 38 | val stackResults = techStackRegEx.findAll(input) 39 | val stacks = mutableListOf() 40 | for (stack in stackResults) { 41 | stacks.add(stack.value) 42 | } 43 | 44 | // Checking data integrity 45 | require(stacks.size == urls.size) { "Failed" } 46 | 47 | // Creating JSON 48 | val sb = StringBuilder() 49 | for ((index, url) in urls.withIndex()) { 50 | val stack = stacks[index] 51 | val project = """ 52 | { 53 | "github_url": "$url", 54 | "stack": "${stack.split("=")[1].trim()}" 55 | }, 56 | """.trimIndent() 57 | sb.append(project) 58 | } 59 | 60 | // Printing JSON 61 | println(sb) 62 | 63 | } -------------------------------------------------------------------------------- /src/main/kotlin/com/github/aaka/utils/DateTimeUtils.kt: -------------------------------------------------------------------------------- 1 | package com.github.aaka.utils 2 | 3 | import org.ocpsoft.prettytime.PrettyTime 4 | import java.text.SimpleDateFormat 5 | import java.util.* 6 | 7 | object DateTimeUtils { 8 | 9 | /** 10 | * To convert UTC time string to UTC millis 11 | */ 12 | fun fromUtcToUtcMillis(updatedAt: String?): Long? { 13 | if (updatedAt == null) { 14 | return null 15 | } 16 | 17 | return utcFormat.parse(updatedAt).time 18 | } 19 | 20 | fun getRelativeTimeSpan(lastCommitInUtcMillis: Long?): String { 21 | if (lastCommitInUtcMillis == null) { 22 | return "Unknown" 23 | } 24 | 25 | return PrettyTime().format(Date(lastCommitInUtcMillis)) 26 | } 27 | 28 | private val utcFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault()).apply { 29 | timeZone = TimeZone.getTimeZone("UTC") 30 | } 31 | } -------------------------------------------------------------------------------- /stale_outputs_checked: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bandhan-singh-katoch/awesome-android-kotlin-apps/03a112f76de56064a0aa4efee568d28dc514bf7f/stale_outputs_checked -------------------------------------------------------------------------------- /test.file: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Bandhan-singh-katoch/awesome-android-kotlin-apps/03a112f76de56064a0aa4efee568d28dc514bf7f/test.file --------------------------------------------------------------------------------