├── .circleci └── config.yml ├── .codecov └── config.yml ├── .detekt └── config.yml ├── .editorconfig ├── .github ├── FUNDING.yml ├── ISSUE_TEMPLATE.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── .lint └── config.xml ├── .spotless └── copyright.kt ├── CHANGELOG.md ├── CONTRIBUTING.md ├── LICENSE ├── README.md ├── app ├── .gitignore ├── build.gradle.kts ├── proguard-rules.pro └── src │ ├── androidTest │ └── kotlin │ │ └── com │ │ └── vmadalin │ │ └── android │ │ └── ExampleInstrumentedTest.kt │ ├── debug │ └── res │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── 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 │ ├── main │ ├── AndroidManifest.xml │ ├── ic_launcher_playstore.png │ ├── kotlin │ │ └── com │ │ │ └── vmadalin │ │ │ └── android │ │ │ ├── SampleApp.kt │ │ │ ├── SampleMainActivity.kt │ │ │ └── di │ │ │ ├── AppComponent.kt │ │ │ └── AppModule.kt │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── 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 │ │ ├── navigation │ │ └── navigation_app_graph.xml │ │ ├── values-night │ │ ├── colors.xml │ │ └── styles.xml │ │ └── values │ │ ├── colors.xml │ │ ├── features.xml │ │ ├── strings.xml │ │ └── styles.xml │ ├── prod │ ├── AndroidManifest.xml │ └── res │ │ └── values │ │ └── strings.xml │ └── qa │ ├── AndroidManifest.xml │ └── res │ └── values │ └── strings.xml ├── build.gradle.kts ├── buildSrc ├── build.gradle.kts └── src │ └── main │ └── kotlin │ ├── BuildAndroidConfig.kt │ ├── BuildDependenciesVersions.kt │ ├── BuildModules.kt │ ├── BuildPlugins.kt │ ├── BuildProductDimensions.kt │ ├── BuildProductFlavors.kt │ ├── BuildTasksGroups.kt │ ├── BuildTypes.kt │ ├── commons │ ├── android-dynamic-feature.gradle.kts │ ├── android-library.gradle.kts │ └── kotlin-library.gradle.kts │ ├── dependencies │ ├── AnnotationProcessorsDependencies.kt │ ├── DebugDependencies.kt │ ├── Dependencies.kt │ ├── TestAndroidDependencies.kt │ └── TestDependencies.kt │ ├── extensions │ ├── BuildTypeExtensions.kt │ ├── DependencyHandlerExtensions.kt │ ├── ProjectExtensions.kt │ └── RepositoryHandlerExtensions.kt │ ├── plugins │ ├── detekt.gradle.kts │ ├── dokka.gradle.kts │ ├── git-hooks.gradle.kts │ ├── ktlint.gradle.kts │ ├── spotless.gradle.kts │ └── update-dependencies.gradle.kts │ └── utils │ ├── BuildUtils.kt │ ├── CrashlyticsUtils.kt │ └── SystemOSUtils.kt ├── commons ├── ui │ ├── .gitignore │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── vmadalin │ │ │ │ └── commons │ │ │ │ └── ui │ │ │ │ ├── base │ │ │ │ ├── BaseFragment.kt │ │ │ │ ├── BaseListAdapter.kt │ │ │ │ ├── BasePagedListAdapter.kt │ │ │ │ ├── BaseViewHolder.kt │ │ │ │ └── BaseViewState.kt │ │ │ │ ├── bindings │ │ │ │ ├── ImageViewBindings.kt │ │ │ │ ├── RecyclerViewBindings.kt │ │ │ │ └── ViewBindings.kt │ │ │ │ ├── extensions │ │ │ │ ├── ContextExtensions.kt │ │ │ │ ├── FragmentExtensions.kt │ │ │ │ ├── LifecycleOwnerExtensions.kt │ │ │ │ ├── NavigationExtensions.kt │ │ │ │ └── RecyclerViewExtensions.kt │ │ │ │ ├── livedata │ │ │ │ └── SingleLiveData.kt │ │ │ │ └── recyclerview │ │ │ │ └── RecyclerViewItemDecoration.kt │ │ └── res │ │ │ └── values │ │ │ └── colors.xml │ │ └── test │ │ ├── kotlin │ │ └── com │ │ │ └── vmadalin │ │ │ └── commons │ │ │ └── ui │ │ │ ├── base │ │ │ ├── BaseFragmentTest.kt │ │ │ ├── BaseListAdapterTest.kt │ │ │ ├── BasePagedListAdapterTest.kt │ │ │ └── BaseViewHolderTest.kt │ │ │ ├── bindings │ │ │ ├── RecyclerViewBindingTest.kt │ │ │ └── ViewBindingsTest.kt │ │ │ ├── extensions │ │ │ ├── ContextExtensionsTest.kt │ │ │ ├── FragmentExtensionsTest.kt │ │ │ ├── LifecycleOwnerExtensionsTest.kt │ │ │ └── RecyclerViewExtensionsTest.kt │ │ │ ├── livedata │ │ │ └── SingleLiveDataTest.kt │ │ │ └── recyckerview │ │ │ └── RecyclerViewItemDecorationTest.kt │ │ └── resources │ │ └── mockito-extensions │ │ └── org.mockito.plugins.MockMaker └── views │ ├── .gitignore │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src │ └── main │ ├── AndroidManifest.xml │ ├── kotlin │ └── com │ │ └── vmadalin │ │ └── commons │ │ └── views │ │ └── ProgressBarDialog.kt │ └── res │ ├── drawable │ └── shape_progress_dialog.xml │ ├── layout │ └── view_progress_dialog.xml │ └── values │ ├── dimens.xml │ └── styles.xml ├── core ├── .gitignore ├── build.gradle.kts ├── consumer-rules.pro ├── proguard-rules.pro └── src │ ├── main │ ├── AndroidManifest.xml │ └── kotlin │ │ └── com │ │ └── vmadalin │ │ └── core │ │ ├── annotations │ │ └── OpenForTesting.kt │ │ ├── database │ │ ├── MarvelDatabase.kt │ │ ├── characterfavorite │ │ │ ├── CharacterFavorite.kt │ │ │ ├── CharacterFavoriteDao.kt │ │ │ └── CharacterFavoriteRepository.kt │ │ └── migrations │ │ │ └── MarvelDatabaseMigration1to2.kt │ │ ├── di │ │ ├── CoreComponent.kt │ │ ├── modules │ │ │ ├── ContextModule.kt │ │ │ ├── DatabaseModule.kt │ │ │ ├── NetworkModule.kt │ │ │ └── UtilsModule.kt │ │ └── scopes │ │ │ ├── AppScope.kt │ │ │ └── FeatureScope.kt │ │ ├── extensions │ │ ├── ByteArrayExtensions.kt │ │ └── StringExtensions.kt │ │ ├── mapper │ │ └── Mapper.kt │ │ ├── network │ │ ├── NetworkState.kt │ │ ├── repositiories │ │ │ └── MarvelRepository.kt │ │ ├── responses │ │ │ ├── BaseResponse.kt │ │ │ ├── CharacterResponse.kt │ │ │ ├── CharacterThumbnailResponse.kt │ │ │ └── DataResponse.kt │ │ └── services │ │ │ └── MarvelService.kt │ │ └── utils │ │ ├── ThemeUtils.kt │ │ └── ThemeUtilsImpl.kt │ └── test │ ├── kotlin │ └── com │ │ └── vmadalin │ │ └── core │ │ ├── database │ │ ├── MarvelDatabaseTest.kt │ │ ├── charactersfavorite │ │ │ ├── CharacterFavoriteDaoTest.kt │ │ │ ├── CharacterFavoriteRepositoryTest.kt │ │ │ └── CharacterFavoriteTest.kt │ │ └── migrations │ │ │ └── MarvelDatabaseMigration1to2Test.kt │ │ ├── di │ │ ├── ContextModuleTest.kt │ │ ├── DatabaseModuleTest.kt │ │ └── NetworkModuleTest.kt │ │ ├── extensions │ │ ├── ByteArrayExtensionsTest.kt │ │ └── StringExtensionsTest.kt │ │ ├── network │ │ ├── NetworkStateTest.kt │ │ ├── repositories │ │ │ └── MarvelRepositoryTest.kt │ │ ├── responses │ │ │ ├── BaseResponseTest.kt │ │ │ ├── CharacterResponseTest.kt │ │ │ ├── CharacterThumbnailResponseTest.kt │ │ │ └── DataResponseTest.kt │ │ └── services │ │ │ └── MarvelServiceTest.kt │ │ └── utils │ │ └── ThemeUtilsTest.kt │ └── resources │ ├── mock-responses │ ├── get-character-id-status200.json │ ├── get-character-id-status401.json │ ├── get-character-id-status404.json │ ├── get-characters-status200.json │ ├── get-characters-status204.json │ └── get-characters-status401.json │ └── mockito-extensions │ └── org.mockito.plugins.MockMaker ├── docs ├── _config.yml ├── app │ ├── alltypes │ │ └── index.html │ ├── com.vmadalin.android.di │ │ ├── -app-component │ │ │ ├── index.html │ │ │ └── inject.html │ │ ├── -app-module │ │ │ ├── -init-.html │ │ │ ├── index.html │ │ │ └── provide-context.html │ │ └── index.html │ ├── com.vmadalin.android │ │ ├── -sample-app │ │ │ ├── -init-.html │ │ │ ├── core-component.html │ │ │ ├── index.html │ │ │ ├── on-create.html │ │ │ └── theme-utils.html │ │ ├── -sample-main-activity │ │ │ ├── -init-.html │ │ │ ├── index.html │ │ │ └── on-create.html │ │ └── index.html │ ├── index-outline.html │ ├── index.html │ └── package-list ├── commons │ ├── index.html │ ├── ui │ │ ├── alltypes │ │ │ └── index.html │ │ ├── com.vmadalin.commons.ui.base │ │ │ ├── -base-fragment │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ ├── on-attach.html │ │ │ │ ├── on-create-view.html │ │ │ │ ├── on-init-data-binding.html │ │ │ │ ├── on-init-dependency-injection.html │ │ │ │ ├── on-view-created.html │ │ │ │ ├── require-compat-activity.html │ │ │ │ ├── view-binding.html │ │ │ │ └── view-model.html │ │ │ ├── -base-list-adapter │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ └── on-create-view-holder.html │ │ │ ├── -base-paged-list-adapter │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ ├── on-attached-to-recycler-view.html │ │ │ │ ├── on-create-view-holder.html │ │ │ │ ├── on-detached-from-recycler-view.html │ │ │ │ └── submit-list.html │ │ │ ├── -base-view-holder │ │ │ │ ├── -init-.html │ │ │ │ ├── binding.html │ │ │ │ └── index.html │ │ │ ├── -base-view-state.html │ │ │ └── index.html │ │ ├── com.vmadalin.commons.ui.bindings │ │ │ ├── android.view.-view │ │ │ │ ├── gone.html │ │ │ │ ├── index.html │ │ │ │ ├── invisible.html │ │ │ │ └── visible.html │ │ │ ├── android.widget.-image-view │ │ │ │ ├── image-url.html │ │ │ │ └── index.html │ │ │ ├── androidx.recyclerview.widget.-recycler-view │ │ │ │ ├── index.html │ │ │ │ └── set-item-decoration-spacing.html │ │ │ └── index.html │ │ ├── com.vmadalin.commons.ui.extensions │ │ │ ├── android.content.-context │ │ │ │ ├── get-string.html │ │ │ │ └── index.html │ │ │ ├── androidx.fragment.app.-fragment │ │ │ │ ├── index.html │ │ │ │ └── view-model.html │ │ │ ├── androidx.lifecycle.-lifecycle-owner │ │ │ │ ├── index.html │ │ │ │ └── observe.html │ │ │ ├── androidx.recyclerview.widget.-recycler-view │ │ │ │ ├── grid-layout-manager.html │ │ │ │ ├── index.html │ │ │ │ └── linear-layout-manager.html │ │ │ ├── com.google.android.material.bottomnavigation.-bottom-navigation-view │ │ │ │ ├── index.html │ │ │ │ └── setup-with-nav-controller.html │ │ │ └── index.html │ │ ├── com.vmadalin.commons.ui.livedata │ │ │ ├── -single-live-data │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ ├── observe.html │ │ │ │ └── set-value.html │ │ │ └── index.html │ │ ├── com.vmadalin.commons.ui.recyclerview │ │ │ ├── -recycler-view-item-decoration │ │ │ │ ├── -init-.html │ │ │ │ ├── get-item-offsets.html │ │ │ │ └── index.html │ │ │ └── index.html │ │ ├── index-outline.html │ │ ├── index.html │ │ └── package-list │ └── views │ │ ├── alltypes │ │ └── index.html │ │ ├── com.vmadalin.commons.views │ │ ├── -progress-bar-dialog │ │ │ ├── -init-.html │ │ │ ├── dismiss-with-error-message.html │ │ │ ├── index.html │ │ │ ├── show.html │ │ │ └── view-binding.html │ │ └── index.html │ │ ├── index-outline.html │ │ ├── index.html │ │ └── package-list ├── core │ ├── alltypes │ │ └── index.html │ ├── com.vmadalin.core.annotations │ │ ├── -open-class │ │ │ ├── -init-.html │ │ │ └── index.html │ │ ├── -open-for-testing │ │ │ ├── -init-.html │ │ │ └── index.html │ │ └── index.html │ ├── com.vmadalin.core.database.characterfavorite │ │ ├── -character-favorite-dao │ │ │ ├── delete-all-characters-favorite.html │ │ │ ├── delete-character-favorite-by-id.html │ │ │ ├── delete-character-favorite.html │ │ │ ├── get-all-characters-favorite-live-data.html │ │ │ ├── get-all-characters-favorite.html │ │ │ ├── get-character-favorite.html │ │ │ ├── index.html │ │ │ ├── insert-character-favorite.html │ │ │ └── insert-characters-favorites.html │ │ ├── -character-favorite-repository │ │ │ ├── -init-.html │ │ │ ├── delete-all-characters-favorite.html │ │ │ ├── delete-character-favorite-by-id.html │ │ │ ├── delete-character-favorite.html │ │ │ ├── get-all-characters-favorite-live-data.html │ │ │ ├── get-all-characters-favorite.html │ │ │ ├── get-character-favorite.html │ │ │ ├── index.html │ │ │ ├── insert-character-favorite.html │ │ │ └── insert-characters-favorites.html │ │ ├── -character-favorite │ │ │ ├── -init-.html │ │ │ ├── id.html │ │ │ ├── image-url.html │ │ │ ├── index.html │ │ │ └── name.html │ │ └── index.html │ ├── com.vmadalin.core.database.migrations │ │ ├── -m-i-g-r-a-t-i-o-n_1_2.html │ │ └── index.html │ ├── com.vmadalin.core.database │ │ ├── -marvel-database │ │ │ ├── -init-.html │ │ │ ├── character-favorite-dao.html │ │ │ └── index.html │ │ └── index.html │ ├── com.vmadalin.core.di.modules │ │ ├── -context-module │ │ │ ├── -init-.html │ │ │ ├── index.html │ │ │ └── provide-context.html │ │ ├── -database-module │ │ │ ├── -init-.html │ │ │ ├── index.html │ │ │ ├── provide-character-favorite-dao.html │ │ │ ├── provide-character-favorite-repository.html │ │ │ └── provide-marvel-database.html │ │ ├── -network-module │ │ │ ├── -init-.html │ │ │ ├── index.html │ │ │ ├── provide-http-client.html │ │ │ ├── provide-http-logging-interceptor.html │ │ │ ├── provide-marvel-repository.html │ │ │ ├── provide-marvel-service.html │ │ │ └── provide-retrofit-builder.html │ │ ├── -utils-module │ │ │ ├── -init-.html │ │ │ ├── index.html │ │ │ └── provide-theme-utils.html │ │ └── index.html │ ├── com.vmadalin.core.di.scopes │ │ ├── -app-scope │ │ │ ├── -init-.html │ │ │ └── index.html │ │ ├── -feature-scope │ │ │ ├── -init-.html │ │ │ └── index.html │ │ └── index.html │ ├── com.vmadalin.core.di │ │ ├── -core-component │ │ │ ├── character-favorite-dao.html │ │ │ ├── context.html │ │ │ ├── index.html │ │ │ ├── marvel-repository.html │ │ │ ├── marvel-service.html │ │ │ └── theme-utils.html │ │ └── index.html │ ├── com.vmadalin.core.extensions │ │ ├── index.html │ │ ├── kotlin.-byte-array │ │ │ ├── index.html │ │ │ └── to-hex.html │ │ └── kotlin.-string │ │ │ ├── index.html │ │ │ └── to-m-d5.html │ ├── com.vmadalin.core.mapper │ │ ├── -mapper │ │ │ ├── index.html │ │ │ └── map.html │ │ └── index.html │ ├── com.vmadalin.core.network.repositiories │ │ ├── -marvel-repository │ │ │ ├── -init-.html │ │ │ ├── get-character.html │ │ │ ├── get-characters.html │ │ │ └── index.html │ │ └── index.html │ ├── com.vmadalin.core.network.responses │ │ ├── -base-response │ │ │ ├── -init-.html │ │ │ ├── code.html │ │ │ ├── data.html │ │ │ ├── index.html │ │ │ ├── message.html │ │ │ └── status.html │ │ ├── -character-response │ │ │ ├── -init-.html │ │ │ ├── description.html │ │ │ ├── id.html │ │ │ ├── index.html │ │ │ ├── name.html │ │ │ └── thumbnail.html │ │ ├── -character-thumbnail-response │ │ │ ├── -init-.html │ │ │ ├── extension.html │ │ │ ├── index.html │ │ │ └── path.html │ │ ├── -data-response │ │ │ ├── -init-.html │ │ │ ├── count.html │ │ │ ├── index.html │ │ │ ├── limit.html │ │ │ ├── offset.html │ │ │ ├── results.html │ │ │ └── total.html │ │ └── index.html │ ├── com.vmadalin.core.network.services │ │ ├── -marvel-service │ │ │ ├── get-character.html │ │ │ ├── get-characters.html │ │ │ └── index.html │ │ └── index.html │ ├── com.vmadalin.core.network │ │ ├── -network-state │ │ │ ├── -error │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ └── is-additional.html │ │ │ ├── -loading │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ └── is-additional.html │ │ │ ├── -success │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ ├── is-additional.html │ │ │ │ └── is-empty-response.html │ │ │ ├── index.html │ │ │ ├── is-error.html │ │ │ ├── is-loading.html │ │ │ └── is-success.html │ │ └── index.html │ ├── com.vmadalin.core.utils │ │ ├── -theme-utils │ │ │ ├── -init-.html │ │ │ ├── index.html │ │ │ ├── is-dark-theme.html │ │ │ ├── is-light-theme.html │ │ │ └── set-night-mode.html │ │ └── index.html │ ├── index-outline.html │ ├── index.html │ └── package-list ├── features │ ├── characters_favorites │ │ ├── alltypes │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.charactersfavorites.ui.favorite.adapter.holders │ │ │ ├── -character-favorite-view-holder │ │ │ │ ├── -init-.html │ │ │ │ ├── bind.html │ │ │ │ └── index.html │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.charactersfavorites.ui.favorite.adapter │ │ │ ├── -characters-favorite-adapter │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ ├── on-bind-view-holder.html │ │ │ │ └── on-create-view-holder.html │ │ │ ├── -characters-favorite-touch-helper │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ ├── on-move.html │ │ │ │ └── on-swiped.html │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.charactersfavorites.ui.favorite.di │ │ │ ├── -characters-favorite-component │ │ │ │ ├── index.html │ │ │ │ └── inject.html │ │ │ ├── -characters-favorite-module │ │ │ │ ├── -init-.html │ │ │ │ ├── fragment.html │ │ │ │ ├── index.html │ │ │ │ ├── provides-characters-favorite-adapter.html │ │ │ │ └── provides-characters-favorite-view-model.html │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.charactersfavorites.ui.favorite │ │ │ ├── -characters-favorite-fragment │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ ├── on-init-data-binding.html │ │ │ │ ├── on-init-dependency-injection.html │ │ │ │ ├── on-view-created.html │ │ │ │ └── view-adapter.html │ │ │ ├── -characters-favorite-view-model │ │ │ │ ├── -init-.html │ │ │ │ ├── character-favorite-repository.html │ │ │ │ ├── data.html │ │ │ │ ├── index.html │ │ │ │ ├── remove-favorite-character.html │ │ │ │ └── state.html │ │ │ ├── -characters-favorite-view-state │ │ │ │ ├── -empty.html │ │ │ │ ├── -listed.html │ │ │ │ ├── index.html │ │ │ │ ├── is-empty.html │ │ │ │ └── is-listed.html │ │ │ └── index.html │ │ ├── index-outline.html │ │ ├── index.html │ │ └── package-list │ ├── characters_list │ │ ├── alltypes │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.characterslist.ui.detail.di │ │ │ ├── -character-detail-component │ │ │ │ ├── index.html │ │ │ │ └── inject.html │ │ │ ├── -character-detail-module │ │ │ │ ├── -init-.html │ │ │ │ ├── fragment.html │ │ │ │ ├── index.html │ │ │ │ ├── provides-character-detail-mapper.html │ │ │ │ ├── provides-character-detail-view-model.html │ │ │ │ └── provides-progress-bar-dialog.html │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.characterslist.ui.detail.model │ │ │ ├── -character-detail-mapper │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ └── map.html │ │ │ ├── -character-detail │ │ │ │ ├── -init-.html │ │ │ │ ├── description.html │ │ │ │ ├── id.html │ │ │ │ ├── image-url.html │ │ │ │ ├── index.html │ │ │ │ └── name.html │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.characterslist.ui.detail │ │ │ ├── -character-detail-fragment │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ ├── on-init-data-binding.html │ │ │ │ ├── on-init-dependency-injection.html │ │ │ │ ├── on-view-created.html │ │ │ │ └── progress-dialog.html │ │ │ ├── -character-detail-view-model │ │ │ │ ├── -init-.html │ │ │ │ ├── add-character-to-favorite.html │ │ │ │ ├── character-detail-mapper.html │ │ │ │ ├── character-favorite-repository.html │ │ │ │ ├── data.html │ │ │ │ ├── dismiss-character-detail.html │ │ │ │ ├── index.html │ │ │ │ ├── load-character-detail.html │ │ │ │ ├── marvel-repository.html │ │ │ │ └── state.html │ │ │ ├── -character-detail-view-state │ │ │ │ ├── -add-to-favorite.html │ │ │ │ ├── -added-to-favorite.html │ │ │ │ ├── -already-added-to-favorite.html │ │ │ │ ├── -dismiss.html │ │ │ │ ├── -error.html │ │ │ │ ├── -loading.html │ │ │ │ ├── index.html │ │ │ │ ├── is-add-to-favorite.html │ │ │ │ ├── is-added-to-favorite.html │ │ │ │ ├── is-already-added-to-favorite.html │ │ │ │ ├── is-dismiss.html │ │ │ │ ├── is-error.html │ │ │ │ └── is-loading.html │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter.holders │ │ │ ├── -character-view-holder │ │ │ │ ├── -init-.html │ │ │ │ ├── bind.html │ │ │ │ └── index.html │ │ │ ├── -error-view-holder │ │ │ │ ├── -init-.html │ │ │ │ ├── bind.html │ │ │ │ └── index.html │ │ │ ├── -loading-view-holder │ │ │ │ ├── -init-.html │ │ │ │ └── index.html │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter │ │ │ ├── -characters-list-adapter-state │ │ │ │ ├── -add-error.html │ │ │ │ ├── -add-loading.html │ │ │ │ ├── -added.html │ │ │ │ ├── -no-more.html │ │ │ │ ├── has-extra-row.html │ │ │ │ ├── index.html │ │ │ │ ├── is-add-error.html │ │ │ │ ├── is-add-loading.html │ │ │ │ ├── is-added.html │ │ │ │ └── is-no-more.html │ │ │ ├── -characters-list-adapter │ │ │ │ ├── -init-.html │ │ │ │ ├── get-item-count.html │ │ │ │ ├── get-item-id.html │ │ │ │ ├── get-item-view-type.html │ │ │ │ ├── get-span-size-lookup.html │ │ │ │ ├── index.html │ │ │ │ ├── on-bind-view-holder.html │ │ │ │ ├── on-create-view-holder.html │ │ │ │ ├── submit-state.html │ │ │ │ └── view-model.html │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.characterslist.ui.list.di │ │ │ ├── -characters-list-component │ │ │ │ ├── index.html │ │ │ │ └── inject.html │ │ │ ├── -characters-list-module │ │ │ │ ├── -init-.html │ │ │ │ ├── fragment.html │ │ │ │ ├── index.html │ │ │ │ ├── provides-character-item-mapper.html │ │ │ │ ├── provides-characters-list-adapter.html │ │ │ │ ├── provides-characters-list-view-model.html │ │ │ │ └── provides-characters-page-data-source.html │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.characterslist.ui.list.model │ │ │ ├── -character-item-mapper │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ └── map.html │ │ │ ├── -character-item │ │ │ │ ├── -init-.html │ │ │ │ ├── description.html │ │ │ │ ├── id.html │ │ │ │ ├── image-url.html │ │ │ │ ├── index.html │ │ │ │ └── name.html │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.characterslist.ui.list.paging │ │ │ ├── -characters-page-data-source-factory │ │ │ │ ├── -init-.html │ │ │ │ ├── create.html │ │ │ │ ├── index.html │ │ │ │ ├── provider-data-source.html │ │ │ │ ├── refresh.html │ │ │ │ ├── retry.html │ │ │ │ └── source-live-data.html │ │ │ ├── -characters-page-data-source │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ ├── load-after.html │ │ │ │ ├── load-before.html │ │ │ │ ├── load-initial.html │ │ │ │ ├── mapper.html │ │ │ │ ├── network-state.html │ │ │ │ ├── repository.html │ │ │ │ ├── retry.html │ │ │ │ └── scope.html │ │ │ ├── -p-a-g-e_-i-n-i-t_-e-l-e-m-e-n-t-s.html │ │ │ ├── -p-a-g-e_-m-a-x_-e-l-e-m-e-n-t-s.html │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.characterslist.ui.list │ │ │ ├── -characters-list-fragment │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ ├── on-init-data-binding.html │ │ │ │ ├── on-init-dependency-injection.html │ │ │ │ ├── on-view-created.html │ │ │ │ └── view-adapter.html │ │ │ ├── -characters-list-view-event │ │ │ │ ├── -open-character-detail │ │ │ │ │ ├── -init-.html │ │ │ │ │ ├── id.html │ │ │ │ │ └── index.html │ │ │ │ └── index.html │ │ │ ├── -characters-list-view-model │ │ │ │ ├── -init-.html │ │ │ │ ├── data-source-factory.html │ │ │ │ ├── data.html │ │ │ │ ├── event.html │ │ │ │ ├── index.html │ │ │ │ ├── network-state.html │ │ │ │ ├── open-character-detail.html │ │ │ │ ├── refresh-loaded-characters-list.html │ │ │ │ ├── retry-add-characters-list.html │ │ │ │ └── state.html │ │ │ ├── -characters-list-view-state │ │ │ │ ├── -add-error.html │ │ │ │ ├── -add-loading.html │ │ │ │ ├── -empty.html │ │ │ │ ├── -error.html │ │ │ │ ├── -loaded.html │ │ │ │ ├── -loading.html │ │ │ │ ├── -no-more-elements.html │ │ │ │ ├── -refreshing.html │ │ │ │ ├── index.html │ │ │ │ ├── is-add-error.html │ │ │ │ ├── is-add-loading.html │ │ │ │ ├── is-empty.html │ │ │ │ ├── is-error.html │ │ │ │ ├── is-loaded.html │ │ │ │ ├── is-loading.html │ │ │ │ ├── is-no-more-elements.html │ │ │ │ └── is-refreshing.html │ │ │ └── index.html │ │ ├── index-outline.html │ │ ├── index.html │ │ └── package-list │ ├── home │ │ ├── alltypes │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.home.ui.di │ │ │ ├── -home-component │ │ │ │ ├── index.html │ │ │ │ └── inject.html │ │ │ ├── -home-module │ │ │ │ ├── -init-.html │ │ │ │ ├── fragment.html │ │ │ │ ├── index.html │ │ │ │ └── provides-home-view-model.html │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.home.ui.menu │ │ │ ├── -toggle-theme-check-box │ │ │ │ ├── -init-.html │ │ │ │ └── index.html │ │ │ └── index.html │ │ ├── com.vmadalin.dynamicfeatures.home.ui │ │ │ ├── -home-fragment │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ ├── on-create-options-menu.html │ │ │ │ ├── on-init-data-binding.html │ │ │ │ ├── on-init-dependency-injection.html │ │ │ │ ├── on-view-created.html │ │ │ │ ├── on-view-state-restored.html │ │ │ │ └── theme-utils.html │ │ │ ├── -home-view-model │ │ │ │ ├── -init-.html │ │ │ │ ├── index.html │ │ │ │ ├── navigation-controller-changed.html │ │ │ │ └── state.html │ │ │ ├── -home-view-state │ │ │ │ ├── -full-screen.html │ │ │ │ ├── -navigation-screen.html │ │ │ │ ├── index.html │ │ │ │ ├── is-full-screen.html │ │ │ │ └── is-navigation-screen.html │ │ │ ├── -n-a-v_-f-r-a-g-m-e-n-t-s_-i-d.html │ │ │ └── index.html │ │ ├── index-outline.html │ │ ├── index.html │ │ └── package-list │ └── index.html ├── index.html └── style.css ├── features ├── characters_favorites │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── vmadalin │ │ │ │ └── dynamicfeatures │ │ │ │ └── charactersfavorites │ │ │ │ └── ui │ │ │ │ └── favorite │ │ │ │ ├── CharactersFavoriteFragment.kt │ │ │ │ ├── CharactersFavoriteViewModel.kt │ │ │ │ ├── CharactersFavoriteViewState.kt │ │ │ │ ├── adapter │ │ │ │ ├── CharactersFavoriteAdapter.kt │ │ │ │ ├── CharactersFavoriteTouchHelper.kt │ │ │ │ └── holders │ │ │ │ │ └── CharacterFavoriteViewHolder.kt │ │ │ │ └── di │ │ │ │ ├── CharactersFavoriteComponent.kt │ │ │ │ └── CharactersFavoriteModule.kt │ │ └── res │ │ │ ├── layout │ │ │ ├── fragment_characters_favorite_list.xml │ │ │ ├── list_item_characters_favorite.xml │ │ │ ├── view_characters_favorite_list.xml │ │ │ └── view_characters_favorite_list_empty.xml │ │ │ ├── values-land │ │ │ ├── dimens.xml │ │ │ └── integers.xml │ │ │ ├── values-sw600dp-land │ │ │ ├── dimens.xml │ │ │ └── integers.xml │ │ │ ├── values-sw600dp │ │ │ ├── dimens.xml │ │ │ └── integers.xml │ │ │ ├── values-sw720dp-land │ │ │ ├── dimens.xml │ │ │ └── integers.xml │ │ │ ├── values-sw720dp │ │ │ ├── dimens.xml │ │ │ └── integers.xml │ │ │ └── values │ │ │ ├── dimens.xml │ │ │ ├── integers.xml │ │ │ └── strings.xml │ │ └── test │ │ └── kotlin │ │ └── com │ │ └── vmadalin │ │ └── dynamicfeatures │ │ └── caractersfavorites │ │ └── ui │ │ └── favorite │ │ ├── CharactersFavoriteViewModelTest.kt │ │ ├── CharactersFavoriteViewStateTest.kt │ │ ├── adapter │ │ ├── CharacterFavoriteViewHolderTest.kt │ │ └── CharactersFavoriteTouchHelperTest.kt │ │ └── di │ │ └── CharactersFavoriteModuleTest.kt ├── characters_list │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── kotlin │ │ │ └── com │ │ │ │ └── vmadalin │ │ │ │ └── dynamicfeatures │ │ │ │ └── characterslist │ │ │ │ └── ui │ │ │ │ ├── detail │ │ │ │ ├── CharacterDetailFragment.kt │ │ │ │ ├── CharacterDetailViewModel.kt │ │ │ │ ├── CharacterDetailViewState.kt │ │ │ │ ├── di │ │ │ │ │ ├── CharacterDetailComponent.kt │ │ │ │ │ └── CharacterDetailModule.kt │ │ │ │ └── model │ │ │ │ │ ├── CharacterDetail.kt │ │ │ │ │ └── CharacterDetailMapper.kt │ │ │ │ └── list │ │ │ │ ├── CharactersListFragment.kt │ │ │ │ ├── CharactersListViewEvent.kt │ │ │ │ ├── CharactersListViewModel.kt │ │ │ │ ├── CharactersListViewState.kt │ │ │ │ ├── adapter │ │ │ │ ├── CharactersListAdapter.kt │ │ │ │ ├── CharactersListAdapterState.kt │ │ │ │ └── holders │ │ │ │ │ ├── CharacterViewHolder.kt │ │ │ │ │ ├── ErrorViewHolder.kt │ │ │ │ │ └── LoadingViewHolder.kt │ │ │ │ ├── di │ │ │ │ ├── CharactersListComponent.kt │ │ │ │ └── CharactersListModule.kt │ │ │ │ ├── model │ │ │ │ ├── CharacterItem.kt │ │ │ │ └── CharacterItemMapper.kt │ │ │ │ └── paging │ │ │ │ ├── CharactersPageDataSource.kt │ │ │ │ └── CharactersPageDataSourceFactory.kt │ │ └── res │ │ │ ├── drawable │ │ │ └── ic_favorites.xml │ │ │ ├── layout │ │ │ ├── fragment_character_detail.xml │ │ │ ├── fragment_characters_list.xml │ │ │ ├── list_item_character.xml │ │ │ ├── list_item_error.xml │ │ │ ├── list_item_loading.xml │ │ │ ├── view_character_detail_content.xml │ │ │ ├── view_characters_list.xml │ │ │ ├── view_characters_list_empty.xml │ │ │ ├── view_characters_list_error.xml │ │ │ └── view_characters_list_loading.xml │ │ │ ├── values-land │ │ │ ├── dimens.xml │ │ │ └── integers.xml │ │ │ ├── values-sw600dp-land │ │ │ ├── dimens.xml │ │ │ └── integers.xml │ │ │ ├── values-sw600dp │ │ │ ├── dimens.xml │ │ │ └── integers.xml │ │ │ ├── values-sw720dp-land │ │ │ ├── dimens.xml │ │ │ └── integers.xml │ │ │ ├── values-sw720dp │ │ │ ├── dimens.xml │ │ │ └── integers.xml │ │ │ └── values │ │ │ ├── dimens.xml │ │ │ ├── integers.xml │ │ │ └── strings.xml │ │ └── test │ │ ├── kotlin │ │ └── com │ │ │ └── vmadalin │ │ │ └── dynamicfeatures │ │ │ └── characterslist │ │ │ └── ui │ │ │ ├── detail │ │ │ ├── CharacterDetailViewModelTest.kt │ │ │ ├── CharacterDetailViewStateTest.kt │ │ │ ├── di │ │ │ │ └── CharacterDetailModuleTest.kt │ │ │ └── model │ │ │ │ ├── CharacterDetailMapperTest.kt │ │ │ │ └── CharacterDetailTest.kt │ │ │ └── list │ │ │ ├── CharactersListViewEventTest.kt │ │ │ ├── CharactersListViewModelTest.kt │ │ │ ├── CharactersListViewStateTest.kt │ │ │ ├── adapter │ │ │ ├── CharactersListAdapterStateTest.kt │ │ │ └── holders │ │ │ │ ├── CharacterViewHolderTest.kt │ │ │ │ ├── ErrorViewHolderTest.kt │ │ │ │ └── LoadingViewHolderTest.kt │ │ │ ├── di │ │ │ └── CharactersListModuleTest.kt │ │ │ ├── model │ │ │ ├── CharacterItemMapperTest.kt │ │ │ └── CharacterItemTest.kt │ │ │ └── paging │ │ │ ├── CharactersPageDataSourceFactoryTest.kt │ │ │ └── CharactersPageDataSourceTest.kt │ │ └── resources │ │ └── mockito-extensions │ │ └── org.mockito.plugins.MockMaker └── home │ ├── .gitignore │ ├── build.gradle.kts │ └── src │ ├── main │ ├── AndroidManifest.xml │ ├── kotlin │ │ └── com │ │ │ └── vmadalin │ │ │ └── dynamicfeatures │ │ │ └── home │ │ │ └── ui │ │ │ ├── HomeFragment.kt │ │ │ ├── HomeViewModel.kt │ │ │ ├── HomeViewState.kt │ │ │ ├── di │ │ │ ├── HomeComponent.kt │ │ │ └── HomeModule.kt │ │ │ └── menu │ │ │ └── ToggleThemeCheckBox.kt │ └── res │ │ ├── drawable │ │ ├── asl_theme.xml │ │ ├── avd_theme_day_to_night.xml │ │ ├── avd_theme_night_to_day.xml │ │ ├── ic_favorites.xml │ │ ├── ic_list.xml │ │ ├── ic_theme_day.xml │ │ ├── ic_theme_night.xml │ │ └── sl_navigation.xml │ │ ├── layout │ │ └── fragment_home.xml │ │ ├── menu │ │ ├── bottom_menu.xml │ │ └── toolbar_menu.xml │ │ ├── navigation │ │ ├── navigation_characters_favorites_graph.xml │ │ └── navigation_characters_list_graph.xml │ │ ├── values-night │ │ └── colors.xml │ │ └── values │ │ ├── colors.xml │ │ └── strings.xml │ └── test │ └── kotlin │ └── com │ └── vmadalin │ └── dynamicfeatures │ └── home │ └── ui │ ├── HomeViewStateTest.kt │ └── di │ └── HomeModuleTest.kt ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat ├── libraries └── test_utils │ ├── .gitignore │ ├── build.gradle.kts │ ├── proguard-rules.pro │ └── src │ └── main │ ├── AndroidManifest.xml │ └── kotlin │ └── com │ └── vmadalin │ └── libraries │ └── testutils │ ├── TestCompactActivityNoActionBar.kt │ ├── TestCompatActivity.kt │ ├── TestFragment.kt │ ├── TestFragmentActivity.kt │ ├── datasource │ └── TestLimitDataSource.kt │ ├── lifecycle │ └── TestLifecycleOwner.kt │ ├── livedata │ └── TestLiveDataUtils.kt │ ├── pagelist │ └── TestPagedListUtils.kt │ ├── robolectric │ └── TestRobolectric.kt │ └── rules │ └── CoroutineRule.kt ├── screenshots ├── architecture │ ├── diagram_communication_layers.png │ ├── diagram_communication_modules.png │ ├── diagram_dependency_app.png │ ├── diagram_dependency_commons_ui.png │ ├── diagram_dependency_commons_views.png │ ├── diagram_dependency_core.png │ ├── diagram_dependency_features_characters_favorite.png │ ├── diagram_dependency_features_characters_list.png │ ├── diagram_dependency_features_home.png │ ├── diagram_dependency_libraries_test_utils.png │ └── project_structure.png ├── demo │ └── demo.gif ├── phone │ ├── dark_mode_character_detail.png │ ├── dark_mode_characters_favorite.png │ ├── dark_mode_characters_list.png │ ├── light_mode_character_detail.png │ ├── light_mode_characters_favorite.png │ └── light_mode_characters_list.png ├── phone_landscape │ ├── dark_mode_character_detail.png │ ├── dark_mode_characters_favorite.png │ ├── dark_mode_characters_list.png │ ├── light_mode_character_detail.png │ ├── light_mode_characters_favorite.png │ └── light_mode_characters_list.png ├── tablet │ ├── dark_mode_character_detail.png │ ├── dark_mode_characters_favorite.png │ ├── dark_mode_characters_list.png │ ├── light_mode_character_detail.png │ ├── light_mode_characters_favorite.png │ └── light_mode_characters_list.png └── tablet_landscape │ ├── dark_mode_character_detail.png │ ├── dark_mode_characters_favorite.png │ ├── dark_mode_characters_list.png │ ├── light_mode_character_detail.png │ ├── light_mode_characters_favorite.png │ └── light_mode_characters_list.png ├── scripts └── git-hooks │ └── pre-commit.sh └── settings.gradle.kts /.codecov/config.yml: -------------------------------------------------------------------------------- 1 | codecov: 2 | notify: 3 | require_ci_to_pass: yes 4 | 5 | coverage: 6 | precision: 2 7 | round: down 8 | range: 60..100 9 | status: 10 | project: 11 | default: 12 | enabled: yes 13 | target: auto 14 | threshold: 2 15 | patch: 16 | default: 17 | enabled: yes 18 | target: auto 19 | threshold: 2 20 | changes: no 21 | 22 | parsers: 23 | gcov: 24 | branch_detection: 25 | conditional: yes 26 | loop: yes 27 | method: no 28 | macro: no 29 | 30 | comment: 31 | layout: "header, diff" 32 | behavior: default 33 | require_changes: no 34 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig: http://editorconfig.org 2 | root = true 3 | 4 | [*] 5 | insert_final_newline = true 6 | 7 | [*.{yml, json}] 8 | indent_style = space 9 | indent_size = 2 10 | 11 | [*.{kt, kts, java}] 12 | indent_size = 4 13 | max_line_length = 100 14 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: vmadalin 2 | ko_fi: vmadalin 3 | issuehunt: vmadalin 4 | custom: https://www.paypal.me/mvalceleanu 5 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## Description 2 | 3 | What happened? What did you expect to happen? 4 | 5 | ## Basic Information 6 | 7 | - Device type: 8 | - OS version: 9 | - App version: 10 | 11 | ## Details 12 | 13 | ```text 14 | // TODO: show the code that produces the problem, any relevant logs or screenshot. 15 | ``` 16 | -------------------------------------------------------------------------------- /.lint/config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /.spotless/copyright.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright $YEAR vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | All notable changes to this project will be documented in this file. 4 | 5 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), 6 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 7 | 8 | ## [1.0.0](https://github.com/VMadalin/kotlin-sample-app/releases/tag/1.0.0) - In progress date 9 | - Initial release. 10 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | -keep class **.DataBinderMapperImpl { *; } 9 | -------------------------------------------------------------------------------- /app/src/debug/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/debug/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/debug/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/debug/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/debug/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/debug/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/debug/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/debug/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/debug/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/debug/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/debug/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/ic_launcher_playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/main/ic_launcher_playstore.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/navigation/navigation_app_graph.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #1d1d1d 5 | #0f0f0f 6 | #121212 7 | #f1f1f1 8 | 9 | 10 | #f1f1f1 11 | #d3d3d3 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/values-night/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #ffffff 5 | #f3f3f3f3 6 | #ffffff 7 | #111111 8 | 9 | 10 | #1f1f1f 11 | #4f4f4f 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/values/features.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | Home 8 | Characters List 9 | Characters Favorite 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | MarvelDEV 5 | 6 | -------------------------------------------------------------------------------- /app/src/prod/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/prod/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Marvel 5 | 6 | -------------------------------------------------------------------------------- /app/src/qa/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/qa/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | MarvelQA 5 | 6 | -------------------------------------------------------------------------------- /build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import extensions.applyDefault 18 | 19 | plugins.apply(BuildPlugins.GIT_HOOKS) 20 | plugins.apply(BuildPlugins.UPDATE_DEPENDENCIES) 21 | 22 | allprojects { 23 | repositories.applyDefault() 24 | 25 | plugins.apply(BuildPlugins.DETEKT) 26 | plugins.apply(BuildPlugins.DOKKA) 27 | plugins.apply(BuildPlugins.KTLINT) 28 | plugins.apply(BuildPlugins.SPOTLESS) 29 | } 30 | -------------------------------------------------------------------------------- /buildSrc/src/main/kotlin/BuildProductDimensions.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | /** 18 | * Configuration of product dimensions used on build variants 19 | */ 20 | object BuildProductDimensions { 21 | const val ENVIRONMENT = "environment" 22 | } 23 | -------------------------------------------------------------------------------- /buildSrc/src/main/kotlin/commons/kotlin-library.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package commons 18 | 19 | import dependencies.Dependencies 20 | import extensions.implementation 21 | 22 | plugins { 23 | id("kotlin") 24 | } 25 | 26 | dependencies { 27 | implementation(Dependencies.KOTLIN) 28 | } 29 | -------------------------------------------------------------------------------- /buildSrc/src/main/kotlin/dependencies/DebugDependencies.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package dependencies 18 | 19 | /** 20 | * Project debug dependencies, makes it easy to include external binaries or 21 | * other library modules to build. 22 | */ 23 | object DebugDependencies { 24 | const val LEAKCANARY = "com.squareup.leakcanary:leakcanary-android:${BuildDependenciesVersions.LEAKCANARY}" 25 | } 26 | -------------------------------------------------------------------------------- /commons/ui/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /commons/ui/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /commons/ui/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /commons/ui/src/main/kotlin/com/vmadalin/commons/ui/base/BaseViewState.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.vmadalin.commons.ui.base 18 | 19 | /** 20 | * Base state interface to describe different state of the view. 21 | */ 22 | interface BaseViewState 23 | -------------------------------------------------------------------------------- /commons/ui/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #eeeeee 5 | #e0e0e0 6 | #aeaeae 7 | #bdbdbd 8 | #cfcfcf 9 | #8d8d8d 10 | #9e9e9e 11 | #707070 12 | #757575 13 | #616161 14 | 15 | 16 | -------------------------------------------------------------------------------- /commons/ui/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline 2 | -------------------------------------------------------------------------------- /commons/views/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /commons/views/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /commons/views/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /commons/views/src/main/res/drawable/shape_progress_dialog.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /commons/views/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 10dp 4 | 70dp 5 | 6 | -------------------------------------------------------------------------------- /commons/views/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | -------------------------------------------------------------------------------- /core/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /core/consumer-rules.pro: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/core/consumer-rules.pro -------------------------------------------------------------------------------- /core/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /core/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /core/src/main/kotlin/com/vmadalin/core/di/scopes/AppScope.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.vmadalin.core.di.scopes 18 | 19 | import javax.inject.Scope 20 | 21 | /** 22 | * Scope for the entire app runtime. 23 | */ 24 | @Scope 25 | @kotlin.annotation.Retention(AnnotationRetention.RUNTIME) 26 | annotation class AppScope 27 | -------------------------------------------------------------------------------- /core/src/main/kotlin/com/vmadalin/core/di/scopes/FeatureScope.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.vmadalin.core.di.scopes 18 | 19 | import javax.inject.Scope 20 | 21 | /** 22 | * Scope for a feature module. 23 | */ 24 | @Scope 25 | @kotlin.annotation.Retention(AnnotationRetention.RUNTIME) 26 | annotation class FeatureScope 27 | -------------------------------------------------------------------------------- /core/src/main/kotlin/com/vmadalin/core/extensions/ByteArrayExtensions.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.vmadalin.core.extensions 18 | 19 | /** 20 | * Convert any byte array to hexadecimal string. 21 | * 22 | * @return Hexadecimal string. 23 | */ 24 | fun ByteArray.toHex() = joinToString("") { 25 | "%02x".format(it) 26 | } 27 | -------------------------------------------------------------------------------- /core/src/main/kotlin/com/vmadalin/core/extensions/StringExtensions.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.vmadalin.core.extensions 18 | 19 | import java.security.MessageDigest 20 | 21 | /** 22 | * Convert any string to Message-Digest Algorithm 5 (MD5) 23 | * 24 | * @return MD5 string. 25 | */ 26 | fun String.toMD5() = 27 | MessageDigest 28 | .getInstance("MD5") 29 | .digest(toByteArray()) 30 | .toHex() 31 | -------------------------------------------------------------------------------- /core/src/test/resources/mock-responses/get-character-id-status401.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "InvalidCredentials", 3 | "message": "That hash, timestamp and key combination is invalid." 4 | } 5 | 6 | -------------------------------------------------------------------------------- /core/src/test/resources/mock-responses/get-character-id-status404.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": 404, 3 | "status": "We couldn't find that character" 4 | } 5 | -------------------------------------------------------------------------------- /core/src/test/resources/mock-responses/get-characters-status204.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": 204, 3 | "status": "Empty", 4 | "copyright": "© 2019 MARVEL", 5 | "attributionText": "Data provided by Marvel. © 2019 MARVEL", 6 | "attributionHTML": "Data provided by Marvel. © 2019 MARVEL", 7 | "etag": "fake", 8 | "data": { 9 | "offset": 10000, 10 | "limit": 20, 11 | "total": 1493, 12 | "count": 0, 13 | "results": [] 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /core/src/test/resources/mock-responses/get-characters-status401.json: -------------------------------------------------------------------------------- 1 | { 2 | "code": "InvalidCredentials", 3 | "message": "That hash, timestamp and key combination is invalid." 4 | } 5 | -------------------------------------------------------------------------------- /core/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline 2 | -------------------------------------------------------------------------------- /docs/_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-minimal 2 | -------------------------------------------------------------------------------- /docs/app/com.vmadalin.android.di/-app-module/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | AppModule.<init> - app 5 | 6 | 7 | 8 | app / com.vmadalin.android.di / AppModule / <init>
9 |
10 |

<init>

11 | 12 | AppModule() 13 |

Class that contributes to the object graph AppComponent.

14 |

See Also
15 |

Module

16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/app/com.vmadalin.android.di/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.android.di - app 5 | 6 | 7 | 8 | app / com.vmadalin.android.di
9 |
10 |

Package com.vmadalin.android.di

11 |

Types

12 | 13 | 14 | 15 | 18 | 21 | 22 | 23 | 26 | 29 | 30 | 31 |
16 |

AppComponent

17 |
19 |

App component that application component's components depend on.

20 | interface AppComponent
24 |

AppModule

25 |
27 |

Class that contributes to the object graph AppComponent.

28 | class AppModule
32 | 33 | 34 | -------------------------------------------------------------------------------- /docs/app/com.vmadalin.android/-sample-app/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SampleApp.<init> - app 5 | 6 | 7 | 8 | app / com.vmadalin.android / SampleApp / <init>
9 |
10 |

<init>

11 | 12 | SampleApp() 13 |

Base class for maintaining global application state.

14 |

See Also
15 |

SplitCompatApplication

16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/app/com.vmadalin.android/-sample-app/theme-utils.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SampleApp.themeUtils - app 5 | 6 | 7 | 8 | app / com.vmadalin.android / SampleApp / themeUtils
9 |
10 |

themeUtils

11 | 12 | lateinit var themeUtils: ThemeUtils 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/app/com.vmadalin.android/-sample-main-activity/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | SampleMainActivity.<init> - app 5 | 6 | 7 | 8 | app / com.vmadalin.android / SampleMainActivity / <init>
9 |
10 |

<init>

11 | 12 | SampleMainActivity() 13 |

Base activity class that use the support library action bar features.

14 |

See Also
15 |

AppCompatActivity

16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/app/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | app 5 | 6 | 7 | 8 | app
9 |
10 |

Packages

11 | 12 | 13 | 14 | 17 | 19 | 20 | 21 | 24 | 26 | 27 | 28 |
15 |

com.vmadalin.android

16 |
18 |
22 |

com.vmadalin.android.di

23 |
25 |
29 |

Index

30 | All Types 31 | 32 | 33 | -------------------------------------------------------------------------------- /docs/app/package-list: -------------------------------------------------------------------------------- 1 | $dokka.format:html 2 | $dokka.linkExtension:html 3 | 4 | com.vmadalin.android 5 | com.vmadalin.android.di 6 | -------------------------------------------------------------------------------- /docs/commons/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | commons 5 | 6 | 7 | 8 |

Commons

9 | 10 | 11 | 12 | 15 | 17 | 18 | 19 | 22 | 24 | 25 | 26 |
13 |

ui

14 |
16 |
20 |

views

21 |
23 |
27 | 28 | 29 | -------------------------------------------------------------------------------- /docs/commons/ui/com.vmadalin.commons.ui.base/-base-fragment/on-init-data-binding.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | BaseFragment.onInitDataBinding - commons/ui 5 | 6 | 7 | 8 | commons/ui / com.vmadalin.commons.ui.base / BaseFragment / onInitDataBinding
9 |
10 |

onInitDataBinding

11 | 12 | abstract fun onInitDataBinding(): Unit 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/commons/ui/com.vmadalin.commons.ui.base/-base-fragment/on-init-dependency-injection.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | BaseFragment.onInitDependencyInjection - commons/ui 5 | 6 | 7 | 8 | commons/ui / com.vmadalin.commons.ui.base / BaseFragment / onInitDependencyInjection
9 |
10 |

onInitDependencyInjection

11 | 12 | abstract fun onInitDependencyInjection(): Unit 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/commons/ui/com.vmadalin.commons.ui.base/-base-fragment/view-binding.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | BaseFragment.viewBinding - commons/ui 5 | 6 | 7 | 8 | commons/ui / com.vmadalin.commons.ui.base / BaseFragment / viewBinding
9 |
10 |

viewBinding

11 | 12 | lateinit var viewBinding: B 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/commons/ui/com.vmadalin.commons.ui.base/-base-fragment/view-model.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | BaseFragment.viewModel - commons/ui 5 | 6 | 7 | 8 | commons/ui / com.vmadalin.commons.ui.base / BaseFragment / viewModel
9 |
10 |

viewModel

11 | 12 | lateinit var viewModel: M 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/commons/ui/com.vmadalin.commons.ui.base/-base-view-holder/binding.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | BaseViewHolder.binding - commons/ui 5 | 6 | 7 | 8 | commons/ui / com.vmadalin.commons.ui.base / BaseViewHolder / binding
9 |
10 |

binding

11 | 12 | val binding: T 13 |

View data binding generated class instance.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/commons/ui/com.vmadalin.commons.ui.base/-base-view-state.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | BaseViewState - commons/ui 5 | 6 | 7 | 8 | commons/ui / com.vmadalin.commons.ui.base / BaseViewState
9 |
10 |

BaseViewState

11 | interface BaseViewState 12 |

Base state interface to describe different state of the view.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/commons/ui/com.vmadalin.commons.ui.bindings/android.view.-view/gone.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | gone - commons/ui 5 | 6 | 7 | 8 | commons/ui / com.vmadalin.commons.ui.bindings / android.view.View / gone
9 |
10 |

gone

11 | 12 | var View.gone: Boolean 13 |

Simplification to check and setup view as gone.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/commons/ui/com.vmadalin.commons.ui.bindings/android.view.-view/invisible.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | invisible - commons/ui 5 | 6 | 7 | 8 | commons/ui / com.vmadalin.commons.ui.bindings / android.view.View / invisible
9 |
10 |

invisible

11 | 12 | var View.invisible: Boolean 13 |

Simplification to check and setup view as invisible.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/commons/ui/com.vmadalin.commons.ui.bindings/android.view.-view/visible.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | visible - commons/ui 5 | 6 | 7 | 8 | commons/ui / com.vmadalin.commons.ui.bindings / android.view.View / visible
9 |
10 |

visible

11 | 12 | var View.visible: Boolean 13 |

Simplification to check and setup view as visible.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/commons/ui/com.vmadalin.commons.ui.bindings/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.commons.ui.bindings - commons/ui 5 | 6 | 7 | 8 | commons/ui / com.vmadalin.commons.ui.bindings
9 |
10 |

Package com.vmadalin.commons.ui.bindings

11 |

Extensions for External Classes

12 | 13 | 14 | 15 | 18 | 20 | 21 | 22 | 25 | 27 | 28 | 29 | 32 | 34 | 35 | 36 |
16 |

android.view.View

17 |
19 |
23 |

android.widget.ImageView

24 |
26 |
30 |

androidx.recyclerview.widget.RecyclerView

31 |
33 |
37 | 38 | 39 | -------------------------------------------------------------------------------- /docs/commons/ui/com.vmadalin.commons.ui.recyclerview/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.commons.ui.recyclerview - commons/ui 5 | 6 | 7 | 8 | commons/ui / com.vmadalin.commons.ui.recyclerview
9 |
10 |

Package com.vmadalin.commons.ui.recyclerview

11 |

Types

12 | 13 | 14 | 15 | 18 | 22 | 23 | 24 |
16 |

RecyclerViewItemDecoration

17 |
19 |

Simple item decoration allows the application to add a special drawing and layout offset 20 | to specific item views from the adapter's data set. Support the grid and linear layout.

21 | class RecyclerViewItemDecoration : ItemDecoration
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/commons/views/alltypes/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | alltypes - commons/views 5 | 6 | 7 | 8 |

All Types

9 | 10 | 11 | 12 |
com.vmadalin.commons.views.ProgressBarDialog
13 |

Custom progress dialog to display as alert during on long process user waiting.

14 | 15 | 16 |
17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/commons/views/com.vmadalin.commons.views/-progress-bar-dialog/view-binding.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ProgressBarDialog.viewBinding - commons/views 5 | 6 | 7 | 8 | commons/views / com.vmadalin.commons.views / ProgressBarDialog / viewBinding
9 |
10 |

viewBinding

11 | 12 | lateinit var viewBinding: <ERROR CLASS> 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/commons/views/com.vmadalin.commons.views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.commons.views - commons/views 5 | 6 | 7 | 8 | commons/views / com.vmadalin.commons.views
9 |
10 |

Package com.vmadalin.commons.views

11 |

Types

12 | 13 | 14 | 15 | 18 | 21 | 22 | 23 |
16 |

ProgressBarDialog

17 |
19 |

Custom progress dialog to display as alert during on long process user waiting.

20 | class ProgressBarDialog : AlertDialog
24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/commons/views/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | commons/views 5 | 6 | 7 | 8 | commons/views
9 |
10 |

Packages

11 | 12 | 13 | 14 | 17 | 19 | 20 | 21 |
15 |

com.vmadalin.commons.views

16 |
18 |
22 |

Index

23 | All Types 24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/commons/views/package-list: -------------------------------------------------------------------------------- 1 | $dokka.format:html 2 | $dokka.linkExtension:html 3 | 4 | com.vmadalin.commons.views 5 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.annotations/-open-class/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | OpenClass.<init> - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.annotations / OpenClass / <init>
9 |
10 |

<init>

11 | 12 | OpenClass() 13 |

This annotation allows us to open some classes for mocking purposes while they are final in 14 | release builds.

15 | 16 | 17 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.annotations/-open-for-testing/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | OpenForTesting.<init> - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.annotations / OpenForTesting / <init>
9 |
10 |

<init>

11 | 12 | OpenForTesting() 13 |

Annotate a class with OpenForTesting if you want it to be extendable in debug builds.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.database.characterfavorite/-character-favorite/id.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterFavorite.id - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.database.characterfavorite / CharacterFavorite / id
9 |
10 |

id

11 | 12 | val id: Long 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.database.characterfavorite/-character-favorite/image-url.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterFavorite.imageUrl - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.database.characterfavorite / CharacterFavorite / imageUrl
9 |
10 |

imageUrl

11 | 12 | val imageUrl: String 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.database.characterfavorite/-character-favorite/name.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterFavorite.name - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.database.characterfavorite / CharacterFavorite / name
9 |
10 |

name

11 | 12 | val name: String 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.database.migrations/-m-i-g-r-a-t-i-o-n_1_2.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | MIGRATION_1_2 - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.database.migrations / MIGRATION_1_2
9 |
10 |

MIGRATION_1_2

11 | 12 | val MIGRATION_1_2: Migration 13 |

Room database migration version 1 to 2.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.database.migrations/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.core.database.migrations - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.database.migrations
9 |
10 |

Package com.vmadalin.core.database.migrations

11 |

Properties

12 | 13 | 14 | 15 | 18 | 21 | 22 | 23 |
16 |

MIGRATION_1_2

17 |
19 |

Room database migration version 1 to 2.

20 | val MIGRATION_1_2: Migration
24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.database/-marvel-database/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | MarvelDatabase.<init> - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.database / MarvelDatabase / <init>
9 |
10 |

<init>

11 | 12 | MarvelDatabase() 13 |

Marvel room database storing the different requested information like: characters, comics, etc...

14 |

See Also
15 |

Database

16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.database/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.core.database - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.database
9 |
10 |

Package com.vmadalin.core.database

11 |

Types

12 | 13 | 14 | 15 | 18 | 21 | 22 | 23 |
16 |

MarvelDatabase

17 |
19 |

Marvel room database storing the different requested information like: characters, comics, etc...

20 | abstract class MarvelDatabase : RoomDatabase
24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di.modules/-database-module/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | DatabaseModule.<init> - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di.modules / DatabaseModule / <init>
9 |
10 |

<init>

11 | 12 | DatabaseModule() 13 |

Class that contributes to the object graph CoreComponent.

14 |

See Also
15 |

Module

16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di.modules/-network-module/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NetworkModule.<init> - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di.modules / NetworkModule / <init>
9 |
10 |

<init>

11 | 12 | NetworkModule() 13 |

Class that contributes to the object graph CoreComponent.

14 |

See Also
15 |

Module

16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di.modules/-utils-module/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | UtilsModule.<init> - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di.modules / UtilsModule / <init>
9 |
10 |

<init>

11 | 12 | UtilsModule() 13 |

Class that contributes to the object graph CoreComponent.

14 |

See Also
15 |

Module

16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di.scopes/-app-scope/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | AppScope.<init> - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di.scopes / AppScope / <init>
9 |
10 |

<init>

11 | 12 | AppScope() 13 |

Scope for the entire app runtime.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di.scopes/-app-scope/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | AppScope - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di.scopes / AppScope
9 |
10 |

AppScope

11 | @Scope annotation class AppScope 12 |

Scope for the entire app runtime.

13 |

Constructors

14 | 15 | 16 | 17 | 20 | 23 | 24 | 25 |
18 |

<init>

19 |
21 |

Scope for the entire app runtime.

22 | AppScope()
26 | 27 | 28 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di.scopes/-feature-scope/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FeatureScope.<init> - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di.scopes / FeatureScope / <init>
9 |
10 |

<init>

11 | 12 | FeatureScope() 13 |

Scope for a feature module.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di.scopes/-feature-scope/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | FeatureScope - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di.scopes / FeatureScope
9 |
10 |

FeatureScope

11 | @Scope annotation class FeatureScope 12 |

Scope for a feature module.

13 |

Constructors

14 | 15 | 16 | 17 | 20 | 23 | 24 | 25 |
18 |

<init>

19 |
21 |

Scope for a feature module.

22 | FeatureScope()
26 | 27 | 28 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di.scopes/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.core.di.scopes - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di.scopes
9 |
10 |

Package com.vmadalin.core.di.scopes

11 |

Annotations

12 | 13 | 14 | 15 | 18 | 21 | 22 | 23 | 26 | 29 | 30 | 31 |
16 |

AppScope

17 |
19 |

Scope for the entire app runtime.

20 | annotation class AppScope
24 |

FeatureScope

25 |
27 |

Scope for a feature module.

28 | annotation class FeatureScope
32 | 33 | 34 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di/-core-component/character-favorite-dao.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CoreComponent.characterFavoriteDao - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di / CoreComponent / characterFavoriteDao
9 |
10 |

characterFavoriteDao

11 | 12 | abstract fun characterFavoriteDao(): CharacterFavoriteDao 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di/-core-component/context.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CoreComponent.context - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di / CoreComponent / context
9 |
10 |

context

11 | 12 | abstract fun context(): Context 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di/-core-component/marvel-repository.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CoreComponent.marvelRepository - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di / CoreComponent / marvelRepository
9 |
10 |

marvelRepository

11 | 12 | abstract fun marvelRepository(): MarvelRepository 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di/-core-component/marvel-service.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CoreComponent.marvelService - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di / CoreComponent / marvelService
9 |
10 |

marvelService

11 | 12 | abstract fun marvelService(): MarvelService 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di/-core-component/theme-utils.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CoreComponent.themeUtils - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di / CoreComponent / themeUtils
9 |
10 |

themeUtils

11 | 12 | abstract fun themeUtils(): ThemeUtils 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.di/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.core.di - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.di
9 |
10 |

Package com.vmadalin.core.di

11 |

Types

12 | 13 | 14 | 15 | 18 | 21 | 22 | 23 |
16 |

CoreComponent

17 |
19 |

Core component that all module's components depend on.

20 | interface CoreComponent
24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.extensions/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.core.extensions - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.extensions
9 |
10 |

Package com.vmadalin.core.extensions

11 |

Extensions for External Classes

12 | 13 | 14 | 15 | 18 | 20 | 21 | 22 | 25 | 27 | 28 | 29 |
16 |

kotlin.ByteArray

17 |
19 |
23 |

kotlin.String

24 |
26 |
30 | 31 | 32 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.mapper/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.core.mapper - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.mapper
9 |
10 |

Package com.vmadalin.core.mapper

11 |

Types

12 | 13 | 14 | 15 | 18 | 22 | 23 | 24 |
16 |

Mapper

17 |
19 |

Helper class to transforms a specific input to desired object output, implementing for that 20 | all operations required to transform.

21 | interface Mapper<F, T>
25 | 26 | 27 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.repositiories/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.core.network.repositiories - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.repositiories
9 |
10 |

Package com.vmadalin.core.network.repositiories

11 |

Types

12 | 13 | 14 | 15 | 18 | 21 | 22 | 23 |
16 |

MarvelRepository

17 |
19 |

Repository module for handling marvel API network operations MarvelService.

20 | class MarvelRepository
24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-base-response/code.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | BaseResponse.code - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / BaseResponse / code
9 |
10 |

code

11 | 12 | val code: Any 13 |

The HTTP status code of the returned result.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-base-response/data.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | BaseResponse.data - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / BaseResponse / data
9 |
10 |

data

11 | 12 | val data: DataResponse<T> 13 |

The results returned by the call.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-base-response/message.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | BaseResponse.message - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / BaseResponse / message
9 |
10 |

message

11 | 12 | val message: String 13 |

A more descriptive message of the failure call status.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-base-response/status.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | BaseResponse.status - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / BaseResponse / status
9 |
10 |

status

11 | 12 | val status: String 13 |

A string description of the call status.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-character-response/description.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterResponse.description - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / CharacterResponse / description
9 |
10 |

description

11 | 12 | val description: String 13 |

A short bio or description of the character.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-character-response/id.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterResponse.id - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / CharacterResponse / id
9 |
10 |

id

11 | 12 | val id: Long 13 |

The unique ID of the character resource.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-character-response/name.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterResponse.name - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / CharacterResponse / name
9 |
10 |

name

11 | 12 | val name: String 13 |

The name of the character.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-character-response/thumbnail.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterResponse.thumbnail - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / CharacterResponse / thumbnail
9 |
10 |

thumbnail

11 | 12 | val thumbnail: CharacterThumbnailResponse 13 |

The representative image for this character.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-character-thumbnail-response/extension.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterThumbnailResponse.extension - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / CharacterThumbnailResponse / extension
9 |
10 |

extension

11 | 12 | val extension: String 13 |

The file extension for the image.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-character-thumbnail-response/path.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterThumbnailResponse.path - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / CharacterThumbnailResponse / path
9 |
10 |

path

11 | 12 | val path: String 13 |

The directory path of to the image.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-data-response/count.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | DataResponse.count - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / DataResponse / count
9 |
10 |

count

11 | 12 | val count: Int 13 |

The total number of results returned by this call.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-data-response/limit.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | DataResponse.limit - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / DataResponse / limit
9 |
10 |

limit

11 | 12 | val limit: Int 13 |

The requested result limit.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-data-response/offset.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | DataResponse.offset - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / DataResponse / offset
9 |
10 |

offset

11 | 12 | val offset: Int 13 |

The requested offset (number of skipped results) of the call.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-data-response/results.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | DataResponse.results - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / DataResponse / results
9 |
10 |

results

11 | 12 | val results: List<T> 13 |

The list of T returned by the call.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.responses/-data-response/total.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | DataResponse.total - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.responses / DataResponse / total
9 |
10 |

total

11 | 12 | val total: Int 13 |

The total number of resources available given the current filter set.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network.services/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.core.network.services - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network.services
9 |
10 |

Package com.vmadalin.core.network.services

11 |

Types

12 | 13 | 14 | 15 | 18 | 21 | 22 | 23 |
16 |

MarvelService

17 |
19 |

Representation interface of the Marvel API endpoints.

20 | interface MarvelService
24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network/-network-state/-error/is-additional.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NetworkState.Error.isAdditional - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network / NetworkState / Error / isAdditional
9 |
10 |

isAdditional

11 | 12 | val isAdditional: Boolean 13 |

Is additional request.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network/-network-state/-loading/is-additional.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NetworkState.Loading.isAdditional - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network / NetworkState / Loading / isAdditional
9 |
10 |

isAdditional

11 | 12 | val isAdditional: Boolean 13 |

Is additional request.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network/-network-state/-success/is-additional.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NetworkState.Success.isAdditional - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network / NetworkState / Success / isAdditional
9 |
10 |

isAdditional

11 | 12 | val isAdditional: Boolean 13 |

Is additional request.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network/-network-state/-success/is-empty-response.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NetworkState.Success.isEmptyResponse - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network / NetworkState / Success / isEmptyResponse
9 |
10 |

isEmptyResponse

11 | 12 | val isEmptyResponse: Boolean 13 |

Is the body of response empty.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network/-network-state/is-error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NetworkState.isError - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network / NetworkState / isError
9 |
10 |

isError

11 | 12 | fun isError(): Boolean 13 |

Check if current network state is Error.

14 |

Return
15 | True if is error state, otherwise false.

16 | 17 | 18 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network/-network-state/is-loading.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NetworkState.isLoading - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network / NetworkState / isLoading
9 |
10 |

isLoading

11 | 12 | fun isLoading(): Boolean 13 |

Check if current network state is Loading.

14 |

Return
15 | True if is loading state, otherwise false.

16 | 17 | 18 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network/-network-state/is-success.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NetworkState.isSuccess - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network / NetworkState / isSuccess
9 |
10 |

isSuccess

11 | 12 | fun isSuccess(): Boolean 13 |

Check if current network state is Success.

14 |

Return
15 | True if is success state, otherwise false.

16 | 17 | 18 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.network/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.core.network - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.network
9 |
10 |

Package com.vmadalin.core.network

11 |

Types

12 | 13 | 14 | 15 | 18 | 21 | 22 | 23 |
16 |

NetworkState

17 |
19 |

Different states for any network request.

20 | sealed class NetworkState
24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.utils/-theme-utils/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | ThemeUtils.<init> - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.utils / ThemeUtils / <init>
9 |
10 |

<init>

11 | 12 | ThemeUtils() 13 |

Utils for application theme configuration.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/core/com.vmadalin.core.utils/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.core.utils - core 5 | 6 | 7 | 8 | core / com.vmadalin.core.utils
9 |
10 |

Package com.vmadalin.core.utils

11 |

Types

12 | 13 | 14 | 15 | 18 | 21 | 22 | 23 |
16 |

ThemeUtils

17 |
19 |

Utils for application theme configuration.

20 | class ThemeUtils
24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/core/package-list: -------------------------------------------------------------------------------- 1 | $dokka.format:html 2 | $dokka.linkExtension:html 3 | $dokka.location:com.vmadalin.core.extensions$toHex(kotlin.ByteArray)com.vmadalin.core.extensions/kotlin.-byte-array/to-hex.html 4 | $dokka.location:com.vmadalin.core.extensions$toMD5(kotlin.String)com.vmadalin.core.extensions/kotlin.-string/to-m-d5.html 5 | com.vmadalin.core.annotations 6 | com.vmadalin.core.database 7 | com.vmadalin.core.database.characterfavorite 8 | com.vmadalin.core.database.migrations 9 | com.vmadalin.core.di 10 | com.vmadalin.core.di.modules 11 | com.vmadalin.core.di.scopes 12 | com.vmadalin.core.extensions 13 | com.vmadalin.core.mapper 14 | com.vmadalin.core.network 15 | com.vmadalin.core.network.repositiories 16 | com.vmadalin.core.network.responses 17 | com.vmadalin.core.network.services 18 | com.vmadalin.core.utils 19 | -------------------------------------------------------------------------------- /docs/features/characters_favorites/com.vmadalin.dynamicfeatures.charactersfavorites.ui.favorite/-characters-favorite-view-state/-empty.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersFavoriteViewState.Empty - features/characters_favorites 5 | 6 | 7 | 8 | features/characters_favorites / com.vmadalin.dynamicfeatures.charactersfavorites.ui.favorite / CharactersFavoriteViewState / Empty
9 |
10 |

Empty

11 | object Empty : CharactersFavoriteViewState 12 |

No favorite characters to display.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_favorites/com.vmadalin.dynamicfeatures.charactersfavorites.ui.favorite/-characters-favorite-view-state/-listed.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersFavoriteViewState.Listed - features/characters_favorites 5 | 6 | 7 | 8 | features/characters_favorites / com.vmadalin.dynamicfeatures.charactersfavorites.ui.favorite / CharactersFavoriteViewState / Listed
9 |
10 |

Listed

11 | object Listed : CharactersFavoriteViewState 12 |

Favorite characters displayed.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_favorites/package-list: -------------------------------------------------------------------------------- 1 | $dokka.format:html 2 | $dokka.linkExtension:html 3 | 4 | com.vmadalin.dynamicfeatures.charactersfavorites.ui.favorite 5 | com.vmadalin.dynamicfeatures.charactersfavorites.ui.favorite.adapter 6 | com.vmadalin.dynamicfeatures.charactersfavorites.ui.favorite.adapter.holders 7 | com.vmadalin.dynamicfeatures.charactersfavorites.ui.favorite.di 8 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail.di/-character-detail-module/fragment.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetailModule.fragment - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail.di / CharacterDetailModule / fragment
9 |
10 |

fragment

11 | 12 | val fragment: CharacterDetailFragment 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail.model/-character-detail-mapper/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetailMapper.<init> - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail.model / CharacterDetailMapper / <init>
9 |
10 |

<init>

11 | 12 | CharacterDetailMapper() 13 |

Helper class to transforms network response to visual model, catching the necessary data.

14 |

See Also
15 |

Mapper

16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail.model/-character-detail/description.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetail.description - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail.model / CharacterDetail / description
9 |
10 |

description

11 | 12 | val description: String 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail.model/-character-detail/id.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetail.id - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail.model / CharacterDetail / id
9 |
10 |

id

11 | 12 | val id: Long 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail.model/-character-detail/image-url.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetail.imageUrl - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail.model / CharacterDetail / imageUrl
9 |
10 |

imageUrl

11 | 12 | val imageUrl: String 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail.model/-character-detail/name.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetail.name - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail.model / CharacterDetail / name
9 |
10 |

name

11 | 12 | val name: String 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail/-character-detail-fragment/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetailFragment.<init> - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail / CharacterDetailFragment / <init>
9 |
10 |

<init>

11 | 12 | CharacterDetailFragment() 13 |

View detail for selected character, displaying extra info and with option to add it to favorite.

14 |

See Also
15 |

BaseFragment

16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail/-character-detail-fragment/progress-dialog.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetailFragment.progressDialog - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail / CharacterDetailFragment / progressDialog
9 |
10 |

progressDialog

11 | 12 | lateinit var progressDialog: ProgressBarDialog 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail/-character-detail-view-model/character-favorite-repository.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetailViewModel.characterFavoriteRepository - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail / CharacterDetailViewModel / characterFavoriteRepository
9 |
10 |

characterFavoriteRepository

11 | 12 | val characterFavoriteRepository: CharacterFavoriteRepository 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail/-character-detail-view-model/marvel-repository.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetailViewModel.marvelRepository - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail / CharacterDetailViewModel / marvelRepository
9 |
10 |

marvelRepository

11 | 12 | val marvelRepository: MarvelRepository 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail/-character-detail-view-model/state.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetailViewModel.state - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail / CharacterDetailViewModel / state
9 |
10 |

state

11 | 12 | val state: LiveData<CharacterDetailViewState> 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail/-character-detail-view-state/-add-to-favorite.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetailViewState.AddToFavorite - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail / CharacterDetailViewState / AddToFavorite
9 |
10 |

AddToFavorite

11 | object AddToFavorite : CharacterDetailViewState 12 |

Add current character to favorite list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail/-character-detail-view-state/-added-to-favorite.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetailViewState.AddedToFavorite - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail / CharacterDetailViewState / AddedToFavorite
9 |
10 |

AddedToFavorite

11 | object AddedToFavorite : CharacterDetailViewState 12 |

Added current character to favorite list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail/-character-detail-view-state/-already-added-to-favorite.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetailViewState.AlreadyAddedToFavorite - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail / CharacterDetailViewState / AlreadyAddedToFavorite
9 |
10 |

AlreadyAddedToFavorite

11 | object AlreadyAddedToFavorite : CharacterDetailViewState 12 |

Already added character to favorite list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail/-character-detail-view-state/-dismiss.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetailViewState.Dismiss - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail / CharacterDetailViewState / Dismiss
9 |
10 |

Dismiss

11 | object Dismiss : CharacterDetailViewState 12 |

Dismiss the detail view.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail/-character-detail-view-state/-error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetailViewState.Error - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail / CharacterDetailViewState / Error
9 |
10 |

Error

11 | object Error : CharacterDetailViewState 12 |

Error on loading character detail info.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.detail/-character-detail-view-state/-loading.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterDetailViewState.Loading - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.detail / CharacterDetailViewState / Loading
9 |
10 |

Loading

11 | object Loading : CharacterDetailViewState 12 |

Loading character detail info.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter/-characters-list-adapter-state/-add-error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListAdapterState.AddError - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter / CharactersListAdapterState / AddError
9 |
10 |

AddError

11 | object AddError : CharactersListAdapterState 12 |

Error on add new characters into list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter/-characters-list-adapter-state/-add-loading.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListAdapterState.AddLoading - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter / CharactersListAdapterState / AddLoading
9 |
10 |

AddLoading

11 | object AddLoading : CharactersListAdapterState 12 |

Loading for new characters to add into list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter/-characters-list-adapter-state/-added.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListAdapterState.Added - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter / CharactersListAdapterState / Added
9 |
10 |

Added

11 | object Added : CharactersListAdapterState 12 |

Listed the added characters into list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter/-characters-list-adapter-state/-no-more.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListAdapterState.NoMore - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter / CharactersListAdapterState / NoMore
9 |
10 |

NoMore

11 | object NoMore : CharactersListAdapterState 12 |

No more characters to add into list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter/-characters-list-adapter-state/has-extra-row.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListAdapterState.hasExtraRow - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter / CharactersListAdapterState / hasExtraRow
9 |
10 |

hasExtraRow

11 | 12 | val hasExtraRow: Boolean 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter/-characters-list-adapter/view-model.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListAdapter.viewModel - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter / CharactersListAdapter / viewModel
9 |
10 |

viewModel

11 | 12 | val viewModel: CharactersListViewModel 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.di/-characters-list-module/fragment.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListModule.fragment - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.di / CharactersListModule / fragment
9 |
10 |

fragment

11 | 12 | val fragment: CharactersListFragment 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.model/-character-item-mapper/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterItemMapper.<init> - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.model / CharacterItemMapper / <init>
9 |
10 |

<init>

11 | 12 | CharacterItemMapper() 13 |

Helper class to transforms network response to visual model, catching the necessary data.

14 |

See Also
15 |

Mapper

16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.model/-character-item/description.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterItem.description - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.model / CharacterItem / description
9 |
10 |

description

11 | 12 | val description: String 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.model/-character-item/id.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterItem.id - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.model / CharacterItem / id
9 |
10 |

id

11 | 12 | val id: Long 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.model/-character-item/image-url.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterItem.imageUrl - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.model / CharacterItem / imageUrl
9 |
10 |

imageUrl

11 | 12 | val imageUrl: String 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.model/-character-item/name.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharacterItem.name - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.model / CharacterItem / name
9 |
10 |

name

11 | 12 | val name: String 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.paging/-characters-page-data-source/mapper.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersPageDataSource.mapper - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.paging / CharactersPageDataSource / mapper
9 |
10 |

mapper

11 | 12 | val mapper: CharacterItemMapper 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.paging/-characters-page-data-source/network-state.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersPageDataSource.networkState - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.paging / CharactersPageDataSource / networkState
9 |
10 |

networkState

11 | 12 | val networkState: MutableLiveData<NetworkState> 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.paging/-characters-page-data-source/repository.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersPageDataSource.repository - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.paging / CharactersPageDataSource / repository
9 |
10 |

repository

11 | 12 | val repository: MarvelRepository 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.paging/-characters-page-data-source/scope.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersPageDataSource.scope - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.paging / CharactersPageDataSource / scope
9 |
10 |

scope

11 | 12 | val scope: CoroutineScope 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.paging/-p-a-g-e_-i-n-i-t_-e-l-e-m-e-n-t-s.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | PAGE_INIT_ELEMENTS - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.paging / PAGE_INIT_ELEMENTS
9 |
10 |

PAGE_INIT_ELEMENTS

11 | 12 | const val PAGE_INIT_ELEMENTS: Int 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list.paging/-p-a-g-e_-m-a-x_-e-l-e-m-e-n-t-s.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | PAGE_MAX_ELEMENTS - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list.paging / PAGE_MAX_ELEMENTS
9 |
10 |

PAGE_MAX_ELEMENTS

11 | 12 | const val PAGE_MAX_ELEMENTS: Int 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list/-characters-list-fragment/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListFragment.<init> - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list / CharactersListFragment / <init>
9 |
10 |

<init>

11 | 12 | CharactersListFragment() 13 |

View listing the all marvel characters with option to display the detail view.

14 |

See Also
15 |

BaseFragment

16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list/-characters-list-view-model/event.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListViewModel.event - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list / CharactersListViewModel / event
9 |
10 |

event

11 | 12 | val event: SingleLiveData<CharactersListViewEvent> 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list/-characters-list-view-model/network-state.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListViewModel.networkState - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list / CharactersListViewModel / networkState
9 |
10 |

networkState

11 | 12 | val networkState: LiveData<NetworkState!> 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list/-characters-list-view-state/-add-error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListViewState.AddError - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list / CharactersListViewState / AddError
9 |
10 |

AddError

11 | object AddError : CharactersListViewState 12 |

Error on add more elements into characters list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list/-characters-list-view-state/-add-loading.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListViewState.AddLoading - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list / CharactersListViewState / AddLoading
9 |
10 |

AddLoading

11 | object AddLoading : CharactersListViewState 12 |

Loading on add more elements into characters list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list/-characters-list-view-state/-empty.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListViewState.Empty - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list / CharactersListViewState / Empty
9 |
10 |

Empty

11 | object Empty : CharactersListViewState 12 |

Empty characters list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list/-characters-list-view-state/-error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListViewState.Error - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list / CharactersListViewState / Error
9 |
10 |

Error

11 | object Error : CharactersListViewState 12 |

Error on loading characters list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list/-characters-list-view-state/-loaded.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListViewState.Loaded - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list / CharactersListViewState / Loaded
9 |
10 |

Loaded

11 | object Loaded : CharactersListViewState 12 |

Loaded characters list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list/-characters-list-view-state/-loading.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListViewState.Loading - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list / CharactersListViewState / Loading
9 |
10 |

Loading

11 | object Loading : CharactersListViewState 12 |

Loading characters list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list/-characters-list-view-state/-no-more-elements.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListViewState.NoMoreElements - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list / CharactersListViewState / NoMoreElements
9 |
10 |

NoMoreElements

11 | object NoMoreElements : CharactersListViewState 12 |

No more elements for adding into characters list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/com.vmadalin.dynamicfeatures.characterslist.ui.list/-characters-list-view-state/-refreshing.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | CharactersListViewState.Refreshing - features/characters_list 5 | 6 | 7 | 8 | features/characters_list / com.vmadalin.dynamicfeatures.characterslist.ui.list / CharactersListViewState / Refreshing
9 |
10 |

Refreshing

11 | object Refreshing : CharactersListViewState 12 |

Refreshing characters list.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/characters_list/package-list: -------------------------------------------------------------------------------- 1 | $dokka.format:html 2 | $dokka.linkExtension:html 3 | 4 | com.vmadalin.dynamicfeatures.characterslist.ui.detail 5 | com.vmadalin.dynamicfeatures.characterslist.ui.detail.di 6 | com.vmadalin.dynamicfeatures.characterslist.ui.detail.model 7 | com.vmadalin.dynamicfeatures.characterslist.ui.list 8 | com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter 9 | com.vmadalin.dynamicfeatures.characterslist.ui.list.adapter.holders 10 | com.vmadalin.dynamicfeatures.characterslist.ui.list.di 11 | com.vmadalin.dynamicfeatures.characterslist.ui.list.model 12 | com.vmadalin.dynamicfeatures.characterslist.ui.list.paging 13 | -------------------------------------------------------------------------------- /docs/features/home/com.vmadalin.dynamicfeatures.home.ui.di/-home-module/fragment.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | HomeModule.fragment - features/home 5 | 6 | 7 | 8 | features/home / com.vmadalin.dynamicfeatures.home.ui.di / HomeModule / fragment
9 |
10 |

fragment

11 | 12 | val fragment: HomeFragment 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/home/com.vmadalin.dynamicfeatures.home.ui.menu/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | com.vmadalin.dynamicfeatures.home.ui.menu - features/home 5 | 6 | 7 | 8 | features/home / com.vmadalin.dynamicfeatures.home.ui.menu
9 |
10 |

Package com.vmadalin.dynamicfeatures.home.ui.menu

11 |

Types

12 | 13 | 14 | 15 | 18 | 21 | 22 | 23 |
16 |

ToggleThemeCheckBox

17 |
19 |

Animated button menu item check box to apply night/light mode.

20 | class ToggleThemeCheckBox : AppCompatCheckBox
24 | 25 | 26 | -------------------------------------------------------------------------------- /docs/features/home/com.vmadalin.dynamicfeatures.home.ui/-home-fragment/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | HomeFragment.<init> - features/home 5 | 6 | 7 | 8 | features/home / com.vmadalin.dynamicfeatures.home.ui / HomeFragment / <init>
9 |
10 |

<init>

11 | 12 | HomeFragment() 13 |

Home principal view containing bottom navigation bar with different characters tabs.

14 |

See Also
15 |

BaseFragment

16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/features/home/com.vmadalin.dynamicfeatures.home.ui/-home-fragment/on-init-data-binding.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | HomeFragment.onInitDataBinding - features/home 5 | 6 | 7 | 8 | features/home / com.vmadalin.dynamicfeatures.home.ui / HomeFragment / onInitDataBinding
9 |
10 |

onInitDataBinding

11 | 12 | fun onInitDataBinding(): Unit 13 |

Initialize view data binding variables.

14 | 15 | 16 | -------------------------------------------------------------------------------- /docs/features/home/com.vmadalin.dynamicfeatures.home.ui/-home-fragment/theme-utils.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | HomeFragment.themeUtils - features/home 5 | 6 | 7 | 8 | features/home / com.vmadalin.dynamicfeatures.home.ui / HomeFragment / themeUtils
9 |
10 |

themeUtils

11 | 12 | lateinit var themeUtils: ThemeUtils 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/home/com.vmadalin.dynamicfeatures.home.ui/-home-view-model/-init-.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | HomeViewModel.<init> - features/home 5 | 6 | 7 | 8 | features/home / com.vmadalin.dynamicfeatures.home.ui / HomeViewModel / <init>
9 |
10 |

<init>

11 | 12 | HomeViewModel() 13 |

View model responsible for preparing and managing the data for HomeFragment.

14 |

See Also
15 |

ViewModel

16 |

17 | 18 | 19 | -------------------------------------------------------------------------------- /docs/features/home/com.vmadalin.dynamicfeatures.home.ui/-home-view-model/state.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | HomeViewModel.state - features/home 5 | 6 | 7 | 8 | features/home / com.vmadalin.dynamicfeatures.home.ui / HomeViewModel / state
9 |
10 |

state

11 | 12 | val state: LiveData<HomeViewState> 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/home/com.vmadalin.dynamicfeatures.home.ui/-home-view-state/-full-screen.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | HomeViewState.FullScreen - features/home 5 | 6 | 7 | 8 | features/home / com.vmadalin.dynamicfeatures.home.ui / HomeViewState / FullScreen
9 |
10 |

FullScreen

11 | object FullScreen : HomeViewState 12 |

Full screen mode.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/home/com.vmadalin.dynamicfeatures.home.ui/-home-view-state/-navigation-screen.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | HomeViewState.NavigationScreen - features/home 5 | 6 | 7 | 8 | features/home / com.vmadalin.dynamicfeatures.home.ui / HomeViewState / NavigationScreen
9 |
10 |

NavigationScreen

11 | object NavigationScreen : HomeViewState 12 |

Navigation screen mode with bottom bar.

13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/home/com.vmadalin.dynamicfeatures.home.ui/-n-a-v_-f-r-a-g-m-e-n-t-s_-i-d.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | NAV_FRAGMENTS_ID - features/home 5 | 6 | 7 | 8 | features/home / com.vmadalin.dynamicfeatures.home.ui / NAV_FRAGMENTS_ID
9 |
10 |

NAV_FRAGMENTS_ID

11 | 12 | val NAV_FRAGMENTS_ID: <ERROR CLASS> 13 | 14 | 15 | -------------------------------------------------------------------------------- /docs/features/home/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | features/home 5 | 6 | 7 | 8 | features/home
9 |
10 |

Packages

11 | 12 | 13 | 14 | 17 | 19 | 20 | 21 | 24 | 26 | 27 | 28 | 31 | 33 | 34 | 35 |
15 |

com.vmadalin.dynamicfeatures.home.ui

16 |
18 |
22 |

com.vmadalin.dynamicfeatures.home.ui.di

23 |
25 |
29 |

com.vmadalin.dynamicfeatures.home.ui.menu

30 |
32 |
36 |

Index

37 | All Types 38 | 39 | 40 | -------------------------------------------------------------------------------- /docs/features/home/package-list: -------------------------------------------------------------------------------- 1 | $dokka.format:html 2 | $dokka.linkExtension:html 3 | 4 | com.vmadalin.dynamicfeatures.home.ui 5 | com.vmadalin.dynamicfeatures.home.ui.di 6 | com.vmadalin.dynamicfeatures.home.ui.menu 7 | -------------------------------------------------------------------------------- /docs/features/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | features 5 | 6 | 7 | 8 |

Commons

9 | 10 | 11 | 12 | 15 | 17 | 18 | 19 | 22 | 24 | 25 | 26 | 29 | 31 | 32 | 33 |
13 |

characters_favorites

14 |
16 |
20 |

characters_list

21 |
23 |
27 |

home

28 |
30 |
34 | 35 | 36 | -------------------------------------------------------------------------------- /docs/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | kotlin-sample-app 5 | 6 | 7 | 8 | kotlin-sample-app
9 |
10 |

Modules

11 | 12 | 13 | 14 | 17 | 19 | 20 | 21 | 24 | 26 | 27 | 28 | 31 | 33 | 34 | 35 | 38 | 40 | 41 | 42 |
15 |

app

16 |
18 |
22 |

commons

23 |
25 |
29 |

core

30 |
32 |
36 |

features

37 |
39 |
43 | 44 | 45 | -------------------------------------------------------------------------------- /features/characters_favorites/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /features/characters_favorites/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | import dependencies.Dependencies 18 | import extensions.implementation 19 | 20 | plugins { 21 | id("commons.android-dynamic-feature") 22 | } 23 | 24 | dependencies { 25 | implementation(project(BuildModules.Features.HOME)) 26 | 27 | implementation(Dependencies.RECYCLE_VIEW) 28 | } 29 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/res/values-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 100dp 5 | 5dp 6 | 7 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/res/values-land/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 2 5 | 6 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/res/values-sw600dp-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 140dp 5 | 15dp 6 | 7 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/res/values-sw600dp-land/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 2 5 | 6 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/res/values-sw600dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 150dp 5 | 15dp 6 | 7 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/res/values-sw600dp/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 2 5 | 6 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/res/values-sw720dp-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 175dp 5 | 20dp 6 | 7 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/res/values-sw720dp-land/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 3 5 | 6 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/res/values-sw720dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 175dp 5 | 20dp 6 | 7 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/res/values-sw720dp/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 2 5 | 6 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 140dp 5 | 10dp 6 | 10dp 7 | 5dp 8 | 9 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/res/values/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 1 5 | 6 | -------------------------------------------------------------------------------- /features/characters_favorites/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Your favorite characters list is empty 5 | Image of the current character list 6 | 7 | -------------------------------------------------------------------------------- /features/characters_list/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /features/characters_list/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /features/characters_list/src/main/res/drawable/ic_favorites.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /features/characters_list/src/main/res/values-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 100dp 5 | 5dp 6 | 7 | 8 | 200dp 9 | 10 | -------------------------------------------------------------------------------- /features/characters_list/src/main/res/values-land/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 4 5 | 6 | -------------------------------------------------------------------------------- /features/characters_list/src/main/res/values-sw600dp-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 140dp 5 | 15dp 6 | 7 | 8 | 450dp 9 | 10 | -------------------------------------------------------------------------------- /features/characters_list/src/main/res/values-sw600dp-land/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 3 5 | 6 | -------------------------------------------------------------------------------- /features/characters_list/src/main/res/values-sw600dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 150dp 5 | 15dp 6 | 7 | 8 | 450dp 9 | 10 | -------------------------------------------------------------------------------- /features/characters_list/src/main/res/values-sw600dp/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 2 5 | 6 | -------------------------------------------------------------------------------- /features/characters_list/src/main/res/values-sw720dp-land/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 400dp 5 | 6 | -------------------------------------------------------------------------------- /features/characters_list/src/main/res/values-sw720dp-land/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 4 5 | 6 | -------------------------------------------------------------------------------- /features/characters_list/src/main/res/values-sw720dp/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 175dp 5 | 20dp 6 | 7 | 8 | 500dp 9 | 10 | -------------------------------------------------------------------------------- /features/characters_list/src/main/res/values-sw720dp/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 3 5 | 6 | -------------------------------------------------------------------------------- /features/characters_list/src/main/res/values/integers.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 2 5 | 6 | -------------------------------------------------------------------------------- /features/characters_list/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Empty characters list 5 | Ups… an error occurred on obtain characters list, please swipe down to try again 6 | Error on fetch more characters 7 | Retry 8 | 9 | 10 | Loading detail… 11 | Error on obtain detail, please try later. 12 | Added to your favorite list 13 | Image of the selected character 14 | 15 | -------------------------------------------------------------------------------- /features/characters_list/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker: -------------------------------------------------------------------------------- 1 | mock-maker-inline 2 | -------------------------------------------------------------------------------- /features/home/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /features/home/build.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | plugins { 18 | id("commons.android-dynamic-feature") 19 | } 20 | -------------------------------------------------------------------------------- /features/home/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /features/home/src/main/res/drawable/asl_theme.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 12 | 13 | 17 | 18 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /features/home/src/main/res/drawable/ic_favorites.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /features/home/src/main/res/drawable/ic_theme_day.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /features/home/src/main/res/drawable/ic_theme_night.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 11 | 12 | -------------------------------------------------------------------------------- /features/home/src/main/res/drawable/sl_navigation.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /features/home/src/main/res/menu/bottom_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /features/home/src/main/res/menu/toolbar_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | 10 | -------------------------------------------------------------------------------- /features/home/src/main/res/navigation/navigation_characters_favorites_graph.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /features/home/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #aaaaaa 4 | #ffffff 5 | 6 | -------------------------------------------------------------------------------- /features/home/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #9d9d9d 4 | #1b1b1b 5 | 6 | -------------------------------------------------------------------------------- /features/home/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Characters 4 | Favorites 5 | 6 | 7 | Toggle Theme 8 | 9 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | zipStoreBase=GRADLE_USER_HOME 4 | zipStorePath=wrapper/dists 5 | distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.4-all.zip 6 | -------------------------------------------------------------------------------- /libraries/test_utils/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /libraries/test_utils/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /libraries/test_utils/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 7 | 8 | 9 | 10 | 11 | 12 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /libraries/test_utils/src/main/kotlin/com/vmadalin/libraries/testutils/TestCompactActivityNoActionBar.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.vmadalin.libraries.testutils 18 | 19 | import androidx.appcompat.app.AppCompatActivity 20 | 21 | class TestCompactActivityNoActionBar : AppCompatActivity() 22 | -------------------------------------------------------------------------------- /libraries/test_utils/src/main/kotlin/com/vmadalin/libraries/testutils/TestCompatActivity.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.vmadalin.libraries.testutils 18 | 19 | import androidx.appcompat.app.AppCompatActivity 20 | 21 | class TestCompatActivity : AppCompatActivity() 22 | -------------------------------------------------------------------------------- /libraries/test_utils/src/main/kotlin/com/vmadalin/libraries/testutils/TestFragment.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.vmadalin.libraries.testutils 18 | 19 | import androidx.fragment.app.Fragment 20 | 21 | class TestFragment : Fragment() 22 | -------------------------------------------------------------------------------- /libraries/test_utils/src/main/kotlin/com/vmadalin/libraries/testutils/TestFragmentActivity.kt: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.vmadalin.libraries.testutils 18 | 19 | import androidx.fragment.app.FragmentActivity 20 | 21 | class TestFragmentActivity : FragmentActivity() 22 | -------------------------------------------------------------------------------- /screenshots/architecture/diagram_communication_layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/architecture/diagram_communication_layers.png -------------------------------------------------------------------------------- /screenshots/architecture/diagram_communication_modules.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/architecture/diagram_communication_modules.png -------------------------------------------------------------------------------- /screenshots/architecture/diagram_dependency_app.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/architecture/diagram_dependency_app.png -------------------------------------------------------------------------------- /screenshots/architecture/diagram_dependency_commons_ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/architecture/diagram_dependency_commons_ui.png -------------------------------------------------------------------------------- /screenshots/architecture/diagram_dependency_commons_views.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/architecture/diagram_dependency_commons_views.png -------------------------------------------------------------------------------- /screenshots/architecture/diagram_dependency_core.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/architecture/diagram_dependency_core.png -------------------------------------------------------------------------------- /screenshots/architecture/diagram_dependency_features_characters_favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/architecture/diagram_dependency_features_characters_favorite.png -------------------------------------------------------------------------------- /screenshots/architecture/diagram_dependency_features_characters_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/architecture/diagram_dependency_features_characters_list.png -------------------------------------------------------------------------------- /screenshots/architecture/diagram_dependency_features_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/architecture/diagram_dependency_features_home.png -------------------------------------------------------------------------------- /screenshots/architecture/diagram_dependency_libraries_test_utils.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/architecture/diagram_dependency_libraries_test_utils.png -------------------------------------------------------------------------------- /screenshots/architecture/project_structure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/architecture/project_structure.png -------------------------------------------------------------------------------- /screenshots/demo/demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/demo/demo.gif -------------------------------------------------------------------------------- /screenshots/phone/dark_mode_character_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/phone/dark_mode_character_detail.png -------------------------------------------------------------------------------- /screenshots/phone/dark_mode_characters_favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/phone/dark_mode_characters_favorite.png -------------------------------------------------------------------------------- /screenshots/phone/dark_mode_characters_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/phone/dark_mode_characters_list.png -------------------------------------------------------------------------------- /screenshots/phone/light_mode_character_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/phone/light_mode_character_detail.png -------------------------------------------------------------------------------- /screenshots/phone/light_mode_characters_favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/phone/light_mode_characters_favorite.png -------------------------------------------------------------------------------- /screenshots/phone/light_mode_characters_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/phone/light_mode_characters_list.png -------------------------------------------------------------------------------- /screenshots/phone_landscape/dark_mode_character_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/phone_landscape/dark_mode_character_detail.png -------------------------------------------------------------------------------- /screenshots/phone_landscape/dark_mode_characters_favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/phone_landscape/dark_mode_characters_favorite.png -------------------------------------------------------------------------------- /screenshots/phone_landscape/dark_mode_characters_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/phone_landscape/dark_mode_characters_list.png -------------------------------------------------------------------------------- /screenshots/phone_landscape/light_mode_character_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/phone_landscape/light_mode_character_detail.png -------------------------------------------------------------------------------- /screenshots/phone_landscape/light_mode_characters_favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/phone_landscape/light_mode_characters_favorite.png -------------------------------------------------------------------------------- /screenshots/phone_landscape/light_mode_characters_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/phone_landscape/light_mode_characters_list.png -------------------------------------------------------------------------------- /screenshots/tablet/dark_mode_character_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/tablet/dark_mode_character_detail.png -------------------------------------------------------------------------------- /screenshots/tablet/dark_mode_characters_favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/tablet/dark_mode_characters_favorite.png -------------------------------------------------------------------------------- /screenshots/tablet/dark_mode_characters_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/tablet/dark_mode_characters_list.png -------------------------------------------------------------------------------- /screenshots/tablet/light_mode_character_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/tablet/light_mode_character_detail.png -------------------------------------------------------------------------------- /screenshots/tablet/light_mode_characters_favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/tablet/light_mode_characters_favorite.png -------------------------------------------------------------------------------- /screenshots/tablet/light_mode_characters_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/tablet/light_mode_characters_list.png -------------------------------------------------------------------------------- /screenshots/tablet_landscape/dark_mode_character_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/tablet_landscape/dark_mode_character_detail.png -------------------------------------------------------------------------------- /screenshots/tablet_landscape/dark_mode_characters_favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/tablet_landscape/dark_mode_characters_favorite.png -------------------------------------------------------------------------------- /screenshots/tablet_landscape/dark_mode_characters_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/tablet_landscape/dark_mode_characters_list.png -------------------------------------------------------------------------------- /screenshots/tablet_landscape/light_mode_character_detail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/tablet_landscape/light_mode_character_detail.png -------------------------------------------------------------------------------- /screenshots/tablet_landscape/light_mode_characters_favorite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/tablet_landscape/light_mode_characters_favorite.png -------------------------------------------------------------------------------- /screenshots/tablet_landscape/light_mode_characters_list.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/nikhilpanju/android-modular-architecture/79aa9c9300f609297566afb7ed437783191c434f/screenshots/tablet_landscape/light_mode_characters_list.png -------------------------------------------------------------------------------- /scripts/git-hooks/pre-commit.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | echo "Running static analysis..." 3 | 4 | JAVA_HOME=$(/usr/libexec/java_home -v 1.8) 5 | export JAVA_HOME 6 | 7 | OUTPUT="/tmp/analysis-result" 8 | ./gradlew detekt ktlint lintDevDebug spotlessCheck --daemon > ${OUTPUT} 9 | EXIT_CODE=$? 10 | if [ ${EXIT_CODE} -ne 0 ]; then 11 | cat ${OUTPUT} 12 | rm ${OUTPUT} 13 | echo "*********************************************" 14 | echo " Static Analysis Failed " 15 | echo "Please fix the above issues before committing" 16 | echo "*********************************************" 17 | exit ${EXIT_CODE} 18 | else 19 | rm ${OUTPUT} 20 | echo "*********************************************" 21 | echo " Static analysis no problems found " 22 | echo "*********************************************" 23 | fi 24 | -------------------------------------------------------------------------------- /settings.gradle.kts: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2019 vmadalin.com 3 | * 4 | * Licensed under the Apache License, Version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | include( 18 | ":app", 19 | ":core", 20 | ":features:home", 21 | ":features:characters_list", 22 | ":features:characters_favorites", 23 | ":libraries:test_utils", 24 | ":commons:ui", 25 | ":commons:views" 26 | ) 27 | 28 | rootProject.buildFileName = "build.gradle.kts" 29 | --------------------------------------------------------------------------------