From d13e31d77fcd9acb83cd885628e64d5829a7697a Mon Sep 17 00:00:00 2001 From: Owen LeJeune Date: Mon, 21 Feb 2022 00:05:31 -0500 Subject: [PATCH] show trailers --- app/build.gradle | 5 + app/src/main/AndroidManifest.xml | 7 +- .../tvtime/api/tmdb/DetailService.kt | 7 +- .../owenlejeune/tvtime/api/tmdb/MoviesApi.kt | 3 + .../tvtime/api/tmdb/MoviesService.kt | 4 + .../com/owenlejeune/tvtime/api/tmdb/TvApi.kt | 3 + .../owenlejeune/tvtime/api/tmdb/TvService.kt | 4 + .../tvtime/api/tmdb/model/Video.kt | 14 ++ .../tvtime/api/tmdb/model/VideoResponse.kt | 7 + .../tvtime/ui/components/Widgets.kt | 151 ++++++++++++++++++ .../tvtime/ui/screens/DetailView.kt | 65 +++++++- .../com/owenlejeune/tvtime/utils/TmdbUtils.kt | 21 +++ build.gradle | 2 + settings.gradle | 2 + 14 files changed, 286 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/Video.kt create mode 100644 app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/VideoResponse.kt diff --git a/app/build.gradle b/app/build.gradle index 0c99fd5..fce5767 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -85,6 +85,11 @@ dependencies { implementation "me.onebone:toolbar-compose:2.3.1" + implementation 'com.google.android.exoplayer:exoplayer:2.16.1' + implementation 'com.github.HaarigerHarald:android-youtubeExtractor:v2.1.0' + implementation 'com.pierfrancescosoffritti.androidyoutubeplayer:core:11.0.1' + implementation 'com.pierfrancescosoffritti.androidyoutubeplayer:chromecast-sender:0.26' + testImplementation "junit:junit:${Versions.junit}" androidTestImplementation "androidx.test.ext:junit:${Versions.androidx_junit}" androidTestImplementation "androidx.test.espresso:espresso-core:${Versions.espresso_core}" diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a3ae9c2..6efa218 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -11,12 +11,13 @@ android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" - android:theme="@style/Theme.TVTime"> + android:theme="@style/Theme.TVTime" + android:usesCleartextTraffic="true"> + android:theme="@style/Theme.TVTime"> + diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/DetailService.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/DetailService.kt index b624a5d..5b546db 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/DetailService.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/DetailService.kt @@ -1,9 +1,6 @@ package com.owenlejeune.tvtime.api.tmdb -import com.owenlejeune.tvtime.api.tmdb.model.CastAndCrew -import com.owenlejeune.tvtime.api.tmdb.model.ImageCollection -import com.owenlejeune.tvtime.api.tmdb.model.DetailedItem -import com.owenlejeune.tvtime.api.tmdb.model.HomePageResponse +import com.owenlejeune.tvtime.api.tmdb.model.* import retrofit2.Response interface DetailService { @@ -16,4 +13,6 @@ interface DetailService { suspend fun getSimilar(id: Int, page: Int): Response + suspend fun getVideos(id: Int): Response + } \ No newline at end of file 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 018e7db..d9bd8b4 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 @@ -35,4 +35,7 @@ interface MoviesApi { @GET("movie/{id}/recommendations") suspend fun getSimilarMovies(@Path("id") id: Int, @Query("page") page: Int = 1): Response + @GET("movie/{id}/videos") + suspend fun getVideos(@Path("id") id: Int): 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 82ea340..75ce209 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 @@ -44,4 +44,8 @@ class MoviesService: KoinComponent, DetailService, HomePageService { return service.getSimilarMovies(id, page) } + override suspend fun getVideos(id: Int): Response { + return service.getVideos(id) + } + } \ 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 9232155..7e62d07 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 @@ -35,4 +35,7 @@ interface TvApi { @GET("tv/{id}/similar") suspend fun getSimilarTvShows(@Path("id") id: Int, @Query("page") page: Int = 1): Response + @GET("tv/{id}/videos") + suspend fun getVideos(@Path("id") id: Int): 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 3c89d37..89e18d4 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 @@ -43,4 +43,8 @@ class TvService: KoinComponent, DetailService, HomePageService { override suspend fun getSimilar(id: Int, page: Int): Response { return service.getSimilarTvShows(id, page) } + + override suspend fun getVideos(id: Int): Response { + return service.getVideos(id) + } } \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/Video.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/Video.kt new file mode 100644 index 0000000..ba0332b --- /dev/null +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/Video.kt @@ -0,0 +1,14 @@ +package com.owenlejeune.tvtime.api.tmdb.model + +import com.google.gson.annotations.SerializedName + +class Video( + @SerializedName("iso_639_1") val language: String, + @SerializedName("iso_3166_1") val region: String, + @SerializedName("name") val name: String, + @SerializedName("key") val key: String, + @SerializedName("site") val site: String, + @SerializedName("size") val size: Int, + @SerializedName("type") val type: String, + @SerializedName("official") val isOfficial: Boolean +) \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/VideoResponse.kt b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/VideoResponse.kt new file mode 100644 index 0000000..d422f02 --- /dev/null +++ b/app/src/main/java/com/owenlejeune/tvtime/api/tmdb/model/VideoResponse.kt @@ -0,0 +1,7 @@ +package com.owenlejeune.tvtime.api.tmdb.model + +import com.google.gson.annotations.SerializedName + +class VideoResponse( + @SerializedName("results") val results: List