From d2571bc3864f4d09eb1b2b4141ced097c3aeb421 Mon Sep 17 00:00:00 2001 From: Owen LeJeune Date: Thu, 10 Feb 2022 21:44:41 -0500 Subject: [PATCH] replace retrofit calls with coroutines --- app/build.gradle | 3 +++ .../owenlejeune/tvtime/api/tmdb/MoviesApi.kt | 5 ++-- .../tvtime/api/tmdb/MoviesService.kt | 23 +------------------ .../com/owenlejeune/tvtime/api/tmdb/TvApi.kt | 4 ++-- .../owenlejeune/tvtime/api/tmdb/TvService.kt | 20 +--------------- .../tvtime/ui/screens/tabs/MoviesTab.kt | 13 ++++++++--- .../tvtime/ui/screens/tabs/TvTab.kt | 13 ++++++++--- 7 files changed, 29 insertions(+), 52 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 4c664e5..091a035 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -79,6 +79,9 @@ dependencies { implementation Dependencies.Coil.coil + //Coroutines + implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0' + testImplementation Dependencies.Testing.junit androidTestImplementation Dependencies.Testing.androidXJunit androidTestImplementation Dependencies.Testing.espressoCore diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/MoviesApi.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/MoviesApi.kt index a5073dc..3d7ea27 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/MoviesApi.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/MoviesApi.kt @@ -1,14 +1,13 @@ package com.owenlejeune.tvtime.api.tmdb import com.owenlejeune.tvtime.api.tmdb.model.PopularMoviesResponse -import retrofit2.Call +import retrofit2.Response import retrofit2.http.GET import retrofit2.http.Query interface MoviesApi { @GET("movie/popular") - fun getPopularMovies(@Query("page") page: Int = 1): Call -// suspend fun getPopularMovies(@Query("page") page: Int = 1): PopularMoviesResponse + suspend fun getPopularMovies(@Query("page") page: Int = 1): Response } \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/MoviesService.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/MoviesService.kt index cca35a9..5be1b3e 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/MoviesService.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/MoviesService.kt @@ -1,32 +1,11 @@ package com.owenlejeune.tvtime.api.tmdb -import com.owenlejeune.tvtime.api.tmdb.model.PopularMoviesResponse import org.koin.core.component.KoinComponent -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response class MoviesService: KoinComponent { private val service by lazy { TmdbClient().createMovieService() } - fun getPopularMovies(page: Int = 1, callback: (isSuccessful: Boolean, response: PopularMoviesResponse?) -> Unit) { - service.getPopularMovies(page = page).enqueue(object : Callback { - override fun onResponse( - call: Call, - response: Response - ) { - response.body()?.let { body -> - callback.invoke(true, body) - } ?: run { - callback.invoke(false, null) - } - } - - override fun onFailure(call: Call, t: Throwable) { - callback.invoke(false, null) - } - }) - } + suspend fun getPopularMovies(page: Int = 1) = service.getPopularMovies(page) } \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/TvApi.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/TvApi.kt index 18ad055..de7a7b0 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/TvApi.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/TvApi.kt @@ -1,13 +1,13 @@ package com.owenlejeune.tvtime.api.tmdb import com.owenlejeune.tvtime.api.tmdb.model.PopularTvResponse -import retrofit2.Call +import retrofit2.Response import retrofit2.http.GET import retrofit2.http.Query interface TvApi { @GET("tv/popular") - fun getPoplarTv(@Query("page") page: Int = 1): Call + suspend fun getPoplarTv(@Query("page") page: Int = 1): Response } \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/TvService.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/TvService.kt index 43c3787..acc2eb4 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/TvService.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/TvService.kt @@ -1,28 +1,10 @@ package com.owenlejeune.tvtime.api.tmdb -import com.owenlejeune.tvtime.api.tmdb.model.PopularTvResponse import org.koin.core.component.KoinComponent -import retrofit2.Call -import retrofit2.Callback -import retrofit2.Response class TvService: KoinComponent { private val service by lazy { TmdbClient().createTvService() } - fun getPopularTv(page: Int = 1, callback: (isSuccessful: Boolean, response: PopularTvResponse?) -> Unit) { - service.getPoplarTv(page = page).enqueue(object : Callback { - override fun onResponse(call: Call, response: Response) { - response.body()?.let { body -> - callback.invoke(true, body) - } ?: run { - callback.invoke(false, null) - } - } - - override fun onFailure(call: Call, t: Throwable) { - callback.invoke(false, null) - } - }) - } + suspend fun getPopularTv(page: Int = 1) = service.getPoplarTv(page) } \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/MoviesTab.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/MoviesTab.kt index 5e7bf0c..4ed41f6 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/MoviesTab.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/MoviesTab.kt @@ -5,6 +5,10 @@ import androidx.compose.runtime.Composable import androidx.navigation.NavController import com.owenlejeune.tvtime.api.tmdb.MoviesService import com.owenlejeune.tvtime.ui.components.PosterGrid +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext @OptIn(ExperimentalFoundationApi::class) @Composable @@ -14,9 +18,12 @@ fun MoviesTab(appNavController: NavController) { // val movieListItems: LazyPagingItems = moviesList.collectAsLazyPagingItems() PosterGrid(appNavController = appNavController) { moviesList -> val service = MoviesService() - service.getPopularMovies { isSuccessful, response -> - if (isSuccessful) { - moviesList.value = response!!.movies + CoroutineScope(Dispatchers.IO).launch { + val response = service.getPopularMovies() + if (response.isSuccessful) { + withContext(Dispatchers.Main) { + moviesList.value = response.body()!!.movies + } } } } diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/TvTab.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/TvTab.kt index 1c9a2bf..85da06e 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/TvTab.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/screens/tabs/TvTab.kt @@ -5,15 +5,22 @@ import androidx.compose.runtime.Composable import androidx.navigation.NavController import com.owenlejeune.tvtime.api.tmdb.TvService import com.owenlejeune.tvtime.ui.components.PosterGrid +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext @OptIn(ExperimentalFoundationApi::class) @Composable fun TvTab(appNavController: NavController) { PosterGrid(appNavController = appNavController) { tvList -> val service = TvService() - service.getPopularTv { isSuccessful, response -> - if (isSuccessful) { - tvList.value = response!!.tv + CoroutineScope(Dispatchers.IO).launch { + val response = service.getPopularTv() + if (response.isSuccessful) { + withContext(Dispatchers.Main) { + tvList.value = response.body()!!.tv + } } } }