{"id":19345807,"url":"https://github.com/timtbdev/Android-Portfolio-App-2","last_synced_at":"2025-04-23T04:36:35.230Z","repository":{"id":122640899,"uuid":"198095052","full_name":"timtbdev/Android-Portfolio-App-2","owner":"timtbdev","description":"🤖 Portfolio App 2.0 | Kotlin | MVVM | Android Jetpack","archived":false,"fork":false,"pushed_at":"2019-10-26T18:11:00.000Z","size":37063,"stargazers_count":51,"open_issues_count":1,"forks_count":18,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-02T08:22:49.929Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://ioco-5c746.web.app/a/","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/timtbdev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-21T19:07:39.000Z","updated_at":"2025-03-06T16:24:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"df75ae44-3659-460c-8607-75acb3d36e39","html_url":"https://github.com/timtbdev/Android-Portfolio-App-2","commit_stats":null,"previous_names":["timtbdev/android-portfolio-app-2"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timtbdev%2FAndroid-Portfolio-App-2","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timtbdev%2FAndroid-Portfolio-App-2/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timtbdev%2FAndroid-Portfolio-App-2/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/timtbdev%2FAndroid-Portfolio-App-2/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/timtbdev","download_url":"https://codeload.github.com/timtbdev/Android-Portfolio-App-2/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":250372465,"owners_count":21419719,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T04:08:04.961Z","updated_at":"2025-04-23T04:36:35.202Z","avatar_url":"https://github.com/timtbdev.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Portfolio [![Kotlin Version](https://img.shields.io/badge/kotlin-1.3.41-blue.svg)](https://kotlinlang.org) [![API](https://img.shields.io/badge/API-21%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=21) [![Ktlint](https://camo.githubusercontent.com/5652fd33142bf88d0f46018325126931fe65d01d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f636f64652532307374796c652d2545322539442541342d4646343038312e737667)](https://github.com/pinterest/ktlint) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://opensource.org/licenses/Apache-2.0)\n\n\u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/app_icon_new.png?alt=media\u0026token=2ccaa4c8-081d-40e4-9de9-cf08486b6c13\" align=\"left\" width=\"150\" hspace=\"10\" vspace=\"10\"\u003e\n👋Hello, My name is Tumur Bazarragchaa and you can call me Alex. \nI'm an Android Developer, specializing in the user interface, and with three years of experience in Kotlin, Java. \nI've published two Kotlin Android apps and up to date with the latest technologies such as Android Jetpack Components and Kotlin Coroutines. I built this app to show my skills and passion for design and development. \u003c/br\u003e\n\u003ca href=\"https://tumur.me/about.html\" taget=\"_blank\"\u003eYou can read more about me here\u003c/a\u003e\u003cbr/\u003e\u003c/br\u003e\n\u003ci\u003ePs: This is a result of what I've learned during my learning of Kotlin, Android Jetpack, Material Design components, and Firebase, Google Cloud Functions. I tried to implement as many as possible best practices from the Android community and I'm very thankful to everyone who shared their valuable knowledge and experience through social media and blog posts.\u003c/i\u003e\n\u003cbr/\u003e\n\u003cdiv style=\"display:flex;\" \u003e\n\u003ca target=\"_blank\" href=\"https://play.google.com/store/apps/details?id=me.tumur.portfolio\"\u003e\n    \u003cimg alt=\"Get it on Google Play\"\n        height=\"80\"\n        src=\"https://play.google.com/intl/en_us/badges/images/generic/en_badge_web_generic.png\" /\u003e\n\u003c/a\u003e\n\u003ca target=\"_blank\" href=\"https://tumur.me\"\u003e\n    \u003cimg alt=\"Visit Web\"\n        height=\"80\"\n        src=\"https://firebasestorage.googleapis.com/v0/b/ioco-5c746.appspot.com/o/visit_web.png?alt=media\u0026token=c2c56c2e-f891-4761-b430-731840eda9a0\" /\u003e\n\u003c/a\u003e\n\u003c/div\u003e\n\n## 📽️ PREVIEW\n[![Portfolio App 2.0](https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/screenshots%2Fportfolio2.0%2Fyoutube.png?alt=media\u0026token=ba66ef7c-2e8e-4bb8-975b-061a764fc0b9)](https://youtu.be/YjVJyqcv5I8 \"Portfolio App 2.0 - Click to Watch!\")\n\n## 📸 SCREENSHOTS\n\u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/screenshots%2Fportfolio1.2%2Fs-01.jpg?alt=media\u0026token=18d7c84c-c2c1-43b1-8b61-fb975a86ed01\" width=\"250\"/\u003e \u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/screenshots%2Fportfolio1.2%2Fs-02.jpg?alt=media\u0026token=68fec153-29be-4fd4-b974-bd9e13db4e58\" width=\"250\"/\u003e \u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/screenshots%2Fportfolio1.2%2Fs-03.jpg?alt=media\u0026token=cfb5bae0-e8b8-4f0e-8b41-e7b375592750\" width=\"250\"/\u003e\n\u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/screenshots%2Fportfolio1.2%2Fs-04.jpg?alt=media\u0026token=a85353fa-9e66-4fea-ac43-acff3bb1d501\" width=\"250\"/\u003e \u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/screenshots%2Fportfolio1.2%2Fs-05.jpg?alt=media\u0026token=2253acd9-849b-4e8b-821b-a2aef4bd08cf\" width=\"250\"/\u003e \u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/screenshots%2Fportfolio1.2%2Fs-06.jpg?alt=media\u0026token=3a66bf8e-c2f2-4190-a427-047b94c70019\" width=\"250\"/\u003e\n\u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/screenshots%2Fportfolio1.2%2Fs-08.jpg?alt=media\u0026token=839efa39-3d0e-493e-80e8-299195a16d2d\" width=\"250\"/\u003e \u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/screenshots%2Fportfolio1.2%2Fs-09.jpg?alt=media\u0026token=499a8499-e705-4e96-97da-daf41f6bb3ff\" width=\"250\"/\u003e \u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/screenshots%2Fportfolio1.2%2Fs-10.jpg?alt=media\u0026token=6be3e292-d77e-46ef-971d-92bdc6009dd9\" width=\"250\"/\u003e\n\u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/screenshots%2Fportfolio1.2%2Fs-11.jpg?alt=media\u0026token=c918df19-2bcf-4fd0-8d07-9197d80a5bac\" width=\"250\"/\u003e \u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/screenshots%2Fportfolio1.2%2Fs-12.jpg?alt=media\u0026token=d4f0e6f6-6b0a-4272-adc5-145f3d4d33c6\" width=\"250\"/\u003e \u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/screenshots%2Fportfolio1.2%2Fs-14.jpg?alt=media\u0026token=0677ccb3-bd6a-46d6-808a-9a51516a9169\" width=\"250\"/\u003e\n\n\n## 🚀 ANDROID JETPACK COMPONENTS\n\u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/jetpack.jpg?alt=media\u0026token=4dbbcaa6-1c08-488f-a1f4-e3c9af453c31\"/\u003e\n\n| Android Foundation | Architecture Components | Behavior | UI |\n|:-------------------|:------------------------|:---------|:---------|\n|[Appcompat](https://bit.ly/2NuMMK8)|[Data Binding](https://bit.ly/2GIx8KE)|[Media \u0026 Playback](https://bit.ly/2IAx3tY)|[Animations and Transitions](https://bit.ly/2N029tx)|\n|[Android KTX](https://bit.ly/2EtrEB6)|[LiveData](https://bit.ly/2IAnewp)|[Notifications](https://bit.ly/2BQyjmZ)|[Emoji](https://bit.ly/2GZqSgQ)|\n|[Multidex](https://bit.ly/2qnmlL1)|[Lifecycles](https://bit.ly/2E7ackq)|[Permissions](https://bit.ly/2x4HKiW)|[Constraint Layout](https://bit.ly/2tBwOVu)|\n|[Test](https://bit.ly/2GIIOgo)|[Navigation](https://bit.ly/2NLl1MC)|[Preferences](https://bit.ly/2TcvKWl)|[Motion Layout](https://bit.ly/2Nsdsec)|\n||[Paging](https://bit.ly/2IAnVWx)|[Sharing](https://bit.ly/2N6AhTX)|[Fragment](https://bit.ly/2LKTfPd)|\n||[Room](https://bit.ly/2lXfwOX)|[Slices](https://bit.ly/2tALpjL)|[View Pager](https://bit.ly/2ThCMJm)|\n||[ViewModel](https://bit.ly/2H0vRh3)||[Material Theming](https://bit.ly/2NpMeVH)|\n||[Work Manager](https://bit.ly/2EtEaAm)||[Material Design Guideline](https://bit.ly/2VdJ6io)|\n||||[Android Accessibility Guideline](https://bit.ly/2AfIFvN)|\n||||[Google Play Instant App](https://bit.ly/2OEkwVy)|\n\n## 📐 ARCHITECTURE\n\u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/mvvm.jpg?alt=media\u0026token=dd306811-892c-437d-a9eb-fc24abe16110\"/\u003e\n\n## 📊 FEATURES\n\n| Features                                        | Description                                                            |\n|:------------------------------------------------|:-----------------------------------------------------------------------|\n| **Kotlin**                                      | 100% Kotlin.                              |\n| **MVVM architecture**                           | Using the lifecycle aware viewmodels, the view observes changes in the model / repository.|\n| **Android Architecture Components**             | Lifecycle awareness has been achieved using a combination of LiveData, ViewModels and Room.|\n| **Backend**                                    | Used Google Cloud Functions and Firebase Firestore for backend and REST API|\n| **Dependency Injection**                        | Common elements like context, networking interface are injected using Koin.|\n| **Offline first architecture**                  | All the data is loaded from the Room database and it's updated from the network. This ensures that the app is usable even in an offline mode.|\n| **Effective Networking**                        | Using a combination of Retrofit, Room, LiveData, Coroutines to handle networking in the most effective way.|\n| **Intelligent sync**                            | Intelligent hybrid syncing logic makes sure your Android app does not make repeated calls to the same back-end API for the same data in a particular time period.|\n| **Feature based packaging**                     | This screen-wise / feature-wise packaging makes code really easy to read and debug.|\n\n## 📦 THIRD PARTY LIBRARIES\n| Third party libraries | Firebase | Design tools | Gradle | \n|:-------------------|:------------------------|:------------------------|:------------------------|\n|[Koin](https://bit.ly/2GIqyDE)|[Cloud Firestore](https://bit.ly/2U1Z9iZ)|[Sketch](https://bit.ly/23L9Cj0)| [Gradle Kotlin DSL](http://bit.ly/2Njua1r)|\n|[Kotlin Coroutines](https://bit.ly/2wTru3E)|[Cloud Functions](https://bit.ly/2TfAkTE)|[Shape Shifter](https://bit.ly/2IuQzrQ)|[Ktlint](http://bit.ly/2Z9rGJB)|\n|[Retrofit](https://bit.ly/2pSxHbb)|[Hosting](https://bit.ly/2H5qbSW)|[Adobe Photoshop](https://adobe.ly/1Z5LVOp)|[Detekt](http://bit.ly/31T7r0l)|\n|[OkHttp](https://bit.ly/2fVF6OA)|[Cloud Storage](https://bit.ly/2EuLtb6)|[Adobe Illustrator](https://adobe.ly/1G6wY8i)|[Versions](http://bit.ly/31P7Xwj)|\n|[Glide](https://bit.ly/1RIHiKz)|[Crashlytics](https://bit.ly/2GIM9fq)|[Adobe After Effects](https://adobe.ly/1B8kNrh)|[SafeArgs](http://bit.ly/2KSkf04)|\n|[Leak Canary](https://bit.ly/1Mz1RV4)|[Performance Monitoring](https://bit.ly/2Es0b2s)|||\n|[Timber](https://bit.ly/1zQNWqd)|[Test Lab](https://bit.ly/2C1h3Mb)|||\n|[ThreenTenABP](https://bit.ly/2GIykxt)|[App Indexing](https://bit.ly/2Tcy9jP)|||\n|[Stetho](https://bit.ly/2eZ3YI7)||||\n|[Chrome Custom Tab](http://bit.ly/2XQsjYy)||||\n|[CircleImageView](https://bit.ly/1MlTaA6)||||\n|[SDP - Scalable Size Unit](https://bit.ly/2T9wlYZ)||||\n|[Gradle Versions Plugin](https://bit.ly/1FtgBgA)||||\n|[Moshi](https://bit.ly/2TLu7za)||||\n|[InkPageIndicator](http://bit.ly/2CKlcnW)||||\n|[ShapeOfView](http://bit.ly/2MQdFtD)||||\n|[Toasty](http://bit.ly/2McNZYu)||||\n|[COIL](http://bit.ly/2MZRhy1)||||\n\n## 📦 DOWNLOAD APK\nYou can download the apk from: \n1. [Google Playstore](https://play.google.com/store/apps/details?id=me.tumur.portfolio)\n\n## 📝 REQUIREMENTS\n* JDK Version 1.7 \u0026 above\n* [Android SDK.](http://developer.android.com/sdk/index.html)\n* Android SDK Tools\n* Android SDK Build tools 29\n* Android Support Repository\n* Android Support library\n\n## 🌐 BACKEND\nFirebase Cloud Storage used as a backend server and Firebase Cloud Hosting and Google Cloud Functions for providing REST API.\nYou can find the code \u003ca href=\"https://github.com/tumurb/Personal-Portoflio-API-Version-2.0\"\u003ehere\u003c/a\u003e.\n\n## 🔥 FIREBASE SETUP\nThis project uses Firebases Analytics and Crashlytics, Cloud Firestore, Remote Config, etc. You will need to generate the configuration file (`google-services.json`) and copy it to your `/app` dir. See links below\n\n1. [Setup Firebase setup](https://firebase.google.com/docs/android/setup)\n2. [Setup Firebase Crashlytics](https://firebase.google.com/docs/crashlytics/get-started/)\n3. [Setup Firebase Cloud Firestore](https://firebase.google.com/docs/firestore/quickstart/)\n4. [Setup Firebase Storage](https://firebase.google.com/docs/storage/android/start)\n5. [Setup Firebase Cloud Functions](https://firebase.google.com/docs/functions/get-started)\n6. [Setup Firebase Hosting](https://firebase.google.com/docs/hosting/quickstart)\n7. [Setup Firebase Peformance Monitoring](https://firebase.google.com/docs/perf-mon/get-started-android)\n8. [Setup Firebase Test Lab ](https://firebase.google.com/docs/test-lab/)\n9. [Setup Firebase App Indexing ](https://firebase.google.com/docs/app-indexing/android/app)\n\n\n## ⚙️ PROJECT SETUP\nThis project is built with Gradle, the [Android Gradle plugin](http://tools.android.com/tech-docs/new-build-system/user-guide) Clone this repository inside your working folder. Import the `settings.gradle` file in the root folder into e.g. Android Studio. (You can also have a look at the `build.gradle` files on how the projects depend on another.)\n\n* Start Android Studio\n* Select \"Open Project\" and select the generated root Project folder\n* You may be prompted with \"Unlinked gradle project\" -\u003e Select \"Import gradle project\" and select\nthe option to use the gradle wrapper\n* You may also be prompted to change to the appropriate SDK folder for your local machine\n* Once the project has compiled -\u003e run the project!\n\n\n## 🤝 CONTRIBUTING\n### Would you like to contribute code?\n1. [Fork Portfolio](https://github.com/tumurb/Portfolio/).\n2. Create a new branch ([using GitHub](https://help.github.com/articles/creating-and-deleting-branches-within-your-repository/)) or the command `git checkout -b branch-name develop`).\n3. [Start a pull request](https://github.com/tumurb/Portfolio/compare). Reference [existing issues](https://github.com/tumurb/Portfolio/issues) when possible.\n\n### No code!\n* You can [discuss a bug](https://github.com/tumurb/Bio/issues) or if it was not reported yet [submit a bug](https://github.com/tumurb/Bio/issues/new).\n\n\n## 📚 RESSOURCES \u0026 CREDENTIALS\n\u003cem\u003eApplied number of best practices from the Android community, and I'm thankful to everyone who shared their knowledge and experience through social media and blog posts. 🙌🏻\u003c/em\u003e\n\n### Android \u0026 Kotlin\n1. \u003ca href=\"http://bit.ly/2ZTBbK8\" target=\"_blank\"\u003eDeveloping Android Apps with Kotlin by Google\u003c/a\u003e 🔥🔥🔥\n2. \u003ca href=\"https://developer.android.com/guide\" target=\"_blank\"\u003eAndroid Documentation \u0026 Guides | All in one Place\u003c/a\u003e 🔥🔥🔥\n3. \u003ca href=\"http://bit.ly/2PFfPeS\" target=\"_blank\"\u003eKotlin Bootcamp for Programmers by Google\u003c/a\u003e 🔥\n4. \u003ca href=\"http://bit.ly/2USby97\" target=\"_blank\"\u003eKotlin for Android Developers\u003c/a\u003e 🔥\n5. \u003ca href=\"https://bit.ly/2Stik3R\" target=\"_blank\"\u003eKotlin Null Safety Best Practices\u003c/a\u003e\n6. \u003ca href=\"https://youtu.be/AiFBEH54Xpw\" target=\"_blank\"\u003eScope Functions in Kotlin - let run apply also with\u003c/a\u003e\n\n### Architecture\n1. \u003ca href=\"https://youtu.be/cpLUVOx-4u8\" target=\"_blank\"\u003eBest practices for a modularized app\u003c/a\u003e 🔥\n2. \u003ca href=\"http://bit.ly/2Gm8WuJ\" target=\"_blank\"\u003eAndroid Architecture: A Journey Looking For The Perfect Design\u003c/a\u003e\n\n### Navigation Controller: Single Activity\n1. \u003ca href=\"http://bit.ly/2FB4dWJ\" target=\"_blank\"\u003eJetpack Navigation (Google I/O'19)\u003c/a\u003e 🔥\n2. \u003ca href=\"http://bit.ly/2Y4x5gb\" target=\"_blank\"\u003eAdd Shared Element Transitions between destinations\u003c/a\u003e 🔥\n3. \u003ca href=\"http://bit.ly/2GjyR6o\" target=\"_blank\"\u003ePrinciples of navigation\u003c/a\u003e\n4. \u003ca href=\"http://bit.ly/2DmD5JF\" target=\"_blank\"\u003eUpdate UI components with NavigationUI\u003c/a\u003e\n5. \u003ca href=\"http://bit.ly/2ZkepLl\" target=\"_blank\"\u003eMigrate to the Navigation component\u003c/a\u003e\n6. \u003ca href=\"http://bit.ly/2JmrvDM\" target=\"_blank\"\u003eAndroid Jetpack: manage UI navigation with Navigation Controller (Google I/O '18)\u003c/a\u003e\n7. \u003ca href=\"https://bit.ly/2Sz8mOu\" target=\"_blank\"\u003eSingle Activity: Why, When, and How (Android Dev Summit '18)\u003c/a\u003e\n8. \u003ca href=\"http://bit.ly/2TCJHhh\" target=\"_blank\"\u003eAdvanced Navigation Sample\u003c/a\u003e\n9. \u003ca href=\"http://bit.ly/2u6JFim\" target=\"_blank\"\u003eMaster-Detail views with Navigation Components\u003c/a\u003e\n10. \u003ca href=\"http://bit.ly/2ZHYCWU\" target=\"_blank\"\u003eScroll your Bottom Navigation View away with 10 lines of code\u003c/a\u003e\n\n### Live Data \u0026 ViewModel\n1. \u003ca href=\"http://bit.ly/2xpufYx\" target=\"_blank\"\u003eViewModels with Saved State, Jetpack Navigation, Data Binding and Coroutines\u003c/a\u003e 🔥🔥🔥\n2. \u003ca href=\"http://bit.ly/302cv1v\" target=\"_blank\"\u003eUse Kotlin coroutines with Architecture components\u003c/a\u003e 🔥🔥🔥\n3. \u003ca href=\"https://bit.ly/2To47cV\" target=\"_blank\"\u003eFun with LiveData (Android Dev Summit '18)\u003c/a\u003e\n4. \u003ca href=\"https://bit.ly/2Iy0psU\" target=\"_blank\"\u003eViewModels and LiveData: Patterns + AntiPatterns\u003c/a\u003e\n5. \u003ca href=\"https://bit.ly/2QslbgB\" target=\"_blank\"\u003eLiveData with SnackBar, Navigation and other events\u003c/a\u003e\n6. \u003ca href=\"https://bit.ly/2H133oY\" target=\"_blank\"\u003eLiveData beyond the ViewModel\u003c/a\u003e\n7. \u003ca href=\"http://bit.ly/2HmgTm0\" target=\"_blank\"\u003eLiveData with single events\u003c/a\u003e\n8. \u003ca href=\"http://bit.ly/2HlOhtY\" target=\"_blank\"\u003eAn Early Look at ViewModel SavedState\u003c/a\u003e\n9. \u003ca href=\"http://bit.ly/2KP8MBx\" target=\"_blank\"\u003eLocale changes and the AndroidViewModel antipattern\u003c/a\u003e\n\n### Room\n1. \u003ca href=\"https://bit.ly/2VskVgi\" target=\"_blank\"\u003eCourse: Storing Data in Android with Room(Caster.io)\u003c/a\u003e 🔥🔥🔥\n2. \u003ca href=\"https://bit.ly/2E8o51R\" target=\"_blank\"\u003e7 Pro-tips for Room\u003c/a\u003e 🔥🔥🔥\n3. \u003ca href=\"https://bit.ly/2VhVU7g\" target=\"_blank\"\u003eRoom 🔗 Coroutines\u003c/a\u003e 🔥🔥🔥\n4. \u003ca href=\"http://bit.ly/2Z2rT10\" target=\"_blank\"\u003ePacking the Room: Pre-populate your database with this one method\u003c/a\u003e 🔥🔥🔥\n5. \u003ca href=\"https://bit.ly/2EjIbGp\" target=\"_blank\"\u003eThe Room in the House (Android Dev Summit '18)\u003c/a\u003e\n6. \u003ca href=\"http://bit.ly/2XuIHtW\" target=\"_blank\"\u003ePopulating Room Database with WorkManager sample app\u003c/a\u003e\n7. \u003ca href=\"http://bit.ly/2NA5ShV\" target=\"_blank\"\u003eRoom Persistence Library with Coroutines\u003c/a\u003e\n8. \u003ca href=\"http://bit.ly/2EFtKhd\" target=\"_blank\"\u003eDependency Injection with KOIN to Androidx Jetpack\u003c/a\u003e\n9. \u003ca href=\"http://bit.ly/2VZWOWp\" target=\"_blank\"\u003eUpgrade to Room 2.1.0-alpha05, use withTransaction\u003c/a\u003e\n10. \u003ca href=\"http://bit.ly/2Gosajl\" target=\"_blank\"\u003eDefining data using Room entities\u003c/a\u003e\n11. \u003ca href=\"http://bit.ly/2NdnpzV\" target=\"_blank\"\u003eAndroid Room Library Relations\u003c/a\u003e\n12. \u003ca href=\"http://bit.ly/2IQEH1G\" target=\"_blank\"\u003eAndroid Room with nested relationships\u003c/a\u003e\n13. \u003ca href=\"http://bit.ly/2Lnj2Qe\" target=\"_blank\"\u003eRoom Persistence Library Part 2: Room Relationships\u003c/a\u003e\n\n### DataBinding\n1. \u003ca href=\"https://bit.ly/2ISEooO\" target=\"_blank\"\u003eModern Data Binding(Droidcon Italy 2018)\u003c/a\u003e\n2. \u003ca href=\"https://bit.ly/2EBBP6s\" target=\"_blank\"\u003eLevel Up with Data Binding\u003c/a\u003e\n3. \u003ca href=\"https://bit.ly/2SmwyUc\" target=\"_blank\"\u003eData Binding — Lessons Learnt\u003c/a\u003e\n4. \u003ca href=\"https://bit.ly/2UepFpM\" target=\"_blank\"\u003eDatabinding in Kotlin World (Video)\u003c/a\u003e\n5. \u003ca href=\"https://bit.ly/2BWoSCI\" target=\"_blank\"\u003eDatabinding in Kotlin World (Slides)\u003c/a\u003e\n6. \u003ca href=\"https://bit.ly/2VllLLQ\" target=\"_blank\"\u003eLeveraging Android Data Binding with Kotlin\u003c/a\u003e\n7. \u003ca href=\"http://bit.ly/2SMq8he\" target=\"_blank\"\u003eSimplifying UI States with Kotlin Sealed Classes and Data Binding\u003c/a\u003e\n8. \u003ca href=\"https://youtu.be/Iix75JjIbyI\" target=\"_blank\"\u003eAdvanced Data Binding\u003c/a\u003e\n\n### Constraintlayouts \u0026 Motionlayout\n1. \u003ca href=\"http://bit.ly/2HRtAWJ\" target=\"_blank\"\u003eIntroduction to MotionLayout (part I)\u003c/a\u003e 🔥\n2. \u003ca href=\"http://bit.ly/2Uo9WHP\" target=\"_blank\"\u003eIntroduction to MotionLayout (part II)\u003c/a\u003e 🔥\n3. \u003ca href=\"http://bit.ly/2YMRY1c\" target=\"_blank\"\u003eIntroduction to MotionLayout (part III)\u003c/a\u003e 🔥\n4. \u003ca href=\"http://bit.ly/2FEjDsr\" target=\"_blank\"\u003eIntroduction to MotionLayout (part IV)\u003c/a\u003e 🔥\n5. \u003ca href=\"http://bit.ly/2IRbi7q\" target=\"_blank\"\u003eWhat's New in ConstraintLayout (Google I/O'19)\u003c/a\u003e 🔥\n6. \u003ca href=\"https://bit.ly/2tRcGPj\" target=\"_blank\"\u003eAndroid Fundamentals: ConstraintLayout(Pluralsight)\u003c/a\u003e 🔥\n7. \u003ca href=\"http://bit.ly/2TMqkBx\" target=\"_blank\"\u003eMotionLayout Tutorial For Android: Getting Started\u003c/a\u003e 🔥\n8. \u003ca href=\"https://bit.ly/2IJbBmD\" target=\"_blank\"\u003eConstraintLayout Deep Dive (Android Dev Summit '18)\u003c/a\u003e\n9. \u003ca href=\"https://bit.ly/2HybEj5\" target=\"_blank\"\u003eMotionLayout \u0026 ConstraintLayout 2.0 (Droidcon SF 2018)\u003c/a\u003e\n10. \u003ca href=\"https://bit.ly/2HdY5Fx\" target=\"_blank\"\u003eDeep dive into MotionLayout (DroidKaigi 2019)\u003c/a\u003e\n11. \u003ca href=\"https://bit.ly/2Sx8Cxl\" target=\"_blank\"\u003eMotionLayout / Constraint Layout Samples\u003c/a\u003e\n12. \u003ca href=\"http://bit.ly/2IyzWLl\" target=\"_blank\"\u003ePull the KeyTrigger with MotionLayout\u003c/a\u003e\n13. \u003ca href=\"https://bit.ly/2BXPQtE\" target=\"_blank\"\u003eAndroid Motion Layout tutorial – Collapsing view\u003c/a\u003e\n14. \u003ca href=\"http://bit.ly/2ULnsRO\" target=\"_blank\"\u003eSay goodbye to LinearLayout with Flow\u003c/a\u003e\n15. \u003ca href=\"http://bit.ly/2DG8DdL\" target=\"_blank\"\u003eExploring MotionLayout: Touch Regions\u003c/a\u003e\n16. \u003ca href=\"http://bit.ly/2Y19ZaR\" target=\"_blank\"\u003eConstraintLayout 2.0\u003c/a\u003e\n17. \u003ca href=\"http://bit.ly/2VIjChe\" target=\"_blank\"\u003eConstraintLayout 2.0.0 alpha 5\u003c/a\u003e\n\n### Koin\n1. \u003ca href=\"https://bit.ly/2Vsvlwe\" target=\"_blank\"\u003eCourse: Koin(Caster.io)\u003c/a\u003e 🔥🔥🔥\n2. \u003ca href=\"https://bit.ly/2E7w3YP\" target=\"_blank\"\u003ePainless Android testing with Room \u0026 Koin\u003c/a\u003e\n3. \u003ca href=\"https://bit.ly/2Nrr1e7\" target=\"_blank\"\u003eUnlock your Android ViewModel power with Koin\u003c/a\u003e\n\n### Kotlin Coroutines\n1. \u003ca href=\"http://bit.ly/2Lec0yT\" target=\"_blank\"\u003eCoroutines on Android (part I): Getting the background\u003c/a\u003e 🔥🔥🔥\n2. \u003ca href=\"http://bit.ly/2DM0VPe\" target=\"_blank\"\u003eCoroutines on Android (part II): Getting the background\u003c/a\u003e 🔥🔥🔥\n3. \u003ca href=\"http://bit.ly/2YfQA6x\" target=\"_blank\"\u003eCoroutines on Android (part III): Getting the background\u003c/a\u003e 🔥🔥🔥\n4. \u003ca href=\"http://bit.ly/2NdFPjT\" target=\"_blank\"\u003eUnderstand Kotlin Coroutines on Android (Google I/O'19)\u003c/a\u003e 🔥🔥🔥\n5. \u003ca href=\"https://bit.ly/2TpQ06Q\" target=\"_blank\"\u003eAndroid Suspenders (Android Dev Summit '18)\u003c/a\u003e\n6. \u003ca href=\"https://bit.ly/2UdlyKy\" target=\"_blank\"\u003eKotlin Coroutines: Beyond async/await (Droidcon NYC 2018)\u003c/a\u003e\n7. \u003ca href=\"https://bit.ly/2XlDiW8\" target=\"_blank\"\u003eAndroid Coroutine Recipes\u003c/a\u003e\n8. \u003ca href=\"https://bit.ly/2SrVt8Y\" target=\"_blank\"\u003eKotlin Coroutines patterns \u0026 anti-patterns\u003c/a\u003e\n9. \u003ca href=\"https://bit.ly/2SoioSe\" target=\"_blank\"\u003eAndroid Networking in 2019 — Retrofit with Kotlin’s Coroutines\u003c/a\u003e\n10. \u003ca href=\"https://bit.ly/2EeC7Pg\" target=\"_blank\"\u003eThe reason to avoid GlobalScope\u003c/a\u003e\n11. \u003ca href=\"https://bit.ly/2BZIs0G\" target=\"_blank\"\u003eLaunching a Kotlin Coroutine for immediate execution on the Main thread\u003c/a\u003e\n12. \u003ca href=\"http://bit.ly/2tPu7zB\" target=\"_blank\"\u003eCoroutine Support in ViewModels\u003c/a\u003e\n13. \u003ca href=\"http://bit.ly/2Ulwghe\" target=\"_blank\"\u003eManaging exceptions in nested coroutine scopes\u003c/a\u003e\n14. \u003ca href=\"http://bit.ly/2PhfuPh\" target=\"_blank\"\u003eCold flows, hot channels\u003c/a\u003e\n\n### WorkManager\n1. \u003ca href=\"http://bit.ly/31OynPw\" target=\"_blank\"\u003eWorkManager meets Kotlin\u003c/a\u003e 🔥\n2. \u003ca href=\"http://bit.ly/31OyF94\" target=\"_blank\"\u003eWorkManager Periodicity\u003c/a\u003e 🔥\n3. \u003ca href=\"http://bit.ly/30IUxkW\" target=\"_blank\"\u003eWorkout your tasks with WorkManager — Basics\u003c/a\u003e 🔥\n4. \u003ca href=\"http://bit.ly/2EkJyEF\" target=\"_blank\"\u003eWorking with WorkManager (Android Dev Summit '18)\u003c/a\u003e\n5. \u003ca href=\"http://bit.ly/2C7zRcw\" target=\"_blank\"\u003eIntroducing WorkManager\u003c/a\u003e\n6. \u003ca href=\"http://bit.ly/2EOKlxQ\" target=\"_blank\"\u003eWorkManager Basics\u003c/a\u003e\n7. \u003ca href=\"http://bit.ly/2J8KuBA\" target=\"_blank\"\u003eAndroid Jetpack WorkManager Stable Release\u003c/a\u003e\n8. \u003ca href=\"http://bit.ly/2ZQPBeb\" target=\"_blank\"\u003eWorking With WorkManager in Android Like A Pro\u003c/a\u003e\n\n### Animation\n1. \u003ca href=\"http://bit.ly/2XyB74m\" target=\"_blank\"\u003eMotional Intelligence: Build Smarter Animations (Google I/O'19)\u003c/a\u003e 🔥\n2. \u003ca href=\"https://bit.ly/2VgM9WZ\" target=\"_blank\"\u003eRe-animation\u003c/a\u003e\n3. \u003ca href=\"https://bit.ly/2E3z1NW\" target=\"_blank\"\u003eUsing vector assets in Android apps\u003c/a\u003e\n4. \u003ca href=\"https://bit.ly/2XjlQRW\" target=\"_blank\"\u003eCreating AnimatedVectorDrawables with Shape Shifter\u003c/a\u003e\n5. \u003ca href=\"https://bit.ly/2m8PVCy\" target=\"_blank\"\u003eIntroduction to MotionLayout\u003c/a\u003e\n6. \u003ca href=\"https://bit.ly/2tAzToD\" target=\"_blank\"\u003eDefining motion paths in MotionLayout\u003c/a\u003e\n\n### Paging\n1. \u003ca href=\"https://bit.ly/2ElLa17\" target=\"_blank\"\u003eAndroid Jetpack: manage infinite lists with RecyclerView and Paging (Google I/O '18)\u003c/a\u003e 🔥\n2. \u003ca href=\"http://bit.ly/2T2SU22\" target=\"_blank\"\u003eFirst Java MVVM project that includes: Paging library, ViewModel, LiveData, Room and Retrofit\u003c/a\u003e 🔥\n3. \u003ca href=\"http://bit.ly/2JFSJTY\" target=\"_blank\"\u003ePaging Library for Android With Kotlin: Creating Infinite Lists\u003c/a\u003e 🔥\n4. \u003ca href=\"https://bit.ly/2ThdlHV\" target=\"_blank\"\u003ePlaying with Paging Library, Retrofit, Coroutines, Koin \u0026 Testing.\u003c/a\u003e\n5. \u003ca href=\"http://bit.ly/2NylGBG\" target=\"_blank\"\u003e7 steps to implement Paging library in Android\u003c/a\u003e \n6. \u003ca href=\"http://bit.ly/2tEZ0qq\" target=\"_blank\"\u003eSimple intro for Rest-Api loading of json data into recyclerview using Kotlin\u003c/a\u003e\n7. \u003ca href=\"http://bit.ly/2IIxaUC\" target=\"_blank\"\u003eThe Movie Datbase\u003c/a\u003e\n8. \u003ca href=\"http://bit.ly/2F1E16p\" target=\"_blank\"\u003eAndroid RecyclerView Tutorial with Kotlin\u003c/a\u003e\n9. \u003ca href=\"https://youtu.be/8DPgwrV_9-g\" target=\"_blank\"\u003eMigrating to Paging library\u003c/a\u003e\n10. \u003ca href=\"http://bit.ly/2XDtwRW\" target=\"_blank\"\u003eAndroid Data Binding + ListAdapter\u003c/a\u003e\n11. \u003ca href=\"http://bit.ly/2KGTVsa\" target=\"_blank\"\u003eAndroid Data Binding + RecyclerView + Multiple View Type\u003c/a\u003e\n12. \u003ca href=\"http://bit.ly/2xiJ1zS\" target=\"_blank\"\u003eAndroid Data Binding for RecyclerView With LiveData (Kotlin)\u003c/a\u003e\n13. \u003ca href=\"http://bit.ly/2X94gDW\" target=\"_blank\"\u003eAndroid Paging Library with multiple view types\u003c/a\u003e \n\n### ViewPager\n1. \u003ca href=\"http://bit.ly/2CoFJhD\" target=\"_blank\"\u003eViewPager Tutorial: Getting Started in Kotlin\u003c/a\u003e\n2. \u003ca href=\"http://bit.ly/2TM38n7\" target=\"_blank\"\u003eExploring the View Pager 2\u003c/a\u003e\n\n### Android Accessibility\n1. \u003ca href=\"https://bit.ly/2Vu4RL3\" target=\"_blank\"\u003eCourse: Android App Development: Accessibility(LinkedIn Learning)\u003c/a\u003e 🔥🔥🔥\n2. \u003ca href=\"http://bit.ly/2H3QNUF\" target=\"_blank\"\u003eMaking Android Accessibility Easy (Android Dev Summit '18)\u003c/a\u003e\n3. \u003ca href=\"http://bit.ly/2J2xYAk\" target=\"_blank\"\u003eDemystifying Android Accessibility Development (Google I/O'19)\u003c/a\u003e\n\n### Preferences\n1. \u003ca href=\"http://bit.ly/2EnwVbQ\" target=\"_blank\"\u003ePreferential Practices for Preferences (Android Dev Summit '18)\u003c/a\u003e\n2. \u003ca href=\"http://bit.ly/2Ne4yVm\" target=\"_blank\"\u003eHow to Code a Settings Screen in an Android App\u003c/a\u003e\n\n### Material Design \u0026 Theme\n1. \u003ca href=\"http://bit.ly/2KEbl8H\" target=\"_blank\"\u003eDark Theme \u0026 Gesture Navigation (Google I/O'19)\u003c/a\u003e 🔥\n2. \u003ca href=\"http://bit.ly/33rtvAG\" target=\"_blank\"\u003eMoving to the Dark Side: Dark Theme Recap\u003c/a\u003e 🔥\n3. \u003ca href=\"http://bit.ly/2JgPFj8\" target=\"_blank\"\u003eDayNight — Adding a dark theme to your app\u003c/a\u003e 🔥\n4. \u003ca href=\"http://bit.ly/2N8eHBv\" target=\"_blank\"\u003eGesture Navigation: Going edge-to-edge\u003c/a\u003e 🔥\n5. \u003ca href=\"http://bit.ly/2Z32PTq\" target=\"_blank\"\u003eGesture Navigation: Handling visual overlaps\u003c/a\u003e 🔥\n6. \u003ca href=\"http://bit.ly/2YKLbIZ\" target=\"_blank\"\u003eGesture Navigation: A Backstory\u003c/a\u003e 🔥\n7. \u003ca href=\"http://bit.ly/2V7ZXGT\" target=\"_blank\"\u003eMaterial Design: Getting started\u003c/a\u003e\n8. \u003ca href=\"http://bit.ly/2Ej7Wqh\" target=\"_blank\"\u003eThe Components of Material Design (Android Dev Summit '18)\u003c/a\u003e\n9. \u003ca href=\"http://bit.ly/2NAhzFb\" target=\"_blank\"\u003eBest Practices for Themes and Styles (Android Dev Summit '18)\u003c/a\u003e\n10. \u003ca href=\"http://bit.ly/2H5WXDD\" target=\"_blank\"\u003eUse Android Text Like a Pro (Android Dev Summit '18)\u003c/a\u003e\n11. \u003ca href=\"http://bit.ly/2JgPFj8\" target=\"_blank\"\u003eDayNight — Adding a dark theme to your app\u003c/a\u003e\n12. \u003ca href=\"http://bit.ly/2GlQaUn\" target=\"_blank\"\u003eStyles, Themes, Material Theming, Oh My!\u003c/a\u003e\n13. \u003ca href=\"http://bit.ly/2Gl4PiA\" target=\"_blank\"\u003eSeven best practices for inclusive product design\u003c/a\u003e\n14. \u003ca href=\"http://bit.ly/2Gwv2w6\" target=\"_blank\"\u003eWindowInsets — Listeners to layouts\u003c/a\u003e\n15. \u003ca href=\"https://youtu.be/92DL3-IQ_K0\" target=\"_blank\"\u003eStyles, Themes, Material Theming, Oh My!\u003c/a\u003e\n16. \u003ca href=\"http://bit.ly/2XPExfB\" target=\"_blank\"\u003ePlaying with Material Design Transitions\u003c/a\u003e\n17. \u003ca href=\"http://bit.ly/2GPSJQ2\" target=\"_blank\"\u003eMastering the Coordinator Layout\u003c/a\u003e\n18. \u003ca href=\"http://bit.ly/2J0Daq8\" target=\"_blank\"\u003eIntegrate CoordinatorLayout + BottomNavigationView + Toolbar + TabLayout + ViewPager + Fragment + DrawerLayout\u003c/a\u003e\n19. \u003ca href=\"http://bit.ly/2PB0JqM\" target=\"_blank\"\u003eGoogle+ Android Sample App demo\u003c/a\u003e\n20. \u003ca href=\"http://bit.ly/2DFdagB\" target=\"_blank\"\u003eAndroid Design — Collapsing Toolbar: ScrollFlags Illustrated\u003c/a\u003e\n21. \u003ca href=\"http://bit.ly/2WfmVJt\" target=\"_blank\"\u003eAppBarLayout scroll behavior with layout_scrollFlags\u003c/a\u003e\n22. \u003ca href=\"http://bit.ly/2XXiHH6\" target=\"_blank\"\u003eHands-on with Material Components for Android: Bottom Sheets\u003c/a\u003e\n23. \u003ca href=\"http://bit.ly/2PB6Kni\" target=\"_blank\"\u003eFull-screen BottomSheetDialog DIY\u003c/a\u003e\n24. \u003ca href=\"http://bit.ly/2PGo3Ub\" target=\"_blank\"\u003eHands-on with Material Components for Android: Buttons\u003c/a\u003e\n25. \u003ca href=\"http://bit.ly/2DCT5ra\" target=\"_blank\"\u003eAndroid P — What’s New in Material Design\u003c/a\u003e\n26. \u003ca href=\"http://bit.ly/2Z4ARe3\" target=\"_blank\"\u003eAndroid: An Introduction to Material Design with Kotlin\u003c/a\u003e\n\n### Sample Data\n1. \u003ca href=\"http://bit.ly/2FfK7kS\" target=\"_blank\"\u003eWhat's new with ConstraintLayout and Android Studio design tools\u003c/a\u003e\n2. \u003ca href=\"http://bit.ly/2O4z28Y\" target=\"_blank\"\u003eTool Time – Part 1\u003c/a\u003e\n3. \u003ca href=\"http://bit.ly/2O8fu3z\" target=\"_blank\"\u003eTool Time – Part 2\u003c/a\u003e\n\n### Instant App\n1. \u003ca href=\"http://bit.ly/2Un8z8k\" target=\"_blank\"\u003eA simpler experience for instant apps\u003c/a\u003e\n2. \u003ca href=\"http://bit.ly/2GlM4f6\" target=\"_blank\"\u003e5 tips for using showInstallPrompt in your instant experience\u003c/a\u003e\n\n### Test\n1. \u003ca href=\"http://bit.ly/2Dj9YXW\" target=\"_blank\"\u003eLeveling Up Your UI Tests With MockWebServer\u003c/a\u003e\n\n### Firebase Cloud Functions\n1. \u003ca href=\"http://bit.ly/2IHK8Ad\" target=\"_blank\"\u003eBuilding a “Serverless” RESTful API with Cloud Functions\u003c/a\u003e\n2. \u003ca href=\"http://bit.ly/2IHKs1T\" target=\"_blank\"\u003eBuild a Serverless full stack app using firebase cloud functions\u003c/a\u003e\n3. \u003ca href=\"https://youtu.be/c93iGKyvh3o\" target=\"_blank\"\u003eHow Firebase Cloud Functions support custom domains\u003c/a\u003e\n4. \u003ca href=\"http://bit.ly/2KT4A3Z\" target=\"_blank\"\u003eServe dynamic content and host microservices with Cloud Functions\u003c/a\u003e\n\n### Firebase security rules\n1. \u003ca href=\"https://youtu.be/QEuu9X9L-MU\" target=\"_blank\"\u003eIntroduction to Firebase security rules (Firecasts)\u003c/a\u003e 🔥\n2. \u003ca href=\"http://bit.ly/2YBre39\" target=\"_blank\"\u003ePerform simple and compound queries in Cloud Firestore\u003c/a\u003e\n3. \u003ca href=\"http://bit.ly/30aPlGi\" target=\"_blank\"\u003eFirebase Auth REST API\u003c/a\u003e\n4. \u003ca href=\"http://bit.ly/2FXvLW9\" target=\"_blank\"\u003eWriting conditions for Cloud Firestore Security Rules\u003c/a\u003e\n5. \u003ca href=\"http://bit.ly/2xAjbYm\" target=\"_blank\"\u003eFive tips to secure your app (Firebase Summit 2018)\u003c/a\u003e\n6. \u003ca href=\"http://bit.ly/2LDq3MU\" target=\"_blank\"\u003eFirestore Security Rules\u003c/a\u003e\n\n### Network\n1. \u003ca href=\"http://bit.ly/2Zl30Lr\" target=\"_blank\"\u003eMaking Android Networking Pretty with Kotlin Coroutines\u003c/a\u003e\n2. \u003ca href=\"http://bit.ly/2Goeq8k\" target=\"_blank\"\u003eImproving App Network Architecture With Retrofit And Kotlin Coroutine Call Adapter\u003c/a\u003e\n3. \u003ca href=\"http://bit.ly/2DozXgu\" target=\"_blank\"\u003eSealed Classes Instead of Exceptions in Kotlin\u003c/a\u003e\n4. \u003ca href=\"http://bit.ly/2XWnIUE\" target=\"_blank\"\u003eSuspend what you’re doing: Retrofit has now Coroutines support!\u003c/a\u003e\n\n### Retrofit \u0026 OkHttp, Moshi, ThreeTenABP\n1. \u003ca href=\"http://bit.ly/2UveUys\" target=\"_blank\"\u003eAndroid Networking with Coroutines and Retrofit\u003c/a\u003e\n2. \u003ca href=\"http://bit.ly/2PlhtSH\" target=\"_blank\"\u003eHandle Complex Network Call with Kotlin Coroutine + Retrofit 2\u003c/a\u003e\n3. \u003ca href=\"http://bit.ly/2GxfdVU\" target=\"_blank\"\u003eRetrofit Kotlin coroutines\u003c/a\u003e\n4. \u003ca href=\"http://bit.ly/2DodcZW\" target=\"_blank\"\u003eKotlin Coroutines—Handling concurrency like a pro (Retrofit2+Coroutines)\u003c/a\u003e\n5. \u003ca href=\"http://bit.ly/2Vjj94w\" target=\"_blank\"\u003eModern concurrency on Android with Kotlin\u003c/a\u003e\n6. \u003ca href=\"https://youtu.be/jOeofbFWbsA\" target=\"_blank\"\u003eNetworking the Kotlin way: Retrofit + Coroutines\u003c/a\u003e\n7. \u003ca href=\"http://bit.ly/2SXOm8e\" target=\"_blank\"\u003eMigrate from GSON to Moshi in Android\u003c/a\u003e\n8. \u003ca href=\"http://bit.ly/2GAXgG4\" target=\"_blank\"\u003eModern DateTimes on Android\u003c/a\u003e\n\n### Other\n1. \u003ca href=\"https://bit.ly/2H1f1yE\" target=\"_blank\"\u003eKotlin + buildSrc for Better Gradle Dependency Management\u003c/a\u003e\n2. \u003ca href=\"http://bit.ly/2TPA0LH\" target=\"_blank\"\u003eSharing Gradle Configuration in Multi-Module Android Projects\u003c/a\u003e\n3. \u003ca href=\"http://bit.ly/32FalXF\" target=\"_blank\"\u003eandroid-youtube-player, an open source alternative to the official YouTube Player API\u003c/a\u003e\n4. \u003ca href=\"http://bit.ly/2GkcaQo\" target=\"_blank\"\u003eAndroid RecyclerView adding Search Filter\u003c/a\u003e\n5. \u003ca href=\"http://bit.ly/2YeFPEQ\" target=\"_blank\"\u003eResponding to a Refresh Request\u003c/a\u003e\n6. \u003ca href=\"http://bit.ly/32Iq0po\" target=\"_blank\"\u003eCreate swipe views with tabs\u003c/a\u003e\n7. \u003ca href=\"http://bit.ly/2yWqqKN\" target=\"_blank\"\u003eIntroduction to Google Maps API for Android with Kotlin\u003c/a\u003e\n\n## Project Maintained By\n\u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/portfolio-app-147b5.appspot.com/o/pro.png?alt=media\u0026token=f10a1d13-5ffb-46ed-9460-1bdb966365fe\" align=\"left\" width=\"60\" hspace=\"10\" vspace=\"10\"\u003e\n\u003cb\u003eTumur.B (Alex)\u003c/b\u003e\u003cbr/\u003e\nAndroid Developer\n\u003cbr/\u003e\n\u003cbr/\u003e\n\u003ca href=\"https://play.google.com/store/apps/dev?id=8351593314191223257\"\u003e\u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/ioco-5c746.appspot.com/o/icon_google.png?alt=media\u0026token=df311441-34fe-44dd-bf24-c5cbf8f4a6c9\" width=\"60\"\u003e\u003c/a\u003e \u003ca href=\"https://tumur.me\"\u003e\u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/ioco-5c746.appspot.com/o/icon_web.png?alt=media\u0026token=3854f445-8465-4ad3-8cd8-7aca2999964f\" width=\"60\"\u003e\u003c/a\u003e\n\u003ca href=\"https://twitter.com/tumur_alex\"\u003e\u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/ioco-5c746.appspot.com/o/icon_twitter.png?alt=media\u0026token=0ada2552-9a35-4231-a502-3feab11d67c6\" width=\"60\"\u003e\u003c/a\u003e\n\u003ca href=\"https://www.linkedin.com/in/tumur-alex/\"\u003e\u003cimg src=\"https://firebasestorage.googleapis.com/v0/b/ioco-5c746.appspot.com/o/icon_linkedin.png?alt=media\u0026token=3a0baa2c-8a47-4301-8bf6-11603f3bfb0a\" width=\"60\"\u003e\u003c/a\u003e\n\n\n## License\n\n    Copyright 2019 Tumur.B (Alex)\n\n    Licensed under the Apache License, Version 2.0 (the \"License\");\n    you may not use this file except in compliance with the License.\n    You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n    Unless required by applicable law or agreed to in writing, software\n    distributed under the License is distributed on an \"AS IS\" BASIS,\n    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n    See the License for the specific language governing permissions and\n    limitations under the License.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimtbdev%2FAndroid-Portfolio-App-2","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimtbdev%2FAndroid-Portfolio-App-2","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimtbdev%2FAndroid-Portfolio-App-2/lists"}