diff --git a/app/build.gradle b/app/build.gradle index ff362d5..b63211f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -56,66 +56,66 @@ ext.jwPlayerVersion = '4.17.0' ext.exoplayerVersion = '1.3.1' dependencies { - implementation 'com.googlecode.libphonenumber:libphonenumber:8.12.32' + implementation libs.libphonenumber - implementation "com.facebook.shimmer:shimmer:0.5.0" + implementation libs.shimmer - implementation "com.airbnb.android:lottie:6.4.0" - implementation "androidx.core:core-splashscreen:1.0.1" + implementation libs.lottie + implementation libs.androidx.core.splashscreen - implementation 'com.google.android.flexbox:flexbox:3.0.0' + implementation libs.flexbox - implementation 'com.github.bumptech.glide:glide:4.16.0' + implementation libs.glide // dynamics text sizes - implementation 'com.intuit.ssp:ssp-android:1.1.1' + implementation libs.ssp.android // dynamic sizes - implementation 'com.intuit.sdp:sdp-android:1.1.1' + implementation libs.sdp.android // retrofit - def retrofit_version = "2.11.0" - implementation "com.squareup.retrofit2:retrofit:$retrofit_version" - implementation "com.squareup.retrofit2:converter-gson:$retrofit_version" - implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") + implementation libs.retrofit + implementation libs.converter.gson + implementation(libs.logging.interceptor) - def lifecycle_version = "2.7.0" // ViewModel - implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version" - implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version") + implementation libs.androidx.lifecycle.viewmodel.ktx + implementation(libs.androidx.lifecycle.livedata.ktx) // circle image view - implementation 'de.hdodenhof:circleimageview:3.1.0' + implementation libs.circleimageview // jwplayer - implementation "com.jwplayer:jwplayer-core:$jwPlayerVersion" - implementation "com.jwplayer:jwplayer-common:$jwPlayerVersion" + implementation libs.jwplayer.core + implementation libs.jwplayer.common + implementation libs.jwplayer.ima + implementation libs.interactivemedia + implementation libs.play.services.ads.identifier // media player 3 - def media3_version = "1.3.1" - implementation "androidx.media3:media3-exoplayer:$media3_version" + implementation libs.androidx.media3.exoplayer // For DASH playback support with ExoPlayer - implementation "androidx.media3:media3-exoplayer-dash:$media3_version" + implementation libs.androidx.media3.exoplayer.dash // For HLS playback support with ExoPlayer - implementation "androidx.media3:media3-exoplayer-hls:$media3_version" + implementation libs.androidx.media3.exoplayer.hls // For SmoothStreaming playback support with ExoPlayer - implementation "androidx.media3:media3-exoplayer-smoothstreaming:$media3_version" + implementation libs.androidx.media3.exoplayer.smoothstreaming // Common functionality for reading and writing media containers - implementation "androidx.media3:media3-container:$media3_version" + implementation libs.androidx.media3.container // Common functionality for media database components - implementation "androidx.media3:media3-database:$media3_version" + implementation libs.androidx.media3.database // Common functionality for media decoders - implementation "androidx.media3:media3-decoder:$media3_version" + implementation libs.androidx.media3.decoder // Common functionality for loading data - implementation "androidx.media3:media3-datasource:$media3_version" + implementation libs.androidx.media3.datasource // Common functionality used across multiple media libraries - implementation "androidx.media3:media3-common:$media3_version" + implementation libs.androidx.media3.common // For extracting data from media containers - implementation "androidx.media3:media3-extractor:$media3_version" + implementation libs.androidx.media3.extractor // For building media playback UIs - implementation "androidx.media3:media3-ui:$media3_version" + implementation libs.androidx.media3.ui // audio mixer for karaoke - implementation("com.github.ZeroOneZeroR:android_audio_mixer:v1.1") + implementation(libs.android.audio.mixer) // one-signal implementation(libs.onesignal) diff --git a/app/src/main/java/com/woka/players/views/PlayerActivity.kt b/app/src/main/java/com/woka/players/views/PlayerActivity.kt index f776001..2239e34 100644 --- a/app/src/main/java/com/woka/players/views/PlayerActivity.kt +++ b/app/src/main/java/com/woka/players/views/PlayerActivity.kt @@ -15,9 +15,11 @@ import com.jwplayer.pub.api.JWPlayer import com.jwplayer.pub.api.PauseReason import com.jwplayer.pub.api.PlayReason import com.jwplayer.pub.api.configuration.PlayerConfig +import com.jwplayer.pub.api.configuration.ads.ima.ImaAdvertisingConfig import com.jwplayer.pub.api.events.EventType import com.jwplayer.pub.api.events.listeners.VideoPlayerEvents import com.jwplayer.pub.api.fullscreen.FullscreenHandler +import com.jwplayer.pub.api.media.ads.AdBreak import com.woka.database.helpers.ClicksHelper import com.woka.database.models.ContentType import com.woka.databinding.ActivityPlayerBinding @@ -30,6 +32,7 @@ import com.woka.utils.WokaBaseActivity import com.woka.utils.hide import com.woka.utils.show + private const val TAG = "PlayerActivity_TAG" class PlayerActivity : WokaBaseActivity(), FullscreenHandler { @@ -166,8 +169,22 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler { private fun setUpPlayer(){ player = binding.playerView.getPlayer(this) + val adSchedule = mutableListOf() + + val adBreak = AdBreak.Builder() + .tag("https://pubads.g.doubleclick.net/gampad/ads?iu=/21775744923/external/single_preroll_skippable&sz=640x480&ciu_szs=300x250%2C728x90&gdfp_req=1&output=vast&unviewed_position_start=1&env=vp&impl=s&correlator=") + .offset("25%") + .build() + + adSchedule.add(adBreak) + + val imaAdvertising = ImaAdvertisingConfig.Builder() + .schedule(adSchedule) + .build() + config = PlayerConfig.Builder() .playlist(videoPlayList?.playlist) + .advertisingConfig(imaAdvertising) .build() // to keep up the screen om when video is being played diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1777f69..04c6add 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,19 +1,33 @@ [versions] agp = "8.3.0" +android_audio_mixer = "v1.1" +circleimageview = "3.1.0" +coreSplashscreen = "1.0.1" +glide = "4.16.0" +flexbox = "3.0.0" +interactivemedia = "3.35.0" +jwPlayerVersion = "4.17.0" kotlin = "2.0.0" coreKtx = "1.12.0" junit = "4.13.2" junitVersion = "1.1.5" espressoCore = "3.5.1" appcompat = "1.6.1" +libphonenumber = "8.12.32" +lifecycleViewmodelKtx = "2.7.0" +loggingInterceptor = "4.12.0" +lottie = "6.4.0" material = "1.11.0" activity = "1.8.0" constraintlayout = "2.1.4" +media3Exoplayer = "1.3.1" navigationFragmentKtx = "2.7.7" navigationUiKtx = "2.7.7" navigationSafeArgs = "2.7.7" onesignal = "5.1.20" playServicesAds = "23.3.0" +playServicesAdsIdentifier = "18.1.0" +retrofit = "2.11.0" roomKtx = "2.6.1" roomRuntime = "2.6.1" ksp = "2.0.0-1.0.24" @@ -22,14 +36,43 @@ firebaseAnalytics = "22.0.2" firebasePerf = "21.0.1" gradle = "8.3.0" perfPlugin = "1.4.2" +sdpAndroid = "1.1.1" +shimmer = "0.5.0" +sspAndroid = "1.1.1" [libraries] +android_audio_mixer = { module = "com.github.ZeroOneZeroR:android_audio_mixer", version.ref = "android_audio_mixer" } androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } +androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "coreSplashscreen" } +androidx-lifecycle-livedata-ktx = { module = "androidx.lifecycle:lifecycle-livedata-ktx", version.ref = "lifecycleViewmodelKtx" } +androidx-lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "lifecycleViewmodelKtx" } +androidx-media3-common = { module = "androidx.media3:media3-common", version.ref = "media3Exoplayer" } +androidx-media3-container = { module = "androidx.media3:media3-container", version.ref = "media3Exoplayer" } +androidx-media3-decoder = { module = "androidx.media3:media3-decoder", version.ref = "media3Exoplayer" } +androidx-media3-database = { module = "androidx.media3:media3-database", version.ref = "media3Exoplayer" } +androidx-media3-datasource = { module = "androidx.media3:media3-datasource", version.ref = "media3Exoplayer" } +androidx-media3-exoplayer-dash = { module = "androidx.media3:media3-exoplayer-dash", version.ref = "media3Exoplayer" } +androidx-media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "media3Exoplayer" } +androidx-media3-exoplayer-hls = { module = "androidx.media3:media3-exoplayer-hls", version.ref = "media3Exoplayer" } +androidx-media3-exoplayer-smoothstreaming = { module = "androidx.media3:media3-exoplayer-smoothstreaming", version.ref = "media3Exoplayer" } +androidx-media3-extractor = { module = "androidx.media3:media3-extractor", version.ref = "media3Exoplayer" } +androidx-media3-ui = { module = "androidx.media3:media3-ui", version.ref = "media3Exoplayer" } androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "roomRuntime" } +circleimageview = { module = "de.hdodenhof:circleimageview", version.ref = "circleimageview" } +converter-gson = { module = "com.squareup.retrofit2:converter-gson", version.ref = "retrofit" } +glide = { module = "com.github.bumptech.glide:glide", version.ref = "glide" } +flexbox = { module = "com.google.android.flexbox:flexbox", version.ref = "flexbox" } +interactivemedia = { module = "com.google.ads.interactivemedia.v3:interactivemedia", version.ref = "interactivemedia" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } androidx-appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "appcompat" } +jwplayer-common = { module = "com.jwplayer:jwplayer-common", version.ref = "jwPlayerVersion" } +jwplayer-core = { module = "com.jwplayer:jwplayer-core", version.ref = "jwPlayerVersion" } +jwplayer-ima = { module = "com.jwplayer:jwplayer-ima", version.ref = "jwPlayerVersion" } +libphonenumber = { module = "com.googlecode.libphonenumber:libphonenumber", version.ref = "libphonenumber" } +logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "loggingInterceptor" } +lottie = { module = "com.airbnb.android:lottie", version.ref = "lottie" } material = { group = "com.google.android.material", name = "material", version.ref = "material" } androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } androidx-constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" } @@ -37,12 +80,17 @@ androidx-navigation-fragment-ktx = { group = "androidx.navigation", name = "navi androidx-navigation-ui-ktx = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "navigationUiKtx" } onesignal = { module = "com.onesignal:OneSignal", version.ref = "onesignal" } play-services-ads = { module = "com.google.android.gms:play-services-ads", version.ref = "playServicesAds" } +play-services-ads-identifier = { module = "com.google.android.gms:play-services-ads-identifier", version.ref = "playServicesAdsIdentifier" } +retrofit = { module = "com.squareup.retrofit2:retrofit", version.ref = "retrofit" } room-ktx = { module = "androidx.room:room-ktx", version.ref = "roomKtx" } google-services = { group = "com.google.gms", name = "google-services", version.ref = "googleServices" } firebase-analytics = { group = "com.google.firebase", name = "firebase-analytics", version.ref = "firebaseAnalytics" } firebase-perf = { group = "com.google.firebase", name = "firebase-perf", version.ref = "firebasePerf" } gradle = { group = "com.android.tools.build", name = "gradle", version.ref = "gradle" } perf-plugin = { group = "com.google.firebase", name = "perf-plugin", version.ref = "perfPlugin" } +sdp-android = { module = "com.intuit.sdp:sdp-android", version.ref = "sdpAndroid" } +shimmer = { module = "com.facebook.shimmer:shimmer", version.ref = "shimmer" } +ssp-android = { module = "com.intuit.ssp:ssp-android", version.ref = "sspAndroid" } [plugins] androidApplication = { id = "com.android.application", version.ref = "agp" }