{"id":16556269,"url":"https://github.com/asynctaskcoffee/themoviedbapp","last_synced_at":"2026-05-19T10:01:53.576Z","repository":{"id":170454132,"uuid":"281509613","full_name":"AsynctaskCoffee/TheMovieDBApp","owner":"AsynctaskCoffee","description":"Basic MVP integration on themoviedb.org Api","archived":false,"fork":false,"pushed_at":"2020-08-22T13:23:29.000Z","size":14927,"stargazers_count":8,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"master","last_synced_at":"2025-04-15T01:20:00.304Z","etag":null,"topics":["android","dagger2-android","kotlin","motion-layout","mvp","rxjava2","themoviedb"],"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/AsynctaskCoffee.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-07-21T21:37:51.000Z","updated_at":"2022-04-05T18:19:41.000Z","dependencies_parsed_at":null,"dependency_job_id":"5d979abc-dcb5-42e0-a52e-4f4328dfb5f2","html_url":"https://github.com/AsynctaskCoffee/TheMovieDBApp","commit_stats":null,"previous_names":["asynctaskcoffee/themoviedbapp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/AsynctaskCoffee/TheMovieDBApp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsynctaskCoffee%2FTheMovieDBApp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsynctaskCoffee%2FTheMovieDBApp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsynctaskCoffee%2FTheMovieDBApp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsynctaskCoffee%2FTheMovieDBApp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/AsynctaskCoffee","download_url":"https://codeload.github.com/AsynctaskCoffee/TheMovieDBApp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/AsynctaskCoffee%2FTheMovieDBApp/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":259820812,"owners_count":22916548,"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","dagger2-android","kotlin","motion-layout","mvp","rxjava2","themoviedb"],"created_at":"2024-10-11T20:04:01.139Z","updated_at":"2025-09-21T06:32:49.419Z","avatar_url":"https://github.com/AsynctaskCoffee.png","language":"Kotlin","funding_links":[],"categories":[],"sub_categories":[],"readme":"# themoviedb.org MVP integration\n\u003e Simple MVP-Kotlin list-based application.\n\n[![Kotlin Version](https://img.shields.io/badge/language-kotlin%20100%25-orange.svg)](https://kotlinlang.org/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-yellowgreen.svg)](https://opensource.org/licenses/Apache-2.0)\n\nMVP-Kotlin application, that allows the user to fetch movie and series information from a TMDB's API. :bowtie: It will make me very happy to your report about places you think have problems. :facepunch:\n\n![](grph/promotion.png)\n\n## Features\n\n- [x] MVP - Kotlin\n- [x] Dagger 2\n- [x] RxJava 2\n- [x] Motion Layout\n- [x] Endless Pagination\n- [x] Window activity transitions\n- [x] Signing Configs\n- [x] Application Variants\n\n## MVP Kotlin\n\nThe main purpose of MVP (Model - View - Presenter) is to separate the user interface from the business logic.\n\n### MVP General Structure\n\n![](grph/mvppresent.png)\n\n\n## Motion Layout\n\nMotion Layout is part of the ConstraintLayout 2.0 library. We can make animations easly that we previously made with hundreds of lines of code with Motion Layout. Thanks to this layout, you can add animations to your application very quickly and simply and make your application more attractive visually. For more visit GDP.\n\n### Animation Samples\n\n\u003cimg src = \"grph/motionlayout.gif\" width =\"300\" /\u003e \u003cimg src = \"grph/expandedanim.gif\" width =\"300\" /\u003e\n\n## Window Activity Transitions\n\nActivity transitions in material design apps, connect different layout components with shared views. You can pass shared views to another activity on intent bundle. Provides professional transition effects to your application with a simple few lines of code. For more visit GDP.\n\n```kotlin\nval pairImage = Pair\u003cView, String\u003e(\n    itemView.moviesImage,\n    itemView.context.resources.getString(R.string.transitionImage)\n)\nval pairTitle = Pair\u003cView, String\u003e(\n    itemView.moviesTitle,\n    itemView.context.resources.getString(R.string.transitionTitle)\n)\nval pairStar = Pair\u003cView, String\u003e(\n    itemView.cardStarHolder,\n    itemView.context.resources.getString(R.string.transitionCard)\n)\n\nval activityOptions = ActivityOptions.makeSceneTransitionAnimation(\n    moviesFragment.activity,\n    pairImage,\n    pairTitle,\n    pairStar\n)\n\nactivity.startActivity(intent, bundle)\n```\n### Transitions Samples\n\n\u003cimg src = \"grph/viewtrainsition.gif\" width =\"300\" /\u003e \u003cimg src = \"grph/motionlayout.gif\" width =\"300\" /\u003e\n\n\n## Signing Configs and Application Variants\n\nIt is important to make these settings in your gradle file, not to forget application signing keys and to get correct output apks.\n\n```kotlin\nsigningConfigs {\n    release {\n        readKeystorePropertiesAfterBuild()\n    }\n    debug {\n        keyAlias 'key0'\n        keyPassword '123456'\n        storeFile file('movies_debug.jks')\n        storePassword '123456'\n    }\n}\n\napplicationVariants.all { variant -\u003e\n    variant.outputs.all {\n        def versionName = variant.versionName\n        def versionCode = variant.versionCode\n        def variantName = variant.name\n        outputFileName = variantName + '_' + versionName + '_' + versionCode + '.apk'\n    }\n}\n\ndef readKeystorePropertiesAfterBuild() {\n    def propsFile = rootProject.file('keystore.properties')\n    def configName = 'release'\n    if (propsFile.exists() \u0026\u0026 android.signingConfigs.hasProperty(configName)) {\n        def props = new Properties()\n        props.load(new FileInputStream(propsFile))\n        android.signingConfigs[configName].storeFile = file(props['storeFile'])\n        android.signingConfigs[configName].storePassword = props['storePassword']\n        android.signingConfigs[configName].keyAlias = props['keyAlias']\n        android.signingConfigs[configName].keyPassword = props['keyPassword']\n    }\n}\n```\n\n\n## License\n\n```\nCopyright 2020 Egemen ÖZOGUL\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%2Fasynctaskcoffee%2Fthemoviedbapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fasynctaskcoffee%2Fthemoviedbapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fasynctaskcoffee%2Fthemoviedbapp/lists"}