From cb6e894b7465eea2d7788c6281b899efba994638 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Thu, 18 May 2023 20:47:14 +0300 Subject: [PATCH 01/41] change responses to dto --- .../data/{model => dto}/BaseResponse.kt | 4 +- .../Character.kt => dto/CharacterDto.kt} | 18 +++---- .../data/{model/Comic.kt => dto/ComicDto.kt} | 32 ++++++------ .../{model/Creator.kt => dto/CreatorDto.kt} | 16 +++--- .../DataContainerDto.kt} | 4 +- .../data/{model/Date.kt => dto/DateDto.kt} | 4 +- .../data/{model/Event.kt => dto/EventDto.kt} | 18 +++---- .../data/{model/Price.kt => dto/PriceDto.kt} | 4 +- .../ResourceCollectionDto.kt} | 6 +-- .../{model/Resource.kt => dto/ResourceDto.kt} | 4 +- .../{model/Series.kt => dto/SeriesDto.kt} | 22 ++++---- .../data/{model/Story.kt => dto/StoryDto.kt} | 18 +++---- .../TextBlurb.kt => dto/TextBlurbDto.kt} | 4 +- .../Thumbnail.kt => dto/ThumbnailDto.kt} | 4 +- .../data/{model/Url.kt => dto/UrlDto.kt} | 4 +- .../marvel/data/remote/MarvelService.kt | 52 +++++++++---------- .../data/repository/MarvelRepository.kt | 50 +++++++++--------- .../data/repository/MarvelRepositoryImpl.kt | 52 +++++++++---------- .../CharacterComicsAdapter.kt | 6 +-- .../CharacterDetailsViewModel.kt | 24 ++++----- .../CharacterSeriesAdapter.kt | 6 +-- .../marvel/ui/characters/CharactersAdapter.kt | 6 +-- .../ui/characters/CharactersViewModel.kt | 8 +-- .../ComicDetailsCharactersAdapter.kt | 6 +-- .../ComicDetailsCreatorsAdapter.kt | 6 +-- .../ui/comicDetails/ComicDetailsViewModel.kt | 24 ++++----- .../marvel/ui/comics/ComicAdapter.kt | 6 +-- .../marvel/ui/comics/ComicsCollection.kt | 4 +- .../marvel/ui/comics/ComicsViewModel.kt | 22 ++++---- .../ui/eventDetails/CharactersAdapter.kt | 6 +-- .../marvel/ui/eventDetails/CreatorsAdapter.kt | 6 +-- .../ui/eventDetails/EventDetailViewModel.kt | 24 ++++----- .../marvel/ui/events/EventsAdapter.kt | 6 +-- .../marvel/ui/events/EventsViewModel.kt | 8 +-- .../marvel/ui/series/SeriesAdapter.kt | 6 +-- .../marvel/ui/series/SeriesViewModel.kt | 8 +-- .../ui/seriesDetails/CreatorsAdapter.kt | 6 +-- .../seriesDetails/SeriesDetailsViewModel.kt | 16 +++--- .../marvel/ui/stories/StoriesAdapter.kt | 6 +-- .../marvel/ui/stories/StoriesViewModel.kt | 8 +-- .../ui/storyDetails/StoryCreatorAdapter.kt | 6 +-- .../ui/storyDetails/StoryDetailsViewModel.kt | 24 ++++----- .../marvel/ui/utils/BindingAdapters.kt | 4 +- .../red_velvet/marvel/ui/utils/extensions.kt | 4 +- app/src/main/res/layout/characters_item.xml | 2 +- .../main/res/layout/item_character_comics.xml | 2 +- .../main/res/layout/item_character_series.xml | 2 +- app/src/main/res/layout/item_charactors.xml | 2 +- app/src/main/res/layout/item_comic.xml | 2 +- .../main/res/layout/item_comic_character.xml | 2 +- .../main/res/layout/item_comic_creator.xml | 5 +- app/src/main/res/layout/item_creator.xml | 2 +- .../main/res/layout/item_creators_event.xml | 5 +- app/src/main/res/layout/item_event.xml | 2 +- app/src/main/res/layout/item_series.xml | 2 +- app/src/main/res/layout/item_stories.xml | 2 +- .../main/res/layout/item_story_creator.xml | 2 +- 57 files changed, 301 insertions(+), 303 deletions(-) rename app/src/main/java/com/red_velvet/marvel/data/{model => dto}/BaseResponse.kt (85%) rename app/src/main/java/com/red_velvet/marvel/data/{model/Character.kt => dto/CharacterDto.kt} (54%) rename app/src/main/java/com/red_velvet/marvel/data/{model/Comic.kt => dto/ComicDto.kt} (63%) rename app/src/main/java/com/red_velvet/marvel/data/{model/Creator.kt => dto/CreatorDto.kt} (64%) rename app/src/main/java/com/red_velvet/marvel/data/{model/DataContainer.kt => dto/DataContainerDto.kt} (82%) rename app/src/main/java/com/red_velvet/marvel/data/{model/Date.kt => dto/DateDto.kt} (74%) rename app/src/main/java/com/red_velvet/marvel/data/{model/Event.kt => dto/EventDto.kt} (58%) rename app/src/main/java/com/red_velvet/marvel/data/{model/Price.kt => dto/PriceDto.kt} (74%) rename app/src/main/java/com/red_velvet/marvel/data/{model/ResourceCollection.kt => dto/ResourceCollectionDto.kt} (77%) rename app/src/main/java/com/red_velvet/marvel/data/{model/Resource.kt => dto/ResourceDto.kt} (82%) rename app/src/main/java/com/red_velvet/marvel/data/{model/Series.kt => dto/SeriesDto.kt} (68%) rename app/src/main/java/com/red_velvet/marvel/data/{model/Story.kt => dto/StoryDto.kt} (56%) rename app/src/main/java/com/red_velvet/marvel/data/{model/TextBlurb.kt => dto/TextBlurbDto.kt} (78%) rename app/src/main/java/com/red_velvet/marvel/data/{model/Thumbnail.kt => dto/ThumbnailDto.kt} (73%) rename app/src/main/java/com/red_velvet/marvel/data/{model/Url.kt => dto/UrlDto.kt} (74%) diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/BaseResponse.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/BaseResponse.kt similarity index 85% rename from app/src/main/java/com/red_velvet/marvel/data/model/BaseResponse.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/BaseResponse.kt index d6a13bd4..6514a4df 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/BaseResponse.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/BaseResponse.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName @@ -13,7 +13,7 @@ data class BaseResponse( @SerializedName("copyright") val copyright: String? = "", @SerializedName("data") - val body: DataContainer? = null, + val body: DataContainerDto? = null, @SerializedName("etag") val etag: String? = "", @SerializedName("status") diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/Character.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/CharacterDto.kt similarity index 54% rename from app/src/main/java/com/red_velvet/marvel/data/model/Character.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/CharacterDto.kt index 5f521352..cdc889a5 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/Character.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/CharacterDto.kt @@ -1,15 +1,15 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -import com.red_velvet.marvel.data.model.* +import com.red_velvet.marvel.data.dto.* -data class Character( +data class CharacterDto( @SerializedName("comics") - val comics: ResourceCollection? = ResourceCollection(), + val comics: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("description") val description: String?, @SerializedName("events") - val events: ResourceCollection? = ResourceCollection(), + val events: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("id") val id: Int?, @SerializedName("modified") @@ -19,11 +19,11 @@ data class Character( @SerializedName("resourceURI") val resourceURI: String?, @SerializedName("series") - val series: ResourceCollection? = ResourceCollection(), + val series: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("stories") - val stories: ResourceCollection? = ResourceCollection(), + val stories: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("thumbnail") - val thumbnail: Thumbnail?, + val thumbnail: ThumbnailDto?, @SerializedName("urls") - val urls: List + val urls: List ) \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/Comic.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/ComicDto.kt similarity index 63% rename from app/src/main/java/com/red_velvet/marvel/data/model/Comic.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/ComicDto.kt index 64f78ac3..23747d88 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/Comic.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/ComicDto.kt @@ -1,19 +1,19 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -data class Comic( +data class ComicDto( @SerializedName("characters") - val characters: ResourceCollection? = ResourceCollection(), + val characters: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("collectedIssues") - val collectedIssues: List? = listOf(), + val collectedIssues: List? = listOf(), @SerializedName("collections") - val collections: List? = listOf(), + val collections: List? = listOf(), @SerializedName("creators") - val creators: ResourceCollection? = ResourceCollection(), + val creators: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("dates") - val dates: List? = listOf(), + val dates: List? = listOf(), @SerializedName("description") val description: String? = "", @SerializedName("diamondCode") @@ -23,13 +23,13 @@ data class Comic( @SerializedName("ean") val ean: String? = "", @SerializedName("events") - val events: ResourceCollection? = ResourceCollection(), + val events: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("format") val format: String? = "", @SerializedName("id") val id: Int? = 0, @SerializedName("images") - val images: List? = listOf(), + val images: List? = listOf(), @SerializedName("isbn") val isbn: String? = "", @SerializedName("issn") @@ -41,25 +41,25 @@ data class Comic( @SerializedName("pageCount") val pageCount: Int? = 0, @SerializedName("prices") - val prices: List? = listOf(), + val prices: List? = listOf(), @SerializedName("resourceURI") val resourceURI: String? = "", @SerializedName("series") - val series: ResourceCollection? = ResourceCollection(), + val series: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("stories") - val stories: ResourceCollection? = ResourceCollection(), + val stories: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("textObjects") - val textBlurbs: List? = listOf(), + val textBlurbs: List? = listOf(), @SerializedName("thumbnail") - val thumbnail: Thumbnail? = Thumbnail(), + val thumbnail: ThumbnailDto? = ThumbnailDto(), @SerializedName("title") val title: String? = "", @SerializedName("upc") val upc: String? = "", @SerializedName("urls") - val urls: List? = listOf(), + val urls: List? = listOf(), @SerializedName("variantDescription") val variantDescription: String? = "", @SerializedName("variants") - val variants: List? = listOf() + val variants: List? = listOf() ) \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/Creator.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/CreatorDto.kt similarity index 64% rename from app/src/main/java/com/red_velvet/marvel/data/model/Creator.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/CreatorDto.kt index 4a5c8e90..798efc60 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/Creator.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/CreatorDto.kt @@ -1,8 +1,8 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -data class Creator( +data class CreatorDto( @SerializedName("id") val id: Int? = null, @SerializedName("firstName") @@ -18,17 +18,17 @@ data class Creator( @SerializedName("modified") val modified: String? = null, @SerializedName("thumbnail") - val thumbnail: Thumbnail? = Thumbnail(), + val thumbnail: ThumbnailDto? = ThumbnailDto(), @SerializedName("resourceURI") val resourceURI: String? = null, @SerializedName("comics") - val comics: ResourceCollection? = ResourceCollection(), + val comics: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("series") - val series: ResourceCollection? = ResourceCollection(), + val series: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("stories") - val stories: ResourceCollection? = ResourceCollection(), + val stories: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("events") - val events: ResourceCollection? = ResourceCollection(), + val events: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("urls") - val urls: List = listOf() + val urls: List = listOf() ) \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/DataContainer.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/DataContainerDto.kt similarity index 82% rename from app/src/main/java/com/red_velvet/marvel/data/model/DataContainer.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/DataContainerDto.kt index 892c8181..88c6f4e0 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/DataContainer.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/DataContainerDto.kt @@ -1,9 +1,9 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -data class DataContainer( +data class DataContainerDto( @SerializedName("count") val count: Int? = 0, @SerializedName("limit") diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/Date.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/DateDto.kt similarity index 74% rename from app/src/main/java/com/red_velvet/marvel/data/model/Date.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/DateDto.kt index 4bc86fc9..3a8d14ce 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/Date.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/DateDto.kt @@ -1,9 +1,9 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -data class Date( +data class DateDto( @SerializedName("date") val date: String? = null, @SerializedName("type") diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/Event.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/EventDto.kt similarity index 58% rename from app/src/main/java/com/red_velvet/marvel/data/model/Event.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/EventDto.kt index fb4b08a9..fe89d363 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/Event.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/EventDto.kt @@ -1,9 +1,9 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -data class Event( +data class EventDto( @SerializedName("id") val id: Int? = 0, @SerializedName("title") @@ -13,7 +13,7 @@ data class Event( @SerializedName("resourceURI") val resourceURI: String? = "", @SerializedName("urls") - val urls: List? = listOf(), + val urls: List? = listOf(), @SerializedName("modified") val modified: String? = "", @SerializedName("start") @@ -21,15 +21,15 @@ data class Event( @SerializedName("end") val end: String? = "", @SerializedName("thumbnail") - val thumbnail: Thumbnail? = Thumbnail(), + val thumbnail: ThumbnailDto? = ThumbnailDto(), @SerializedName("creators") - val creators: ResourceCollection? = ResourceCollection(), + val creators: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("characters") - val characters: ResourceCollection? = ResourceCollection(), + val characters: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("stories") - val stories: ResourceCollection? = ResourceCollection(), + val stories: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("comics") - val comics: ResourceCollection? = ResourceCollection(), + val comics: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("series") - val series: ResourceCollection? = ResourceCollection(), + val series: ResourceCollectionDto? = ResourceCollectionDto(), ) \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/Price.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/PriceDto.kt similarity index 74% rename from app/src/main/java/com/red_velvet/marvel/data/model/Price.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/PriceDto.kt index 5739bc3b..a017ab6d 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/Price.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/PriceDto.kt @@ -1,9 +1,9 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -data class Price( +data class PriceDto( @SerializedName("price") val price: Double? = null, @SerializedName("type") diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/ResourceCollection.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/ResourceCollectionDto.kt similarity index 77% rename from app/src/main/java/com/red_velvet/marvel/data/model/ResourceCollection.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/ResourceCollectionDto.kt index 93b8a596..4cbe90e0 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/ResourceCollection.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/ResourceCollectionDto.kt @@ -1,14 +1,14 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -data class ResourceCollection( +data class ResourceCollectionDto( @SerializedName("available") val available: Int? = 0, @SerializedName("collectionURI") val collectionURI: String? = null, @SerializedName("items") - val items: List? = listOf(), + val items: List? = listOf(), @SerializedName("returned") val returned: Int? = 0, @SerializedName("name") diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/Resource.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/ResourceDto.kt similarity index 82% rename from app/src/main/java/com/red_velvet/marvel/data/model/Resource.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/ResourceDto.kt index 495aafdb..999c7b9e 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/Resource.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/ResourceDto.kt @@ -1,9 +1,9 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -data class Resource( +data class ResourceDto( @SerializedName("name") val name: String? = null, @SerializedName("resourceURI") diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/Series.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/SeriesDto.kt similarity index 68% rename from app/src/main/java/com/red_velvet/marvel/data/model/Series.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/SeriesDto.kt index 64006d2d..90ee7666 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/Series.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/SeriesDto.kt @@ -1,29 +1,29 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -data class Series( +data class SeriesDto( @SerializedName("characters") - val characters: ResourceCollection?, + val characters: ResourceCollectionDto?, @SerializedName("comics") - val comics: ResourceCollection?, + val comics: ResourceCollectionDto?, @SerializedName("creators") - val creators: ResourceCollection?, + val creators: ResourceCollectionDto?, @SerializedName("description") val description: String?, @SerializedName("endYear") val endYear: Int?, @SerializedName("events") - val events: ResourceCollection?, + val events: ResourceCollectionDto?, @SerializedName("id") val id: Int?, @SerializedName("modified") val modified: String?, @SerializedName("next") - val next: Resource?, + val next: ResourceDto?, @SerializedName("previous") - val previous: Resource?, + val previous: ResourceDto?, @SerializedName("rating") val rating: String?, @SerializedName("resourceURI") @@ -31,13 +31,13 @@ data class Series( @SerializedName("startYear") val startYear: Int?, @SerializedName("stories") - val stories: ResourceCollection?, + val stories: ResourceCollectionDto?, @SerializedName("thumbnail") - val thumbnail: Thumbnail?, + val thumbnail: ThumbnailDto?, @SerializedName("title") val title: String?, @SerializedName("type") val type: String?, @SerializedName("urls") - val urls: List? + val urls: List? ) \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/Story.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/StoryDto.kt similarity index 56% rename from app/src/main/java/com/red_velvet/marvel/data/model/Story.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/StoryDto.kt index 96ea2ceb..c3bce3bb 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/Story.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/StoryDto.kt @@ -1,30 +1,30 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -data class Story( +data class StoryDto( @SerializedName("characters") - val characters: ResourceCollection? = ResourceCollection(), + val characters: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("comics") - val comics: ResourceCollection? = ResourceCollection(), + val comics: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("creators") - val creators: ResourceCollection? = ResourceCollection(), + val creators: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("description") val description: String, @SerializedName("events") - val events: ResourceCollection? = ResourceCollection(), + val events: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("id") val id: Int? = null, @SerializedName("modified") val modified: String? = null, @SerializedName("originalIssue") - val originalIssue: Resource? = Resource(), + val originalIssue: ResourceDto? = ResourceDto(), @SerializedName("resourceURI") val resourceURI: String? = null, @SerializedName("series") - val series: ResourceCollection? = ResourceCollection(), + val series: ResourceCollectionDto? = ResourceCollectionDto(), @SerializedName("thumbnail") - val thumbnail: Thumbnail? = Thumbnail(), + val thumbnail: ThumbnailDto? = ThumbnailDto(), @SerializedName("title") val title: String? = null, @SerializedName("type") diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/TextBlurb.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/TextBlurbDto.kt similarity index 78% rename from app/src/main/java/com/red_velvet/marvel/data/model/TextBlurb.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/TextBlurbDto.kt index 557ad7bb..ea206ebf 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/TextBlurb.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/TextBlurbDto.kt @@ -1,9 +1,9 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -data class TextBlurb( +data class TextBlurbDto( @SerializedName("language") val language: String? = null, @SerializedName("text") diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/Thumbnail.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/ThumbnailDto.kt similarity index 73% rename from app/src/main/java/com/red_velvet/marvel/data/model/Thumbnail.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/ThumbnailDto.kt index 266d222b..3e30d0d9 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/Thumbnail.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/ThumbnailDto.kt @@ -1,9 +1,9 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -data class Thumbnail( +data class ThumbnailDto( @SerializedName("extension") val extension: String? = null, @SerializedName("path") diff --git a/app/src/main/java/com/red_velvet/marvel/data/model/Url.kt b/app/src/main/java/com/red_velvet/marvel/data/dto/UrlDto.kt similarity index 74% rename from app/src/main/java/com/red_velvet/marvel/data/model/Url.kt rename to app/src/main/java/com/red_velvet/marvel/data/dto/UrlDto.kt index 6f3cd27e..9a1c55e7 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/Url.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/dto/UrlDto.kt @@ -1,9 +1,9 @@ -package com.red_velvet.marvel.data.model +package com.red_velvet.marvel.data.dto import com.google.gson.annotations.SerializedName -data class Url( +data class UrlDto( @SerializedName("type") val type: String? = null, @SerializedName("url") diff --git a/app/src/main/java/com/red_velvet/marvel/data/remote/MarvelService.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/MarvelService.kt index b2d45876..071e565e 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/remote/MarvelService.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/MarvelService.kt @@ -1,12 +1,12 @@ package com.red_velvet.marvel.data.remote -import com.red_velvet.marvel.data.model.BaseResponse -import com.red_velvet.marvel.data.model.Character -import com.red_velvet.marvel.data.model.Comic -import com.red_velvet.marvel.data.model.Creator -import com.red_velvet.marvel.data.model.Event -import com.red_velvet.marvel.data.model.Series -import com.red_velvet.marvel.data.model.Story +import com.red_velvet.marvel.data.dto.BaseResponse +import com.red_velvet.marvel.data.dto.CharacterDto +import com.red_velvet.marvel.data.dto.ComicDto +import com.red_velvet.marvel.data.dto.CreatorDto +import com.red_velvet.marvel.data.dto.EventDto +import com.red_velvet.marvel.data.dto.SeriesDto +import com.red_velvet.marvel.data.dto.StoryDto import io.reactivex.rxjava3.core.Single import retrofit2.Response import retrofit2.http.GET @@ -19,96 +19,96 @@ interface MarvelService { fun getAllComics( @Query("titleStartsWith") titleStartsWith: String? = null, @Query("dateDescriptor") dateDescriptor: String? = null, - ): Single>>> + ): Single>>> @GET("comics/{comicId}") fun getComicDetailById( @Path("comicId") comicId: Int - ): Single>>> + ): Single>>> @GET("characters/{characterId}/comics") fun getComicsByCharacterId( @Path("characterId") characterId: Int, @Query("titleStartsWith") titleStartsWith: String? = null, @Query("dateDescriptor") dateDescriptor: String? = null - ): Single>>> + ): Single>>> @GET("comics/{comicId}/creators") fun getCreatorByComicId( @Path("comicId") comicId: Int? = null, - ): Single>>> + ): Single>>> @GET("series") fun getAllSeries( @Query("titleStartsWith") titleStartsWith: String? = null, @Query("contains") contains: String? = null - ): Single>>> + ): Single>>> @GET("series/{seriesId}") fun getSeriesById( @Path("seriesId") seriesId: Int - ): Single>>> + ): Single>>> @GET("events") fun getAllEvents( @Query("nameStartsWith") nameStartsWith: String? = null - ): Single>>> + ): Single>>> @GET("comics/{comicId}/characters") fun getCharactersByComicId( @Path("comicId") comicId: Int? = null, - ): Single>>> + ): Single>>> @GET("events/{eventId}/characters") fun getCharactersByEventId( @Path("eventId") eventId: Int, - ): Single>>> + ): Single>>> @GET("events/{eventId}/creators") fun getCreatorsByEventId( @Path("eventId") eventId: Int - ): Single>>> + ): Single>>> @GET("stories") - fun getAllStories(): Single>>> + fun getAllStories(): Single>>> @GET("stories/{storyId}") fun getStoryById( @Path("storyId") storyId: Int - ): Single>>> + ): Single>>> @GET("stories/{storyId}/creators") fun getCreatorsByStoryId( @Path("storyId") storyId: Int - ): Single>>> + ): Single>>> @GET("stories/{storyId}/comics") fun getComicsByStoryId( @Path("storyId") storyId: Int - ): Single>>> + ): Single>>> @GET("characters") fun getAllCharacters( @Query("nameStartsWith") nameStartsWith: String? = null - ): Single>>> + ): Single>>> @GET("characters/{characterId}") fun getCharacterById( @Path("characterId") characterId: Int - ): Single>>> + ): Single>>> @GET("characters/{characterId}/series") fun getSeriesByCharacterId( @Path("characterId") characterId: Int - ): Single>>> + ): Single>>> @GET("series/{seriesId}/creators") fun getCreatorsBySeriesId( @Path("seriesId") seriesId: Int - ): Single>>> + ): Single>>> @GET("events/{eventId}") fun getEventById( @Path("eventId") eventId: Int - ): Single>>> + ): Single>>> } \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt index 247f0d0b..46667527 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt @@ -1,12 +1,12 @@ package com.red_velvet.marvel.data.repository -import com.red_velvet.marvel.data.model.Character -import com.red_velvet.marvel.data.model.Comic -import com.red_velvet.marvel.data.model.Creator -import com.red_velvet.marvel.data.model.Event -import com.red_velvet.marvel.data.model.Series -import com.red_velvet.marvel.data.model.Story +import com.red_velvet.marvel.data.dto.CharacterDto +import com.red_velvet.marvel.data.dto.ComicDto +import com.red_velvet.marvel.data.dto.CreatorDto +import com.red_velvet.marvel.data.dto.EventDto +import com.red_velvet.marvel.data.dto.SeriesDto +import com.red_velvet.marvel.data.dto.StoryDto import com.red_velvet.marvel.ui.utils.State import io.reactivex.rxjava3.core.Observable @@ -15,45 +15,45 @@ interface MarvelRepository { fun getAllComics( titleStartsWith: String? = null, dateDescriptor: String? = null, - ): Observable>> + ): Observable>> - fun getComicById(comicId: Int): Observable>> + fun getComicById(comicId: Int): Observable>> - fun getComicsByCharacterId(characterId: Int): Observable>> + fun getComicsByCharacterId(characterId: Int): Observable>> fun getAllSeries( titleStartsWith: String? = null, contains: String? = null - ): Observable>> + ): Observable>> - fun getCreatorByComicId(comicId: Int): Observable>> + fun getCreatorByComicId(comicId: Int): Observable>> - fun getSeriesById(seriesId: Int): Observable>> + fun getSeriesById(seriesId: Int): Observable>> - fun getAllEvents(query: String? = null): Observable>> + fun getAllEvents(query: String? = null): Observable>> - fun getCharactersByEventId(eventId: Int): Observable>> + fun getCharactersByEventId(eventId: Int): Observable>> - fun getCreatorsByEventId(eventId: Int): Observable>> + fun getCreatorsByEventId(eventId: Int): Observable>> - fun getAllStories(): Observable>> + fun getAllStories(): Observable>> - fun getStoryById(storyId: Int): Observable>> + fun getStoryById(storyId: Int): Observable>> - fun getCreatorsByStoryId(storyId: Int): Observable>> + fun getCreatorsByStoryId(storyId: Int): Observable>> - fun getComicsByStoryId(storyId: Int): Observable>> + fun getComicsByStoryId(storyId: Int): Observable>> - fun getCharactersByComicId(comicId: Int): Observable>> + fun getCharactersByComicId(comicId: Int): Observable>> - fun getEventById(eventId: Int): Observable>> + fun getEventById(eventId: Int): Observable>> - fun getAllCharacters(nameStartsWith: String? = null): Observable>> + fun getAllCharacters(nameStartsWith: String? = null): Observable>> - fun getCharacterById(characterId: Int): Observable>> + fun getCharacterById(characterId: Int): Observable>> - fun getCreatorsBySeriesId(seriesId: Int): Observable>> + fun getCreatorsBySeriesId(seriesId: Int): Observable>> - fun getSeriesByCharacterId(characterId: Int): Observable>> + fun getSeriesByCharacterId(characterId: Int): Observable>> } diff --git a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt index 2ee67b24..3726c9ee 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt @@ -1,13 +1,13 @@ package com.red_velvet.marvel.data.repository -import com.red_velvet.marvel.data.model.BaseResponse -import com.red_velvet.marvel.data.model.Character -import com.red_velvet.marvel.data.model.Comic -import com.red_velvet.marvel.data.model.Creator -import com.red_velvet.marvel.data.model.Event -import com.red_velvet.marvel.data.model.Series -import com.red_velvet.marvel.data.model.Story +import com.red_velvet.marvel.data.dto.BaseResponse +import com.red_velvet.marvel.data.dto.CharacterDto +import com.red_velvet.marvel.data.dto.ComicDto +import com.red_velvet.marvel.data.dto.CreatorDto +import com.red_velvet.marvel.data.dto.EventDto +import com.red_velvet.marvel.data.dto.SeriesDto +import com.red_velvet.marvel.data.dto.StoryDto import com.red_velvet.marvel.data.remote.MarvelService import com.red_velvet.marvel.ui.utils.State import io.reactivex.rxjava3.core.Observable @@ -21,86 +21,86 @@ class MarvelRepositoryImpl( override fun getAllComics( titleStartsWith: String?, dateDescriptor: String? - ): Observable>> { + ): Observable>> { return wrapWithState { marvelServiceImpl.getAllComics(titleStartsWith, dateDescriptor) } } - override fun getComicById(comicId: Int): Observable>> { + override fun getComicById(comicId: Int): Observable>> { return wrapWithState { marvelServiceImpl.getComicDetailById(comicId) } } - override fun getComicsByCharacterId(characterId: Int): Observable>> { + override fun getComicsByCharacterId(characterId: Int): Observable>> { return wrapWithState { marvelServiceImpl.getComicsByCharacterId(characterId) } } override fun getAllSeries( titleStartsWith: String?, contains: String? - ): Observable>> { + ): Observable>> { return wrapWithState { marvelServiceImpl.getAllSeries(titleStartsWith, contains) } } - override fun getCharactersByComicId(comicId: Int): Observable>> { + override fun getCharactersByComicId(comicId: Int): Observable>> { return wrapWithState { marvelServiceImpl.getCharactersByComicId(comicId) } } - override fun getSeriesById(seriesId: Int): Observable>> { + override fun getSeriesById(seriesId: Int): Observable>> { return wrapWithState { marvelServiceImpl.getSeriesById(seriesId) } } - override fun getAllEvents(query: String?): Observable>> { + override fun getAllEvents(query: String?): Observable>> { return wrapWithState { marvelServiceImpl.getAllEvents(query) } } - override fun getCreatorByComicId(comicId: Int): Observable>> { + override fun getCreatorByComicId(comicId: Int): Observable>> { return wrapWithState { marvelServiceImpl.getCreatorByComicId(comicId) } } - override fun getCharactersByEventId(eventId: Int): Observable>> { + override fun getCharactersByEventId(eventId: Int): Observable>> { return wrapWithState { marvelServiceImpl.getCharactersByEventId(eventId) } } - override fun getAllCharacters(nameStartsWith: String?): Observable>> { + override fun getAllCharacters(nameStartsWith: String?): Observable>> { return wrapWithState { marvelServiceImpl.getAllCharacters(nameStartsWith) } } - override fun getCharacterById(characterId: Int): Observable>> { + override fun getCharacterById(characterId: Int): Observable>> { return wrapWithState { marvelServiceImpl.getCharacterById(characterId) } } - override fun getCreatorsByEventId(eventId: Int): Observable>> { + override fun getCreatorsByEventId(eventId: Int): Observable>> { return wrapWithState { marvelServiceImpl.getCreatorsByEventId(eventId) } } - override fun getAllStories(): Observable>> { + override fun getAllStories(): Observable>> { return wrapWithState { marvelServiceImpl.getAllStories() } } - override fun getStoryById(storyId: Int): Observable>> { + override fun getStoryById(storyId: Int): Observable>> { return wrapWithState { marvelServiceImpl.getStoryById(storyId) } } - override fun getCreatorsByStoryId(storyId: Int): Observable>> { + override fun getCreatorsByStoryId(storyId: Int): Observable>> { return wrapWithState { marvelServiceImpl.getCreatorsByStoryId(storyId) } } - override fun getComicsByStoryId(storyId: Int): Observable>> { + override fun getComicsByStoryId(storyId: Int): Observable>> { return wrapWithState { marvelServiceImpl.getComicsByStoryId(storyId) } } override fun getSeriesByCharacterId( characterId: Int - ): Observable>> { + ): Observable>> { return wrapWithState { marvelServiceImpl.getSeriesByCharacterId(characterId) } } override fun getEventById( eventId: Int - ): Observable>> { + ): Observable>> { return wrapWithState { marvelServiceImpl.getEventById(eventId) } } - override fun getCreatorsBySeriesId(seriesId: Int): Observable>> { + override fun getCreatorsBySeriesId(seriesId: Int): Observable>> { return wrapWithState { marvelServiceImpl.getCreatorsBySeriesId(seriesId) } } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterComicsAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterComicsAdapter.kt index 4f371cbc..784fc83a 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterComicsAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterComicsAdapter.kt @@ -1,12 +1,12 @@ package com.red_velvet.marvel.ui.characterDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Comic +import com.red_velvet.marvel.data.dto.ComicDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener -class ComicsByCharacterAdapter(items: List, listener: SeriesInteractionListener) : - BaseAdapter(items, listener) { +class ComicsByCharacterAdapter(items: List, listener: SeriesInteractionListener) : + BaseAdapter(items, listener) { override val layoutId: Int = R.layout.item_character_comics } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsViewModel.kt index ec81fa9b..9bac0a8f 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsViewModel.kt @@ -2,9 +2,9 @@ package com.red_velvet.marvel.ui.characterDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.model.Character -import com.red_velvet.marvel.data.model.Comic -import com.red_velvet.marvel.data.model.Series +import com.red_velvet.marvel.data.dto.CharacterDto +import com.red_velvet.marvel.data.dto.ComicDto +import com.red_velvet.marvel.data.dto.SeriesDto import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl @@ -19,14 +19,14 @@ class CharacterDetailsViewModel : BaseViewModel(), SeriesInteractionListener, MarvelRepositoryImpl(RetrofitClient.apiService) } - private val _characterDetails: MutableLiveData>> = MutableLiveData() - val characterDetails: LiveData>> = _characterDetails + private val _characterDetails: MutableLiveData>> = MutableLiveData() + val characterDetails: LiveData>> = _characterDetails - private val _comics: MutableLiveData>> = MutableLiveData() - val comics: LiveData>> = _comics + private val _comics: MutableLiveData>> = MutableLiveData() + val comics: LiveData>> = _comics - private val _series: MutableLiveData>> = MutableLiveData() - val series: LiveData>> = _series + private val _series: MutableLiveData>> = MutableLiveData() + val series: LiveData>> = _series private val _navigationToComicDetails: MutableLiveData> = MutableLiveData() val navigationToComicDetails: LiveData> = _navigationToComicDetails @@ -48,7 +48,7 @@ class CharacterDetailsViewModel : BaseViewModel(), SeriesInteractionListener, ) } - private fun onGetCharacterState(state: State>) { + private fun onGetCharacterState(state: State>) { _characterDetails.postValue(state) } @@ -64,7 +64,7 @@ class CharacterDetailsViewModel : BaseViewModel(), SeriesInteractionListener, ) } - private fun onGetComicsByCharacterIdState(state: State>) { + private fun onGetComicsByCharacterIdState(state: State>) { _comics.postValue(state) } @@ -80,7 +80,7 @@ class CharacterDetailsViewModel : BaseViewModel(), SeriesInteractionListener, ) } - private fun onGetSeriesByCharacterIdState(state: State>) { + private fun onGetSeriesByCharacterIdState(state: State>) { _series.postValue(state) } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterSeriesAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterSeriesAdapter.kt index 270fcf51..3f383fc8 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterSeriesAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterSeriesAdapter.kt @@ -1,12 +1,12 @@ package com.red_velvet.marvel.ui.characterDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Series +import com.red_velvet.marvel.data.dto.SeriesDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener -class CharacterSeriesAdapter(items: List, listener: SeriesInteractionListener) : - BaseAdapter(items, listener) { +class CharacterSeriesAdapter(items: List, listener: SeriesInteractionListener) : + BaseAdapter(items, listener) { override val layoutId: Int = R.layout.item_character_series } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersAdapter.kt index d073e739..99bde5a2 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersAdapter.kt @@ -1,14 +1,14 @@ package com.red_velvet.marvel.ui.characters import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Character +import com.red_velvet.marvel.data.dto.CharacterDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener class CharactersAdapter( - items: List, + items: List, listener: CharacterDetailsInteractionListener -) : BaseAdapter(items, listener) { +) : BaseAdapter(items, listener) { override val layoutId: Int = R.layout.characters_item } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersViewModel.kt index 57c7bc46..eb79b407 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersViewModel.kt @@ -2,7 +2,7 @@ package com.red_velvet.marvel.ui.characters import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.model.Character +import com.red_velvet.marvel.data.dto.CharacterDto import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl @@ -14,8 +14,8 @@ import io.reactivex.rxjava3.kotlin.addTo import java.util.concurrent.TimeUnit class CharactersViewModel : BaseViewModel(), CharacterDetailsInteractionListener { - private val _characters: MutableLiveData>> = MutableLiveData() - val characters: LiveData>> = _characters + private val _characters: MutableLiveData>> = MutableLiveData() + val characters: LiveData>> = _characters val searchQuery = MutableLiveData() @@ -55,7 +55,7 @@ class CharactersViewModel : BaseViewModel(), CharacterDetailsInteractionListener ) } - private fun onGetCharactersState(state: State>) { + private fun onGetCharactersState(state: State>) { _characters.postValue(state) } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCharactersAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCharactersAdapter.kt index 6e1c45f2..c6a0032d 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCharactersAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCharactersAdapter.kt @@ -1,14 +1,14 @@ package com.red_velvet.marvel.ui.comicDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Character +import com.red_velvet.marvel.data.dto.CharacterDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener class ComicDetailsCharactersAdapter( - items: List, + items: List, listener: ComicDetailsCharacterListenerInteraction, -) : BaseAdapter(items, listener) { +) : BaseAdapter(items, listener) { override val layoutId: Int = R.layout.item_comic_character } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCreatorsAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCreatorsAdapter.kt index f28c43d6..cdbbd9a5 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCreatorsAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCreatorsAdapter.kt @@ -1,14 +1,14 @@ package com.red_velvet.marvel.ui.comicDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Creator +import com.red_velvet.marvel.data.dto.CreatorDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener class ComicDetailsCreatorsAdapter( - items: List, + items: List, listener: ComicDetailsCreatorListenerInteraction, -) : BaseAdapter(items, listener) { +) : BaseAdapter(items, listener) { override val layoutId: Int = R.layout.item_comic_creator } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsViewModel.kt index 70e2e82e..3bc2dfc0 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsViewModel.kt @@ -2,9 +2,9 @@ package com.red_velvet.marvel.ui.comicDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.model.Character -import com.red_velvet.marvel.data.model.Comic -import com.red_velvet.marvel.data.model.Creator +import com.red_velvet.marvel.data.dto.CharacterDto +import com.red_velvet.marvel.data.dto.ComicDto +import com.red_velvet.marvel.data.dto.CreatorDto import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl @@ -15,14 +15,14 @@ import com.red_velvet.marvel.ui.utils.State class ComicDetailsViewModel : BaseViewModel(), ComicDetailsCreatorListenerInteraction, ComicDetailsCharacterListenerInteraction { - private val _comicsDetails: MutableLiveData>> = MutableLiveData() - val comicsDetails: LiveData>> = _comicsDetails + private val _comicsDetails: MutableLiveData>> = MutableLiveData() + val comicsDetails: LiveData>> = _comicsDetails - private val _creators: MutableLiveData>> = MutableLiveData() - val creators: LiveData>> = _creators + private val _creators: MutableLiveData>> = MutableLiveData() + val creators: LiveData>> = _creators - private val _characters: MutableLiveData>> = MutableLiveData() - val characters: LiveData>> = _characters + private val _characters: MutableLiveData>> = MutableLiveData() + val characters: LiveData>> = _characters private val repository: MarvelRepository by lazy { MarvelRepositoryImpl(RetrofitClient.apiService) @@ -62,7 +62,7 @@ class ComicDetailsViewModel : BaseViewModel(), ComicDetailsCreatorListenerIntera ) } - private fun onGetComicState(state: State>) { + private fun onGetComicState(state: State>) { _comicsDetails.postValue(state) } @@ -70,7 +70,7 @@ class ComicDetailsViewModel : BaseViewModel(), ComicDetailsCreatorListenerIntera _comicsDetails.postValue(State.Failed(e.message.toString())) } - private fun onGetCreatorsByComicIdState(state: State>) { + private fun onGetCreatorsByComicIdState(state: State>) { _creators.postValue(state) } @@ -78,7 +78,7 @@ class ComicDetailsViewModel : BaseViewModel(), ComicDetailsCreatorListenerIntera _creators.postValue(State.Failed(e.message.toString())) } - private fun onGetCharactersByComicIdState(state: State>) { + private fun onGetCharactersByComicIdState(state: State>) { _characters.postValue(state) } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicAdapter.kt index 3f2b5e62..c290eda4 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicAdapter.kt @@ -1,12 +1,12 @@ package com.red_velvet.marvel.ui.comics import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Comic +import com.red_velvet.marvel.data.dto.ComicDto import com.red_velvet.marvel.ui.base.BaseAdapter class ComicAdapter( - items: List, + items: List, listener: ComicsInteractionListener -) : BaseAdapter(items, listener) { +) : BaseAdapter(items, listener) { override val layoutId = R.layout.item_comic } \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsCollection.kt b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsCollection.kt index e8b45b6e..8d4c14ee 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsCollection.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsCollection.kt @@ -1,10 +1,10 @@ package com.red_velvet.marvel.ui.comics import androidx.annotation.StringRes -import com.red_velvet.marvel.data.model.Comic +import com.red_velvet.marvel.data.dto.ComicDto import com.red_velvet.marvel.ui.utils.State data class ComicsCollection( @StringRes val titleId: Int, - val comics: State?> + val comics: State?> ) \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsViewModel.kt index e03489b1..6e09aecd 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsViewModel.kt @@ -4,7 +4,7 @@ import androidx.annotation.StringRes import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Comic +import com.red_velvet.marvel.data.dto.ComicDto import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl @@ -37,14 +37,14 @@ class ComicsViewModel : BaseViewModel(), ComicsInteractionListener { MutableLiveData(emptyList()) val comicCollections: LiveData> = _comicsCollections - private val _thisWeekComics = MutableLiveData>>(State.Loading) - val thisWeekComicsLiveData: LiveData>> = _thisWeekComics + private val _thisWeekComics = MutableLiveData>>(State.Loading) + val thisWeekComicsLiveData: LiveData>> = _thisWeekComics - private val _nextWeekComics = MutableLiveData>>(State.Loading) + private val _nextWeekComics = MutableLiveData>>(State.Loading) - private val _lastWeekComics = MutableLiveData>>(State.Loading) + private val _lastWeekComics = MutableLiveData>>(State.Loading) - private val _thisMonthComics = MutableLiveData>>(State.Loading) + private val _thisMonthComics = MutableLiveData>>(State.Loading) init { getThisWeekComics() @@ -65,7 +65,7 @@ class ComicsViewModel : BaseViewModel(), ComicsInteractionListener { _thisWeekComics.postValue(State.Failed(throwable.message ?: UNKNOWN_ERROR)) } - private fun onGetThisWeekComicsState(state: State>) { + private fun onGetThisWeekComicsState(state: State>) { _thisWeekComics.postValue(state) if (state is State.Success) insertNewComicsCollection(thisWeekStringResource, state) } @@ -82,7 +82,7 @@ class ComicsViewModel : BaseViewModel(), ComicsInteractionListener { _nextWeekComics.postValue(State.Failed(throwable.message ?: UNKNOWN_ERROR)) } - private fun onGetNextWeekComicsState(state: State>) { + private fun onGetNextWeekComicsState(state: State>) { _nextWeekComics.postValue(state) if (state is State.Success) insertNewComicsCollection(nextWeekStringResource, state) } @@ -99,7 +99,7 @@ class ComicsViewModel : BaseViewModel(), ComicsInteractionListener { _lastWeekComics.postValue(State.Failed(throwable.message ?: UNKNOWN_ERROR)) } - private fun onGetLastWeekComicsState(state: State>) { + private fun onGetLastWeekComicsState(state: State>) { _lastWeekComics.postValue(state) if (state is State.Success) insertNewComicsCollection(lastWeekStringResource, state) } @@ -116,12 +116,12 @@ class ComicsViewModel : BaseViewModel(), ComicsInteractionListener { _thisMonthComics.postValue(State.Failed(throwable.message ?: UNKNOWN_ERROR)) } - private fun onGetThisMonthComicsState(state: State>) { + private fun onGetThisMonthComicsState(state: State>) { _thisMonthComics.postValue(state) if (state is State.Success) insertNewComicsCollection(thisMonthStringResource, state) } - private fun insertNewComicsCollection(titleId: Int, comics: State>) { + private fun insertNewComicsCollection(titleId: Int, comics: State>) { _comicsCollections.value = _comicsCollections.value!!.plus(ComicsCollection(titleId, comics)) } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CharactersAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CharactersAdapter.kt index 99c6bab4..8fd313eb 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CharactersAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CharactersAdapter.kt @@ -1,12 +1,12 @@ package com.red_velvet.marvel.ui.eventDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Character +import com.red_velvet.marvel.data.dto.CharacterDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener -class CharactersAdapter(items: List, listener: CharactersInteractionListener) : - BaseAdapter(items, listener) { +class CharactersAdapter(items: List, listener: CharactersInteractionListener) : + BaseAdapter(items, listener) { override val layoutId: Int = R.layout.item_charactors } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CreatorsAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CreatorsAdapter.kt index 462beb35..d44d4da5 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CreatorsAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CreatorsAdapter.kt @@ -1,12 +1,12 @@ package com.red_velvet.marvel.ui.eventDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Creator +import com.red_velvet.marvel.data.dto.CreatorDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener -class CreatorsAdapter(items: List, listener: CreatorsInteractionListener) : - BaseAdapter(items, listener) { +class CreatorsAdapter(items: List, listener: CreatorsInteractionListener) : + BaseAdapter(items, listener) { override val layoutId: Int = R.layout.item_creators_event } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailViewModel.kt index 4682f95f..cfed050c 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailViewModel.kt @@ -2,9 +2,9 @@ package com.red_velvet.marvel.ui.eventDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.model.Character -import com.red_velvet.marvel.data.model.Creator -import com.red_velvet.marvel.data.model.Event +import com.red_velvet.marvel.data.dto.CharacterDto +import com.red_velvet.marvel.data.dto.CreatorDto +import com.red_velvet.marvel.data.dto.EventDto import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel @@ -16,14 +16,14 @@ class EventDetailViewModel : BaseViewModel(), CharactersInteractionListener, private val repository by lazy { MarvelRepositoryImpl(RetrofitClient.apiService) } - private var _event: MutableLiveData>> = MutableLiveData() - val event: MutableLiveData>> = _event + private var _event: MutableLiveData>> = MutableLiveData() + val event: MutableLiveData>> = _event - private var _characters: MutableLiveData>> = MutableLiveData() - val characters: MutableLiveData>> = _characters + private var _characters: MutableLiveData>> = MutableLiveData() + val characters: MutableLiveData>> = _characters - private var _creators: MutableLiveData>> = MutableLiveData() - val creators: MutableLiveData>> = _creators + private var _creators: MutableLiveData>> = MutableLiveData() + val creators: MutableLiveData>> = _creators private val _navigationToCharacterDetails: MutableLiveData> = MutableLiveData() val navigationToCharacterDetails: LiveData> = _navigationToCharacterDetails @@ -58,7 +58,7 @@ class EventDetailViewModel : BaseViewModel(), CharactersInteractionListener, ) } - private fun onGetEventState(state: State>) { + private fun onGetEventState(state: State>) { _event.postValue(state) } @@ -66,7 +66,7 @@ class EventDetailViewModel : BaseViewModel(), CharactersInteractionListener, _event.postValue(State.Failed(e.message.toString())) } - private fun onGetEventCreatorsState(state: State>) { + private fun onGetEventCreatorsState(state: State>) { _creators.postValue(state) } @@ -74,7 +74,7 @@ class EventDetailViewModel : BaseViewModel(), CharactersInteractionListener, _creators.postValue(State.Failed(e.message.toString())) } - private fun onGetEventCharactersState(state: State>) { + private fun onGetEventCharactersState(state: State>) { _characters.postValue(state) } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/events/EventsAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/events/EventsAdapter.kt index 5c8a9b45..1fca1185 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/events/EventsAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/events/EventsAdapter.kt @@ -1,12 +1,12 @@ package com.red_velvet.marvel.ui.events import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Event +import com.red_velvet.marvel.data.dto.EventDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener -class EventsAdapter(items: List, listener: EventsInteractionListener) : - BaseAdapter(items, listener) { +class EventsAdapter(items: List, listener: EventsInteractionListener) : + BaseAdapter(items, listener) { override val layoutId: Int = R.layout.item_event } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/events/EventsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/events/EventsViewModel.kt index 11d3ce47..aa766041 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/events/EventsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/events/EventsViewModel.kt @@ -2,7 +2,7 @@ package com.red_velvet.marvel.ui.events import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.model.Event +import com.red_velvet.marvel.data.dto.EventDto import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel @@ -16,8 +16,8 @@ class EventsViewModel : BaseViewModel(), EventsInteractionListener { private val repository by lazy { MarvelRepositoryImpl(RetrofitClient.apiService) } - private val _events = MutableLiveData>>() - val events: LiveData>> = _events + private val _events = MutableLiveData>>() + val events: LiveData>> = _events private val _navigationToEventDetails = MutableLiveData>() val navigationToEventDetails: LiveData> = _navigationToEventDetails @@ -37,7 +37,7 @@ class EventsViewModel : BaseViewModel(), EventsInteractionListener { ) } - private fun onGetAllEventsState(state: State>) { + private fun onGetAllEventsState(state: State>) { _events.postValue(state) } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesAdapter.kt index a588b0e9..cd8874f4 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesAdapter.kt @@ -1,12 +1,12 @@ package com.red_velvet.marvel.ui.series import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Series +import com.red_velvet.marvel.data.dto.SeriesDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener -class SeriesAdapter(items: List, listener: SeriesInteractionListener) : - BaseAdapter(items, listener) { +class SeriesAdapter(items: List, listener: SeriesInteractionListener) : + BaseAdapter(items, listener) { override val layoutId: Int = R.layout.item_series } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesViewModel.kt index ef46cfdc..00c497fa 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesViewModel.kt @@ -3,7 +3,7 @@ package com.red_velvet.marvel.ui.series import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.model.Series +import com.red_velvet.marvel.data.dto.SeriesDto import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl @@ -20,8 +20,8 @@ class SeriesViewModel : BaseViewModel(), SeriesInteractionListener { private val _navigationToSeriesDetails: MutableLiveData> = MutableLiveData() val navigationToSeriesDetails: LiveData> = _navigationToSeriesDetails - private val _series: MutableLiveData>> = MutableLiveData() - val series: LiveData>> = _series + private val _series: MutableLiveData>> = MutableLiveData() + val series: LiveData>> = _series val repository: MarvelRepository by lazy { MarvelRepositoryImpl(RetrofitClient.apiService) } @@ -44,7 +44,7 @@ class SeriesViewModel : BaseViewModel(), SeriesInteractionListener { _series.postValue(State.Failed(error.message.toString())) } - private fun onGetSeriesState(state: State>) { + private fun onGetSeriesState(state: State>) { _series.postValue(state) } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/CreatorsAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/CreatorsAdapter.kt index 5712efae..8f4e6352 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/CreatorsAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/CreatorsAdapter.kt @@ -1,14 +1,14 @@ package com.red_velvet.marvel.ui.seriesDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Creator +import com.red_velvet.marvel.data.dto.CreatorDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener class CreatorsAdapter( - items: List, + items: List, listener: CreatorListenerInteraction, -) : BaseAdapter(items, listener) { +) : BaseAdapter(items, listener) { override val layoutId: Int = R.layout.item_creator } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsViewModel.kt index 1205b392..2a70ac0f 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsViewModel.kt @@ -2,8 +2,8 @@ package com.red_velvet.marvel.ui.seriesDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.model.Creator -import com.red_velvet.marvel.data.model.Series +import com.red_velvet.marvel.data.dto.CreatorDto +import com.red_velvet.marvel.data.dto.SeriesDto import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl @@ -14,11 +14,11 @@ class SeriesDetailsViewModel : BaseViewModel(), CreatorListenerInteraction { private val repository: MarvelRepository = MarvelRepositoryImpl(RetrofitClient.apiService) - private val _series: MutableLiveData>> = MutableLiveData() - val series: LiveData>> = _series + private val _series: MutableLiveData>> = MutableLiveData() + val series: LiveData>> = _series - private val _creators: MutableLiveData>> = MutableLiveData() - val creators: LiveData>> = _creators + private val _creators: MutableLiveData>> = MutableLiveData() + val creators: LiveData>> = _creators fun loadSeriesDetails(seriesId: Int) { getSeries(seriesId) @@ -41,7 +41,7 @@ class SeriesDetailsViewModel : BaseViewModel(), CreatorListenerInteraction { ) } - private fun onGetSeriesDetailsSuccess(state: State>) { + private fun onGetSeriesDetailsSuccess(state: State>) { _series.postValue(state) } @@ -49,7 +49,7 @@ class SeriesDetailsViewModel : BaseViewModel(), CreatorListenerInteraction { _series.postValue(State.Failed(error.message.toString())) } - private fun onGetCreatorsBySeriesIdSuccess(state: State>) { + private fun onGetCreatorsBySeriesIdSuccess(state: State>) { _creators.postValue(state) } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesAdapter.kt index 5d5de2a4..54265697 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesAdapter.kt @@ -2,12 +2,12 @@ package com.red_velvet.marvel.ui.stories import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Story +import com.red_velvet.marvel.data.dto.StoryDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener -class StoriesAdapter(stories: List, listener: StoriesInteractionListener) : - BaseAdapter(stories, listener) { +class StoriesAdapter(stories: List, listener: StoriesInteractionListener) : + BaseAdapter(stories, listener) { override val layoutId = R.layout.item_stories } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesViewModel.kt index 7655a8e9..09be64a2 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesViewModel.kt @@ -2,7 +2,7 @@ package com.red_velvet.marvel.ui.stories import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.model.Story +import com.red_velvet.marvel.data.dto.StoryDto import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel @@ -17,8 +17,8 @@ class StoriesViewModel : BaseViewModel(), StoriesInteractionListener { private val _navigationToStoryDetails: MutableLiveData> = MutableLiveData() val navigationToStoryDetails: LiveData> = _navigationToStoryDetails - private val _stories: MutableLiveData>> = MutableLiveData() - val stories: LiveData>> = _stories + private val _stories: MutableLiveData>> = MutableLiveData() + val stories: LiveData>> = _stories init { getAllStories() @@ -32,7 +32,7 @@ class StoriesViewModel : BaseViewModel(), StoriesInteractionListener { ) } - private fun onGetStoriesState(state: State>) { + private fun onGetStoriesState(state: State>) { _stories.postValue(state) } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryCreatorAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryCreatorAdapter.kt index f3e1d4e9..df445297 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryCreatorAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryCreatorAdapter.kt @@ -1,15 +1,15 @@ package com.red_velvet.marvel.ui.storyDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Creator +import com.red_velvet.marvel.data.dto.CreatorDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener class StoryCreatorAdapter( - items: List, + items: List, listener: StoryCreatorInteractionListener ) : - BaseAdapter(items, listener) { + BaseAdapter(items, listener) { override val layoutId: Int = R.layout.item_story_creator } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsViewModel.kt index 6040a61e..2a11b526 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsViewModel.kt @@ -2,9 +2,9 @@ package com.red_velvet.marvel.ui.storyDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.model.Comic -import com.red_velvet.marvel.data.model.Creator -import com.red_velvet.marvel.data.model.Story +import com.red_velvet.marvel.data.dto.ComicDto +import com.red_velvet.marvel.data.dto.CreatorDto +import com.red_velvet.marvel.data.dto.StoryDto import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl @@ -13,14 +13,14 @@ import com.red_velvet.marvel.ui.utils.State class StoryDetailsViewModel : BaseViewModel(), StoryCreatorInteractionListener { - private val _story: MutableLiveData>> = MutableLiveData() - val story: LiveData>> = _story + private val _story: MutableLiveData>> = MutableLiveData() + val story: LiveData>> = _story - private val _comics: MutableLiveData>> = MutableLiveData() - val comics: LiveData>> = _comics + private val _comics: MutableLiveData>> = MutableLiveData() + val comics: LiveData>> = _comics - private val _creators: MutableLiveData>> = MutableLiveData() - val creators: LiveData>> = _creators + private val _creators: MutableLiveData>> = MutableLiveData() + val creators: LiveData>> = _creators private val repository: MarvelRepository by lazy { MarvelRepositoryImpl(RetrofitClient.apiService) @@ -60,7 +60,7 @@ class StoryDetailsViewModel : BaseViewModel(), StoryCreatorInteractionListener { _creators.postValue(State.Failed(error.message.toString())) } - private fun onGetCreatorState(state: State>) { + private fun onGetCreatorState(state: State>) { _creators.postValue(state) } @@ -68,7 +68,7 @@ class StoryDetailsViewModel : BaseViewModel(), StoryCreatorInteractionListener { _comics.postValue(State.Failed(error.message.toString())) } - private fun onGetComicsState(state: State>) { + private fun onGetComicsState(state: State>) { _comics.postValue(state) } @@ -76,7 +76,7 @@ class StoryDetailsViewModel : BaseViewModel(), StoryCreatorInteractionListener { _story.postValue(State.Failed(error.message.toString())) } - private fun onGetStoryState(state: State>) { + private fun onGetStoryState(state: State>) { _story.postValue(state) } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/utils/BindingAdapters.kt b/app/src/main/java/com/red_velvet/marvel/ui/utils/BindingAdapters.kt index 38711f15..ca0a0672 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/utils/BindingAdapters.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/utils/BindingAdapters.kt @@ -6,7 +6,7 @@ import androidx.databinding.BindingAdapter import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Thumbnail +import com.red_velvet.marvel.data.dto.ThumbnailDto import com.red_velvet.marvel.ui.base.BaseAdapter @BindingAdapter(value = ["app:showWhenLoading"]) @@ -37,7 +37,7 @@ fun showWhenSuccess(view: View, state: State?) { } @BindingAdapter(value = ["app:imageUrl"]) -fun loadImage(view: ImageView, thumbnail: Thumbnail?) { +fun loadImage(view: ImageView, thumbnail: ThumbnailDto?) { Glide.with(view).load(thumbnail?.toUrl()) .thumbnail(Glide.with(view).load(R.raw.loading)) .fitCenter() diff --git a/app/src/main/java/com/red_velvet/marvel/ui/utils/extensions.kt b/app/src/main/java/com/red_velvet/marvel/ui/utils/extensions.kt index dfbff96d..cee1bbcc 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/utils/extensions.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/utils/extensions.kt @@ -1,9 +1,9 @@ package com.red_velvet.marvel.ui.utils import android.view.View -import com.red_velvet.marvel.data.model.Thumbnail +import com.red_velvet.marvel.data.dto.ThumbnailDto -fun Thumbnail.toUrl() = this.path + "." + this.extension +fun ThumbnailDto.toUrl() = this.path + "." + this.extension fun View.hideView() { visibility = View.GONE diff --git a/app/src/main/res/layout/characters_item.xml b/app/src/main/res/layout/characters_item.xml index b3a98ecb..bdc19778 100644 --- a/app/src/main/res/layout/characters_item.xml +++ b/app/src/main/res/layout/characters_item.xml @@ -6,7 +6,7 @@ + type="com.red_velvet.marvel.data.dto.CharacterDto" /> diff --git a/app/src/main/res/layout/item_character_comics.xml b/app/src/main/res/layout/item_character_comics.xml index da01aee2..17a7b6a8 100644 --- a/app/src/main/res/layout/item_character_comics.xml +++ b/app/src/main/res/layout/item_character_comics.xml @@ -7,7 +7,7 @@ + type="com.red_velvet.marvel.data.dto.ComicDto" /> + type="com.red_velvet.marvel.data.dto.SeriesDto" /> + type="com.red_velvet.marvel.data.dto.CharacterDto" /> + type="com.red_velvet.marvel.data.dto.ComicDto" /> + type="com.red_velvet.marvel.data.dto.CharacterDto" /> diff --git a/app/src/main/res/layout/item_comic_creator.xml b/app/src/main/res/layout/item_comic_creator.xml index 9a7a4c7c..a5989b92 100644 --- a/app/src/main/res/layout/item_comic_creator.xml +++ b/app/src/main/res/layout/item_comic_creator.xml @@ -1,13 +1,12 @@ + xmlns:app="http://schemas.android.com/apk/res-auto"> + type="com.red_velvet.marvel.data.dto.CreatorDto" /> + type="com.red_velvet.marvel.data.dto.CreatorDto" /> + xmlns:app="http://schemas.android.com/apk/res-auto"> + type="com.red_velvet.marvel.data.dto.CreatorDto" /> diff --git a/app/src/main/res/layout/item_event.xml b/app/src/main/res/layout/item_event.xml index 4a4a25f9..8a47abe3 100644 --- a/app/src/main/res/layout/item_event.xml +++ b/app/src/main/res/layout/item_event.xml @@ -6,7 +6,7 @@ + type="com.red_velvet.marvel.data.dto.EventDto" /> diff --git a/app/src/main/res/layout/item_series.xml b/app/src/main/res/layout/item_series.xml index 45e1aaf2..53190dc9 100644 --- a/app/src/main/res/layout/item_series.xml +++ b/app/src/main/res/layout/item_series.xml @@ -7,7 +7,7 @@ + type="com.red_velvet.marvel.data.dto.SeriesDto" /> + type="com.red_velvet.marvel.data.dto.StoryDto" /> + type="com.red_velvet.marvel.data.dto.CreatorDto" /> Date: Thu, 18 May 2023 20:57:03 +0300 Subject: [PATCH 02/41] create comic model --- .../main/java/com/red_velvet/marvel/domain/model/Comic.kt | 8 ++++++++ .../java/com/red_velvet/marvel/domain/model/Thumbnail.kt | 6 ++++++ 2 files changed, 14 insertions(+) create mode 100644 app/src/main/java/com/red_velvet/marvel/domain/model/Comic.kt create mode 100644 app/src/main/java/com/red_velvet/marvel/domain/model/Thumbnail.kt diff --git a/app/src/main/java/com/red_velvet/marvel/domain/model/Comic.kt b/app/src/main/java/com/red_velvet/marvel/domain/model/Comic.kt new file mode 100644 index 00000000..3c9da870 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/model/Comic.kt @@ -0,0 +1,8 @@ +package com.red_velvet.marvel.domain.model + +data class Comic( + val id: Int, + val title: String, + val description: String, + val thumbnail: Thumbnail, +) diff --git a/app/src/main/java/com/red_velvet/marvel/domain/model/Thumbnail.kt b/app/src/main/java/com/red_velvet/marvel/domain/model/Thumbnail.kt new file mode 100644 index 00000000..8f3a44fe --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/model/Thumbnail.kt @@ -0,0 +1,6 @@ +package com.red_velvet.marvel.domain.model + +data class Thumbnail( + val extension: String, + val path: String, +) From e4f006ec6e38425a0c1b0b64593e73f565d08e60 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Thu, 18 May 2023 20:58:40 +0300 Subject: [PATCH 03/41] move dto inside remote --- .../red_velvet/marvel/data/remote/MarvelService.kt | 14 +++++++------- .../marvel/data/{ => remote}/dto/BaseResponse.kt | 2 +- .../marvel/data/{ => remote}/dto/CharacterDto.kt | 2 +- .../marvel/data/{ => remote}/dto/ComicDto.kt | 2 +- .../marvel/data/{ => remote}/dto/CreatorDto.kt | 2 +- .../data/{ => remote}/dto/DataContainerDto.kt | 2 +- .../marvel/data/{ => remote}/dto/DateDto.kt | 2 +- .../marvel/data/{ => remote}/dto/EventDto.kt | 2 +- .../marvel/data/{ => remote}/dto/PriceDto.kt | 2 +- .../data/{ => remote}/dto/ResourceCollectionDto.kt | 2 +- .../marvel/data/{ => remote}/dto/ResourceDto.kt | 2 +- .../marvel/data/{ => remote}/dto/SeriesDto.kt | 2 +- .../marvel/data/{ => remote}/dto/StoryDto.kt | 2 +- .../marvel/data/{ => remote}/dto/TextBlurbDto.kt | 2 +- .../marvel/data/{ => remote}/dto/ThumbnailDto.kt | 2 +- .../marvel/data/{ => remote}/dto/UrlDto.kt | 2 +- .../marvel/data/repository/MarvelRepository.kt | 12 ++++++------ .../marvel/data/repository/MarvelRepositoryImpl.kt | 14 +++++++------- .../ui/characterDetails/CharacterComicsAdapter.kt | 2 +- .../characterDetails/CharacterDetailsViewModel.kt | 6 +++--- .../ui/characterDetails/CharacterSeriesAdapter.kt | 2 +- .../marvel/ui/characters/CharactersAdapter.kt | 2 +- .../marvel/ui/characters/CharactersViewModel.kt | 2 +- .../comicDetails/ComicDetailsCharactersAdapter.kt | 2 +- .../ui/comicDetails/ComicDetailsCreatorsAdapter.kt | 2 +- .../ui/comicDetails/ComicDetailsViewModel.kt | 6 +++--- .../red_velvet/marvel/ui/comics/ComicAdapter.kt | 2 +- .../marvel/ui/comics/ComicsCollection.kt | 2 +- .../red_velvet/marvel/ui/comics/ComicsViewModel.kt | 2 +- .../marvel/ui/eventDetails/CharactersAdapter.kt | 2 +- .../marvel/ui/eventDetails/CreatorsAdapter.kt | 2 +- .../marvel/ui/eventDetails/EventDetailViewModel.kt | 6 +++--- .../red_velvet/marvel/ui/events/EventsAdapter.kt | 2 +- .../red_velvet/marvel/ui/events/EventsViewModel.kt | 2 +- .../red_velvet/marvel/ui/series/SeriesAdapter.kt | 2 +- .../red_velvet/marvel/ui/series/SeriesViewModel.kt | 2 +- .../marvel/ui/seriesDetails/CreatorsAdapter.kt | 2 +- .../ui/seriesDetails/SeriesDetailsViewModel.kt | 4 ++-- .../red_velvet/marvel/ui/stories/StoriesAdapter.kt | 2 +- .../marvel/ui/stories/StoriesViewModel.kt | 2 +- .../marvel/ui/storyDetails/StoryCreatorAdapter.kt | 2 +- .../ui/storyDetails/StoryDetailsViewModel.kt | 6 +++--- .../red_velvet/marvel/ui/utils/BindingAdapters.kt | 2 +- .../com/red_velvet/marvel/ui/utils/extensions.kt | 2 +- app/src/main/res/layout/characters_item.xml | 2 +- app/src/main/res/layout/item_character_comics.xml | 2 +- app/src/main/res/layout/item_character_series.xml | 2 +- app/src/main/res/layout/item_charactors.xml | 2 +- app/src/main/res/layout/item_comic.xml | 2 +- app/src/main/res/layout/item_comic_character.xml | 2 +- app/src/main/res/layout/item_comic_creator.xml | 2 +- app/src/main/res/layout/item_creator.xml | 2 +- app/src/main/res/layout/item_creators_event.xml | 2 +- app/src/main/res/layout/item_event.xml | 2 +- app/src/main/res/layout/item_series.xml | 2 +- app/src/main/res/layout/item_stories.xml | 2 +- app/src/main/res/layout/item_story_creator.xml | 2 +- 57 files changed, 83 insertions(+), 83 deletions(-) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/BaseResponse.kt (92%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/CharacterDto.kt (95%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/ComicDto.kt (97%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/CreatorDto.kt (96%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/DataContainerDto.kt (88%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/DateDto.kt (80%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/EventDto.kt (96%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/PriceDto.kt (80%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/ResourceCollectionDto.kt (91%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/ResourceDto.kt (87%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/SeriesDto.kt (96%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/StoryDto.kt (96%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/TextBlurbDto.kt (84%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/ThumbnailDto.kt (81%) rename app/src/main/java/com/red_velvet/marvel/data/{ => remote}/dto/UrlDto.kt (80%) diff --git a/app/src/main/java/com/red_velvet/marvel/data/remote/MarvelService.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/MarvelService.kt index 071e565e..a0f91fcf 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/remote/MarvelService.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/MarvelService.kt @@ -1,12 +1,12 @@ package com.red_velvet.marvel.data.remote -import com.red_velvet.marvel.data.dto.BaseResponse -import com.red_velvet.marvel.data.dto.CharacterDto -import com.red_velvet.marvel.data.dto.ComicDto -import com.red_velvet.marvel.data.dto.CreatorDto -import com.red_velvet.marvel.data.dto.EventDto -import com.red_velvet.marvel.data.dto.SeriesDto -import com.red_velvet.marvel.data.dto.StoryDto +import com.red_velvet.marvel.data.remote.dto.BaseResponse +import com.red_velvet.marvel.data.remote.dto.CharacterDto +import com.red_velvet.marvel.data.remote.dto.ComicDto +import com.red_velvet.marvel.data.remote.dto.CreatorDto +import com.red_velvet.marvel.data.remote.dto.EventDto +import com.red_velvet.marvel.data.remote.dto.SeriesDto +import com.red_velvet.marvel.data.remote.dto.StoryDto import io.reactivex.rxjava3.core.Single import retrofit2.Response import retrofit2.http.GET diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/BaseResponse.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/BaseResponse.kt similarity index 92% rename from app/src/main/java/com/red_velvet/marvel/data/dto/BaseResponse.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/BaseResponse.kt index 6514a4df..28dfcb0f 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/BaseResponse.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/BaseResponse.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/CharacterDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/CharacterDto.kt similarity index 95% rename from app/src/main/java/com/red_velvet/marvel/data/dto/CharacterDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/CharacterDto.kt index cdc889a5..efe15e85 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/CharacterDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/CharacterDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName import com.red_velvet.marvel.data.dto.* diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/ComicDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/ComicDto.kt similarity index 97% rename from app/src/main/java/com/red_velvet/marvel/data/dto/ComicDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/ComicDto.kt index 23747d88..4852b383 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/ComicDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/ComicDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/CreatorDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/CreatorDto.kt similarity index 96% rename from app/src/main/java/com/red_velvet/marvel/data/dto/CreatorDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/CreatorDto.kt index 798efc60..5344b59d 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/CreatorDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/CreatorDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/DataContainerDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/DataContainerDto.kt similarity index 88% rename from app/src/main/java/com/red_velvet/marvel/data/dto/DataContainerDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/DataContainerDto.kt index 88c6f4e0..96c8f1a7 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/DataContainerDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/DataContainerDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/DateDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/DateDto.kt similarity index 80% rename from app/src/main/java/com/red_velvet/marvel/data/dto/DateDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/DateDto.kt index 3a8d14ce..1974d39e 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/DateDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/DateDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/EventDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/EventDto.kt similarity index 96% rename from app/src/main/java/com/red_velvet/marvel/data/dto/EventDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/EventDto.kt index fe89d363..b927df42 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/EventDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/EventDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/PriceDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/PriceDto.kt similarity index 80% rename from app/src/main/java/com/red_velvet/marvel/data/dto/PriceDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/PriceDto.kt index a017ab6d..845a0f9a 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/PriceDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/PriceDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/ResourceCollectionDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/ResourceCollectionDto.kt similarity index 91% rename from app/src/main/java/com/red_velvet/marvel/data/dto/ResourceCollectionDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/ResourceCollectionDto.kt index 4cbe90e0..e0ee55b3 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/ResourceCollectionDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/ResourceCollectionDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/ResourceDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/ResourceDto.kt similarity index 87% rename from app/src/main/java/com/red_velvet/marvel/data/dto/ResourceDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/ResourceDto.kt index 999c7b9e..6ad58a3d 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/ResourceDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/ResourceDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/SeriesDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/SeriesDto.kt similarity index 96% rename from app/src/main/java/com/red_velvet/marvel/data/dto/SeriesDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/SeriesDto.kt index 90ee7666..bb20d54f 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/SeriesDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/SeriesDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/StoryDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/StoryDto.kt similarity index 96% rename from app/src/main/java/com/red_velvet/marvel/data/dto/StoryDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/StoryDto.kt index c3bce3bb..f603e3df 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/StoryDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/StoryDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/TextBlurbDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/TextBlurbDto.kt similarity index 84% rename from app/src/main/java/com/red_velvet/marvel/data/dto/TextBlurbDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/TextBlurbDto.kt index ea206ebf..afd31d57 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/TextBlurbDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/TextBlurbDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/ThumbnailDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/ThumbnailDto.kt similarity index 81% rename from app/src/main/java/com/red_velvet/marvel/data/dto/ThumbnailDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/ThumbnailDto.kt index 3e30d0d9..110d8c50 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/ThumbnailDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/ThumbnailDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/dto/UrlDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/UrlDto.kt similarity index 80% rename from app/src/main/java/com/red_velvet/marvel/data/dto/UrlDto.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/dto/UrlDto.kt index 9a1c55e7..3dc3f13a 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/dto/UrlDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/UrlDto.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.dto +package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName diff --git a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt index 46667527..fcd64a07 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt @@ -1,12 +1,12 @@ package com.red_velvet.marvel.data.repository -import com.red_velvet.marvel.data.dto.CharacterDto -import com.red_velvet.marvel.data.dto.ComicDto -import com.red_velvet.marvel.data.dto.CreatorDto -import com.red_velvet.marvel.data.dto.EventDto -import com.red_velvet.marvel.data.dto.SeriesDto -import com.red_velvet.marvel.data.dto.StoryDto +import com.red_velvet.marvel.data.remote.dto.CharacterDto +import com.red_velvet.marvel.data.remote.dto.ComicDto +import com.red_velvet.marvel.data.remote.dto.CreatorDto +import com.red_velvet.marvel.data.remote.dto.EventDto +import com.red_velvet.marvel.data.remote.dto.SeriesDto +import com.red_velvet.marvel.data.remote.dto.StoryDto import com.red_velvet.marvel.ui.utils.State import io.reactivex.rxjava3.core.Observable diff --git a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt index 3726c9ee..d1333543 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt @@ -1,14 +1,14 @@ package com.red_velvet.marvel.data.repository -import com.red_velvet.marvel.data.dto.BaseResponse -import com.red_velvet.marvel.data.dto.CharacterDto -import com.red_velvet.marvel.data.dto.ComicDto -import com.red_velvet.marvel.data.dto.CreatorDto -import com.red_velvet.marvel.data.dto.EventDto -import com.red_velvet.marvel.data.dto.SeriesDto -import com.red_velvet.marvel.data.dto.StoryDto import com.red_velvet.marvel.data.remote.MarvelService +import com.red_velvet.marvel.data.remote.dto.BaseResponse +import com.red_velvet.marvel.data.remote.dto.CharacterDto +import com.red_velvet.marvel.data.remote.dto.ComicDto +import com.red_velvet.marvel.data.remote.dto.CreatorDto +import com.red_velvet.marvel.data.remote.dto.EventDto +import com.red_velvet.marvel.data.remote.dto.SeriesDto +import com.red_velvet.marvel.data.remote.dto.StoryDto import com.red_velvet.marvel.ui.utils.State import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Single diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterComicsAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterComicsAdapter.kt index 784fc83a..c380a921 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterComicsAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterComicsAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.characterDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.ComicDto +import com.red_velvet.marvel.data.remote.dto.ComicDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsViewModel.kt index 9bac0a8f..8ab4e7d5 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsViewModel.kt @@ -2,10 +2,10 @@ package com.red_velvet.marvel.ui.characterDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.dto.CharacterDto -import com.red_velvet.marvel.data.dto.ComicDto -import com.red_velvet.marvel.data.dto.SeriesDto import com.red_velvet.marvel.data.remote.RetrofitClient +import com.red_velvet.marvel.data.remote.dto.CharacterDto +import com.red_velvet.marvel.data.remote.dto.ComicDto +import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterSeriesAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterSeriesAdapter.kt index 3f383fc8..9fb90ce5 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterSeriesAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterSeriesAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.characterDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.SeriesDto +import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersAdapter.kt index 99bde5a2..7b5e4dea 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.characters import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.CharacterDto +import com.red_velvet.marvel.data.remote.dto.CharacterDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersViewModel.kt index eb79b407..7a21483c 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersViewModel.kt @@ -2,8 +2,8 @@ package com.red_velvet.marvel.ui.characters import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.dto.CharacterDto import com.red_velvet.marvel.data.remote.RetrofitClient +import com.red_velvet.marvel.data.remote.dto.CharacterDto import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCharactersAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCharactersAdapter.kt index c6a0032d..787f416d 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCharactersAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCharactersAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.comicDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.CharacterDto +import com.red_velvet.marvel.data.remote.dto.CharacterDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCreatorsAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCreatorsAdapter.kt index cdbbd9a5..d9276b59 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCreatorsAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsCreatorsAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.comicDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.CreatorDto +import com.red_velvet.marvel.data.remote.dto.CreatorDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsViewModel.kt index 3bc2dfc0..1896b3b2 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsViewModel.kt @@ -2,10 +2,10 @@ package com.red_velvet.marvel.ui.comicDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.dto.CharacterDto -import com.red_velvet.marvel.data.dto.ComicDto -import com.red_velvet.marvel.data.dto.CreatorDto import com.red_velvet.marvel.data.remote.RetrofitClient +import com.red_velvet.marvel.data.remote.dto.CharacterDto +import com.red_velvet.marvel.data.remote.dto.ComicDto +import com.red_velvet.marvel.data.remote.dto.CreatorDto import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicAdapter.kt index c290eda4..5d9b88d9 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.comics import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.ComicDto +import com.red_velvet.marvel.data.remote.dto.ComicDto import com.red_velvet.marvel.ui.base.BaseAdapter class ComicAdapter( diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsCollection.kt b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsCollection.kt index 8d4c14ee..ce1fa6a1 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsCollection.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsCollection.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.comics import androidx.annotation.StringRes -import com.red_velvet.marvel.data.dto.ComicDto +import com.red_velvet.marvel.data.remote.dto.ComicDto import com.red_velvet.marvel.ui.utils.State data class ComicsCollection( diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsViewModel.kt index 6e09aecd..cb0f88f5 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsViewModel.kt @@ -4,8 +4,8 @@ import androidx.annotation.StringRes import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.ComicDto import com.red_velvet.marvel.data.remote.RetrofitClient +import com.red_velvet.marvel.data.remote.dto.ComicDto import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel diff --git a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CharactersAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CharactersAdapter.kt index 8fd313eb..7ac5d1bf 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CharactersAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CharactersAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.eventDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.CharacterDto +import com.red_velvet.marvel.data.remote.dto.CharacterDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CreatorsAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CreatorsAdapter.kt index d44d4da5..6bf3409f 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CreatorsAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/CreatorsAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.eventDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.CreatorDto +import com.red_velvet.marvel.data.remote.dto.CreatorDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailViewModel.kt index cfed050c..9f98063a 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailViewModel.kt @@ -2,10 +2,10 @@ package com.red_velvet.marvel.ui.eventDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.dto.CharacterDto -import com.red_velvet.marvel.data.dto.CreatorDto -import com.red_velvet.marvel.data.dto.EventDto import com.red_velvet.marvel.data.remote.RetrofitClient +import com.red_velvet.marvel.data.remote.dto.CharacterDto +import com.red_velvet.marvel.data.remote.dto.CreatorDto +import com.red_velvet.marvel.data.remote.dto.EventDto import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.SingleEvent diff --git a/app/src/main/java/com/red_velvet/marvel/ui/events/EventsAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/events/EventsAdapter.kt index 1fca1185..0cf2bcb6 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/events/EventsAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/events/EventsAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.events import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.EventDto +import com.red_velvet.marvel.data.remote.dto.EventDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/events/EventsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/events/EventsViewModel.kt index aa766041..6b20b346 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/events/EventsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/events/EventsViewModel.kt @@ -2,8 +2,8 @@ package com.red_velvet.marvel.ui.events import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.dto.EventDto import com.red_velvet.marvel.data.remote.RetrofitClient +import com.red_velvet.marvel.data.remote.dto.EventDto import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.SingleEvent diff --git a/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesAdapter.kt index cd8874f4..566d2cae 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.series import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.SeriesDto +import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesViewModel.kt index 00c497fa..91b62d5a 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesViewModel.kt @@ -3,8 +3,8 @@ package com.red_velvet.marvel.ui.series import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.dto.SeriesDto import com.red_velvet.marvel.data.remote.RetrofitClient +import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel diff --git a/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/CreatorsAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/CreatorsAdapter.kt index 8f4e6352..dae3cb13 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/CreatorsAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/CreatorsAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.seriesDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.CreatorDto +import com.red_velvet.marvel.data.remote.dto.CreatorDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsViewModel.kt index 2a70ac0f..ae8185d6 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsViewModel.kt @@ -2,9 +2,9 @@ package com.red_velvet.marvel.ui.seriesDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.dto.CreatorDto -import com.red_velvet.marvel.data.dto.SeriesDto import com.red_velvet.marvel.data.remote.RetrofitClient +import com.red_velvet.marvel.data.remote.dto.CreatorDto +import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel diff --git a/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesAdapter.kt index 54265697..2696e5ae 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesAdapter.kt @@ -2,7 +2,7 @@ package com.red_velvet.marvel.ui.stories import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.StoryDto +import com.red_velvet.marvel.data.remote.dto.StoryDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesViewModel.kt index 09be64a2..4ee414a7 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesViewModel.kt @@ -2,8 +2,8 @@ package com.red_velvet.marvel.ui.stories import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.dto.StoryDto import com.red_velvet.marvel.data.remote.RetrofitClient +import com.red_velvet.marvel.data.remote.dto.StoryDto import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.SingleEvent diff --git a/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryCreatorAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryCreatorAdapter.kt index df445297..d0ea3303 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryCreatorAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryCreatorAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.storyDetails import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.CreatorDto +import com.red_velvet.marvel.data.remote.dto.CreatorDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.base.BaseInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsViewModel.kt index 2a11b526..8ba33ede 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsViewModel.kt @@ -2,10 +2,10 @@ package com.red_velvet.marvel.ui.storyDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.dto.ComicDto -import com.red_velvet.marvel.data.dto.CreatorDto -import com.red_velvet.marvel.data.dto.StoryDto import com.red_velvet.marvel.data.remote.RetrofitClient +import com.red_velvet.marvel.data.remote.dto.ComicDto +import com.red_velvet.marvel.data.remote.dto.CreatorDto +import com.red_velvet.marvel.data.remote.dto.StoryDto import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel diff --git a/app/src/main/java/com/red_velvet/marvel/ui/utils/BindingAdapters.kt b/app/src/main/java/com/red_velvet/marvel/ui/utils/BindingAdapters.kt index ca0a0672..d4951869 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/utils/BindingAdapters.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/utils/BindingAdapters.kt @@ -6,7 +6,7 @@ import androidx.databinding.BindingAdapter import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.dto.ThumbnailDto +import com.red_velvet.marvel.data.remote.dto.ThumbnailDto import com.red_velvet.marvel.ui.base.BaseAdapter @BindingAdapter(value = ["app:showWhenLoading"]) diff --git a/app/src/main/java/com/red_velvet/marvel/ui/utils/extensions.kt b/app/src/main/java/com/red_velvet/marvel/ui/utils/extensions.kt index cee1bbcc..0683e6a1 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/utils/extensions.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/utils/extensions.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.utils import android.view.View -import com.red_velvet.marvel.data.dto.ThumbnailDto +import com.red_velvet.marvel.data.remote.dto.ThumbnailDto fun ThumbnailDto.toUrl() = this.path + "." + this.extension diff --git a/app/src/main/res/layout/characters_item.xml b/app/src/main/res/layout/characters_item.xml index bdc19778..6260cb0f 100644 --- a/app/src/main/res/layout/characters_item.xml +++ b/app/src/main/res/layout/characters_item.xml @@ -6,7 +6,7 @@ + type="com.red_velvet.marvel.data.remote.dto.CharacterDto" /> diff --git a/app/src/main/res/layout/item_character_comics.xml b/app/src/main/res/layout/item_character_comics.xml index 17a7b6a8..4bc27b9a 100644 --- a/app/src/main/res/layout/item_character_comics.xml +++ b/app/src/main/res/layout/item_character_comics.xml @@ -7,7 +7,7 @@ + type="com.red_velvet.marvel.data.remote.dto.ComicDto" /> + type="com.red_velvet.marvel.data.remote.dto.SeriesDto" /> + type="com.red_velvet.marvel.data.remote.dto.CharacterDto" /> + type="com.red_velvet.marvel.data.remote.dto.ComicDto" /> + type="com.red_velvet.marvel.data.remote.dto.CharacterDto" /> diff --git a/app/src/main/res/layout/item_comic_creator.xml b/app/src/main/res/layout/item_comic_creator.xml index a5989b92..fbe1c804 100644 --- a/app/src/main/res/layout/item_comic_creator.xml +++ b/app/src/main/res/layout/item_comic_creator.xml @@ -6,7 +6,7 @@ + type="com.red_velvet.marvel.data.remote.dto.CreatorDto" /> + type="com.red_velvet.marvel.data.remote.dto.CreatorDto" /> + type="com.red_velvet.marvel.data.remote.dto.CreatorDto" /> diff --git a/app/src/main/res/layout/item_event.xml b/app/src/main/res/layout/item_event.xml index 8a47abe3..d5bb4df0 100644 --- a/app/src/main/res/layout/item_event.xml +++ b/app/src/main/res/layout/item_event.xml @@ -6,7 +6,7 @@ + type="com.red_velvet.marvel.data.remote.dto.EventDto" /> diff --git a/app/src/main/res/layout/item_series.xml b/app/src/main/res/layout/item_series.xml index 53190dc9..b9ad32e9 100644 --- a/app/src/main/res/layout/item_series.xml +++ b/app/src/main/res/layout/item_series.xml @@ -7,7 +7,7 @@ + type="com.red_velvet.marvel.data.remote.dto.SeriesDto" /> + type="com.red_velvet.marvel.data.remote.dto.StoryDto" /> + type="com.red_velvet.marvel.data.remote.dto.CreatorDto" /> Date: Thu, 18 May 2023 21:00:59 +0300 Subject: [PATCH 04/41] create service package --- .../java/com/red_velvet/marvel/data/remote/RetrofitClient.kt | 1 + .../marvel/data/remote/{ => service}/MarvelService.kt | 2 +- .../red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) rename app/src/main/java/com/red_velvet/marvel/data/remote/{ => service}/MarvelService.kt (98%) diff --git a/app/src/main/java/com/red_velvet/marvel/data/remote/RetrofitClient.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/RetrofitClient.kt index dc1dc469..3faa68e3 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/remote/RetrofitClient.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/RetrofitClient.kt @@ -1,5 +1,6 @@ package com.red_velvet.marvel.data.remote +import com.red_velvet.marvel.data.remote.service.MarvelService import okhttp3.OkHttpClient import retrofit2.Retrofit import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory diff --git a/app/src/main/java/com/red_velvet/marvel/data/remote/MarvelService.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/service/MarvelService.kt similarity index 98% rename from app/src/main/java/com/red_velvet/marvel/data/remote/MarvelService.kt rename to app/src/main/java/com/red_velvet/marvel/data/remote/service/MarvelService.kt index a0f91fcf..41016245 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/remote/MarvelService.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/service/MarvelService.kt @@ -1,4 +1,4 @@ -package com.red_velvet.marvel.data.remote +package com.red_velvet.marvel.data.remote.service import com.red_velvet.marvel.data.remote.dto.BaseResponse import com.red_velvet.marvel.data.remote.dto.CharacterDto diff --git a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt index d1333543..0a246373 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt @@ -1,7 +1,6 @@ package com.red_velvet.marvel.data.repository -import com.red_velvet.marvel.data.remote.MarvelService import com.red_velvet.marvel.data.remote.dto.BaseResponse import com.red_velvet.marvel.data.remote.dto.CharacterDto import com.red_velvet.marvel.data.remote.dto.ComicDto @@ -9,6 +8,7 @@ import com.red_velvet.marvel.data.remote.dto.CreatorDto import com.red_velvet.marvel.data.remote.dto.EventDto import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.data.remote.dto.StoryDto +import com.red_velvet.marvel.data.remote.service.MarvelService import com.red_velvet.marvel.ui.utils.State import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Single From a198fd485de9160f317d605e8dfcad9b6659af16 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Thu, 18 May 2023 21:13:48 +0300 Subject: [PATCH 05/41] add room and hilt dependencies --- app/build.gradle.kts | 24 +++++++++++++++++++----- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7b1990b6..d019128b 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -30,7 +30,11 @@ android { } buildConfigField("String", "PUBLIC_KEY", localProperties.getProperty("publicKey") ?: "\"\"") - buildConfigField("String", "PRIVATE_KEY", localProperties.getProperty("privateKey") ?: "\"\"") + buildConfigField( + "String", + "PRIVATE_KEY", + localProperties.getProperty("privateKey") ?: "\"\"" + ) } buildTypes { @@ -49,7 +53,7 @@ android { kotlinOptions { jvmTarget = "17" } - dataBinding{ + dataBinding { enable = true } viewBinding { @@ -105,10 +109,20 @@ dependencies { implementation("com.github.bumptech.glide:glide:4.15.1") //navigation - val nav_version = "2.5.1" - implementation("androidx.navigation:navigation-fragment-ktx:$nav_version") - implementation("androidx.navigation:navigation-ui-ktx:$nav_version") + val navVersion = "2.5.1" + implementation("androidx.navigation:navigation-fragment-ktx:$navVersion") + implementation("androidx.navigation:navigation-ui-ktx:$navVersion") // Lottie Animation implementation("com.airbnb.android:lottie:6.0.0") + + // Room Database + val roomVersion = "2.5.1" + implementation("androidx.room:room-runtime:$roomVersion") + kapt("androidx.room:room-compiler:$roomVersion") + implementation("androidx.room:room-ktx:$roomVersion") + + // Dagger Hilt + implementation("com.google.dagger:hilt-android:2.42") + kapt("com.google.dagger:hilt-android-compiler:2.42") } \ No newline at end of file From a95bfa2d3d85ad8e558c20f160a147ae623bf57d Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Thu, 18 May 2023 21:14:07 +0300 Subject: [PATCH 06/41] create comic entity --- .../marvel/data/local/database/entity/ComicEntity.kt | 10 ++++++++++ .../data/local/database/entity/ThumbnailEntity.kt | 6 ++++++ 2 files changed, 16 insertions(+) create mode 100644 app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ComicEntity.kt create mode 100644 app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ThumbnailEntity.kt diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ComicEntity.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ComicEntity.kt new file mode 100644 index 00000000..c323820d --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ComicEntity.kt @@ -0,0 +1,10 @@ +package com.red_velvet.marvel.data.local.database.entity + +import androidx.room.PrimaryKey + +data class ComicEntity( + @PrimaryKey val id: Int, + val title: String, + val description: String, + val thumbnail: ThumbnailEntity, +) diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ThumbnailEntity.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ThumbnailEntity.kt new file mode 100644 index 00000000..32390703 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ThumbnailEntity.kt @@ -0,0 +1,6 @@ +package com.red_velvet.marvel.data.local.database.entity + +data class ThumbnailEntity( + val extension: String, + val path: String, +) From 3ea540b72263235ebb9936c81c6bb30c2231ac95 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Thu, 18 May 2023 21:45:38 +0300 Subject: [PATCH 07/41] create database --- .../data/local/database/MarvelDatabase.kt | 15 ++++++++++++ .../data/local/database/dao/ComicDao.kt | 23 +++++++++++++++++++ .../data/local/database/entity/ComicEntity.kt | 4 +++- .../local/database/entity/ThumbnailEntity.kt | 3 +++ 4 files changed, 44 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/red_velvet/marvel/data/local/database/MarvelDatabase.kt create mode 100644 app/src/main/java/com/red_velvet/marvel/data/local/database/dao/ComicDao.kt diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/MarvelDatabase.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/MarvelDatabase.kt new file mode 100644 index 00000000..72aa50c9 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/MarvelDatabase.kt @@ -0,0 +1,15 @@ +package com.red_velvet.marvel.data.local.database + +import androidx.room.Database +import androidx.room.RoomDatabase +import com.red_velvet.marvel.data.local.database.dao.ComicDao +import com.red_velvet.marvel.data.local.database.entity.ComicEntity +import com.red_velvet.marvel.data.local.database.entity.ThumbnailEntity + +@Database( + entities = [ComicEntity::class, ThumbnailEntity::class], + version = 1, +) +abstract class MarvelDatabase : RoomDatabase() { + abstract fun comicDao(): ComicDao +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/ComicDao.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/ComicDao.kt new file mode 100644 index 00000000..5e66a312 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/ComicDao.kt @@ -0,0 +1,23 @@ +package com.red_velvet.marvel.data.local.database.dao + +import androidx.room.Dao +import androidx.room.Delete +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import com.red_velvet.marvel.data.local.database.entity.ComicEntity +import io.reactivex.rxjava3.core.Single + +@Dao +interface ComicDao { + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertComic(comic: ComicEntity) + + @Query("SELECT * FROM COMIC_TABLE") + fun getAllComics(): Single> + + @Delete + fun deleteComic(comic: ComicEntity) + +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ComicEntity.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ComicEntity.kt index c323820d..09148c21 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ComicEntity.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ComicEntity.kt @@ -1,10 +1,12 @@ package com.red_velvet.marvel.data.local.database.entity +import androidx.room.Entity import androidx.room.PrimaryKey +@Entity(tableName = "COMIC_TABLE") data class ComicEntity( @PrimaryKey val id: Int, val title: String, val description: String, val thumbnail: ThumbnailEntity, -) +) \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ThumbnailEntity.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ThumbnailEntity.kt index 32390703..021057c3 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ThumbnailEntity.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ThumbnailEntity.kt @@ -1,5 +1,8 @@ package com.red_velvet.marvel.data.local.database.entity +import androidx.room.Entity + +@Entity(tableName = "THUMBNAIL_TABLE") data class ThumbnailEntity( val extension: String, val path: String, From 71e347a145fb132b64a0e3f10042ea193ed987b6 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Fri, 19 May 2023 14:41:55 +0300 Subject: [PATCH 08/41] create marvel application --- app/src/main/AndroidManifest.xml | 7 ++++--- .../main/java/com/red_velvet/marvel/MarvelApplication.kt | 5 +++++ 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/red_velvet/marvel/MarvelApplication.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 66965fc1..7e252004 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -5,8 +5,8 @@ + android:usesCleartextTraffic="true" + tools:targetApi="31"> + android:theme="@style/Theme.Marvel"> diff --git a/app/src/main/java/com/red_velvet/marvel/MarvelApplication.kt b/app/src/main/java/com/red_velvet/marvel/MarvelApplication.kt new file mode 100644 index 00000000..a296315a --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/MarvelApplication.kt @@ -0,0 +1,5 @@ +package com.red_velvet.marvel + +import android.app.Application + +class MarvelApplication : Application() \ No newline at end of file From f70f0ecb1b266e3d8068f69972612c9c5607c8ce Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Fri, 19 May 2023 14:44:26 +0300 Subject: [PATCH 09/41] add app hilt annotation --- app/src/main/java/com/red_velvet/marvel/MarvelApplication.kt | 2 ++ 1 file changed, 2 insertions(+) diff --git a/app/src/main/java/com/red_velvet/marvel/MarvelApplication.kt b/app/src/main/java/com/red_velvet/marvel/MarvelApplication.kt index a296315a..c0b05c77 100644 --- a/app/src/main/java/com/red_velvet/marvel/MarvelApplication.kt +++ b/app/src/main/java/com/red_velvet/marvel/MarvelApplication.kt @@ -1,5 +1,7 @@ package com.red_velvet.marvel import android.app.Application +import dagger.hilt.android.HiltAndroidApp +@HiltAndroidApp class MarvelApplication : Application() \ No newline at end of file From c2e74434b822910924903afc49f3ff2b1a1dd434 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 00:49:49 +0300 Subject: [PATCH 10/41] create daos --- .../data/local/database/dao/CharacterDao.kt | 19 +++++++++++++++++++ .../data/local/database/dao/ComicDao.kt | 12 ++++++++---- .../data/local/database/dao/EventDao.kt | 19 +++++++++++++++++++ 3 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/red_velvet/marvel/data/local/database/dao/CharacterDao.kt create mode 100644 app/src/main/java/com/red_velvet/marvel/data/local/database/dao/EventDao.kt diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/CharacterDao.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/CharacterDao.kt new file mode 100644 index 00000000..d8b2e088 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/CharacterDao.kt @@ -0,0 +1,19 @@ +package com.red_velvet.marvel.data.local.database.dao + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import com.red_velvet.marvel.data.local.database.entity.CharacterEntity +import io.reactivex.rxjava3.core.Completable +import io.reactivex.rxjava3.core.Observable + +@Dao +interface CharacterDao { + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertCharacter(character: CharacterEntity): Completable + + @Query("SELECT * FROM CHARACTER_TABLE") + fun getAllCharacters(): Observable> +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/ComicDao.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/ComicDao.kt index 5e66a312..d1b56fa0 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/ComicDao.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/ComicDao.kt @@ -6,18 +6,22 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import com.red_velvet.marvel.data.local.database.entity.ComicEntity -import io.reactivex.rxjava3.core.Single +import io.reactivex.rxjava3.core.Completable +import io.reactivex.rxjava3.core.Observable @Dao interface ComicDao { @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insertComic(comic: ComicEntity) + fun insertComic(comic: ComicEntity): Completable + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertAllComics(comics: List): Completable @Query("SELECT * FROM COMIC_TABLE") - fun getAllComics(): Single> + fun getAllComics(): Observable> @Delete - fun deleteComic(comic: ComicEntity) + fun deleteComic(comic: ComicEntity): Completable } \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/EventDao.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/EventDao.kt new file mode 100644 index 00000000..6511fb7c --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/EventDao.kt @@ -0,0 +1,19 @@ +package com.red_velvet.marvel.data.local.database.dao + +import android.database.Observable +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import com.red_velvet.marvel.data.local.database.entity.EventEntity +import io.reactivex.rxjava3.core.Completable + +@Dao +interface EventDao { + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertEvent(event: EventEntity): Completable + + @Query("SELECT * FROM EVENT_TABLE") + fun getAllEvents(): Observable> +} \ No newline at end of file From 3b51af746c7481fd5c846d82ed0c6b5dbe3a8e11 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 00:50:20 +0300 Subject: [PATCH 11/41] create entities --- .../data/local/database/entity/CharacterEntity.kt | 11 +++++++++++ .../marvel/data/local/database/entity/ComicEntity.kt | 3 +-- .../marvel/data/local/database/entity/EventEntity.kt | 11 +++++++++++ .../data/local/database/entity/ThumbnailEntity.kt | 9 --------- 4 files changed, 23 insertions(+), 11 deletions(-) create mode 100644 app/src/main/java/com/red_velvet/marvel/data/local/database/entity/CharacterEntity.kt create mode 100644 app/src/main/java/com/red_velvet/marvel/data/local/database/entity/EventEntity.kt delete mode 100644 app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ThumbnailEntity.kt diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/CharacterEntity.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/CharacterEntity.kt new file mode 100644 index 00000000..19b50929 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/CharacterEntity.kt @@ -0,0 +1,11 @@ +package com.red_velvet.marvel.data.local.database.entity + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "CHARACTER_TABLE") +data class CharacterEntity( + @PrimaryKey val id: Int, + val name: String, + val imageUrl: String, +) diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ComicEntity.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ComicEntity.kt index 09148c21..b544f4cb 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ComicEntity.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ComicEntity.kt @@ -7,6 +7,5 @@ import androidx.room.PrimaryKey data class ComicEntity( @PrimaryKey val id: Int, val title: String, - val description: String, - val thumbnail: ThumbnailEntity, + val imageUrl: String, ) \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/EventEntity.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/EventEntity.kt new file mode 100644 index 00000000..e876d7ec --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/EventEntity.kt @@ -0,0 +1,11 @@ +package com.red_velvet.marvel.data.local.database.entity + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "EVENT_TABLE") +data class EventEntity( + @PrimaryKey val id: Int, + val title: String, + val imageUrl: String, +) diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ThumbnailEntity.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ThumbnailEntity.kt deleted file mode 100644 index 021057c3..00000000 --- a/app/src/main/java/com/red_velvet/marvel/data/local/database/entity/ThumbnailEntity.kt +++ /dev/null @@ -1,9 +0,0 @@ -package com.red_velvet.marvel.data.local.database.entity - -import androidx.room.Entity - -@Entity(tableName = "THUMBNAIL_TABLE") -data class ThumbnailEntity( - val extension: String, - val path: String, -) From 126ccd97c0e50d2bee61923646b87af11b7af3c4 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 00:51:11 +0300 Subject: [PATCH 12/41] create database --- .../marvel/data/local/database/MarvelDatabase.kt | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/MarvelDatabase.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/MarvelDatabase.kt index 72aa50c9..834811d6 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/local/database/MarvelDatabase.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/MarvelDatabase.kt @@ -2,14 +2,19 @@ package com.red_velvet.marvel.data.local.database import androidx.room.Database import androidx.room.RoomDatabase +import com.red_velvet.marvel.data.local.database.dao.CharacterDao import com.red_velvet.marvel.data.local.database.dao.ComicDao +import com.red_velvet.marvel.data.local.database.dao.EventDao +import com.red_velvet.marvel.data.local.database.entity.CharacterEntity import com.red_velvet.marvel.data.local.database.entity.ComicEntity -import com.red_velvet.marvel.data.local.database.entity.ThumbnailEntity +import com.red_velvet.marvel.data.local.database.entity.EventEntity @Database( - entities = [ComicEntity::class, ThumbnailEntity::class], + entities = [ComicEntity::class, EventEntity::class, CharacterEntity::class], version = 1, ) abstract class MarvelDatabase : RoomDatabase() { abstract fun comicDao(): ComicDao + abstract fun eventDao(): EventDao + abstract fun characterDao(): CharacterDao } \ No newline at end of file From c66587badb4ce29f0f0adcf9a357169038f1b7df Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 00:51:49 +0300 Subject: [PATCH 13/41] create data mappers --- .../data/local/mapper/CharacterEntityMapper.kt | 16 ++++++++++++++++ .../data/local/mapper/ComicEntityMapper.kt | 16 ++++++++++++++++ .../data/local/mapper/EventEntityMapper.kt | 16 ++++++++++++++++ 3 files changed, 48 insertions(+) create mode 100644 app/src/main/java/com/red_velvet/marvel/data/local/mapper/CharacterEntityMapper.kt create mode 100644 app/src/main/java/com/red_velvet/marvel/data/local/mapper/ComicEntityMapper.kt create mode 100644 app/src/main/java/com/red_velvet/marvel/data/local/mapper/EventEntityMapper.kt diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/mapper/CharacterEntityMapper.kt b/app/src/main/java/com/red_velvet/marvel/data/local/mapper/CharacterEntityMapper.kt new file mode 100644 index 00000000..7165be13 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/mapper/CharacterEntityMapper.kt @@ -0,0 +1,16 @@ +package com.red_velvet.marvel.data.local.mapper + +import com.red_velvet.marvel.data.local.database.entity.CharacterEntity +import com.red_velvet.marvel.data.remote.dto.CharacterDto +import com.red_velvet.marvel.domain.mapper.Mapper +import com.red_velvet.marvel.domain.util.toUrl + +class CharacterEntityMapper : Mapper { + override fun map(input: CharacterDto): CharacterEntity { + return CharacterEntity( + id = input.id ?: 0, + name = input.name ?: "", + imageUrl = input.thumbnail?.toUrl() ?: "" + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/mapper/ComicEntityMapper.kt b/app/src/main/java/com/red_velvet/marvel/data/local/mapper/ComicEntityMapper.kt new file mode 100644 index 00000000..3223e454 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/mapper/ComicEntityMapper.kt @@ -0,0 +1,16 @@ +package com.red_velvet.marvel.data.local.mapper + +import com.red_velvet.marvel.data.local.database.entity.ComicEntity +import com.red_velvet.marvel.data.remote.dto.ComicDto +import com.red_velvet.marvel.domain.mapper.Mapper +import com.red_velvet.marvel.domain.util.toUrl + +class ComicEntityMapper : Mapper { + override fun map(input: ComicDto): ComicEntity { + return ComicEntity( + id = input.id ?: 0, + title = input.title ?: "", + imageUrl = input.thumbnail?.toUrl() ?: "", + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/mapper/EventEntityMapper.kt b/app/src/main/java/com/red_velvet/marvel/data/local/mapper/EventEntityMapper.kt new file mode 100644 index 00000000..736de860 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/mapper/EventEntityMapper.kt @@ -0,0 +1,16 @@ +package com.red_velvet.marvel.data.local.mapper + +import com.red_velvet.marvel.data.local.database.entity.EventEntity +import com.red_velvet.marvel.data.remote.dto.EventDto +import com.red_velvet.marvel.domain.mapper.Mapper +import com.red_velvet.marvel.domain.util.toUrl + +class EventEntityMapper : Mapper { + override fun map(input: EventDto): EventEntity { + return EventEntity( + id = input.id ?: 0, + title = input.title ?: "", + imageUrl = input.thumbnail?.toUrl() ?: "", + ) + } +} \ No newline at end of file From 79f47fca8132faa6baa0460256b7917aac04f47a Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 00:52:27 +0300 Subject: [PATCH 14/41] fix import --- .../java/com/red_velvet/marvel/data/remote/dto/CharacterDto.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/red_velvet/marvel/data/remote/dto/CharacterDto.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/CharacterDto.kt index efe15e85..5bb4f01d 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/remote/dto/CharacterDto.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/remote/dto/CharacterDto.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.data.remote.dto import com.google.gson.annotations.SerializedName -import com.red_velvet.marvel.data.dto.* +import com.red_velvet.marvel.data.remote.dto.* data class CharacterDto( @SerializedName("comics") From 92089aea2143505bad438a70f4a0b1b110bb928b Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:04:51 +0300 Subject: [PATCH 15/41] inject repository impl --- .../marvel/data/repository/MarvelRepositoryImpl.kt | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt index 0a246373..80e2a8e1 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt @@ -1,6 +1,7 @@ package com.red_velvet.marvel.data.repository +import com.red_velvet.marvel.data.local.database.MarvelDatabase import com.red_velvet.marvel.data.remote.dto.BaseResponse import com.red_velvet.marvel.data.remote.dto.CharacterDto import com.red_velvet.marvel.data.remote.dto.ComicDto @@ -13,9 +14,11 @@ import com.red_velvet.marvel.ui.utils.State import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Single import retrofit2.Response +import javax.inject.Inject -class MarvelRepositoryImpl( - private val marvelServiceImpl: MarvelService +class MarvelRepositoryImpl @Inject constructor( + private val marvelServiceImpl: MarvelService, + private val marvelDatabase: MarvelDatabase, ) : MarvelRepository { override fun getAllComics( From 9f9514a412dcf44d6d1e26bf6a05c31b93b568f1 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:09:05 +0300 Subject: [PATCH 16/41] create database hilt module --- .../red_velvet/marvel/di/DatabaseModule.kt | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 app/src/main/java/com/red_velvet/marvel/di/DatabaseModule.kt diff --git a/app/src/main/java/com/red_velvet/marvel/di/DatabaseModule.kt b/app/src/main/java/com/red_velvet/marvel/di/DatabaseModule.kt new file mode 100644 index 00000000..023c0d37 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/di/DatabaseModule.kt @@ -0,0 +1,38 @@ +package com.red_velvet.marvel.di + +import android.content.Context +import androidx.room.Room +import com.red_velvet.marvel.data.local.database.MarvelDatabase +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object DatabaseModule { + + @Singleton + @Provides + fun provideMarvelDatabase(@ApplicationContext context: Context): MarvelDatabase { + return Room.databaseBuilder( + context, + MarvelDatabase::class.java, + "MarvelDatabase" + ).build() + } + + @Singleton + @Provides + fun provideComicDao(marvelDatabase: MarvelDatabase) = marvelDatabase.comicDao() + + @Singleton + @Provides + fun provideCharacterDao(marvelDatabase: MarvelDatabase) = marvelDatabase.characterDao() + + @Singleton + @Provides + fun provideEventDao(marvelDatabase: MarvelDatabase) = marvelDatabase.eventDao() +} \ No newline at end of file From e11d009d7ee19abcb6fdf668d87c0fc9dcc1eec6 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:09:25 +0300 Subject: [PATCH 17/41] create network hilt module --- .../com/red_velvet/marvel/di/NetworkModule.kt | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 app/src/main/java/com/red_velvet/marvel/di/NetworkModule.kt diff --git a/app/src/main/java/com/red_velvet/marvel/di/NetworkModule.kt b/app/src/main/java/com/red_velvet/marvel/di/NetworkModule.kt new file mode 100644 index 00000000..6cf20ccb --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/di/NetworkModule.kt @@ -0,0 +1,66 @@ +package com.red_velvet.marvel.di + +import com.red_velvet.marvel.data.remote.AuthorizationInterceptor +import com.red_velvet.marvel.data.remote.service.MarvelService +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import okhttp3.OkHttpClient +import retrofit2.Retrofit +import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory +import retrofit2.converter.gson.GsonConverterFactory +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object NetworkModule { + private const val BASE_URL = "http://gateway.marvel.com/v1/public/" + + @Singleton + @Provides + fun provideMarvelService(retrofit: Retrofit): MarvelService { + return retrofit.create(MarvelService::class.java) + } + + @Singleton + @Provides + fun provideRetrofit( + client: OkHttpClient, + gsonConverterFactory: GsonConverterFactory, + rxJava3CallAdapterFactory: RxJava3CallAdapterFactory + ): Retrofit { + return Retrofit.Builder() + .baseUrl(BASE_URL) + .client(client) + .addConverterFactory(gsonConverterFactory) + .addCallAdapterFactory(rxJava3CallAdapterFactory) + .build() + } + + @Singleton + @Provides + fun provideOkHttpClient(authorizationInterceptor: AuthorizationInterceptor): OkHttpClient { + return OkHttpClient.Builder() + .addInterceptor(authorizationInterceptor) + .build() + } + + @Singleton + @Provides + fun provideGsonConverterFactory(): GsonConverterFactory { + return GsonConverterFactory.create() + } + + @Singleton + @Provides + fun provideRxJava3CallAdapterFactory(): RxJava3CallAdapterFactory { + return RxJava3CallAdapterFactory.create() + } + + @Singleton + @Provides + fun provideAuthorizationInterceptor(): AuthorizationInterceptor { + return AuthorizationInterceptor() + } +} \ No newline at end of file From 8ae16b61a8f6d0dc0322b0f6014846fe62c480c3 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:09:49 +0300 Subject: [PATCH 18/41] create repository hilt module --- .../red_velvet/marvel/di/RepositoryModule.kt | 42 +++++++++++++++++++ 1 file changed, 42 insertions(+) create mode 100644 app/src/main/java/com/red_velvet/marvel/di/RepositoryModule.kt diff --git a/app/src/main/java/com/red_velvet/marvel/di/RepositoryModule.kt b/app/src/main/java/com/red_velvet/marvel/di/RepositoryModule.kt new file mode 100644 index 00000000..a0dc3447 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/di/RepositoryModule.kt @@ -0,0 +1,42 @@ +package com.red_velvet.marvel.di + +import com.red_velvet.marvel.data.local.database.MarvelDatabase +import com.red_velvet.marvel.data.local.mapper.ComicEntityMapper +import com.red_velvet.marvel.data.remote.service.MarvelService +import com.red_velvet.marvel.data.repository.MarvelRepository +import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl +import com.red_velvet.marvel.domain.mapper.LocalComicMapper +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +object RepositoryModule { + + @Singleton + @Provides + fun provideMarvelRepository( + marvelService: MarvelService, + marvelDatabase: MarvelDatabase, + ): MarvelRepository { + return MarvelRepositoryImpl( + marvelService, + marvelDatabase, + ) + } + + @Singleton + @Provides + fun provideComicEntityMapper(): ComicEntityMapper { + return ComicEntityMapper() + } + + @Singleton + @Provides + fun provideLocalComicMapper(): LocalComicMapper { + return LocalComicMapper() + } +} \ No newline at end of file From f1f341d3455cd0b21d139d22569babe72042a815 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:10:45 +0300 Subject: [PATCH 19/41] create domain mappers --- .../marvel/domain/mapper/CharacterMapper.kt | 15 +++++++++++++++ .../marvel/domain/mapper/ComicMapper.kt | 16 ++++++++++++++++ .../marvel/domain/mapper/EventMapper.kt | 15 +++++++++++++++ .../marvel/domain/mapper/LocalComicMapper.kt | 14 ++++++++++++++ .../red_velvet/marvel/domain/mapper/Mapper.kt | 5 +++++ 5 files changed, 65 insertions(+) create mode 100644 app/src/main/java/com/red_velvet/marvel/domain/mapper/CharacterMapper.kt create mode 100644 app/src/main/java/com/red_velvet/marvel/domain/mapper/ComicMapper.kt create mode 100644 app/src/main/java/com/red_velvet/marvel/domain/mapper/EventMapper.kt create mode 100644 app/src/main/java/com/red_velvet/marvel/domain/mapper/LocalComicMapper.kt create mode 100644 app/src/main/java/com/red_velvet/marvel/domain/mapper/Mapper.kt diff --git a/app/src/main/java/com/red_velvet/marvel/domain/mapper/CharacterMapper.kt b/app/src/main/java/com/red_velvet/marvel/domain/mapper/CharacterMapper.kt new file mode 100644 index 00000000..ed847e45 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/mapper/CharacterMapper.kt @@ -0,0 +1,15 @@ +package com.red_velvet.marvel.domain.mapper + +import com.red_velvet.marvel.data.remote.dto.CharacterDto +import com.red_velvet.marvel.domain.model.Character +import com.red_velvet.marvel.domain.util.toUrl + +class CharacterMapper : Mapper { + override fun map(input: CharacterDto): Character { + return Character( + id = input.id ?: 0, + name = input.name ?: "", + imageUrl = input.thumbnail?.toUrl() ?: "" + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/domain/mapper/ComicMapper.kt b/app/src/main/java/com/red_velvet/marvel/domain/mapper/ComicMapper.kt new file mode 100644 index 00000000..a3f69f21 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/mapper/ComicMapper.kt @@ -0,0 +1,16 @@ +package com.red_velvet.marvel.domain.mapper + +import com.red_velvet.marvel.data.remote.dto.ComicDto +import com.red_velvet.marvel.domain.model.Comic +import com.red_velvet.marvel.domain.util.toUrl + +class ComicMapper : Mapper { + override fun map(input: ComicDto): Comic { + return Comic( + id = input.id ?: 0, + title = input.title ?: "", + imageUrl = input.thumbnail?.toUrl() ?: "", + ) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/domain/mapper/EventMapper.kt b/app/src/main/java/com/red_velvet/marvel/domain/mapper/EventMapper.kt new file mode 100644 index 00000000..b07720dd --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/mapper/EventMapper.kt @@ -0,0 +1,15 @@ +package com.red_velvet.marvel.domain.mapper + +import com.red_velvet.marvel.data.remote.dto.EventDto +import com.red_velvet.marvel.domain.model.Event +import com.red_velvet.marvel.domain.util.toUrl + +class EventMapper : Mapper { + override fun map(input: EventDto): Event { + return Event( + id = input.id ?: 0, + title = input.title ?: "", + imageUrl = input.thumbnail?.toUrl() ?: "", + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/domain/mapper/LocalComicMapper.kt b/app/src/main/java/com/red_velvet/marvel/domain/mapper/LocalComicMapper.kt new file mode 100644 index 00000000..4ce81723 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/mapper/LocalComicMapper.kt @@ -0,0 +1,14 @@ +package com.red_velvet.marvel.domain.mapper + +import com.red_velvet.marvel.data.local.database.entity.ComicEntity +import com.red_velvet.marvel.domain.model.Comic + +class LocalComicMapper : Mapper { + override fun map(input: ComicEntity): Comic { + return Comic( + id = input.id, + title = input.title, + imageUrl = input.imageUrl, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/domain/mapper/Mapper.kt b/app/src/main/java/com/red_velvet/marvel/domain/mapper/Mapper.kt new file mode 100644 index 00000000..70f3a589 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/mapper/Mapper.kt @@ -0,0 +1,5 @@ +package com.red_velvet.marvel.domain.mapper + +interface Mapper { + fun map(input: I): O +} \ No newline at end of file From cd407c57568e20aa01412a96767b88376396a270 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:11:09 +0300 Subject: [PATCH 20/41] create models --- .../java/com/red_velvet/marvel/domain/model/Character.kt | 7 +++++++ .../main/java/com/red_velvet/marvel/domain/model/Comic.kt | 3 +-- .../main/java/com/red_velvet/marvel/domain/model/Event.kt | 7 +++++++ .../java/com/red_velvet/marvel/domain/model/Thumbnail.kt | 6 ------ 4 files changed, 15 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/com/red_velvet/marvel/domain/model/Character.kt create mode 100644 app/src/main/java/com/red_velvet/marvel/domain/model/Event.kt delete mode 100644 app/src/main/java/com/red_velvet/marvel/domain/model/Thumbnail.kt diff --git a/app/src/main/java/com/red_velvet/marvel/domain/model/Character.kt b/app/src/main/java/com/red_velvet/marvel/domain/model/Character.kt new file mode 100644 index 00000000..081bf2d1 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/model/Character.kt @@ -0,0 +1,7 @@ +package com.red_velvet.marvel.domain.model + +data class Character( + val id: Int, + val name: String, + val imageUrl: String, +) diff --git a/app/src/main/java/com/red_velvet/marvel/domain/model/Comic.kt b/app/src/main/java/com/red_velvet/marvel/domain/model/Comic.kt index 3c9da870..1a5719bf 100644 --- a/app/src/main/java/com/red_velvet/marvel/domain/model/Comic.kt +++ b/app/src/main/java/com/red_velvet/marvel/domain/model/Comic.kt @@ -3,6 +3,5 @@ package com.red_velvet.marvel.domain.model data class Comic( val id: Int, val title: String, - val description: String, - val thumbnail: Thumbnail, + val imageUrl: String, ) diff --git a/app/src/main/java/com/red_velvet/marvel/domain/model/Event.kt b/app/src/main/java/com/red_velvet/marvel/domain/model/Event.kt new file mode 100644 index 00000000..35c80d9b --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/model/Event.kt @@ -0,0 +1,7 @@ +package com.red_velvet.marvel.domain.model + +data class Event( + val id: Int, + val title: String, + val imageUrl: String, +) diff --git a/app/src/main/java/com/red_velvet/marvel/domain/model/Thumbnail.kt b/app/src/main/java/com/red_velvet/marvel/domain/model/Thumbnail.kt deleted file mode 100644 index 8f3a44fe..00000000 --- a/app/src/main/java/com/red_velvet/marvel/domain/model/Thumbnail.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.red_velvet.marvel.domain.model - -data class Thumbnail( - val extension: String, - val path: String, -) From 13fd44543de4b04ae639593975a99da5138c5452 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:11:57 +0300 Subject: [PATCH 21/41] create domain util --- .../main/java/com/red_velvet/marvel/domain/util/Extention.kt | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 app/src/main/java/com/red_velvet/marvel/domain/util/Extention.kt diff --git a/app/src/main/java/com/red_velvet/marvel/domain/util/Extention.kt b/app/src/main/java/com/red_velvet/marvel/domain/util/Extention.kt new file mode 100644 index 00000000..e535dbce --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/util/Extention.kt @@ -0,0 +1,5 @@ +package com.red_velvet.marvel.domain.util + +import com.red_velvet.marvel.data.remote.dto.ThumbnailDto + +fun ThumbnailDto.toUrl() = this.path + "." + this.extension From 130af83e9158a1b1304e96bc71aca2aecdecb9e0 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:13:21 +0300 Subject: [PATCH 22/41] add hilt dependencies --- app/build.gradle.kts | 11 +++++++++-- build.gradle.kts | 1 + 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d019128b..fc47faa6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -5,6 +5,7 @@ plugins { id("org.jetbrains.kotlin.android") id("kotlin-kapt") id("androidx.navigation.safeargs") + id("com.google.dagger.hilt.android") } android { @@ -62,6 +63,9 @@ android { buildFeatures { buildConfig = true } + kapt { + correctErrorTypes = true + } } dependencies { @@ -84,6 +88,7 @@ dependencies { // LiveData implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion") + implementation("androidx.lifecycle:lifecycle-reactivestreams-ktx:$lifecycleVersion") // Retrofit implementation("com.squareup.retrofit2:retrofit:2.9.0") @@ -121,8 +126,10 @@ dependencies { implementation("androidx.room:room-runtime:$roomVersion") kapt("androidx.room:room-compiler:$roomVersion") implementation("androidx.room:room-ktx:$roomVersion") + implementation("androidx.room:room-rxjava3:$roomVersion") // Dagger Hilt - implementation("com.google.dagger:hilt-android:2.42") - kapt("com.google.dagger:hilt-android-compiler:2.42") + val hiltVersion = "2.44" + implementation("com.google.dagger:hilt-android:$hiltVersion") + kapt("com.google.dagger:hilt-android-compiler:$hiltVersion") } \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index 5c58a33b..c27a1c6d 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,6 +3,7 @@ plugins { id("com.android.application") version "8.0.0" apply false id("com.android.library") version "8.0.0" apply false id("org.jetbrains.kotlin.android") version "1.8.0" apply false + id("com.google.dagger.hilt.android") version "2.44" apply false } buildscript { repositories { From 0875b8e854608a334e68a29d56871b30afa6e8ad Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:16:23 +0300 Subject: [PATCH 23/41] inject marvel repository in all viewmodels --- .../characterDetails/CharacterDetailsViewModel.kt | 13 ++++++------- .../marvel/ui/characters/CharactersViewModel.kt | 13 ++++++------- .../marvel/ui/comicDetails/ComicDetailsViewModel.kt | 13 ++++++------- .../red_velvet/marvel/ui/events/EventsViewModel.kt | 12 +++++++----- .../red_velvet/marvel/ui/series/SeriesViewModel.kt | 11 ++++++----- .../ui/seriesDetails/SeriesDetailsViewModel.kt | 11 ++++++----- .../marvel/ui/stories/StoriesViewModel.kt | 12 +++++++----- .../marvel/ui/storyDetails/StoryDetailsViewModel.kt | 13 ++++++------- 8 files changed, 50 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsViewModel.kt index 8ab4e7d5..93baa35b 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsViewModel.kt @@ -2,23 +2,22 @@ package com.red_velvet.marvel.ui.characterDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.remote.dto.CharacterDto import com.red_velvet.marvel.data.remote.dto.ComicDto import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.data.repository.MarvelRepository -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.SingleEvent import com.red_velvet.marvel.ui.utils.State +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject -class CharacterDetailsViewModel : BaseViewModel(), SeriesInteractionListener, +@HiltViewModel +class CharacterDetailsViewModel @Inject constructor( + private val repository: MarvelRepository, +) : BaseViewModel(), SeriesInteractionListener, ComicsInteractionListener { - private val repository: MarvelRepository by lazy { - MarvelRepositoryImpl(RetrofitClient.apiService) - } - private val _characterDetails: MutableLiveData>> = MutableLiveData() val characterDetails: LiveData>> = _characterDetails diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersViewModel.kt index 7a21483c..d729a109 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersViewModel.kt @@ -2,27 +2,26 @@ package com.red_velvet.marvel.ui.characters import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.remote.dto.CharacterDto import com.red_velvet.marvel.data.repository.MarvelRepository -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.SingleEvent import com.red_velvet.marvel.ui.utils.State +import dagger.hilt.android.lifecycle.HiltViewModel import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.kotlin.addTo import java.util.concurrent.TimeUnit +import javax.inject.Inject -class CharactersViewModel : BaseViewModel(), CharacterDetailsInteractionListener { +@HiltViewModel +class CharactersViewModel @Inject constructor( + private val repository: MarvelRepository, +) : BaseViewModel(), CharacterDetailsInteractionListener { private val _characters: MutableLiveData>> = MutableLiveData() val characters: LiveData>> = _characters val searchQuery = MutableLiveData() - private val repository: MarvelRepository by lazy { - MarvelRepositoryImpl(RetrofitClient.apiService) - } - private val _navigationToCharacterDetails: MutableLiveData> = MutableLiveData() val navigationToCharacterDetails: LiveData> = _navigationToCharacterDetails diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsViewModel.kt index 1896b3b2..502fa451 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsViewModel.kt @@ -2,17 +2,20 @@ package com.red_velvet.marvel.ui.comicDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.remote.dto.CharacterDto import com.red_velvet.marvel.data.remote.dto.ComicDto import com.red_velvet.marvel.data.remote.dto.CreatorDto import com.red_velvet.marvel.data.repository.MarvelRepository -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.SingleEvent import com.red_velvet.marvel.ui.utils.State +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject -class ComicDetailsViewModel : BaseViewModel(), ComicDetailsCreatorListenerInteraction, +@HiltViewModel +class ComicDetailsViewModel @Inject constructor( + private val repository: MarvelRepository, +) : BaseViewModel(), ComicDetailsCreatorListenerInteraction, ComicDetailsCharacterListenerInteraction { private val _comicsDetails: MutableLiveData>> = MutableLiveData() @@ -24,10 +27,6 @@ class ComicDetailsViewModel : BaseViewModel(), ComicDetailsCreatorListenerIntera private val _characters: MutableLiveData>> = MutableLiveData() val characters: LiveData>> = _characters - private val repository: MarvelRepository by lazy { - MarvelRepositoryImpl(RetrofitClient.apiService) - } - private val _navigationToCharacterDetails: MutableLiveData> = MutableLiveData() val navigationToCharacterDetails: LiveData> = _navigationToCharacterDetails diff --git a/app/src/main/java/com/red_velvet/marvel/ui/events/EventsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/events/EventsViewModel.kt index 6b20b346..1debf1c0 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/events/EventsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/events/EventsViewModel.kt @@ -2,19 +2,21 @@ package com.red_velvet.marvel.ui.events import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.remote.dto.EventDto -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl +import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.SingleEvent import com.red_velvet.marvel.ui.utils.State +import dagger.hilt.android.lifecycle.HiltViewModel import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.kotlin.addTo import java.util.concurrent.TimeUnit +import javax.inject.Inject -class EventsViewModel : BaseViewModel(), EventsInteractionListener { - - private val repository by lazy { MarvelRepositoryImpl(RetrofitClient.apiService) } +@HiltViewModel +class EventsViewModel @Inject constructor( + private val repository: MarvelRepository +) : BaseViewModel(), EventsInteractionListener { private val _events = MutableLiveData>>() val events: LiveData>> = _events diff --git a/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesViewModel.kt index 91b62d5a..5619c011 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesViewModel.kt @@ -3,19 +3,22 @@ package com.red_velvet.marvel.ui.series import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.data.repository.MarvelRepository -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.SingleEvent import com.red_velvet.marvel.ui.utils.State +import dagger.hilt.android.lifecycle.HiltViewModel import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.kotlin.addTo import java.util.concurrent.TimeUnit +import javax.inject.Inject -class SeriesViewModel : BaseViewModel(), SeriesInteractionListener { +@HiltViewModel +class SeriesViewModel @Inject constructor( + private val repository: MarvelRepository +) : BaseViewModel(), SeriesInteractionListener { private val _navigationToSeriesDetails: MutableLiveData> = MutableLiveData() val navigationToSeriesDetails: LiveData> = _navigationToSeriesDetails @@ -23,8 +26,6 @@ class SeriesViewModel : BaseViewModel(), SeriesInteractionListener { private val _series: MutableLiveData>> = MutableLiveData() val series: LiveData>> = _series - val repository: MarvelRepository by lazy { MarvelRepositoryImpl(RetrofitClient.apiService) } - val searchQuery = MutableLiveData() init { diff --git a/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsViewModel.kt index ae8185d6..cfa3f6bc 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsViewModel.kt @@ -2,17 +2,18 @@ package com.red_velvet.marvel.ui.seriesDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.remote.dto.CreatorDto import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.data.repository.MarvelRepository -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.State +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject -class SeriesDetailsViewModel : BaseViewModel(), CreatorListenerInteraction { - - private val repository: MarvelRepository = MarvelRepositoryImpl(RetrofitClient.apiService) +@HiltViewModel +class SeriesDetailsViewModel @Inject constructor( + private val repository: MarvelRepository +) : BaseViewModel(), CreatorListenerInteraction { private val _series: MutableLiveData>> = MutableLiveData() val series: LiveData>> = _series diff --git a/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesViewModel.kt index 4ee414a7..b18a3ba8 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesViewModel.kt @@ -2,17 +2,19 @@ package com.red_velvet.marvel.ui.stories import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.remote.dto.StoryDto -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl +import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.SingleEvent import com.red_velvet.marvel.ui.utils.State +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject -class StoriesViewModel : BaseViewModel(), StoriesInteractionListener { - - private val repository by lazy { MarvelRepositoryImpl(RetrofitClient.apiService) } +@HiltViewModel +class StoriesViewModel @Inject constructor( + private val repository: MarvelRepository +) : BaseViewModel(), StoriesInteractionListener { private val _navigationToStoryDetails: MutableLiveData> = MutableLiveData() val navigationToStoryDetails: LiveData> = _navigationToStoryDetails diff --git a/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsViewModel.kt index 8ba33ede..66f42c05 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsViewModel.kt @@ -2,16 +2,19 @@ package com.red_velvet.marvel.ui.storyDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.remote.dto.ComicDto import com.red_velvet.marvel.data.remote.dto.CreatorDto import com.red_velvet.marvel.data.remote.dto.StoryDto import com.red_velvet.marvel.data.repository.MarvelRepository -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.State +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject -class StoryDetailsViewModel : BaseViewModel(), StoryCreatorInteractionListener { +@HiltViewModel +class StoryDetailsViewModel @Inject constructor( + private val repository: MarvelRepository +) : BaseViewModel(), StoryCreatorInteractionListener { private val _story: MutableLiveData>> = MutableLiveData() val story: LiveData>> = _story @@ -22,10 +25,6 @@ class StoryDetailsViewModel : BaseViewModel(), StoryCreatorInteractionListener { private val _creators: MutableLiveData>> = MutableLiveData() val creators: LiveData>> = _creators - private val repository: MarvelRepository by lazy { - MarvelRepositoryImpl(RetrofitClient.apiService) - } - fun loadStoryDetails(storyId: Int) { getStoryById(storyId) getComicsByStoryId(storyId) From f74870f993f048e05635c27afadf1acc0c9bc4f9 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:19:59 +0300 Subject: [PATCH 24/41] create entry points for all fragments --- .../com/red_velvet/marvel/ui/MainActivity.kt | 2 ++ .../CharacterDetailsFragment.kt | 2 ++ .../marvel/ui/characters/CharactersFragment.kt | 2 ++ .../ui/comicDetails/ComicDetailsFragment.kt | 2 ++ .../ui/eventDetails/EventDetailsFragment.kt | 3 ++- .../marvel/ui/events/EventsFragment.kt | 3 ++- .../red_velvet/marvel/ui/home/HomeFragment.kt | 17 +++++++++-------- .../marvel/ui/series/SeriesFragment.kt | 2 ++ .../ui/seriesDetails/SeriesDetailsFragment.kt | 2 ++ .../marvel/ui/stories/StoriesFragment.kt | 2 ++ .../ui/storyDetails/StoryDetailsFragment.kt | 3 ++- 11 files changed, 29 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/red_velvet/marvel/ui/MainActivity.kt b/app/src/main/java/com/red_velvet/marvel/ui/MainActivity.kt index 63a8f0cf..f2aa3594 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/MainActivity.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/MainActivity.kt @@ -10,7 +10,9 @@ import com.red_velvet.marvel.databinding.ActivityMainBinding import com.red_velvet.marvel.ui.base.BaseActivity import com.red_velvet.marvel.ui.utils.hideView import com.red_velvet.marvel.ui.utils.showView +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class MainActivity : BaseActivity() { override val LOG_TAG: String = "MainActivity" diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsFragment.kt index 617a9cc9..db304d0d 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsFragment.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsFragment.kt @@ -8,7 +8,9 @@ import androidx.navigation.fragment.navArgs import com.red_velvet.marvel.R import com.red_velvet.marvel.databinding.FragmentCharacterBinding import com.red_velvet.marvel.ui.base.BaseFragment +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class CharacterDetailsFragment : BaseFragment() { diff --git a/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersFragment.kt index 74632d43..74b98189 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersFragment.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersFragment.kt @@ -7,7 +7,9 @@ import androidx.navigation.fragment.findNavController import com.red_velvet.marvel.R import com.red_velvet.marvel.databinding.FragmentCharactersBinding import com.red_velvet.marvel.ui.base.BaseFragment +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class CharactersFragment : BaseFragment() { override val layoutIdFragment = R.layout.fragment_characters diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsFragment.kt index 37d7fb5c..a9276055 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsFragment.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsFragment.kt @@ -8,7 +8,9 @@ import androidx.navigation.fragment.navArgs import com.red_velvet.marvel.R import com.red_velvet.marvel.databinding.FragmentComicDetailsBinding import com.red_velvet.marvel.ui.base.BaseFragment +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class ComicDetailsFragment : BaseFragment() { override val layoutIdFragment = R.layout.fragment_comic_details diff --git a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailsFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailsFragment.kt index d5f741c7..d18ca3fa 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailsFragment.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailsFragment.kt @@ -9,8 +9,9 @@ import androidx.navigation.fragment.navArgs import com.red_velvet.marvel.R import com.red_velvet.marvel.databinding.FragmentEventDetailsBinding import com.red_velvet.marvel.ui.base.BaseFragment +import dagger.hilt.android.AndroidEntryPoint - +@AndroidEntryPoint class EventDetailsFragment : BaseFragment() { override val layoutIdFragment = R.layout.fragment_event_details diff --git a/app/src/main/java/com/red_velvet/marvel/ui/events/EventsFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/events/EventsFragment.kt index f7415ee9..bec41fdc 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/events/EventsFragment.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/events/EventsFragment.kt @@ -8,8 +8,9 @@ import androidx.navigation.fragment.findNavController import com.red_velvet.marvel.R import com.red_velvet.marvel.databinding.FragmentEventsBinding import com.red_velvet.marvel.ui.base.BaseFragment +import dagger.hilt.android.AndroidEntryPoint - +@AndroidEntryPoint class EventsFragment : BaseFragment() { override val layoutIdFragment: Int = R.layout.fragment_events diff --git a/app/src/main/java/com/red_velvet/marvel/ui/home/HomeFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/home/HomeFragment.kt index ef9a287e..fefd082b 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/home/HomeFragment.kt @@ -10,7 +10,9 @@ import com.red_velvet.marvel.ui.base.BaseFragment import com.red_velvet.marvel.ui.home.adapter.CharactersAdapter import com.red_velvet.marvel.ui.home.adapter.ComicsAdapter import com.red_velvet.marvel.ui.home.adapter.EventsAdapter +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class HomeFragment : BaseFragment() { override val layoutIdFragment = R.layout.fragment_home @@ -28,13 +30,13 @@ class HomeFragment : BaseFragment() { recyclerChars.adapter = charsAdapter recyclerEvents.adapter = eventsAdapter } - binding.textViewError.setOnClickListener { - viewModel.apply { - getCharacters() - getComics() - getEvents() - } - } +// binding.textViewError.setOnClickListener { +// viewModel.apply { +//// getCharacters() +// getComics() +//// getEvents() +// } +// } initNavigateToComicDetails() } @@ -63,5 +65,4 @@ class HomeFragment : BaseFragment() { } } } - } \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesFragment.kt index 64f55550..27a5b437 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesFragment.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesFragment.kt @@ -7,7 +7,9 @@ import androidx.navigation.fragment.findNavController import com.red_velvet.marvel.R import com.red_velvet.marvel.databinding.FragmentSeriesBinding import com.red_velvet.marvel.ui.base.BaseFragment +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class SeriesFragment : BaseFragment() { override val layoutIdFragment = R.layout.fragment_series diff --git a/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsFragment.kt index ac4f434a..9bc2f046 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsFragment.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsFragment.kt @@ -7,7 +7,9 @@ import androidx.navigation.fragment.navArgs import com.red_velvet.marvel.R import com.red_velvet.marvel.databinding.FragmentSeriesDetailsBinding import com.red_velvet.marvel.ui.base.BaseFragment +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class SeriesDetailsFragment : BaseFragment() { override val layoutIdFragment = R.layout.fragment_series_details diff --git a/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesFragment.kt index 4a8d5061..d74bd5e7 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesFragment.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesFragment.kt @@ -7,7 +7,9 @@ import androidx.navigation.fragment.findNavController import com.red_velvet.marvel.R import com.red_velvet.marvel.databinding.FragmentStoriesBinding import com.red_velvet.marvel.ui.base.BaseFragment +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class StoriesFragment : BaseFragment() { override val layoutIdFragment = R.layout.fragment_stories diff --git a/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsFragment.kt index 96658c34..b3f1460d 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsFragment.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsFragment.kt @@ -7,8 +7,9 @@ import androidx.navigation.fragment.navArgs import com.red_velvet.marvel.R import com.red_velvet.marvel.databinding.FragmentStoryBinding import com.red_velvet.marvel.ui.base.BaseFragment +import dagger.hilt.android.AndroidEntryPoint - +@AndroidEntryPoint class StoryDetailsFragment : BaseFragment() { override val layoutIdFragment: Int = R.layout.fragment_story From 50f48248eeb53a154bd5591312e9abc104c2bedb Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:20:54 +0300 Subject: [PATCH 25/41] inject repository in event details viewmodel --- .../marvel/ui/eventDetails/EventDetailViewModel.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailViewModel.kt index 9f98063a..58aec4d8 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/eventDetails/EventDetailViewModel.kt @@ -2,20 +2,22 @@ package com.red_velvet.marvel.ui.eventDetails import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.remote.dto.CharacterDto import com.red_velvet.marvel.data.remote.dto.CreatorDto import com.red_velvet.marvel.data.remote.dto.EventDto -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl +import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.SingleEvent import com.red_velvet.marvel.ui.utils.State +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject -class EventDetailViewModel : BaseViewModel(), CharactersInteractionListener, +@HiltViewModel +class EventDetailViewModel @Inject constructor( + private val repository: MarvelRepository +) : BaseViewModel(), CharactersInteractionListener, CreatorsInteractionListener { - private val repository by lazy { MarvelRepositoryImpl(RetrofitClient.apiService) } - private var _event: MutableLiveData>> = MutableLiveData() val event: MutableLiveData>> = _event From e6edbaa7d006ac491e2a2d0cf5121cb0201eba65 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:21:27 +0300 Subject: [PATCH 26/41] remove unneeded files --- .../marvel/data/remote/RetrofitClient.kt | 25 ------------------- .../marvel/ui/comics/ComicAdapter.kt | 0 .../marvel/ui/comics/ComicsCollection.kt | 0 .../marvel/ui/comics/ComicsViewModel.kt | 0 4 files changed, 25 deletions(-) delete mode 100644 app/src/main/java/com/red_velvet/marvel/data/remote/RetrofitClient.kt delete mode 100644 app/src/main/java/com/red_velvet/marvel/ui/comics/ComicAdapter.kt delete mode 100644 app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsCollection.kt delete mode 100644 app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsViewModel.kt diff --git a/app/src/main/java/com/red_velvet/marvel/data/remote/RetrofitClient.kt b/app/src/main/java/com/red_velvet/marvel/data/remote/RetrofitClient.kt deleted file mode 100644 index 3faa68e3..00000000 --- a/app/src/main/java/com/red_velvet/marvel/data/remote/RetrofitClient.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.red_velvet.marvel.data.remote - -import com.red_velvet.marvel.data.remote.service.MarvelService -import okhttp3.OkHttpClient -import retrofit2.Retrofit -import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory -import retrofit2.converter.gson.GsonConverterFactory - -object RetrofitClient { - - private val client = - OkHttpClient().newBuilder().addInterceptor(AuthorizationInterceptor()).build() - - private const val BASE_URL = "http://gateway.marvel.com/v1/public/" - - private val retrofit = Retrofit.Builder() - .baseUrl(BASE_URL) - .client(client) - .addConverterFactory(GsonConverterFactory.create()) - .addCallAdapterFactory(RxJava3CallAdapterFactory.create()) - .build() - - val apiService: MarvelService = retrofit.create(MarvelService::class.java) - -} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicAdapter.kt deleted file mode 100644 index e69de29b..00000000 diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsCollection.kt b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsCollection.kt deleted file mode 100644 index e69de29b..00000000 diff --git a/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/comics/ComicsViewModel.kt deleted file mode 100644 index e69de29b..00000000 From 3397ba2878342bb705c3196f4db6ae730ac7558a Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:22:23 +0300 Subject: [PATCH 27/41] create image url binding adapter without using thumbnail --- .../com/red_velvet/marvel/ui/utils/BindingAdapters.kt | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/app/src/main/java/com/red_velvet/marvel/ui/utils/BindingAdapters.kt b/app/src/main/java/com/red_velvet/marvel/ui/utils/BindingAdapters.kt index d4951869..8483eb59 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/utils/BindingAdapters.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/utils/BindingAdapters.kt @@ -7,6 +7,7 @@ import androidx.recyclerview.widget.RecyclerView import com.bumptech.glide.Glide import com.red_velvet.marvel.R import com.red_velvet.marvel.data.remote.dto.ThumbnailDto +import com.red_velvet.marvel.domain.util.toUrl import com.red_velvet.marvel.ui.base.BaseAdapter @BindingAdapter(value = ["app:showWhenLoading"]) @@ -45,6 +46,15 @@ fun loadImage(view: ImageView, thumbnail: ThumbnailDto?) { .into(view) } +@BindingAdapter(value = ["app:imageUrl"]) +fun loadImage(view: ImageView, imageUrl: String?) { + Glide.with(view).load(imageUrl) + .thumbnail(Glide.with(view).load(R.raw.loading)) + .fitCenter() + .centerCrop() + .into(view) +} + @BindingAdapter(value = ["app:setItems"]) fun setRecyclerItems(view: RecyclerView, items: List?) { if (items != null) { From 492b93e9cf1d110e1d2f7dbe0b63b04e08979cd8 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:23:09 +0300 Subject: [PATCH 28/41] use models instated of dto in home --- .../com/red_velvet/marvel/ui/home/adapter/CharactersAdapter.kt | 2 +- .../java/com/red_velvet/marvel/ui/home/adapter/ComicsAdapter.kt | 2 +- .../java/com/red_velvet/marvel/ui/home/adapter/EventsAdapter.kt | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/red_velvet/marvel/ui/home/adapter/CharactersAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/home/adapter/CharactersAdapter.kt index 87d722b2..3c13cc67 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/home/adapter/CharactersAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/home/adapter/CharactersAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.home.adapter import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Character +import com.red_velvet.marvel.domain.model.Character import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.home.HomeInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/home/adapter/ComicsAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/home/adapter/ComicsAdapter.kt index e420717d..c0d4cda5 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/home/adapter/ComicsAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/home/adapter/ComicsAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.home.adapter import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Comic +import com.red_velvet.marvel.domain.model.Comic import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.home.HomeInteractionListener diff --git a/app/src/main/java/com/red_velvet/marvel/ui/home/adapter/EventsAdapter.kt b/app/src/main/java/com/red_velvet/marvel/ui/home/adapter/EventsAdapter.kt index c19f884d..d02af2ba 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/home/adapter/EventsAdapter.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/home/adapter/EventsAdapter.kt @@ -1,7 +1,7 @@ package com.red_velvet.marvel.ui.home.adapter import com.red_velvet.marvel.R -import com.red_velvet.marvel.data.model.Event +import com.red_velvet.marvel.domain.model.Event import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.home.HomeInteractionListener From 71aeeae9a2026f518001bc30e8a974e5934db7e4 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:24:19 +0300 Subject: [PATCH 29/41] remove to url extension fun from ui util and move it to domain util --- app/src/main/java/com/red_velvet/marvel/ui/utils/extensions.kt | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/src/main/java/com/red_velvet/marvel/ui/utils/extensions.kt b/app/src/main/java/com/red_velvet/marvel/ui/utils/extensions.kt index 0683e6a1..a14643b7 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/utils/extensions.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/utils/extensions.kt @@ -1,9 +1,6 @@ package com.red_velvet.marvel.ui.utils import android.view.View -import com.red_velvet.marvel.data.remote.dto.ThumbnailDto - -fun ThumbnailDto.toUrl() = this.path + "." + this.extension fun View.hideView() { visibility = View.GONE From e6a1ea27a04afc1ed1987eed8f43bd13d553323d Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 01:28:46 +0300 Subject: [PATCH 30/41] edit home ui and remove loading, error views --- app/src/main/res/layout/fragment_home.xml | 52 +++---------------- .../main/res/layout/item_home_character.xml | 4 +- app/src/main/res/layout/item_home_event.xml | 4 +- 3 files changed, 10 insertions(+), 50 deletions(-) diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 79d2885e..446c4f28 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -35,7 +35,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" - app:showWhenSuccess="@{viewModel.comicsLiveData}" /> + app:showWhenData="@{viewModel.comicsLiveData.empty}" /> + app:showWhenData="@{viewModel.comicsLiveData.empty}" /> - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_home_character.xml b/app/src/main/res/layout/item_home_character.xml index 7e6ae166..714e2971 100644 --- a/app/src/main/res/layout/item_home_character.xml +++ b/app/src/main/res/layout/item_home_character.xml @@ -7,7 +7,7 @@ + type="com.red_velvet.marvel.domain.model.Character" /> + type="com.red_velvet.marvel.domain.model.Event" /> Date: Sat, 20 May 2023 01:35:03 +0300 Subject: [PATCH 31/41] inject repository and clear home viewmodel --- .../marvel/ui/home/HomeViewModel.kt | 82 +++---------------- 1 file changed, 11 insertions(+), 71 deletions(-) diff --git a/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt index a009af1b..494b999f 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt @@ -2,21 +2,20 @@ package com.red_velvet.marvel.ui.home import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData -import com.red_velvet.marvel.data.model.Character -import com.red_velvet.marvel.data.model.Comic -import com.red_velvet.marvel.data.model.Event -import com.red_velvet.marvel.data.remote.RetrofitClient import com.red_velvet.marvel.data.repository.MarvelRepository -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl +import com.red_velvet.marvel.domain.model.Character +import com.red_velvet.marvel.domain.model.Comic +import com.red_velvet.marvel.domain.model.Event import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.SingleEvent import com.red_velvet.marvel.ui.utils.State +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject -class HomeViewModel : BaseViewModel(), HomeInteractionListener { - - private val repository: MarvelRepository by lazy { - MarvelRepositoryImpl(RetrofitClient.apiService) - } +@HiltViewModel +class HomeViewModel @Inject constructor( + private val repository: MarvelRepository, +) : BaseViewModel(), HomeInteractionListener { private val _navigationToComicDetails: MutableLiveData> = MutableLiveData() val navigationToComicDetails: LiveData> = _navigationToComicDetails @@ -27,8 +26,8 @@ class HomeViewModel : BaseViewModel(), HomeInteractionListener { private val _navigationToCharacterDetails: MutableLiveData> = MutableLiveData() val navigationToCharacterDetails: LiveData> = _navigationToCharacterDetails - private val _comics = MutableLiveData>>(State.Loading) - val comicsLiveData: LiveData>> = _comics + private val _comics = MutableLiveData>() + val comicsLiveData: LiveData> = _comics private val _events = MutableLiveData>>(State.Loading) val eventLiveData: LiveData>> = _events @@ -36,61 +35,6 @@ class HomeViewModel : BaseViewModel(), HomeInteractionListener { private val _characters = MutableLiveData>>(State.Loading) val characterLiveData: LiveData>> = _characters - - init { - getComics() - getEvents() - getCharacters() - } - - fun getComics() { - bindStateUpdates( - repository.getAllComics(), - onError = ::onGetComicsFailure, - onNext = ::onGetComicsState - ) - } - - private fun onGetComicsFailure(throwable: Throwable) { - _comics.postValue(State.Failed(throwable.message ?: UNKNOWN_ERROR)) - } - - private fun onGetComicsState(state: State>) { - _comics.postValue(state) - } - - fun getEvents() { - bindStateUpdates( - repository.getAllEvents(), - onError = ::onGetEventsFailure, - onNext = ::onGetEventsState - ) - } - - private fun onGetEventsFailure(throwable: Throwable) { - _events.postValue(State.Failed(throwable.message ?: UNKNOWN_ERROR)) - } - - private fun onGetEventsState(state: State>) { - _events.postValue(state) - } - - fun getCharacters() { - bindStateUpdates( - repository.getAllCharacters(), - onError = ::onGetCharactersFailure, - onNext = ::onGetCharactersState - ) - } - - private fun onGetCharactersFailure(throwable: Throwable) { - _characters.postValue(State.Failed(throwable.message ?: UNKNOWN_ERROR)) - } - - private fun onGetCharactersState(state: State>) { - _characters.postValue(state) - } - override fun doOnComicClicked(comicId: Int) { _navigationToComicDetails.postValue(SingleEvent(comicId)) } @@ -102,8 +46,4 @@ class HomeViewModel : BaseViewModel(), HomeInteractionListener { override fun doOnCharacterClicked(charId: Int) { _navigationToCharacterDetails.postValue(SingleEvent(charId)) } - - companion object { - private const val UNKNOWN_ERROR = "Unknown error" - } } \ No newline at end of file From e2168c9d45ff51369d31759e53209b5be4b7a2c2 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 04:49:42 +0300 Subject: [PATCH 32/41] inject mappers --- .../main/java/com/red_velvet/marvel/di/RepositoryModule.kt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/java/com/red_velvet/marvel/di/RepositoryModule.kt b/app/src/main/java/com/red_velvet/marvel/di/RepositoryModule.kt index a0dc3447..9febbed5 100644 --- a/app/src/main/java/com/red_velvet/marvel/di/RepositoryModule.kt +++ b/app/src/main/java/com/red_velvet/marvel/di/RepositoryModule.kt @@ -21,10 +21,14 @@ object RepositoryModule { fun provideMarvelRepository( marvelService: MarvelService, marvelDatabase: MarvelDatabase, + comicsEntityMapper: ComicEntityMapper, + localComicMapper: LocalComicMapper ): MarvelRepository { return MarvelRepositoryImpl( marvelService, marvelDatabase, + comicsEntityMapper, + localComicMapper, ) } From c693e3eef39ccce60c49ae67f348958ae3002415 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 04:50:16 +0300 Subject: [PATCH 33/41] edit comic dao --- .../red_velvet/marvel/data/local/database/dao/ComicDao.kt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/ComicDao.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/ComicDao.kt index d1b56fa0..203bed05 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/ComicDao.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/ComicDao.kt @@ -13,15 +13,15 @@ import io.reactivex.rxjava3.core.Observable interface ComicDao { @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insertComic(comic: ComicEntity): Completable + fun insert(comic: ComicEntity) @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insertAllComics(comics: List): Completable + fun insertAll(comics: List) @Query("SELECT * FROM COMIC_TABLE") - fun getAllComics(): Observable> + fun getAll(): Observable> @Delete - fun deleteComic(comic: ComicEntity): Completable + fun delete(comic: ComicEntity): Completable } \ No newline at end of file From c9cbf5b61e8460a26b8834622e0ce3bacf363547 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 04:50:34 +0300 Subject: [PATCH 34/41] edit event dao --- .../red_velvet/marvel/data/local/database/dao/EventDao.kt | 6 ------ 1 file changed, 6 deletions(-) diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/EventDao.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/EventDao.kt index 6511fb7c..1b03790e 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/EventDao.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/EventDao.kt @@ -1,19 +1,13 @@ package com.red_velvet.marvel.data.local.database.dao -import android.database.Observable import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy -import androidx.room.Query import com.red_velvet.marvel.data.local.database.entity.EventEntity import io.reactivex.rxjava3.core.Completable @Dao interface EventDao { - @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertEvent(event: EventEntity): Completable - - @Query("SELECT * FROM EVENT_TABLE") - fun getAllEvents(): Observable> } \ No newline at end of file From 4cb12d61653cd5c7610a2aebc031ffd87c2f4dd4 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 04:51:09 +0300 Subject: [PATCH 35/41] fix comic item type --- app/src/main/res/layout/item_home_comic.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/res/layout/item_home_comic.xml b/app/src/main/res/layout/item_home_comic.xml index d0ade86d..3ec5adc4 100644 --- a/app/src/main/res/layout/item_home_comic.xml +++ b/app/src/main/res/layout/item_home_comic.xml @@ -7,7 +7,7 @@ + type="com.red_velvet.marvel.domain.model.Comic" /> Date: Sat, 20 May 2023 05:26:23 +0300 Subject: [PATCH 36/41] complete comics cache --- .../data/repository/MarvelRepository.kt | 9 ++++++ .../data/repository/MarvelRepositoryImpl.kt | 28 +++++++++++++++++++ .../marvel/ui/base/BaseViewModel.kt | 19 +++++++++++++ .../marvel/ui/home/HomeViewModel.kt | 22 +++++++++++++++ 4 files changed, 78 insertions(+) diff --git a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt index fcd64a07..f6383613 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt @@ -7,7 +7,9 @@ import com.red_velvet.marvel.data.remote.dto.CreatorDto import com.red_velvet.marvel.data.remote.dto.EventDto import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.data.remote.dto.StoryDto +import com.red_velvet.marvel.domain.model.Comic import com.red_velvet.marvel.ui.utils.State +import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Observable interface MarvelRepository { @@ -55,5 +57,12 @@ interface MarvelRepository { fun getCreatorsBySeriesId(seriesId: Int): Observable>> fun getSeriesByCharacterId(characterId: Int): Observable>> + + fun refreshComics(): Completable + + fun getComics( + titleStartsWith: String? = null, + contains: String? = null + ): Observable> } diff --git a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt index 80e2a8e1..b28291ec 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt @@ -2,6 +2,7 @@ package com.red_velvet.marvel.data.repository import com.red_velvet.marvel.data.local.database.MarvelDatabase +import com.red_velvet.marvel.data.local.mapper.ComicEntityMapper import com.red_velvet.marvel.data.remote.dto.BaseResponse import com.red_velvet.marvel.data.remote.dto.CharacterDto import com.red_velvet.marvel.data.remote.dto.ComicDto @@ -10,15 +11,21 @@ import com.red_velvet.marvel.data.remote.dto.EventDto import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.data.remote.dto.StoryDto import com.red_velvet.marvel.data.remote.service.MarvelService +import com.red_velvet.marvel.domain.mapper.LocalComicMapper +import com.red_velvet.marvel.domain.model.Comic import com.red_velvet.marvel.ui.utils.State +import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Single +import io.reactivex.rxjava3.schedulers.Schedulers import retrofit2.Response import javax.inject.Inject class MarvelRepositoryImpl @Inject constructor( private val marvelServiceImpl: MarvelService, private val marvelDatabase: MarvelDatabase, + private val ComicEntityMapper: ComicEntityMapper, + private val localComicMapper: LocalComicMapper, ) : MarvelRepository { override fun getAllComics( @@ -119,4 +126,25 @@ class MarvelRepositoryImpl @Inject constructor( .onErrorReturn { State.Failed(it.message ?: "Unknown error") } .startWith(Observable.just(State.Loading)) } + + override fun refreshComics(): Completable { + return marvelServiceImpl.getAllComics() + .flatMapCompletable { responseWrapper -> + val comics = responseWrapper.body()?.body?.results + val comicsEntities = comics?.map { ComicEntityMapper.map(it) } + comicsEntities?.let { + Completable.fromAction { marvelDatabase.comicDao().insertAll(it) } + .subscribeOn(Schedulers.io()) + } ?: Completable.complete() + } + .onErrorResumeNext { + Completable.complete() + } + } + + override fun getComics(titleStartsWith: String?, contains: String?): Observable> { + return marvelDatabase.comicDao() + .getAll() + .map { comics -> comics.map { localComicMapper.map(it) } } + } } \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/ui/base/BaseViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/base/BaseViewModel.kt index 4ba83050..2fe6973c 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/base/BaseViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/base/BaseViewModel.kt @@ -37,5 +37,24 @@ abstract class BaseViewModel : ViewModel() { } } + fun bindObservable( + stateObservable: Observable, + onError: (Throwable) -> Unit, + onNext: (T) -> Unit + ) { + try { + stateObservable + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribeBy( + onError = onError, + onNext = onNext, + ) + .addTo(compositeDisposable) + } catch (e: Exception) { + onError(e) + } + } + } diff --git a/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt index 494b999f..b6480466 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt @@ -35,6 +35,28 @@ class HomeViewModel @Inject constructor( private val _characters = MutableLiveData>>(State.Loading) val characterLiveData: LiveData>> = _characters + init { + repository.refreshComics() + getComics() + } + + private fun getComics() { + bindObservable( + repository.getComics(), + ::onComicsError, + ::onComicsReceived, + ) + } + + private fun onComicsReceived(comics: List) { + _comics.postValue(comics) + } + + private fun onComicsError(throwable: Throwable) { + _comics.postValue(emptyList()) + } + + override fun doOnComicClicked(comicId: Int) { _navigationToComicDetails.postValue(SingleEvent(comicId)) } From ddd7c2a7b1331673e48804ae25258e92f40d98b3 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 06:01:32 +0300 Subject: [PATCH 37/41] complete cache for home screen --- .../data/local/database/dao/CharacterDao.kt | 8 ++- .../data/local/database/dao/EventDao.kt | 11 +++- .../data/repository/MarvelRepository.kt | 13 +++- .../data/repository/MarvelRepositoryImpl.kt | 63 ++++++++++++++++++- .../red_velvet/marvel/di/RepositoryModule.kt | 38 ++++++++++- .../domain/mapper/LocalCharacterMapper.kt | 14 +++++ .../marvel/domain/mapper/LocalEventMapper.kt | 14 +++++ .../marvel/ui/home/HomeViewModel.kt | 52 ++++++++++++--- app/src/main/res/layout/fragment_home.xml | 13 ++-- 9 files changed, 203 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/com/red_velvet/marvel/domain/mapper/LocalCharacterMapper.kt create mode 100644 app/src/main/java/com/red_velvet/marvel/domain/mapper/LocalEventMapper.kt diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/CharacterDao.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/CharacterDao.kt index d8b2e088..c717ce5e 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/CharacterDao.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/CharacterDao.kt @@ -5,15 +5,17 @@ import androidx.room.Insert import androidx.room.OnConflictStrategy import androidx.room.Query import com.red_velvet.marvel.data.local.database.entity.CharacterEntity -import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Observable @Dao interface CharacterDao { @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insertCharacter(character: CharacterEntity): Completable + fun insert(character: CharacterEntity) + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertAll(characters: List) @Query("SELECT * FROM CHARACTER_TABLE") - fun getAllCharacters(): Observable> + fun getAll(): Observable> } \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/EventDao.kt b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/EventDao.kt index 1b03790e..846b2bb5 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/EventDao.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/local/database/dao/EventDao.kt @@ -3,11 +3,18 @@ package com.red_velvet.marvel.data.local.database.dao import androidx.room.Dao import androidx.room.Insert import androidx.room.OnConflictStrategy +import androidx.room.Query import com.red_velvet.marvel.data.local.database.entity.EventEntity -import io.reactivex.rxjava3.core.Completable +import io.reactivex.rxjava3.core.Observable @Dao interface EventDao { @Insert(onConflict = OnConflictStrategy.REPLACE) - fun insertEvent(event: EventEntity): Completable + fun insert(event: EventEntity) + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertAll(events: List) + + @Query("SELECT * FROM EVENT_TABLE") + fun getAll(): Observable> } \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt index f6383613..b42150e6 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt @@ -7,7 +7,9 @@ import com.red_velvet.marvel.data.remote.dto.CreatorDto import com.red_velvet.marvel.data.remote.dto.EventDto import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.data.remote.dto.StoryDto +import com.red_velvet.marvel.domain.model.Character import com.red_velvet.marvel.domain.model.Comic +import com.red_velvet.marvel.domain.model.Event import com.red_velvet.marvel.ui.utils.State import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Observable @@ -60,9 +62,18 @@ interface MarvelRepository { fun refreshComics(): Completable - fun getComics( + fun getLocalComics( titleStartsWith: String? = null, contains: String? = null ): Observable> + + fun refreshEvents(): Completable + + fun getLocalEvents(query: String? = null): Observable> + + fun refreshCharacters(): Completable + + fun getLocalCharacters(nameStartsWith: String? = null): Observable> + } diff --git a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt index b28291ec..d51a618d 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt @@ -1,8 +1,11 @@ package com.red_velvet.marvel.data.repository +import android.util.Log import com.red_velvet.marvel.data.local.database.MarvelDatabase +import com.red_velvet.marvel.data.local.mapper.CharacterEntityMapper import com.red_velvet.marvel.data.local.mapper.ComicEntityMapper +import com.red_velvet.marvel.data.local.mapper.EventEntityMapper import com.red_velvet.marvel.data.remote.dto.BaseResponse import com.red_velvet.marvel.data.remote.dto.CharacterDto import com.red_velvet.marvel.data.remote.dto.ComicDto @@ -11,8 +14,12 @@ import com.red_velvet.marvel.data.remote.dto.EventDto import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.data.remote.dto.StoryDto import com.red_velvet.marvel.data.remote.service.MarvelService +import com.red_velvet.marvel.domain.mapper.LocalCharacterMapper import com.red_velvet.marvel.domain.mapper.LocalComicMapper +import com.red_velvet.marvel.domain.mapper.LocalEventMapper +import com.red_velvet.marvel.domain.model.Character import com.red_velvet.marvel.domain.model.Comic +import com.red_velvet.marvel.domain.model.Event import com.red_velvet.marvel.ui.utils.State import io.reactivex.rxjava3.core.Completable import io.reactivex.rxjava3.core.Observable @@ -26,6 +33,10 @@ class MarvelRepositoryImpl @Inject constructor( private val marvelDatabase: MarvelDatabase, private val ComicEntityMapper: ComicEntityMapper, private val localComicMapper: LocalComicMapper, + private val eventEntityMapper: EventEntityMapper, + private val localEventMapper: LocalEventMapper, + private val characterEntityMapper: CharacterEntityMapper, + private val localCharacterMapper: LocalCharacterMapper, ) : MarvelRepository { override fun getAllComics( @@ -132,6 +143,7 @@ class MarvelRepositoryImpl @Inject constructor( .flatMapCompletable { responseWrapper -> val comics = responseWrapper.body()?.body?.results val comicsEntities = comics?.map { ComicEntityMapper.map(it) } + Log.d("SADEQMHANA", "refreshComics: $comicsEntities") comicsEntities?.let { Completable.fromAction { marvelDatabase.comicDao().insertAll(it) } .subscribeOn(Schedulers.io()) @@ -142,9 +154,54 @@ class MarvelRepositoryImpl @Inject constructor( } } - override fun getComics(titleStartsWith: String?, contains: String?): Observable> { - return marvelDatabase.comicDao() - .getAll() + override fun refreshEvents(): Completable { + return marvelServiceImpl.getAllEvents() + .flatMapCompletable { responseWrapper -> + val events = responseWrapper.body()?.body?.results + val eventsEntities = events?.map { eventEntityMapper.map(it) } + Log.d("SADEQMHANA", "refreshEvents: $eventsEntities") + eventsEntities?.let { + Completable.fromAction { marvelDatabase.eventDao().insertAll(it) } + .subscribeOn(Schedulers.io()) + } ?: Completable.complete() + } + .onErrorResumeNext { + Completable.complete() + } + } + + override fun refreshCharacters(): Completable { + return marvelServiceImpl.getAllCharacters() + .flatMapCompletable { responseWrapper -> + val characters = responseWrapper.body()?.body?.results + val charactersEntities = characters?.map { characterEntityMapper.map(it) } + Log.d("SADEQMHANA", "refreshCharacters: $charactersEntities") + charactersEntities?.let { + Completable.fromAction { marvelDatabase.characterDao().insertAll(it) } + .subscribeOn(Schedulers.io()) + } ?: Completable.complete() + } + .onErrorResumeNext { + Completable.complete() + } + } + + override fun getLocalComics( + titleStartsWith: String?, + contains: String? + ): Observable> { + return marvelDatabase.comicDao().getAll() .map { comics -> comics.map { localComicMapper.map(it) } } } + + override fun getLocalEvents(query: String?): Observable> { + return marvelDatabase.eventDao().getAll() + .map { events -> events.map { localEventMapper.map(it) } } + } + + override fun getLocalCharacters(nameStartsWith: String?): Observable> { + return marvelDatabase.characterDao().getAll() + .map { characters -> characters.map { localCharacterMapper.map(it) } } + } + } \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/di/RepositoryModule.kt b/app/src/main/java/com/red_velvet/marvel/di/RepositoryModule.kt index 9febbed5..3b285fb7 100644 --- a/app/src/main/java/com/red_velvet/marvel/di/RepositoryModule.kt +++ b/app/src/main/java/com/red_velvet/marvel/di/RepositoryModule.kt @@ -1,11 +1,15 @@ package com.red_velvet.marvel.di import com.red_velvet.marvel.data.local.database.MarvelDatabase +import com.red_velvet.marvel.data.local.mapper.CharacterEntityMapper import com.red_velvet.marvel.data.local.mapper.ComicEntityMapper +import com.red_velvet.marvel.data.local.mapper.EventEntityMapper import com.red_velvet.marvel.data.remote.service.MarvelService import com.red_velvet.marvel.data.repository.MarvelRepository import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl +import com.red_velvet.marvel.domain.mapper.LocalCharacterMapper import com.red_velvet.marvel.domain.mapper.LocalComicMapper +import com.red_velvet.marvel.domain.mapper.LocalEventMapper import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -22,13 +26,21 @@ object RepositoryModule { marvelService: MarvelService, marvelDatabase: MarvelDatabase, comicsEntityMapper: ComicEntityMapper, - localComicMapper: LocalComicMapper + localComicMapper: LocalComicMapper, + eventEntityMapper: EventEntityMapper, + localEventMapper: LocalEventMapper, + characterEntityMapper: CharacterEntityMapper, + localCharacterMapper: LocalCharacterMapper, ): MarvelRepository { return MarvelRepositoryImpl( marvelService, marvelDatabase, comicsEntityMapper, localComicMapper, + eventEntityMapper, + localEventMapper, + characterEntityMapper, + localCharacterMapper, ) } @@ -43,4 +55,28 @@ object RepositoryModule { fun provideLocalComicMapper(): LocalComicMapper { return LocalComicMapper() } + + @Singleton + @Provides + fun provideEventEntityMapper(): EventEntityMapper { + return EventEntityMapper() + } + + @Singleton + @Provides + fun provideLocalEventMapper(): LocalEventMapper { + return LocalEventMapper() + } + + @Singleton + @Provides + fun provideCharacterEntityMapper(): CharacterEntityMapper { + return CharacterEntityMapper() + } + + @Singleton + @Provides + fun provideLocalCharacterMapper(): LocalCharacterMapper { + return LocalCharacterMapper() + } } \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/domain/mapper/LocalCharacterMapper.kt b/app/src/main/java/com/red_velvet/marvel/domain/mapper/LocalCharacterMapper.kt new file mode 100644 index 00000000..95f35be6 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/mapper/LocalCharacterMapper.kt @@ -0,0 +1,14 @@ +package com.red_velvet.marvel.domain.mapper + +import com.red_velvet.marvel.data.local.database.entity.CharacterEntity +import com.red_velvet.marvel.domain.model.Character + +class LocalCharacterMapper : Mapper { + override fun map(input: CharacterEntity): Character { + return Character( + id = input.id, + name = input.name, + imageUrl = input.imageUrl, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/domain/mapper/LocalEventMapper.kt b/app/src/main/java/com/red_velvet/marvel/domain/mapper/LocalEventMapper.kt new file mode 100644 index 00000000..b96989b8 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/mapper/LocalEventMapper.kt @@ -0,0 +1,14 @@ +package com.red_velvet.marvel.domain.mapper + +import com.red_velvet.marvel.data.local.database.entity.EventEntity +import com.red_velvet.marvel.domain.model.Event + +class LocalEventMapper : Mapper { + override fun map(input: EventEntity): Event { + return Event( + id = input.id, + title = input.title, + imageUrl = input.imageUrl, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt index b6480466..693c2701 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt @@ -1,5 +1,6 @@ package com.red_velvet.marvel.ui.home +import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.red_velvet.marvel.data.repository.MarvelRepository @@ -8,7 +9,6 @@ import com.red_velvet.marvel.domain.model.Comic import com.red_velvet.marvel.domain.model.Event import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.SingleEvent -import com.red_velvet.marvel.ui.utils.State import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject @@ -29,20 +29,24 @@ class HomeViewModel @Inject constructor( private val _comics = MutableLiveData>() val comicsLiveData: LiveData> = _comics - private val _events = MutableLiveData>>(State.Loading) - val eventLiveData: LiveData>> = _events + private val _events = MutableLiveData>() + val eventLiveData: LiveData> = _events - private val _characters = MutableLiveData>>(State.Loading) - val characterLiveData: LiveData>> = _characters + private val _characters = MutableLiveData>() + val characterLiveData: LiveData> = _characters init { - repository.refreshComics() + repository.refreshComics().subscribe() + repository.refreshEvents().subscribe() + repository.refreshCharacters().subscribe() getComics() + getEvents() + getCharacters() } private fun getComics() { bindObservable( - repository.getComics(), + repository.getLocalComics(), ::onComicsError, ::onComicsReceived, ) @@ -50,12 +54,46 @@ class HomeViewModel @Inject constructor( private fun onComicsReceived(comics: List) { _comics.postValue(comics) + Log.d("HomeViewModel", "onComicsReceived: $comics") } private fun onComicsError(throwable: Throwable) { _comics.postValue(emptyList()) } + private fun getEvents() { + bindObservable( + repository.getLocalEvents(), + ::onEventsError, + ::onEventsReceived, + ) + } + + private fun onEventsReceived(events: List) { + _events.postValue(events) + Log.d("HomeViewModel", "onEventsReceived: $events") + } + + private fun onEventsError(throwable: Throwable) { + _events.postValue(emptyList()) + } + + private fun getCharacters() { + bindObservable( + repository.getLocalCharacters(), + ::onCharactersError, + ::onCharactersReceived, + ) + } + + private fun onCharactersReceived(characters: List) { + _characters.postValue(characters) + Log.d("HomeViewModel", "onCharactersReceived: $characters") + } + + private fun onCharactersError(throwable: Throwable) { + _characters.postValue(emptyList()) + } override fun doOnComicClicked(comicId: Int) { _navigationToComicDetails.postValue(SingleEvent(comicId)) diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 446c4f28..797fda32 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -63,7 +63,7 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/recycler_comics" - app:showWhenData="@{viewModel.comicsLiveData.empty}" /> + app:showWhenData="@{viewModel.eventLiveData.empty}" /> + app:layout_constraintTop_toBottomOf="@id/recycler_events" + app:showWhenData="@{viewModel.characterLiveData.empty}" /> From 975a3e7b8582caa3a2f62da996a5ab24d6ee8862 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 06:18:29 +0300 Subject: [PATCH 38/41] cleanup --- .../java/com/red_velvet/marvel/ui/home/HomeFragment.kt | 7 ------- 1 file changed, 7 deletions(-) diff --git a/app/src/main/java/com/red_velvet/marvel/ui/home/HomeFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/home/HomeFragment.kt index fefd082b..10c47ec9 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/home/HomeFragment.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/home/HomeFragment.kt @@ -30,13 +30,6 @@ class HomeFragment : BaseFragment() { recyclerChars.adapter = charsAdapter recyclerEvents.adapter = eventsAdapter } -// binding.textViewError.setOnClickListener { -// viewModel.apply { -//// getCharacters() -// getComics() -//// getEvents() -// } -// } initNavigateToComicDetails() } From 82e7e7222539b697bdb9fe024be50e8f13ad4100 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 06:21:16 +0300 Subject: [PATCH 39/41] cleanup --- .../data/repository/MarvelRepositoryImpl.kt | 41 ++++++++----------- .../marvel/ui/home/HomeViewModel.kt | 30 ++++---------- 2 files changed, 27 insertions(+), 44 deletions(-) diff --git a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt index d51a618d..15ce6708 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt @@ -1,7 +1,6 @@ package com.red_velvet.marvel.data.repository -import android.util.Log import com.red_velvet.marvel.data.local.database.MarvelDatabase import com.red_velvet.marvel.data.local.mapper.CharacterEntityMapper import com.red_velvet.marvel.data.local.mapper.ComicEntityMapper @@ -138,12 +137,29 @@ class MarvelRepositoryImpl @Inject constructor( .startWith(Observable.just(State.Loading)) } + override fun getLocalComics( + titleStartsWith: String?, + contains: String? + ): Observable> { + return marvelDatabase.comicDao().getAll() + .map { comics -> comics.map { localComicMapper.map(it) } } + } + + override fun getLocalEvents(query: String?): Observable> { + return marvelDatabase.eventDao().getAll() + .map { events -> events.map { localEventMapper.map(it) } } + } + + override fun getLocalCharacters(nameStartsWith: String?): Observable> { + return marvelDatabase.characterDao().getAll() + .map { characters -> characters.map { localCharacterMapper.map(it) } } + } + override fun refreshComics(): Completable { return marvelServiceImpl.getAllComics() .flatMapCompletable { responseWrapper -> val comics = responseWrapper.body()?.body?.results val comicsEntities = comics?.map { ComicEntityMapper.map(it) } - Log.d("SADEQMHANA", "refreshComics: $comicsEntities") comicsEntities?.let { Completable.fromAction { marvelDatabase.comicDao().insertAll(it) } .subscribeOn(Schedulers.io()) @@ -159,7 +175,6 @@ class MarvelRepositoryImpl @Inject constructor( .flatMapCompletable { responseWrapper -> val events = responseWrapper.body()?.body?.results val eventsEntities = events?.map { eventEntityMapper.map(it) } - Log.d("SADEQMHANA", "refreshEvents: $eventsEntities") eventsEntities?.let { Completable.fromAction { marvelDatabase.eventDao().insertAll(it) } .subscribeOn(Schedulers.io()) @@ -175,7 +190,6 @@ class MarvelRepositoryImpl @Inject constructor( .flatMapCompletable { responseWrapper -> val characters = responseWrapper.body()?.body?.results val charactersEntities = characters?.map { characterEntityMapper.map(it) } - Log.d("SADEQMHANA", "refreshCharacters: $charactersEntities") charactersEntities?.let { Completable.fromAction { marvelDatabase.characterDao().insertAll(it) } .subscribeOn(Schedulers.io()) @@ -185,23 +199,4 @@ class MarvelRepositoryImpl @Inject constructor( Completable.complete() } } - - override fun getLocalComics( - titleStartsWith: String?, - contains: String? - ): Observable> { - return marvelDatabase.comicDao().getAll() - .map { comics -> comics.map { localComicMapper.map(it) } } - } - - override fun getLocalEvents(query: String?): Observable> { - return marvelDatabase.eventDao().getAll() - .map { events -> events.map { localEventMapper.map(it) } } - } - - override fun getLocalCharacters(nameStartsWith: String?): Observable> { - return marvelDatabase.characterDao().getAll() - .map { characters -> characters.map { localCharacterMapper.map(it) } } - } - } \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt index 693c2701..900fac7d 100644 --- a/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt +++ b/app/src/main/java/com/red_velvet/marvel/ui/home/HomeViewModel.kt @@ -1,6 +1,5 @@ package com.red_velvet.marvel.ui.home -import android.util.Log import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.red_velvet.marvel.data.repository.MarvelRepository @@ -52,14 +51,9 @@ class HomeViewModel @Inject constructor( ) } - private fun onComicsReceived(comics: List) { - _comics.postValue(comics) - Log.d("HomeViewModel", "onComicsReceived: $comics") - } + private fun onComicsReceived(comics: List) = _comics.postValue(comics) - private fun onComicsError(throwable: Throwable) { - _comics.postValue(emptyList()) - } + private fun onComicsError(throwable: Throwable) = _comics.postValue(emptyList()) private fun getEvents() { bindObservable( @@ -69,14 +63,10 @@ class HomeViewModel @Inject constructor( ) } - private fun onEventsReceived(events: List) { - _events.postValue(events) - Log.d("HomeViewModel", "onEventsReceived: $events") - } + private fun onEventsReceived(events: List) = _events.postValue(events) + + private fun onEventsError(throwable: Throwable) = _events.postValue(emptyList()) - private fun onEventsError(throwable: Throwable) { - _events.postValue(emptyList()) - } private fun getCharacters() { bindObservable( @@ -86,14 +76,12 @@ class HomeViewModel @Inject constructor( ) } - private fun onCharactersReceived(characters: List) { + private fun onCharactersReceived(characters: List) = _characters.postValue(characters) - Log.d("HomeViewModel", "onCharactersReceived: $characters") - } - private fun onCharactersError(throwable: Throwable) { - _characters.postValue(emptyList()) - } + + private fun onCharactersError(throwable: Throwable) = _characters.postValue(emptyList()) + override fun doOnComicClicked(comicId: Int) { _navigationToComicDetails.postValue(SingleEvent(comicId)) From ed3a41f0f3e2c9132c1321e420574259adc22c4a Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 06:30:45 +0300 Subject: [PATCH 40/41] create extract results extension function --- .../marvel/data/repository/MarvelRepositoryImpl.kt | 7 ++++--- .../java/com/red_velvet/marvel/data/util/Extension.kt | 8 ++++++++ 2 files changed, 12 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/red_velvet/marvel/data/util/Extension.kt diff --git a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt index 15ce6708..69d47a3a 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt @@ -13,6 +13,7 @@ import com.red_velvet.marvel.data.remote.dto.EventDto import com.red_velvet.marvel.data.remote.dto.SeriesDto import com.red_velvet.marvel.data.remote.dto.StoryDto import com.red_velvet.marvel.data.remote.service.MarvelService +import com.red_velvet.marvel.data.util.extractResults import com.red_velvet.marvel.domain.mapper.LocalCharacterMapper import com.red_velvet.marvel.domain.mapper.LocalComicMapper import com.red_velvet.marvel.domain.mapper.LocalEventMapper @@ -158,7 +159,7 @@ class MarvelRepositoryImpl @Inject constructor( override fun refreshComics(): Completable { return marvelServiceImpl.getAllComics() .flatMapCompletable { responseWrapper -> - val comics = responseWrapper.body()?.body?.results + val comics = responseWrapper.extractResults() val comicsEntities = comics?.map { ComicEntityMapper.map(it) } comicsEntities?.let { Completable.fromAction { marvelDatabase.comicDao().insertAll(it) } @@ -173,7 +174,7 @@ class MarvelRepositoryImpl @Inject constructor( override fun refreshEvents(): Completable { return marvelServiceImpl.getAllEvents() .flatMapCompletable { responseWrapper -> - val events = responseWrapper.body()?.body?.results + val events = responseWrapper.extractResults() val eventsEntities = events?.map { eventEntityMapper.map(it) } eventsEntities?.let { Completable.fromAction { marvelDatabase.eventDao().insertAll(it) } @@ -188,7 +189,7 @@ class MarvelRepositoryImpl @Inject constructor( override fun refreshCharacters(): Completable { return marvelServiceImpl.getAllCharacters() .flatMapCompletable { responseWrapper -> - val characters = responseWrapper.body()?.body?.results + val characters = responseWrapper.extractResults() val charactersEntities = characters?.map { characterEntityMapper.map(it) } charactersEntities?.let { Completable.fromAction { marvelDatabase.characterDao().insertAll(it) } diff --git a/app/src/main/java/com/red_velvet/marvel/data/util/Extension.kt b/app/src/main/java/com/red_velvet/marvel/data/util/Extension.kt new file mode 100644 index 00000000..53947288 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/util/Extension.kt @@ -0,0 +1,8 @@ +package com.red_velvet.marvel.data.util + +import com.red_velvet.marvel.data.remote.dto.BaseResponse +import retrofit2.Response + +fun Response>>.extractResults(): List? { + return this.body()?.body?.results +} \ No newline at end of file From 7265c8bb4bd12c98a455020671fdcb62fd370fc3 Mon Sep 17 00:00:00 2001 From: Sadeq Al-Mhana <64174395+devsadeq@users.noreply.github.com> Date: Sat, 20 May 2023 06:37:41 +0300 Subject: [PATCH 41/41] handle empty screen state --- app/src/main/res/layout/fragment_home.xml | 27 +++++++++++++++++++++++ app/src/main/res/values/strings.xml | 1 + 2 files changed, 28 insertions(+) diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 797fda32..98c8b341 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -107,6 +107,33 @@ app:showWhenData="@{viewModel.characterLiveData.empty}" tools:listitem="@layout/item_home_character" /> + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 8cfc39e8..5f8a2a0b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -67,4 +67,5 @@ Search Looks like Thanos snapped this search result away. \nTry searching for something else. Home + There is no data to show\nplease make sure you are connected to the internet and try again. \ No newline at end of file