{"id":13774437,"url":"https://github.com/ardakazanci/Heyyoo","last_synced_at":"2025-05-11T06:33:08.828Z","repository":{"id":104460796,"uuid":"229326545","full_name":"ardakazanci/Heyyoo","owner":"ardakazanci","description":"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).","archived":false,"fork":false,"pushed_at":"2020-02-06T16:01:30.000Z","size":9957,"stargazers_count":48,"open_issues_count":0,"forks_count":6,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-05T04:41:41.683Z","etag":null,"topics":["algolia","android-application","android-studio","gson","jetpack-android","jetpack-lifecycle-components","jetpack-navigation","livedata-databinding","livedata-extensions","livedata-viewmodel","mongodb-database","mvvm-android","mvvm-architecture","navigation-architecture-component","okhttp3","paging-library","repository-pattern","retrofit2","viewmodel-livedata","viewmodel-navigation"],"latest_commit_sha":null,"homepage":"","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/ardakazanci.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}},"created_at":"2019-12-20T19:46:00.000Z","updated_at":"2024-10-31T14:20:36.000Z","dependencies_parsed_at":null,"dependency_job_id":"6dbcf377-cf90-4f0f-bf82-e81d35bf60ee","html_url":"https://github.com/ardakazanci/Heyyoo","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ardakazanci%2FHeyyoo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ardakazanci%2FHeyyoo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ardakazanci%2FHeyyoo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ardakazanci%2FHeyyoo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ardakazanci","download_url":"https://codeload.github.com/ardakazanci/Heyyoo/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253528407,"owners_count":21922623,"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":["algolia","android-application","android-studio","gson","jetpack-android","jetpack-lifecycle-components","jetpack-navigation","livedata-databinding","livedata-extensions","livedata-viewmodel","mongodb-database","mvvm-android","mvvm-architecture","navigation-architecture-component","okhttp3","paging-library","repository-pattern","retrofit2","viewmodel-livedata","viewmodel-navigation"],"created_at":"2024-08-03T17:01:26.723Z","updated_at":"2025-05-11T06:33:07.376Z","avatar_url":"https://github.com/ardakazanci.png","language":"Kotlin","funding_links":[],"categories":[":art: Pattern"],"sub_categories":["MVVM"],"readme":"# A sample modern Kotlin application - Documentation still under maintenance\n[![CircleCI](https://circleci.com/gh/ardakazanci/Sample-Social-Media-App-MVVM.svg?style=svg)](https://circleci.com/gh/ardakazanci/Sample-Social-Media-App-MVVM)\n[![Codacy Badge](https://api.codacy.com/project/badge/Grade/8da4dc07cf3f426caa9397804792277f)](https://www.codacy.com/manual/ardakazanci/Sample-Social-Media-App-MVVM?utm_source=github.com\u0026amp;utm_medium=referral\u0026amp;utm_content=ardakazanci/Sample-Social-Media-App-MVVM\u0026amp;utm_campaign=Badge_Grade)\n[![codebeat badge](https://codebeat.co/badges/a7cc6858-523a-41a0-b288-aabe6ef85431)](https://codebeat.co/projects/github-com-ardakazanci-sample-social-media-app-mvvm-master)\n[![CodeFactor](https://www.codefactor.io/repository/github/ardakazanci/sample-social-media-app-mvvm/badge)](https://www.codefactor.io/repository/github/ardakazanci/sample-social-media-app-mvvm)\n[![Kotlin Version](https://img.shields.io/badge/kotlin-1.3.61-blue.svg)](https://kotlinlang.org)\n[![API](https://img.shields.io/badge/API-21%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=21)\n\u003ca href=\"https://opensource.org/licenses/MIT\"\u003e\u003cimg alt=\"License\" src=\"https://img.shields.io/badge/License-MIT-blue.svg\"/\u003e\u003c/a\u003e\n\n# Content\n\nIt is an exemplary social media application where users motivate each other.\n\n## Architecture components\n\nIdeally, ViewModels shouldn’t know anything about Android. This improves testability, leak safety and modularity. ViewModels have different scopes than activities or fragments. While a ViewModel is alive and running, an activity can be in any of its lifecycle states. Activities and fragments can be destroyed and created again while the ViewModel is unaware.\n\nPassing a reference of the View (activity or fragment) to the ViewModel is a serious risk. Lets assume the ViewModel requests data from the network and the data comes back some time later. At that moment, the View reference might be destroyed or might be an old activity that is no longer visible, generating a memory leak and, possibly, a crash.\n\nThe communication between the different layers follow the above diagram using the reactive paradigm, observing changes on components without need of callbacks avoiding leaks and edge cases related with them.\n\n## Patterns\n\n- Repository Pattern - The Repository Pattern is one of the most popular patterns to create an enterprise level application. It restricts us to work directly with the data in the application and creates new layers for database operations, business logic, and the application's UI.\n- Observer Pattern - The observer pattern is a software design pattern in which an object, called the subject, maintains a list of its dependents, called observers, and notifies them automatically of any state changes, usually by calling one of their methods.\n\n\n## Usage\n\nValues ​​in Constants.kt file must be filled.\n\n\n```bash\n        const val API_URL = \"https://sample-node-social-app.herokuapp.com/\"\n        const val PREF_USER_TOKEN_VALUE = \"PREF_USER_TOKEN_VALUE\"\n        const val PREF_USER_ID_VALUE = \"PREF_USER_ID_VALUE\"\n        const val PREF_USER_TOKEN = \"user_token_code.xml\" \n        const val ALGOLIA_APPLICATION_ID = \"xxxx\"\n        const val ALGOLIA_SEARCH_ONLY_API_KEY = \"xxxxx\"\n        const val ALGOLIA_ADMIN_API_KEY = \"xxxxx\"\n        const val ALGOLIA_INDEX_NAME = \"user-list\"\n```\n\n## Features\n\n- Followed - Following System\n- User Search System\n- Content Share(Location,Text) System\n- User Profile System\n- Register - Login System\n- ...\n## BackEnd\n\n- NodeJs \n- Mongoose\n- MongoDb\n\n## Libraries\n\n- Retrofit : type-safe HTTP client.\n- Coroutines :  managing background threads with simplified code and reducing needs for callbacks.\n- Room Library\n- Lifecycle : perform actions in response to a change in the lifecycle status of another component, such as activities and fragments.\n- ViewModel : designed to store and manage UI-related data in a lifecycle conscious way. The ViewModel class allows data to survive configuration changes such as screen rotations.\n- LiveData : lifecycle-aware, meaning it respects the lifecycle of other app components, such as activities, fragments, or services.\n- Data Binding - allows you to bind UI components in your layouts to data sources in your app using a declarative format rather than programmatically.\n- Navigation\n- Gson : makes it easy to parse JSON into Kotlin objects.\n- Glide : image loading library for Android.\n- CircleImageView\n- EasyValidation\n- Toasty\n- Dexter\n- RxImagePicker\n- Secure-Preferences\n- Algolia - instantsearch\n- Paging\n- Splashy\n- Locgetter\n- ReactiveNetwork\n- Lottie\n- ...\n\n## Resources\n\n### Projects\n\nThis is project is a sample, to inspire you and should handle most of the common cases, but obviously not all. If you need to take a look at additional resources to find solutions for your project, visit these interesting projects:\n\n-   [sunflower](https://github.com/android/sunflower) (by [android](https://github.com/android)) - a gardening app illustrating Android development best practices with Android Jetpack.\n-   [architecture-components-samples](https://github.com/android/architecture-components-samples) (by [android](https://github.com/android)) - collection of samples for Android Architecture Components.\n-   [architecture-sample](https://github.com/android/architecture-samples) (by [android](https://github.com/android)) - collection of samples to discuss and showcase different architectural tools and patterns for Android apps.\n\n### Libraries\n\nThe open-source community create and maintains tons of awesome libraries making your job more easy, giving the opportunity to use them in your developments. Here are a very important collection of them:\n\n-   [awesome-android-ui](https://github.com/wasabeef/awesome-android-ui) - collection list of awesome Android UI/UX libraries.\n-   [awesome-android-libraries](https://github.com/KotlinBy/awesome-kotlin#android-libraries) - collection of awesome Kotlin related stuff.\n-   [android-arsenal](https://android-arsenal.com/) - android developer portal with tools, libraries, and apps.\n\n### Best practices\n\nAvoid reinventing the wheel by following these guidelines:\n\n-   [Google best practices](https://developer.android.com/distribute/best-practices)\n-   [Android development best practices](https://github.com/futurice/android-best-practices)\n\n### Codelabs\n\nGoogle Developers Codelabs provide a guided, tutorial, hands-on coding experience. Most codelabs will step you through the process of building a small application, or adding a new feature to an existing application. They cover a wide range of android concepts to learn and practice:\n\n-   [Android Developer Fundamentals](https://developer.android.com/courses/fundamentals-training/toc-v2)\n-   [Android Developer Codelabs](https://codelabs.developers.google.com/?cat=Android)\n\n\n## Thank You\n\nThank You Sanchit Sharma - [Dribble](https://dribbble.com/shots/6612479-Social-Katchup-F)\n\nLogo - [FlatIcon](https://www.flaticon.com/free-icon/love_1029183?term=Like\u0026page=1\u0026position=4)\n\nThank Yoy @nuhkoca  for guiding projects and documentation brief descriptions.\n \n\n## Images\n\n![](https://i.hizliresim.com/zyvVVj.png)\n![](https://i.hizliresim.com/yj8llj.png)\n![](https://i.hizliresim.com/JWr44Q.png)\n![](https://i.hizliresim.com/OanZZD.png)\n![](https://i.hizliresim.com/GGQkkZ.png)\n![](https://i.hizliresim.com/3gBaaM.png)\n\n```\nCopyright 2019 Arda Kazancı\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n    http://www.apache.org/licenses/LICENSE-2.0\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n```\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fardakazanci%2FHeyyoo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fardakazanci%2FHeyyoo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fardakazanci%2FHeyyoo/lists"}