{"id":23075191,"url":"https://github.com/imaginativeshohag/why-not-compose","last_synced_at":"2025-05-15T13:06:07.391Z","repository":{"id":43350337,"uuid":"393535844","full_name":"ImaginativeShohag/Why-Not-Compose","owner":"ImaginativeShohag","description":"A collection of animations, compositions, UIs using Jetpack Compose. You can say Jetpack Compose cookbook, showcase or play-ground if you want!","archived":false,"fork":false,"pushed_at":"2025-01-17T20:31:58.000Z","size":163389,"stargazers_count":692,"open_issues_count":1,"forks_count":44,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-04-24T08:41:34.502Z","etag":null,"topics":["android","android-cookbook","android-jetpack","android-showcase","android-ui","compose","compose-showcase","compose-ui","jetpack","jetpack-compose","jetpackcompose","kotlin","kotlin-android","material3","material3-android","material3-components"],"latest_commit_sha":null,"homepage":"https://play.google.com/store/apps/details?id=org.imaginativeworld.whynotcompose","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/ImaginativeShohag.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","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},"funding":{"custom":["https://www.buymeacoffee.com/ImShohag"]}},"created_at":"2021-08-07T00:15:55.000Z","updated_at":"2025-04-14T20:31:14.000Z","dependencies_parsed_at":"2023-09-21T21:14:34.337Z","dependency_job_id":"18f01fc4-5600-46c4-b4ad-19b88469f9b0","html_url":"https://github.com/ImaginativeShohag/Why-Not-Compose","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ImaginativeShohag%2FWhy-Not-Compose","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ImaginativeShohag%2FWhy-Not-Compose/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ImaginativeShohag%2FWhy-Not-Compose/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ImaginativeShohag%2FWhy-Not-Compose/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ImaginativeShohag","download_url":"https://codeload.github.com/ImaginativeShohag/Why-Not-Compose/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254346624,"owners_count":22055808,"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-cookbook","android-jetpack","android-showcase","android-ui","compose","compose-showcase","compose-ui","jetpack","jetpack-compose","jetpackcompose","kotlin","kotlin-android","material3","material3-android","material3-components"],"created_at":"2024-12-16T08:40:28.911Z","updated_at":"2025-05-15T13:06:02.375Z","avatar_url":"https://github.com/ImaginativeShohag.png","language":"Kotlin","funding_links":["https://www.buymeacoffee.com/ImShohag"],"categories":[],"sub_categories":[],"readme":"# Why Not Compose!\n\nA collection of animations, compositions, and UIs using Jetpack Compose. You can say Jetpack Compose\ncookbook, showcase or playground if you want!\n\nPlease feel free to ask for features or suggestions for improvements.\n\n[![Developer](https://img.shields.io/badge/Maintainer-ImaginativeShohag-green)](https://github.com/ImaginativeShohag)\n[![Buy Me A Coffee](https://img.shields.io/badge/-buy_me_a_coffee-gray?logo=buy-me-a-coffee)](https://www.buymeacoffee.com/ImShohag)\n[![GitHub release](https://img.shields.io/github/release/ImaginativeShohag/Why-Not-Compose.svg)](https://github.com/ImaginativeShohag/Why-Not-Compose/releases)\n[![Google Play](https://img.shields.io/badge/GET%20IT%20ON-Google%20Play-brightgreen)](https://play.google.com/store/apps/details?id=org.imaginativeworld.whynotcompose)\n![API](https://img.shields.io/badge/API-21%2B-brightgreen.svg?style=flat)\n[![ktlint](https://img.shields.io/badge/code%20style-%E2%9D%A4-FF4081.svg)](https://ktlint.github.io/)\n\n## Notable Features \u0026 Libraries\n\n- MVVM Pattern\n- Navigation Component\n- Hilt\n- Everywhere dark mode support\n- A lot of Ready to use compositions\n- Material 3\n- Gradle Kotlin DSL\n- CI/CD\n    - ktlint\n    - CodeQL\n    - Baseline profile generation\n    - Fastlane: Publish to Google Play\n- Material 3 examples\n- Animated Splash Screen (Introduced in Android 12)\n\n[\u003cimg src=\"https://play.google.com/intl/en_us/badges/static/images/badges/en_badge_web_generic.png\" style=\"width:256px\"\u003e](https://play.google.com/store/apps/details?id=org.imaginativeworld.whynotcompose)\n\n## Screenshots\n\n### Animations\n\n| \u003cimg src=\"images/animated-text-and-bubbles.gif\" style=\"width:320px\"/\u003e | \u003cimg src=\"images/the-story.gif\" style=\"width:320px\"/\u003e | \u003cimg src=\"images/running-car.gif\" style=\"width:320px\"/\u003e |\n|:---------------------------------------------------------------------:|:-----------------------------------------------------:|:-------------------------------------------------------:|\n|           \u003cimg src=\"images/emudi.gif\" style=\"width:320px\"\u003e            |                                                       |                                                         |\n\n### Compositions\n\n|     ![Preview](images/app-bar.png)      |   ![Preview](images/button.png)    |       ![Preview](images/card.png)        |\n|:---------------------------------------:|:----------------------------------:|:----------------------------------------:|\n|    ![Preview](images/check-box.png)     |  ![Preview](images/drop-down.png)  |       ![Preview](images/grid.png)        |\n|    ![Preview](images/list-item.png)     |    ![Preview](images/lists.png)    | ![Preview](images/loading-indicator.png) |\n|   ![Preview](images/radio-button.png)   |  ![Preview](images/scaffold.png)   |     ![Preview](images/snackbar.png)      |\n|      ![Preview](images/switch.png)      | ![Preview](images/text-fields.png) |   ![Preview](images/swipe-refresh.gif)   |\n| ![Preview](images/swipe-to-dismiss.gif) |                                    |                                          |\n\n### UIs\n\n|                  \u003cimg src=\"images/map-view.png\" alt=\"Map View\" style=\"width:320px\"/\u003e                  | \u003cimg src=\"images/otp-code-verify.png\" alt=\"OTP code verify\" style=\"width:320px\"/\u003e | \u003cimg src=\"images/web-view.png\" alt=\"Web View\" style=\"width:320px\"/\u003e |\n|:-----------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------------------------:|:-------------------------------------------------------------------:|\n| \u003cvideo src=\"https://github.com/user-attachments/assets/263d712f-1d9a-4e2e-bbf2-e006ab42591a\"\u003e\u003c/video\u003e |                                                                                   |                                                                     |\n\n### Tutorials\n\n- Counter (Beginner)\n- Counter with ViewModel (Beginner)\n- `AnimatedVisibility` (Beginner)\n- Lottie (Beginner)\n- Select image and crop for upload (Intermediate)\n- Capture image and crop for upload (Intermediate)\n- Permission (Beginner)\n- Data Fetch and Paging (Advanced)\n- Tic-Tac-Toe (Advanced)\n- OneSignal and Broadcast (Intermediate)\n- ExoPlayer (Advanced)\n- CMS (Advanced)\n  - Memory and storage caching\n- [Deep Link](https://developer.android.com/training/app-links) (Intermediate)\n- Navigation Data Pass (Intermediate)\n- Reactive Model (Beginner)\n- Baseline Profiles (Intermediate)\n- [Barcode Scanner](https://developers.google.com/ml-kit/vision/barcode-scanning) ([Google code scanner](https://developers.google.com/ml-kit/vision/barcode-scanning/code-scanner) and [ML Kit Barcode](https://developers.google.com/ml-kit/vision/barcode-scanning/android)) (Intermediate)\n\n|    \u003cimg src=\"images/counter.gif\" alt=\"Counter\" style=\"width:320px\"/\u003e    |                 \u003cimg src=\"images/animated-visibility.gif\" alt=\"Animated Visibility\" style=\"width:320px\"/\u003e                 | \u003cimg src=\"images/lottie.gif\" alt=\"Lottie\" style=\"width:320px\"/\u003e |\n|:-----------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------------------:|\n| \u003cimg src=\"images/exo-player.gif\" alt=\"Exo Player\" style=\"width:320px\"/\u003e |                         \u003cimg src=\"images/tic-tac-toe.gif\" alt=\"Tic-Tac-Toe\" style=\"width:320px\"/\u003e                         |    \u003cimg src=\"images/cms.gif\" alt=\"CMS\" style=\"width:320px\"/\u003e    |\n| \u003cimg src=\"images/deep-links.gif\" alt=\"Deep Links\" style=\"width:320px\"/\u003e | \u003cvideo src=\"https://github.com/user-attachments/assets/71d86d8e-1b4e-4a0d-bf2c-e9bb84bb5d39\" style=\"width:320px\"\u003e\u003c/video\u003e |                                                                 |\n\n# TODO\n\n- [ ] Add accompanist WebView\n- [ ] x, y, z translation simulation\n- [ ] Shadow manipulation with device gyroscope\n- [ ] Composition: Bottom Sheet\n- [ ] Fix custom `LazyGridScope.items`\n- [ ] List with `LazyGrid`\n- [ ] Paging with `LazyGrid`\n- [ ] Update to new storage permission\n- [ ] Create color ready for dark and light mode\n- [ ] AlarmManager example\n- [ ] Update `CheckBox` code (see example from AOSP)\n- [ ] Month-Picker component\n- [ ] Upgrade OneSignal lib\n- [ ] New: File browser using MediaStore\n- [ ] Get sidebar from Emudi app (https://www.youtube.com/watch?v=HNSKJIQtb4c)\n- [ ] Migrate ExoPlayer: https://developer.android.com/media/media3/exoplayer/migration-guide\n- [ ] Update all `LaunchedEffect` with lambda issue using `rememberUpdatedState`: https://developer.android.com/develop/ui/compose/side-effects#rememberupdatedstate\n- [ ] Add example for AppColorLocal from Jaber vai\n\n# Note\n\n- For dependency version check I am currently using [refreshVersions](https://github.com/Splitties/refreshVersions). \n  Use the following command to fetch version updates.\n\n```bash\n./gradlew refreshVersions\n```\n\n- The project using [spotless](https://github.com/diffplug/spotless/tree/main/plugin-gradle)\n  with [klint](https://github.com/pinterest/ktlint). Apply spotless using the following command.\n\n```bash\n./gradlew --init-script gradle/init.gradle.kts spotlessApply\n```\n\n## Setup\n\n### Map API Key\n\nOpen the `local.properties` in your project level directory, and then add the following code.\nReplace `YOUR_API_KEY` with your API key.\n\n```groovy\nMAPS_API_KEY=YOUR_API_KEY\n```\n\n### Go REST API Key\n\nOpen the `local.properties` in your project level directory, and then add the following code.\nReplace `YOUR_API_KEY` with your [Go REST](https://gorest.co.in) API key.\n\n```groovy\nCMS_API_KEY=YOUR_API_KEY\n```\n\n## Other Interesting Repos\n\n- [Compose Material Catalog](https://github.com/androidx/androidx/tree/androidx-main/compose/integration-tests/material-catalog)\n- [Official Compose Samples](https://github.com/android/compose-samples)\n- [Now in Android App](https://github.com/android/nowinandroid)\n- [ChrisBanes/Tivi](https://github.com/chrisbanes/tivi)\n- [Gurupreet/ComposeCookBook](https://github.com/Gurupreet/ComposeCookBook)\n- [spencergriffin/exoplayer-compose](https://github.com/spencergriffin/exoplayer-compose)\n- [godaddy/compose-color-picker](https://github.com/godaddy/compose-color-picker)\n- [Jetpack Compose Awesome](https://github.com/jetpack-compose/jetpack-compose-awesome)\n\n## Credits\n\n- [Android official compose samples](https://cs.android.com/androidx/platform/tools/dokka-devsite-plugin/+/master:testData/compose/samples/)\n- [Iconly icon](https://freebiesbug.com/figma-freebies/iconly/)\n\n## Licence\n\n- **Emudi** is a trademark of [Softzino Technologies](https://softzino.com/).\n\n```\nCopyright 2021 Md. Mahmudul Hasan Shohag\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","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimaginativeshohag%2Fwhy-not-compose","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fimaginativeshohag%2Fwhy-not-compose","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fimaginativeshohag%2Fwhy-not-compose/lists"}