diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7b1990b..a407df5 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 { @@ -111,4 +112,19 @@ dependencies { // Lottie Animation implementation("com.airbnb.android:lottie:6.0.0") + + //dagger hilt + implementation("com.google.dagger:hilt-android:2.44") + kapt("com.google.dagger:hilt-android-compiler:2.44") + + //room dependency + val room_version = "2.5.1" + + implementation ("androidx.room:room-runtime:$room_version") + kapt ("androidx.room:room-compiler:$room_version") + annotationProcessor ("androidx.room:room-compiler:$room_version") + implementation("androidx.room:room-rxjava3:$room_version") +} +kapt { + correctErrorTypes = true } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 66965fc..20214a1 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,6 +11,7 @@ android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" + android:name=".MarvelApplication" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" 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 0000000..40f7bee --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/MarvelApplication.kt @@ -0,0 +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 diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/MarvelDataBase.kt b/app/src/main/java/com/red_velvet/marvel/data/local/MarvelDataBase.kt new file mode 100644 index 0000000..362ad42 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/MarvelDataBase.kt @@ -0,0 +1,16 @@ +package com.red_velvet.marvel.data.local + +import androidx.room.Database +import androidx.room.RoomDatabase +import com.red_velvet.marvel.data.local.dao.DataBaseDao +import com.red_velvet.marvel.data.local.entity.ComicsEntity +import com.red_velvet.marvel.data.local.entity.SearchCharacterResultEntity + + +@Database( + entities = [ComicsEntity::class, + SearchCharacterResultEntity::class], + version = 1) +abstract class MarvelDataBase: RoomDatabase() { + abstract fun dataBaseDao(): DataBaseDao +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/dao/DataBaseDao.kt b/app/src/main/java/com/red_velvet/marvel/data/local/dao/DataBaseDao.kt new file mode 100644 index 0000000..7f5bdb2 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/dao/DataBaseDao.kt @@ -0,0 +1,38 @@ +package com.red_velvet.marvel.data.local.dao + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import com.red_velvet.marvel.data.local.entity.ComicsEntity +import com.red_velvet.marvel.data.local.entity.SearchCharacterResultEntity +import io.reactivex.rxjava3.core.Completable +import io.reactivex.rxjava3.core.Single + +@Dao +interface DataBaseDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insert(comic: List): Completable + + @Query("SELECT * FROM Comics_table WHERE id = :id") + fun getComic(id: Long): Single + + @Query("SELECT * FROM Comics_table") + fun getAllComics(): Single> + + @Query("SELECT * FROM Comics_table WHERE dateDescriptor = :dateDescriptor") + fun getComicsByDateDescriptor(dateDescriptor: String?): Single> + + @Insert(onConflict = OnConflictStrategy.REPLACE) + fun insertSearchCharacterResult(item: List) : Completable + + @Query("Select * From searchCharacterResult_table") + fun getSearchCharacterResult(): Single> + + @Query("Select * From searchCharacterResult_table ORDER BY id DESC LIMIT 1") + fun getLastSearchCharacterResult(): Single> + + @Query("Select * From searchCharacterResult_table Where name = :name") + fun getSearchCharacterResultByName(name: String): Single> + +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/entity/ComicsEntity.kt b/app/src/main/java/com/red_velvet/marvel/data/local/entity/ComicsEntity.kt new file mode 100644 index 0000000..8519940 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/entity/ComicsEntity.kt @@ -0,0 +1,12 @@ +package com.red_velvet.marvel.data.local.entity + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "Comics_table") +data class ComicsEntity ( + @PrimaryKey val id: Long, + val title: String, + val imgUrl: String, + val dateDescriptor: String +) \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/data/local/entity/SearchCharacterResultEntity.kt b/app/src/main/java/com/red_velvet/marvel/data/local/entity/SearchCharacterResultEntity.kt new file mode 100644 index 0000000..84bb429 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/data/local/entity/SearchCharacterResultEntity.kt @@ -0,0 +1,10 @@ +package com.red_velvet.marvel.data.local.entity + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "searchCharacterResult_table") +data class SearchCharacterResultEntity( + @PrimaryKey var id: Long, + var name: String, + var imgUrl: String) \ 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/model/ComicDto.kt similarity index 99% 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/model/ComicDto.kt index 64f78ac..7062bfb 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/model/Comic.kt +++ b/app/src/main/java/com/red_velvet/marvel/data/model/ComicDto.kt @@ -3,7 +3,7 @@ package com.red_velvet.marvel.data.model import com.google.gson.annotations.SerializedName -data class Comic( +data class ComicDto( @SerializedName("characters") val characters: ResourceCollection? = ResourceCollection(), @SerializedName("collectedIssues") 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 b2d4587..e01ab9c 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 @@ -2,7 +2,7 @@ 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.ComicDto import com.red_velvet.marvel.data.model.Creator import com.red_velvet.marvel.data.model.Event import com.red_velvet.marvel.data.model.Series @@ -19,19 +19,19 @@ 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( @@ -85,7 +85,7 @@ interface MarvelService { @GET("stories/{storyId}/comics") fun getComicsByStoryId( @Path("storyId") storyId: Int - ): Single>>> + ): Single>>> @GET("characters") fun getAllCharacters( 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 dc1dc46..0000000 --- a/app/src/main/java/com/red_velvet/marvel/data/remote/RetrofitClient.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.red_velvet.marvel.data.remote - -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/di/DataBaseModule.kt b/app/src/main/java/com/red_velvet/marvel/di/DataBaseModule.kt new file mode 100644 index 0000000..9297925 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/di/DataBaseModule.kt @@ -0,0 +1,31 @@ +package com.red_velvet.marvel.di + +import android.content.Context +import androidx.room.Room +import com.red_velvet.marvel.data.local.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 { + + private const val DATABASE_NAME = "MarvelDataBase" + + @Singleton + @Provides + fun provideMarvelDataBase(@ApplicationContext context: Context): MarvelDataBase { + return Room.databaseBuilder( + context, + MarvelDataBase::class.java, + DATABASE_NAME).build() + } + + @Singleton + @Provides + fun provideDao(dataBase: MarvelDataBase) = dataBase.dataBaseDao() +} \ No newline at end of file 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 0000000..1a3598a --- /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.MarvelService +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import retrofit2.Retrofit +import retrofit2.adapter.rxjava3.RxJava3CallAdapterFactory +import retrofit2.converter.gson.GsonConverterFactory +import java.util.concurrent.TimeUnit +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( + okHttpClient: OkHttpClient, + gsonConverterFactory: GsonConverterFactory, + rxJava3CallAdapterFactory: RxJava3CallAdapterFactory + ): MarvelService { + return Retrofit.Builder() + .baseUrl(BASE_URL) + .addConverterFactory(gsonConverterFactory) + .client(okHttpClient) + .addCallAdapterFactory(rxJava3CallAdapterFactory) + .build().create(MarvelService::class.java) + } + + @Singleton + @Provides + fun provideOkHttpClient(authInterceptor: AuthorizationInterceptor, loggingInterceptor: HttpLoggingInterceptor): OkHttpClient{ + return OkHttpClient + .Builder() + .addInterceptor(loggingInterceptor) + .addInterceptor(authInterceptor) + .readTimeout(15, TimeUnit.SECONDS) + .connectTimeout(15, TimeUnit.SECONDS) + .build() + } + + @Singleton + @Provides + fun provideAuthInterceptor() = AuthorizationInterceptor() + + @Singleton + @Provides + fun provideLoggingInterceptor() = + HttpLoggingInterceptor().apply { setLevel(HttpLoggingInterceptor.Level.BODY) } + + @Singleton + @Provides + fun provideGson() = GsonConverterFactory.create() + + @Singleton + @Provides + fun provideRxJava() = RxJava3CallAdapterFactory.create() +} \ 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 new file mode 100644 index 0000000..eb5a706 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/di/RepositoryModule.kt @@ -0,0 +1,38 @@ +package com.red_velvet.marvel.di + +import com.red_velvet.marvel.data.local.MarvelDataBase +import com.red_velvet.marvel.data.local.dao.DataBaseDao +import com.red_velvet.marvel.data.remote.MarvelService +import com.red_velvet.marvel.domain.repository.MarvelRepository +import com.red_velvet.marvel.domain.repository.MarvelRepositoryImpl +import com.red_velvet.marvel.domain.mapper.comics.ComicDtoToComicsEntityMapper +import com.red_velvet.marvel.domain.mapper.comics.ComicsEntityToComicsMapper +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + + +@Module +@InstallIn(SingletonComponent::class) +object RepositoryModule { + + @Provides + fun provideRepository( + marvelDataBaseDao: DataBaseDao, + apiService: MarvelService, + comicDtoToComicsEntityMapper: ComicDtoToComicsEntityMapper, + comicsEntityToComicsMapper: ComicsEntityToComicsMapper + ): MarvelRepository { + return MarvelRepositoryImpl( + apiService, + marvelDataBaseDao, + comicDtoToComicsEntityMapper, + comicsEntityToComicsMapper) + } + + @Provides + fun provideComicsEntityMapper() = ComicDtoToComicsEntityMapper() + @Provides + fun provideComicsMapper() = ComicsEntityToComicsMapper() +} \ 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 0000000..809e7f3 --- /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,dateDescriptor: String?): O +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/domain/mapper/comics/ComicDtoToComicsEntityMapper.kt b/app/src/main/java/com/red_velvet/marvel/domain/mapper/comics/ComicDtoToComicsEntityMapper.kt new file mode 100644 index 0000000..9e59d66 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/mapper/comics/ComicDtoToComicsEntityMapper.kt @@ -0,0 +1,17 @@ +package com.red_velvet.marvel.domain.mapper.comics + +import com.red_velvet.marvel.data.local.entity.ComicsEntity +import com.red_velvet.marvel.data.model.ComicDto +import com.red_velvet.marvel.domain.mapper.Mapper + +class ComicDtoToComicsEntityMapper : Mapper { + + override fun map(input: ComicDto, dateDescriptor: String?): ComicsEntity { + return ComicsEntity( + id = input.id?.toLong() ?: 0L, + title = input.title.orEmpty(), + dateDescriptor = dateDescriptor ?: "", + imgUrl = "${input.thumbnail?.path}.${input.thumbnail?.extension}" + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/domain/mapper/comics/ComicsEntityToComicsMapper.kt b/app/src/main/java/com/red_velvet/marvel/domain/mapper/comics/ComicsEntityToComicsMapper.kt new file mode 100644 index 0000000..a42043c --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/mapper/comics/ComicsEntityToComicsMapper.kt @@ -0,0 +1,17 @@ +package com.red_velvet.marvel.domain.mapper.comics + +import com.red_velvet.marvel.data.local.entity.ComicsEntity +import com.red_velvet.marvel.domain.mapper.Mapper +import com.red_velvet.marvel.domain.model.Comics + +class ComicsEntityToComicsMapper : Mapper { + + override fun map(input: ComicsEntity, dateDescriptor: String?): Comics { + return Comics( + id = input.id.toInt(), + title = input.title, + dateDescriptor = dateDescriptor ?: "", + imgUrl = input.imgUrl + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/domain/model/Comics.kt b/app/src/main/java/com/red_velvet/marvel/domain/model/Comics.kt new file mode 100644 index 0000000..4c1be95 --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/model/Comics.kt @@ -0,0 +1,10 @@ +package com.red_velvet.marvel.domain.model + + + +data class Comics ( + val id: Int, + val title: String, + val imgUrl: String, + val dateDescriptor: String +) \ No newline at end of file diff --git a/app/src/main/java/com/red_velvet/marvel/domain/model/SearchCharacterResult.kt b/app/src/main/java/com/red_velvet/marvel/domain/model/SearchCharacterResult.kt new file mode 100644 index 0000000..97f3c1a --- /dev/null +++ b/app/src/main/java/com/red_velvet/marvel/domain/model/SearchCharacterResult.kt @@ -0,0 +1,7 @@ +package com.red_velvet.marvel.domain.model + +data class SearchCharacterResult( + var id: Int?, + var name: String?, + var imgUrl: String +) \ 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/domain/repository/MarvelRepository.kt similarity index 88% rename from app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt rename to app/src/main/java/com/red_velvet/marvel/domain/repository/MarvelRepository.kt index 247f0d0..4d4d2a6 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepository.kt +++ b/app/src/main/java/com/red_velvet/marvel/domain/repository/MarvelRepository.kt @@ -1,8 +1,8 @@ -package com.red_velvet.marvel.data.repository +package com.red_velvet.marvel.domain.repository import com.red_velvet.marvel.data.model.Character -import com.red_velvet.marvel.data.model.Comic +import com.red_velvet.marvel.data.model.ComicDto import com.red_velvet.marvel.data.model.Creator import com.red_velvet.marvel.data.model.Event import com.red_velvet.marvel.data.model.Series @@ -15,11 +15,11 @@ 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, @@ -42,7 +42,7 @@ interface MarvelRepository { fun getCreatorsByStoryId(storyId: Int): Observable>> - fun getComicsByStoryId(storyId: Int): Observable>> + fun getComicsByStoryId(storyId: Int): Observable>> fun getCharactersByComicId(comicId: 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/domain/repository/MarvelRepositoryImpl.kt similarity index 85% rename from app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt rename to app/src/main/java/com/red_velvet/marvel/domain/repository/MarvelRepositoryImpl.kt index 2ee67b2..2f885bc 100644 --- a/app/src/main/java/com/red_velvet/marvel/data/repository/MarvelRepositoryImpl.kt +++ b/app/src/main/java/com/red_velvet/marvel/domain/repository/MarvelRepositoryImpl.kt @@ -1,35 +1,42 @@ -package com.red_velvet.marvel.data.repository +package com.red_velvet.marvel.domain.repository +import com.red_velvet.marvel.data.local.dao.DataBaseDao 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.ComicDto 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.remote.MarvelService +import com.red_velvet.marvel.domain.mapper.comics.ComicDtoToComicsEntityMapper +import com.red_velvet.marvel.domain.mapper.comics.ComicsEntityToComicsMapper 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 marvelDataBaseDao: DataBaseDao, + private val comicDtoToComicsEntityMapper: ComicDtoToComicsEntityMapper, + private val comicsEntityToComicsMapper: ComicsEntityToComicsMapper ) : MarvelRepository { 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) } } @@ -84,7 +91,7 @@ class MarvelRepositoryImpl( return wrapWithState { marvelServiceImpl.getCreatorsByStoryId(storyId) } } - override fun getComicsByStoryId(storyId: Int): Observable>> { + override fun getComicsByStoryId(storyId: Int): Observable>> { return wrapWithState { marvelServiceImpl.getComicsByStoryId(storyId) } } 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 63a8f0c..564be8c 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,10 @@ 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 +import dagger.hilt.android.lifecycle.HiltViewModel +@AndroidEntryPoint class MainActivity : BaseActivity() { override val LOG_TAG: String = "MainActivity" 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 4f371cb..12ea8bb 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.model.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/CharacterDetailsFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsFragment.kt index 617a9cc..db304d0 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/characterDetails/CharacterDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/characterDetails/CharacterDetailsViewModel.kt index ec81fa9..4284930 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 @@ -3,27 +3,26 @@ 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.ComicDto import com.red_velvet.marvel.data.model.Series -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.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 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 - 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 @@ -64,7 +63,7 @@ class CharacterDetailsViewModel : BaseViewModel(), SeriesInteractionListener, ) } - private fun onGetComicsByCharacterIdState(state: State>) { + private fun onGetComicsByCharacterIdState(state: State>) { _comics.postValue(state) } 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 74632d4..74b9818 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/characters/CharactersViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/characters/CharactersViewModel.kt index 57c7bc4..c9f7f14 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 @@ -3,26 +3,24 @@ 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.remote.RetrofitClient -import com.red_velvet.marvel.data.repository.MarvelRepository -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl +import com.red_velvet.marvel.domain.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 - -class CharactersViewModel : BaseViewModel(), CharacterDetailsInteractionListener { +import javax.inject.Inject +@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/ComicDetailsFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsFragment.kt index 37d7fb5..a927605 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/comicDetails/ComicDetailsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/comicDetails/ComicDetailsViewModel.kt index 70e2e82..4ff813a 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 @@ -3,20 +3,22 @@ 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.ComicDto import com.red_velvet.marvel.data.model.Creator -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.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 - -class ComicDetailsViewModel : BaseViewModel(), ComicDetailsCreatorListenerInteraction, +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject +@HiltViewModel +class ComicDetailsViewModel @Inject constructor( + private val repository: MarvelRepository +) : 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 @@ -24,10 +26,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 @@ -62,7 +60,7 @@ class ComicDetailsViewModel : BaseViewModel(), ComicDetailsCreatorListenerIntera ) } - private fun onGetComicState(state: State>) { + private fun onGetComicState(state: State>) { _comicsDetails.postValue(state) } 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 4682f95..fe1e398 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 @@ -5,17 +5,18 @@ 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.remote.RetrofitClient -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl +import com.red_velvet.marvel.domain.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 - -class EventDetailViewModel : BaseViewModel(), CharactersInteractionListener, +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject +@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 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 d5f741c..d18ca3f 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 f7415ee..bec41fd 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/events/EventsViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/events/EventsViewModel.kt index 11d3ce4..2afe78c 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 @@ -3,18 +3,19 @@ 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.remote.RetrofitClient -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl +import com.red_velvet.marvel.domain.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 - -class EventsViewModel : BaseViewModel(), EventsInteractionListener { - - private val repository by lazy { MarvelRepositoryImpl(RetrofitClient.apiService) } +import javax.inject.Inject +@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/home/HomeFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/home/HomeFragment.kt index ef9a287..49aa63c 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,8 @@ 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 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 a009af1..5f84871 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 @@ -3,20 +3,18 @@ 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.ComicDto 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.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 - -class HomeViewModel : BaseViewModel(), HomeInteractionListener { - - private val repository: MarvelRepository by lazy { - MarvelRepositoryImpl(RetrofitClient.apiService) - } +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject +@HiltViewModel +class HomeViewModel @Inject constructor( + private val repository: MarvelRepository +) : BaseViewModel(), HomeInteractionListener { private val _navigationToComicDetails: MutableLiveData> = MutableLiveData() val navigationToComicDetails: LiveData> = _navigationToComicDetails @@ -27,8 +25,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>>(State.Loading) + val comicsLiveData: LiveData>> = _comics private val _events = MutableLiveData>>(State.Loading) val eventLiveData: LiveData>> = _events @@ -55,7 +53,7 @@ class HomeViewModel : BaseViewModel(), HomeInteractionListener { _comics.postValue(State.Failed(throwable.message ?: UNKNOWN_ERROR)) } - private fun onGetComicsState(state: State>) { + private fun onGetComicsState(state: State>) { _comics.postValue(state) } 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 e420717..e652d80 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,13 +1,13 @@ 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.data.model.ComicDto import com.red_velvet.marvel.ui.base.BaseAdapter import com.red_velvet.marvel.ui.home.HomeInteractionListener class ComicsAdapter( - items: List, + items: List, listener: HomeInteractionListener -) : BaseAdapter(items, listener) { +) : BaseAdapter(items, listener) { override val layoutId = R.layout.item_home_comic } \ 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 64f5555..27a5b43 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/series/SeriesViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/series/SeriesViewModel.kt index ef46cfd..eaf4833 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 @@ -4,18 +4,20 @@ 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.remote.RetrofitClient -import com.red_velvet.marvel.data.repository.MarvelRepository -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl +import com.red_velvet.marvel.domain.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 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 +25,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/SeriesDetailsFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/seriesDetails/SeriesDetailsFragment.kt index ac4f434..0f12eb8 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,10 @@ 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 +import dagger.hilt.android.lifecycle.HiltViewModel +@AndroidEntryPoint class SeriesDetailsFragment : BaseFragment() { override val layoutIdFragment = R.layout.fragment_series_details 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 1205b39..c59fe3c 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 @@ -4,15 +4,15 @@ 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.remote.RetrofitClient -import com.red_velvet.marvel.data.repository.MarvelRepository -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl +import com.red_velvet.marvel.domain.repository.MarvelRepository import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.State - -class SeriesDetailsViewModel : BaseViewModel(), CreatorListenerInteraction { - - private val repository: MarvelRepository = MarvelRepositoryImpl(RetrofitClient.apiService) +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject +@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/StoriesFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesFragment.kt index 4a8d506..d74bd5e 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/stories/StoriesViewModel.kt b/app/src/main/java/com/red_velvet/marvel/ui/stories/StoriesViewModel.kt index 7655a8e..98eb098 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 @@ -3,17 +3,17 @@ 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.remote.RetrofitClient -import com.red_velvet.marvel.data.repository.MarvelRepositoryImpl +import com.red_velvet.marvel.domain.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/StoryDetailsFragment.kt b/app/src/main/java/com/red_velvet/marvel/ui/storyDetails/StoryDetailsFragment.kt index 96658c3..1a79c30 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,10 @@ 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 +import dagger.hilt.android.lifecycle.HiltViewModel - +@AndroidEntryPoint class StoryDetailsFragment : BaseFragment() { override val layoutIdFragment: Int = R.layout.fragment_story 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 6040a61..b756090 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,30 +2,28 @@ 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.ComicDto import com.red_velvet.marvel.data.model.Creator import com.red_velvet.marvel.data.model.Story -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.repository.MarvelRepository import com.red_velvet.marvel.ui.base.BaseViewModel import com.red_velvet.marvel.ui.utils.State - -class StoryDetailsViewModel : BaseViewModel(), StoryCreatorInteractionListener { +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject +@HiltViewModel +class StoryDetailsViewModel @Inject constructor( + private val repository: MarvelRepository +) : BaseViewModel(), StoryCreatorInteractionListener { 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 repository: MarvelRepository by lazy { - MarvelRepositoryImpl(RetrofitClient.apiService) - } - fun loadStoryDetails(storyId: Int) { getStoryById(storyId) getComicsByStoryId(storyId) @@ -68,7 +66,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) } diff --git a/app/src/main/res/layout/item_character_comics.xml b/app/src/main/res/layout/item_character_comics.xml index da01aee..c94b151 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.model.ComicDto" /> + type="com.red_velvet.marvel.data.model.ComicDto" />