├── app ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── values │ │ │ │ ├── integers.xml │ │ │ │ ├── colors.xml │ │ │ │ ├── styles.xml │ │ │ │ ├── attrs.xml │ │ │ │ └── strings.xml │ │ │ ├── values-v21 │ │ │ │ └── styles.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── drawable │ │ │ │ ├── ic_warning.xml │ │ │ │ ├── ic_star.xml │ │ │ │ ├── ic_date_range_black_24dp.xml │ │ │ │ └── ic_launcher_background.xml │ │ │ ├── layout │ │ │ │ ├── item_loading.xml │ │ │ │ ├── item_popular.xml │ │ │ │ ├── activity_popular.xml │ │ │ │ └── activity_detail.xml │ │ │ └── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── efemoney │ │ │ │ └── maggg │ │ │ │ ├── Navigator.kt │ │ │ │ ├── ui │ │ │ │ ├── detail │ │ │ │ │ ├── DetailModule.kt │ │ │ │ │ ├── DetailInjector.kt │ │ │ │ │ ├── DetailViewModel.kt │ │ │ │ │ └── DetailActivity.kt │ │ │ │ ├── popular │ │ │ │ │ ├── PopularModule.kt │ │ │ │ │ ├── PopularInjector.kt │ │ │ │ │ ├── PopularViewModel.kt │ │ │ │ │ └── PopularActivity.kt │ │ │ │ ├── base │ │ │ │ │ └── BaseActivity.kt │ │ │ │ └── widget │ │ │ │ │ └── AspectRatioImageView.kt │ │ │ │ ├── data │ │ │ │ ├── model │ │ │ │ │ ├── Genre.kt │ │ │ │ │ ├── ProductionCompany.kt │ │ │ │ │ ├── SpokenLanguage.kt │ │ │ │ │ ├── ProductionCountry.kt │ │ │ │ │ ├── Paged.kt │ │ │ │ │ ├── BelongsToCollection.kt │ │ │ │ │ ├── MovieOverview.kt │ │ │ │ │ ├── Movie.kt │ │ │ │ │ └── TmdbImagePath.kt │ │ │ │ ├── remote │ │ │ │ │ ├── Config.kt │ │ │ │ │ └── TmdbApi.kt │ │ │ │ ├── Repository.kt │ │ │ │ └── TmdbRepository.kt │ │ │ │ ├── inject │ │ │ │ ├── qualifier │ │ │ │ │ ├── ApiKey.kt │ │ │ │ │ └── ImageConfigPref.kt │ │ │ │ ├── ViewModelClassKey.kt │ │ │ │ ├── module │ │ │ │ │ ├── RepositoryModule.kt │ │ │ │ │ ├── ViewModelFactoryModule.kt │ │ │ │ │ ├── RxSchedulerModule.kt │ │ │ │ │ ├── GlideConfigModule.kt │ │ │ │ │ ├── AppModule.kt │ │ │ │ │ └── ApiModule.kt │ │ │ │ ├── DaggerViewModelFactory.kt │ │ │ │ └── component │ │ │ │ │ └── AppComponent.kt │ │ │ │ ├── rx │ │ │ │ ├── RxSchedulers.kt │ │ │ │ └── ProductionRxSchedulers.kt │ │ │ │ ├── MagggApp.kt │ │ │ │ ├── interceptor │ │ │ │ └── AuthInterceptor.kt │ │ │ │ ├── ext │ │ │ │ ├── livedata.kt │ │ │ │ ├── glide.kt │ │ │ │ ├── app.kt │ │ │ │ └── view.kt │ │ │ │ ├── glide │ │ │ │ ├── TmdbImageModelLoader.kt │ │ │ │ ├── MagggAppGlideModule.kt │ │ │ │ └── TmdbImageUrlConfig.kt │ │ │ │ └── gson │ │ │ │ └── TmdbImagePathAdapterFactory.kt │ │ └── AndroidManifest.xml │ └── test │ │ └── kotlin │ │ └── com │ │ └── efemoney │ │ └── maggg │ │ └── ui │ │ ├── rx │ │ └── TestRxSchedulers.kt │ │ ├── detail │ │ └── DetailViewModelTest.kt │ │ └── popular │ │ └── PopularViewModelTest.kt ├── proguard-rules.pro └── build.gradle ├── settings.gradle ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── gradle.properties ├── README.md ├── gradlew.bat ├── deps.gradle └── gradlew /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efemoney/maggg/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efemoney/maggg/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efemoney/maggg/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efemoney/maggg/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efemoney/maggg/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/kotlin/com/efemoney/maggg/Navigator.kt: -------------------------------------------------------------------------------- 1 | package com.efemoney.maggg 2 | 3 | interface Navigator { 4 | fun showDetails(id: Int) 5 | } -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efemoney/maggg/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efemoney/maggg/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efemoney/maggg/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efemoney/maggg/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efemoney/maggg/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/efemoney/maggg/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 2 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/efemoney/maggg/ui/detail/DetailModule.kt: -------------------------------------------------------------------------------- 1 | package com.efemoney.maggg.ui.detail 2 | 3 | import dagger.Module 4 | 5 | @Module 6 | internal abstract class DetailModule { 7 | 8 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/efemoney/maggg/ui/popular/PopularModule.kt: -------------------------------------------------------------------------------- 1 | package com.efemoney.maggg.ui.popular 2 | 3 | import dagger.Module 4 | 5 | @Module 6 | internal abstract class PopularModule { 7 | 8 | } -------------------------------------------------------------------------------- /app/src/main/kotlin/com/efemoney/maggg/data/model/Genre.kt: -------------------------------------------------------------------------------- 1 | package com.efemoney.maggg.data.model 2 | 3 | import com.efemoney.maggg.ext.Json 4 | 5 | data class Genre(@Json("id") val id: Int, 6 | @Json("name") val name: String 7 | ) -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #3F51B5 4 | #303F9F 5 | #FF4081 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/efemoney/maggg/inject/qualifier/ApiKey.kt: -------------------------------------------------------------------------------- 1 | package com.efemoney.maggg.inject.qualifier 2 | 3 | import javax.inject.Qualifier 4 | 5 | @MustBeDocumented 6 | @Retention(AnnotationRetention.RUNTIME) 7 | @Qualifier 8 | annotation class ApiKey -------------------------------------------------------------------------------- /app/src/main/kotlin/com/efemoney/maggg/rx/RxSchedulers.kt: -------------------------------------------------------------------------------- 1 | package com.efemoney.maggg.rx 2 | 3 | import io.reactivex.Scheduler 4 | 5 | interface RxSchedulers { 6 | val computation: Scheduler 7 | val network: Scheduler 8 | val main: Scheduler 9 | } -------------------------------------------------------------------------------- /app/src/main/res/values-v21/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/efemoney/maggg/inject/qualifier/ImageConfigPref.kt: -------------------------------------------------------------------------------- 1 | package com.efemoney.maggg.inject.qualifier 2 | 3 | import javax.inject.Qualifier 4 | 5 | @MustBeDocumented 6 | @Retention(AnnotationRetention.RUNTIME) 7 | @Qualifier 8 | annotation class ImageConfigPref -------------------------------------------------------------------------------- /app/src/main/kotlin/com/efemoney/maggg/data/model/ProductionCompany.kt: -------------------------------------------------------------------------------- 1 | package com.efemoney.maggg.data.model 2 | 3 | import com.efemoney.maggg.ext.Json 4 | 5 | data class ProductionCompany(@Json("id") val id: Int, 6 | @Json("name") val name: String 7 | ) -------------------------------------------------------------------------------- /app/src/main/kotlin/com/efemoney/maggg/data/model/SpokenLanguage.kt: -------------------------------------------------------------------------------- 1 | package com.efemoney.maggg.data.model 2 | 3 | import com.efemoney.maggg.ext.Json 4 | 5 | data class SpokenLanguage(@Json("iso_639_1") val iso6391: String, 6 | @Json("name") val name: String 7 | ) -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Dec 07 16:39:08 WAT 2017 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip 7 | -------------------------------------------------------------------------------- /app/src/main/kotlin/com/efemoney/maggg/data/model/ProductionCountry.kt: -------------------------------------------------------------------------------- 1 | package com.efemoney.maggg.data.model 2 | 3 | import com.efemoney.maggg.ext.Json 4 | 5 | data class ProductionCountry(@Json("name") val name: String, 6 | @Json("iso_3166_1") val iso31661: String 7 | ) -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 |