Skip to content

Commit

Permalink
last
Browse files Browse the repository at this point in the history
  • Loading branch information
OmarLkhalil committed Aug 12, 2023
1 parent d15da1c commit 532695f
Show file tree
Hide file tree
Showing 8 changed files with 107 additions and 109 deletions.
33 changes: 9 additions & 24 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -58,44 +58,29 @@ android {

dependencies {

implementation(libs.androidx.core.ktx)
implementation(libs.leanback)
implementation(libs.androidx.appcompat)
implementation(libs.google.android.material)
implementation(libs.accompanist.navigation.animation)
implementation(libs.accompanist.placeholder)
implementation(libs.androidx.lifecycle.runtime)
implementation(libs.qrcode)
implementation(libs.line.awesome.icons)

// Modules
implementation (project(":common"))
implementation (project(":feature:details"))
implementation (project(":feature:home"))
implementation (project(":feature:search"))
implementation(libs.androidx.core.ktx)


// compose
val composeBom = platform(libs.androidx.compose.bom)
implementation(composeBom)
androidTestImplementation(composeBom)

implementation(libs.accompanist.navigation.animation)
implementation(libs.accompanist.placeholder)
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.materialWindow)
implementation(libs.androidx.compose.material.iconsExtended)

implementation(libs.androidx.compose.ui.tooling.preview)
debugImplementation(libs.androidx.compose.ui.tooling)

implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.constraintlayout.compose)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.lifecycle.viewModelCompose)

implementation(libs.androidx.tv.material)
implementation(libs.androidx.tv.foundation)
implementation(libs.androidx.compose.material)

// dagger - hilt
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
implementation(libs.androidx.hilt.navigation.compose)

// retrofit
implementation(libs.retrofit)
implementation(libs.retrofit.gson)
}
6 changes: 3 additions & 3 deletions common/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,10 @@ plugins {

android {
namespace = "com.mobilebreakero.common"
compileSdk = 33
compileSdk = libs.versions.compileSdk.get().toInt()

defaultConfig {
minSdk = 24

minSdk = libs.versions.minSdkTv.get().toInt()
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
}
Expand All @@ -38,6 +37,7 @@ android {

dependencies {

implementation(libs.androidx.core.ktx)

// retrofit
implementation(libs.retrofit.gson)
Expand Down
34 changes: 15 additions & 19 deletions feature/details/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ plugins {

android {
namespace = "com.mobilebreakero.details"
compileSdk = 33
compileSdk = libs.versions.compileSdk.get().toInt()

defaultConfig {
minSdk = 24
minSdk = libs.versions.minSdkTv.get().toInt()

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
Expand Down Expand Up @@ -54,30 +54,29 @@ android {
dependencies {

// jetpack compose
implementation(libs.accompanist.navigation.animation)
implementation(libs.accompanist.placeholder)
implementation(libs.androidx.lifecycle.runtime)
implementation(libs.androidx.core.ktx)
val composeBom = platform(libs.androidx.compose.bom)
implementation(composeBom)
androidTestImplementation(composeBom)

// compose material
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.materialWindow)
implementation(libs.androidx.compose.ui.tooling.preview)
debugImplementation(libs.androidx.compose.ui.tooling)
implementation(libs.androidx.compose.material)

// compose navigation
implementation(libs.androidx.navigation.compose)


// lifecycle
implementation(libs.androidx.lifecycle.runtime)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.lifecycle.viewModelCompose)
implementation(libs.coil.compose)

//Hilt
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
implementation(libs.androidx.hilt.navigation.compose)

//ViewModel && Lifecycle
implementation(libs.androidx.lifecycle.viewModelCompose)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.lifecycle.runtime)

// core Kotlin
implementation(libs.androidx.core.ktx)
Expand All @@ -89,13 +88,10 @@ dependencies {
// common module
implementation(project(":common"))

// Media3 ExoPlayer
implementation(libs.media3.ui)
implementation(libs.media3.exoplayer.dash)
implementation(libs.media3.datasource.cronet)
implementation(libs.media3.exoplayer)
implementation(libs.androidx.media3.ui)
// coil compose
implementation(libs.coil.compose)

// youtube video player
implementation ("com.pierfrancescosoffritti.androidyoutubeplayer:core:12.1.0")

}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.mobilebreakero

import android.util.Log
import androidx.compose.runtime.State
import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
Expand All @@ -19,18 +20,18 @@ class VideosViewModel @Inject constructor(private val getVideosUseCase: VideosUs
val _state = mutableStateOf(DetailsState())
var videoKey = mutableStateOf(String())

var videos: State<DetailsState> = _state

fun fetchVideos(movieId: String) {
try {
getVideosUseCase(movieId).onEach { result ->
when (result) {
is Resource.Success -> {
_state.value = DetailsState(
video = result.data!!.videos
video = result.data?.videos ?: emptyList()
)
if (result.data!!.videos.isNotEmpty()) {
videoKey.value = result.data!!.videos[0].key.toString()
Log.e("VideosViewModel", "fetchVideoDetails: $videoKey")
} else {
Log.e("VideosViewModel", "fetchVideoDetails: Video list is empty")
}
Expand All @@ -42,7 +43,9 @@ class VideosViewModel @Inject constructor(private val getVideosUseCase: VideosUs
)
}

else -> {}
else -> {
_state.value = DetailsState(isLoading = true)
}
}
}.launchIn(viewModelScope)
} catch (e: Exception) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
package com.mobilebreakero.components

import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.LifecycleOwner
import androidx.navigation.NavController
import com.mobilebreakero.VideosViewModel
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.AbstractYouTubePlayerListener
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView

@Composable
fun TrailsVideos(
navController: NavController,
lifecycle: LifecycleOwner,
movieId: String,
viewModel: VideosViewModel = hiltViewModel(),
) {

val videoKey = remember { viewModel.videoKey }

LaunchedEffect(Unit) {
viewModel.fetchVideos(movieId)
}

AndroidView(
modifier = Modifier
.fillMaxSize()
.padding(8.dp)
.clip(RoundedCornerShape(16.dp)),
factory = { context ->
YouTubePlayerView(
context = context,
).apply {
lifecycle.lifecycle.addObserver(this)
addYouTubePlayerListener(object : AbstractYouTubePlayerListener() {
override fun onReady(youTubePlayer: YouTubePlayer) {
youTubePlayer.loadVideo(videoKey.value, 0f)
}
})
}
}
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,67 +3,29 @@ package com.mobilebreakero.details
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.LifecycleOwner
import androidx.navigation.NavController
import com.mobilebreakero.VideosViewModel
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.YouTubePlayer
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.listeners.AbstractYouTubePlayerListener
import com.pierfrancescosoffritti.androidyoutubeplayer.core.player.views.YouTubePlayerView
import com.mobilebreakero.components.TrailsVideos

@Composable
fun DetailsScreen(
navController: NavController,
lifecycle: LifecycleOwner,
movieId: String,
viewModel: VideosViewModel = hiltViewModel(),
) {

val url = remember {
viewModel.videoKey
}

LaunchedEffect(Unit) {
viewModel.fetchVideos(movieId)
}

Column(
modifier = Modifier
.fillMaxSize()
.background(Color.Black)
.verticalScroll(rememberScrollState())
) {
AndroidView(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp)
.clip(RoundedCornerShape(16.dp)),
factory = { context ->

YouTubePlayerView(
context = context,
).apply {
lifecycle.lifecycle.addObserver(this)
addYouTubePlayerListener(object : AbstractYouTubePlayerListener() {
override fun onReady(youTubePlayer: YouTubePlayer) {
youTubePlayer.loadVideo(url.value, 0f)
}
})
}
}
)
{
TrailsVideos(
navController = navController,
lifecycle = lifecycle,
movieId = movieId,
)
}
}
28 changes: 13 additions & 15 deletions feature/home/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,10 @@ plugins {

android {
namespace = "com.mobilebreakero.home"
compileSdk = 33
compileSdk = libs.versions.compileSdk.get().toInt()

defaultConfig {
minSdk = 24
minSdk = libs.versions.minSdkTv.get().toInt()

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles("consumer-rules.pro")
Expand Down Expand Up @@ -54,41 +54,39 @@ android {
dependencies {


// compose core
implementation(libs.androidx.core.ktx)
implementation(libs.leanback)
implementation(libs.androidx.appcompat)
implementation(libs.google.android.material)
implementation(libs.accompanist.navigation.animation)
implementation(libs.accompanist.placeholder)
implementation(libs.androidx.lifecycle.runtime)


val composeBom = platform(libs.androidx.compose.bom)
implementation(composeBom)
androidTestImplementation(composeBom)

// compose ui material
implementation(libs.androidx.compose.material3)
implementation(libs.androidx.compose.materialWindow)
implementation(libs.androidx.compose.material)
implementation (project(":common"))

implementation(libs.androidx.compose.ui.tooling.preview)
debugImplementation(libs.androidx.compose.ui.tooling)

// compose navigation
implementation(libs.androidx.navigation.compose)
implementation(libs.androidx.constraintlayout.compose)

// lifecycle
implementation(libs.androidx.lifecycle.runtime)
implementation(libs.androidx.lifecycle.runtime.compose)
implementation(libs.androidx.lifecycle.viewModelCompose)

// tv material
implementation(libs.androidx.tv.material)
implementation(libs.androidx.tv.foundation)

// dagger - hilt
implementation(libs.hilt.android)
kapt(libs.hilt.compiler)
implementation(libs.androidx.hilt.navigation.compose)

// pagination
implementation(libs.paging.compose)
implementation(libs.paging)

// coil compose
implementation(libs.coil.compose)


Expand Down
1 change: 1 addition & 0 deletions feature/search/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ dependencies {
implementation(libs.androidx.lifecycle.runtime)
implementation(libs.qrcode)
implementation(libs.line.awesome.icons)
implementation("androidx.core:core-ktx:+")


val composeBom = platform(libs.androidx.compose.bom)
Expand Down

0 comments on commit 532695f

Please sign in to comment.