{"id":13774704,"url":"https://github.com/Ezike/StarWarsSearch-MVI","last_synced_at":"2025-05-11T06:33:39.434Z","repository":{"id":54520469,"uuid":"294171829","full_name":"Ezike/StarWarsSearch-MVI","owner":"Ezike","description":"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","archived":false,"fork":false,"pushed_at":"2024-04-14T11:45:38.000Z","size":845,"stargazers_count":197,"open_issues_count":0,"forks_count":30,"subscribers_count":8,"default_branch":"main","last_synced_at":"2024-08-03T17:11:06.096Z","etag":null,"topics":["android","android-studio","architecture","clean-architecture","componentization","coroutines","dagger-hilt","flow","jetpack","jetpack-android","kotlin","kotlin-coroutines","kotlin-gradle-dsl","mvi","mvi-android","mvi-clean-architecture","netflix","redux","redux-store","viewmodel"],"latest_commit_sha":null,"homepage":"","language":"Kotlin","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Ezike.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2020-09-09T16:41:42.000Z","updated_at":"2024-07-01T21:37:50.000Z","dependencies_parsed_at":"2024-03-27T09:47:52.302Z","dependency_job_id":"6f11c8d0-3465-4a07-9471-aa5f44094d8d","html_url":"https://github.com/Ezike/StarWarsSearch-MVI","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/Ezike%2FStarWarsSearch-MVI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ezike%2FStarWarsSearch-MVI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ezike%2FStarWarsSearch-MVI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Ezike%2FStarWarsSearch-MVI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Ezike","download_url":"https://codeload.github.com/Ezike/StarWarsSearch-MVI/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225022257,"owners_count":17408593,"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":["android","android-studio","architecture","clean-architecture","componentization","coroutines","dagger-hilt","flow","jetpack","jetpack-android","kotlin","kotlin-coroutines","kotlin-gradle-dsl","mvi","mvi-android","mvi-clean-architecture","netflix","redux","redux-store","viewmodel"],"created_at":"2024-08-03T17:01:29.463Z","updated_at":"2024-11-17T09:31:12.521Z","avatar_url":"https://github.com/Ezike.png","language":"Kotlin","funding_links":[],"categories":[":art: Pattern"],"sub_categories":["MVI"],"readme":"![Android Build](https://github.com/Ezike/StarWarsSearch/workflows/Android%20Build/badge.svg)\n\nHey there 👋🏼👋🏼👋🏼\n\nThis project contains an implementation of the Componentization idea as shown by the UI Engineering team at Netflix.\n\nResources: [blog](https://netflixtechblog.com/making-our-android-studio-apps-reactive-with-ui-components-redux-5e37aac3b244), [repo](https://github.com/julianomoraes/componentizationArch), [talk](https://www.droidcon.com/media-detail?video=362740979)\n\n## Features\n* Clean Architecture with MVI (Uni-directional data flow)\n* View components\n* Kotlin Coroutines with Flow\n* Dagger Hilt\n* Kotlin Gradle DSL\n* GitHub actions for CI\n\n## Prerequisite\nTo build this project, you require:\n- Android Studio Jellyfish\n- Gradle 8.3\n- Kotlin 1.9.23\n- Android Gradle Plugin 8.2.0\n\nRun the following command in the root of the project to setup your Android Studio:\n```\n./setup.sh\n```\nThis script will configure [ktlint](https://github.com/shyiko/ktlint)\n\n\u003ch2 align=\"left\"\u003eScreenshots\u003c/h2\u003e\n\u003ch4 align=\"center\"\u003e\n\u003cimg src=\"https://res.cloudinary.com/diixxqjcx/image/upload/v1596748100/star_wars_recents.jpg\" width=\"30%\" vspace=\"10\" hspace=\"10\"\u003e\n\u003cimg src=\"https://res.cloudinary.com/diixxqjcx/image/upload/v1596748100/star_wars_search.png\" width=\"30%\" vspace=\"10\" hspace=\"10\"\u003e\n\u003cimg src=\"https://res.cloudinary.com/diixxqjcx/image/upload/v1596748100/star_wars_detail.jpg\" width=\"30%\" vspace=\"10\" hspace=\"10\"\u003e\u003cbr\u003e\n\n## Libraries\n\n- [Viewmodel](https://developer.android.com/topic/libraries/architecture/viewmodel) - Presenter for persisting view state across config changes\n- [FlowBinding](https://github.com/ReactiveCircus/FlowBinding) - converts traditional view click listeners and call backs to Kotlin flow\n- [Room](https://developer.android.com/training/data-storage/room) - Provides abstraction layer over SQLite\n- [Retrofit](https://square.github.io/retrofit/) - type safe http client and supports coroutines out of the box.  \n- [Moshi](https://github.com/square/moshi) - JSON Parser,used to parse requests on the data layer for Entities and understands Kotlin non-nullable and default parameters\n- [okhttp-logging-interceptor](https://github.com/square/okhttp/blob/master/okhttp-logging-interceptor/README.md) - logs HTTP request and response data.\n- [kotlinx.coroutines](https://github.com/Kotlin/kotlinx.coroutines) - Library Support for coroutines,provides `runBlocking` coroutine builder used in tests\n- [Truth](https://truth.dev/) - Assertions Library,provides readability as far as assertions are concerned\n- [MockWebServer](https://github.com/square/okhttp/tree/master/mockwebserver) - web server for testing HTTP clients ,verify requests and responses on the star wars api with the retrofit client.\n- [Robolectric](http://robolectric.org/) - Unit test on android framework.\n- [Espresso](https://developer.android.com/training/testing/espresso) - Test framework to write UI Tests\n- [Dagger Hilt](https://dagger.dev/hilt) - handles dependency injection\n  \n  ## License\n\n```license\nCopyright 2020-2021 Ezike Tobenna\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","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FEzike%2FStarWarsSearch-MVI","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FEzike%2FStarWarsSearch-MVI","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FEzike%2FStarWarsSearch-MVI/lists"}