Skip to content

Commit

Permalink
Adopt koin annotation for list module
Browse files Browse the repository at this point in the history
  • Loading branch information
gabrielbmoro committed Jul 1, 2024
1 parent a43df53 commit 9a6c1a3
Show file tree
Hide file tree
Showing 9 changed files with 36 additions and 56 deletions.
8 changes: 8 additions & 0 deletions feature-list-streams/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
plugins {
id("com.streamplayer.android-library")
id("com.streamplayer.compose")
id("com.google.devtools.ksp")
alias(libs.plugins.kover)
}

Expand All @@ -14,10 +15,17 @@ dependencies {
implementation(projects.coreLocalStorage)

implementation(libs.bundles.koin)
implementation(libs.koin.annotations)
ksp(libs.koin.compiler)

implementation(libs.bundles.networking)
implementation(libs.roomRuntime)
implementation(libs.bundles.androidSupport)
implementation(libs.coil)

testImplementation(libs.bundles.test)
}

ksp {
arg("KOIN_CONFIG_CHECK","true")
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import com.codandotv.streamplayerapp.feature_list_streams.list.domain.toGenres
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.toStream
import kotlinx.coroutines.CoroutineDispatcher
import kotlinx.coroutines.flow.*
import org.koin.core.annotation.Factory

interface ListStreamRepository {
suspend fun getGenres(): Flow<List<Genre>>
Expand All @@ -19,9 +20,9 @@ interface ListStreamRepository {
fun loadMovies(genre: Genre): Flow<PagingData<Stream>>
}

@Factory
class ListStreamRepositoryImpl(
private val service: ListStreamService,
private val dispatcher: CoroutineDispatcher,
) : ListStreamRepository {

override suspend fun getGenres(): Flow<List<Genre>> {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,61 +1,20 @@
package com.codandotv.streamplayerapp.feature_list_streams.list.di

import com.codandotv.streamplayerapp.core_shared.qualifier.QualifierDispatcherIO
import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamRepository
import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamRepositoryImpl
import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamService
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.GetTopRatedStream
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.GetTopRatedStreamImpl
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.GetGenresUseCase
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.GetGenresUseCaseImpl
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.ListStreamAnalytics
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.ListStreamAnalyticsImpl
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.ListStreamUseCase
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.ListStreamUseCaseImpl
import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.screens.ListStreamViewModel
import org.koin.androidx.viewmodel.dsl.viewModel
import org.koin.dsl.module
import org.koin.core.annotation.ComponentScan
import org.koin.core.annotation.Factory
import org.koin.core.annotation.Module
import org.koin.core.context.GlobalContext
import retrofit2.Retrofit

object ListStreamModule {
val module = module {
viewModel {
ListStreamViewModel(
listStreams = get(),
listGenres = get(),
latestStream = get()
)
}
@Module
@ComponentScan("com.codandotv.streamplayerapp.feature_list_streams.list")
class ListStreamModule {

factory<ListStreamUseCase> {
ListStreamUseCaseImpl(
repository = get()
)
}

factory<GetGenresUseCase> {
GetGenresUseCaseImpl(
repository = get()
)
}

factory<GetTopRatedStream> {
GetTopRatedStreamImpl(
repository = get()
)
}

factory<ListStreamAnalytics> {
ListStreamAnalyticsImpl()
}

factory<ListStreamRepository> {
ListStreamRepositoryImpl(
service = get(),
dispatcher = get(QualifierDispatcherIO)
)
}

factory { get<Retrofit>().create(ListStreamService::class.java) }
@Factory
fun service(): ListStreamService {
val koin = GlobalContext.get()
val retrofit = koin.get<Retrofit>()
return retrofit.create(ListStreamService::class.java)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ package com.codandotv.streamplayerapp.feature_list_streams.list.domain
import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamRepository
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Genre
import kotlinx.coroutines.flow.Flow
import org.koin.core.annotation.Factory

interface GetGenresUseCase {
suspend operator fun invoke(): Flow<List<Genre>>
}

@Factory
class GetGenresUseCaseImpl(
private val repository: ListStreamRepository
) : GetGenresUseCase {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@ package com.codandotv.streamplayerapp.feature_list_streams.list.domain
import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamRepository
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Stream
import kotlinx.coroutines.flow.Flow
import org.koin.core.annotation.Factory

interface GetTopRatedStream {
suspend operator fun invoke(): Flow<Stream>
}

@Factory
class GetTopRatedStreamImpl(
private val repository: ListStreamRepository
) : GetTopRatedStream {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,13 @@ import com.codandotv.streamplayerapp.feature_list_streams.list.data.ListStreamRe
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Genre
import com.codandotv.streamplayerapp.feature_list_streams.list.domain.model.Stream
import kotlinx.coroutines.flow.Flow
import org.koin.core.annotation.Factory

interface ListStreamUseCase {
operator fun invoke(genre: Genre): Flow<PagingData<Stream>>
}

@Factory
class ListStreamUseCaseImpl(
private val repository: ListStreamRepository
) : ListStreamUseCase {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
package com.codandotv.streamplayerapp.feature_list_streams.list.domain

import org.koin.core.annotation.Factory

interface ListStreamAnalytics{}

@Factory
class ListStreamAnalyticsImpl : ListStreamAnalytics {
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,15 @@ import com.codandotv.streamplayerapp.feature_list_streams.list.di.ListStreamModu
import com.codandotv.streamplayerapp.feature_list_streams.list.presentation.screens.ListStreamsScreen
import org.koin.core.context.loadKoinModules
import org.koin.core.context.unloadKoinModules
import org.koin.ksp.generated.module

internal const val DEFAULT_ID = ""

fun NavGraphBuilder.listStreamsNavGraph(navController: NavHostController) {
composable(HOME_COMPLETE) { nav ->
BackHandler(true) {}
if (nav.getLifecycle().currentState == Lifecycle.State.STARTED) {
loadKoinModules(ListStreamModule.module)
loadKoinModules(ListStreamModule().module)
}
ListStreamsScreen(navController = navController,
onNavigateDetailList = { id ->
Expand All @@ -34,7 +35,7 @@ fun NavGraphBuilder.listStreamsNavGraph(navController: NavHostController) {
navController.navigate(Routes.SEARCH)
},
disposable = {
unloadKoinModules(ListStreamModule.module)
unloadKoinModules(ListStreamModule().module)
},
profilePicture = nav.arguments?.getString(PROFILE_ID) ?: DEFAULT_ID
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,10 @@ import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import org.koin.android.annotation.KoinViewModel
import com.codandotv.streamplayerapp.core.shared.ui.R as SharedUiR

@KoinViewModel
class ListStreamViewModel(
private val listStreams: ListStreamUseCase,
private val listGenres: GetGenresUseCase,
Expand Down

0 comments on commit 9a6c1a3

Please sign in to comment.