Google ads integration for all modules:

1. Webseries
2. karaoke
3. audio books
4. GamesActivity
5. GamePlayerActivity
6. KaraokePlayerActivity
5. FMActivity

Home2Fragment ad size update
This commit is contained in:
2024-09-16 21:00:28 +05:30
parent 1e1531a14b
commit 6cd899cb43
19 changed files with 544 additions and 73 deletions

View File

@@ -17,6 +17,10 @@ import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.SimpleItemAnimator import androidx.recyclerview.widget.SimpleItemAnimator
import com.google.android.gms.ads.AdListener
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.google.android.material.appbar.CollapsingToolbarLayout import com.google.android.material.appbar.CollapsingToolbarLayout
import com.jwplayer.pub.api.media.playlists.PlaylistItem import com.jwplayer.pub.api.media.playlists.PlaylistItem
import com.woka.R import com.woka.R
@@ -34,6 +38,8 @@ import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType import com.woka.database.models.ContentType
import com.woka.databinding.ActivityAudioBooksBinding import com.woka.databinding.ActivityAudioBooksBinding
import com.woka.databinding.DialogModuleShowerBinding import com.woka.databinding.DialogModuleShowerBinding
import com.woka.googleads.AUDIO_BOOKS_BANNER_AD
import com.woka.googleads.AUDIO_BOOKS_TRAILER_AD
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
import com.woka.players.models.VideoPlayList import com.woka.players.models.VideoPlayList
import com.woka.players.models.VideoViewData import com.woka.players.models.VideoViewData
@@ -68,7 +74,7 @@ class AudioBooksActivity : WokaBaseActivity() {
private lateinit var playerLauncher: ActivityResultLauncher<Intent> private lateinit var playerLauncher: ActivityResultLauncher<Intent>
private var adLoaded = false private var customAdLoaded = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@@ -99,6 +105,8 @@ class AudioBooksActivity : WokaBaseActivity() {
noSignInDialog = NoSignInDialog(this) noSignInDialog = NoSignInDialog(this)
customAdLoaded = false
initLaunchers() initLaunchers()
initViews() initViews()
@@ -107,10 +115,10 @@ class AudioBooksActivity : WokaBaseActivity() {
clickEvents() clickEvents()
setObservers()
loadAds() loadAds()
setObservers()
if (!viewModel.audioBookLiveData.isInitialized) { if (!viewModel.audioBookLiveData.isInitialized) {
viewModel.loadAudioSongs() viewModel.loadAudioSongs()
} }
@@ -202,7 +210,7 @@ class AudioBooksActivity : WokaBaseActivity() {
AdClicksHelper.addImpression(adDetails.id) AdClicksHelper.addImpression(adDetails.id)
adLoaded = true customAdLoaded = true
binding.trailerBtn.hide() binding.trailerBtn.hide()
binding.trailerName.hide() binding.trailerName.hide()
@@ -298,6 +306,10 @@ class AudioBooksActivity : WokaBaseActivity() {
newList.size newList.size
) )
} }
if (!customAdLoaded){
loadGoogleAds()
}
} }
} }
} }
@@ -330,9 +342,11 @@ class AudioBooksActivity : WokaBaseActivity() {
} }
private fun loadTrailerData(audioBookData: AudioBookData) { private fun loadTrailerData(audioBookData: AudioBookData) {
if (adLoaded) return
binding.apply { binding.apply {
if (customAdLoaded) {
return
}
trailerView.show() trailerView.show()
adjustTrailerImage() adjustTrailerImage()
@@ -604,4 +618,66 @@ class AudioBooksActivity : WokaBaseActivity() {
} }
} }
} }
private fun loadGoogleAds(){
if (customAdLoaded) return
// banner ad
val adView = AdView(this)
adView.adListener = object : AdListener(){
override fun onAdLoaded() {
super.onAdLoaded()
binding.trailerBtn.hide()
binding.trailerName.hide()
binding.adBtn.hide()
adjustTrailerImage()
}
}
adView.setAdSize(
AdSize.LARGE_BANNER
)
adView.adUnitId = AUDIO_BOOKS_BANNER_AD
binding.toolbarAdsContainer.addView(adView)
adView.loadAd(AdRequest.Builder().build())
// full ad at masila image
binding.trailerImage.post {
val adView2 = AdView(this)
adView2.adListener = object : AdListener(){
override fun onAdLoaded() {
super.onAdLoaded()
binding.trailerBtn.hide()
binding.trailerName.hide()
binding.adBtn.hide()
binding.adsContainer.setBackgroundResource(R.color.black)
adjustTrailerImage()
customAdLoaded = true
}
}
adView2.setAdSize(
AdSize(
binding.trailerImage.width / resources.displayMetrics.density.toInt(),
binding.trailerImage.height / resources.displayMetrics.density.toInt(),
)
)
adView2.adUnitId = AUDIO_BOOKS_TRAILER_AD
binding.adsContainer.removeAllViews()
binding.adsContainer.addView(adView2)
adView2.loadAd(
AdRequest.Builder()
.build()
)
}
}
} }

View File

@@ -1,3 +1,18 @@
package com.woka.googleads package com.woka.googleads
const val TEST_INTERSTITIAL_AD = "ca-app-pub-5699008063638916/6300144761" // WEB SERIES
const val WEB_SERIES_TRAILER_AD = "ca-app-pub-5699008063638916/6110095586"
const val WEB_SERIES_BANNER_AD = "ca-app-pub-5699008063638916/6110095586"
// KARAOKE
const val KARAOKE_TRAILER_AD = "ca-app-pub-5699008063638916/6110095586"
const val KARAOKE_BANNER_AD = "ca-app-pub-5699008063638916/6110095586"
// AUDIO BOOKS
const val AUDIO_BOOKS_TRAILER_AD = "ca-app-pub-5699008063638916/6110095586"
const val AUDIO_BOOKS_BANNER_AD = "ca-app-pub-5699008063638916/6110095586"
// GAME
const val GAME_TRAILER_AD = "ca-app-pub-5699008063638916/6110095586"
const val GAME_BANNER_AD = "ca-app-pub-5699008063638916/6110095586"
const val GAME_INTERSTITIAL_AD = "ca-app-pub-5699008063638916/6300144761"

View File

@@ -11,13 +11,11 @@ import android.content.IntentFilter
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import android.util.DisplayMetrics import android.util.DisplayMetrics
import android.util.Log
import android.util.TypedValue import android.util.TypedValue
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.view.ViewGroup.MarginLayoutParams import android.view.ViewGroup.MarginLayoutParams
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.view.updateLayoutParams import androidx.core.view.updateLayoutParams
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
@@ -45,7 +43,6 @@ import com.woka.streamingurls.StreamingUrlRepository
import com.woka.userPreference.UserType import com.woka.userPreference.UserType
import com.woka.userdata.userDataModels.UserDataResponse import com.woka.userdata.userDataModels.UserDataResponse
import com.woka.utils.ProgressView import com.woka.utils.ProgressView
import com.woka.utils.TAG
import com.woka.utils.changeLocale import com.woka.utils.changeLocale
import com.woka.utils.hide import com.woka.utils.hide
import com.woka.utils.scaleAnimate import com.woka.utils.scaleAnimate
@@ -117,13 +114,11 @@ class Home1Fragment : Fragment() {
// Calculate aspect ratio // Calculate aspect ratio
val aspectRatio = screenHeight.toFloat() / screenWidth.toFloat() val aspectRatio = screenHeight.toFloat() / screenWidth.toFloat()
Log.d(TAG, "setUpDynamicViewSizes: $aspectRatio")
when { when {
aspectRatio > 2.1 -> { aspectRatio > 2.1 -> {
// screen is taller // screen is taller
} }
aspectRatio > 2 -> { aspectRatio > 1.85 -> {
// screen is normal size // screen is normal size
} }
else -> { else -> {

View File

@@ -10,6 +10,7 @@ import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.LinearLayout import android.widget.LinearLayout
import androidx.core.view.updateMargins
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
@@ -27,6 +28,7 @@ import com.woka.audiobooks.views.AudioBooksActivity
import com.woka.database.helpers.ClicksHelper import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType import com.woka.database.models.ContentType
import com.woka.databinding.FragmentHome2Binding import com.woka.databinding.FragmentHome2Binding
import com.woka.googleads.GAME_BANNER_AD
import com.woka.home.viewmodels.HomeViewModel import com.woka.home.viewmodels.HomeViewModel
import com.woka.home.views.FMActivity import com.woka.home.views.FMActivity
import com.woka.karaoke.views.KaraokeActivity import com.woka.karaoke.views.KaraokeActivity
@@ -84,14 +86,16 @@ class Home2Fragment : Fragment() {
} }
private fun loadGoogleAds() { private fun loadGoogleAds() {
binding.adView.adListener = object : AdListener() {
override fun onAdFailedToLoad(p0: LoadAdError) {
super.onAdFailedToLoad(p0)
Log.d("aditya_ad_testing", "onAdFailedToLoad: $p0")
}
}
binding.adView.loadAd( val adView = AdView(requireContext())
adView.adUnitId = GAME_BANNER_AD
adView.setAdSize(AdSize(AdSize.FULL_WIDTH, AdSize.AUTO_HEIGHT))
binding.adsContainer.removeAllViews()
binding.adsContainer.addView(adView)
adView.loadAd(
AdRequest.Builder() AdRequest.Builder()
.build() .build()
) )

View File

@@ -11,10 +11,14 @@ import androidx.media3.common.MediaItem
import androidx.media3.common.PlaybackException import androidx.media3.common.PlaybackException
import androidx.media3.common.Player import androidx.media3.common.Player
import androidx.media3.exoplayer.ExoPlayer import androidx.media3.exoplayer.ExoPlayer
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.woka.R import com.woka.R
import com.woka.database.helpers.ClicksHelper import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType import com.woka.database.models.ContentType
import com.woka.databinding.ActivityFmactivityBinding import com.woka.databinding.ActivityFmactivityBinding
import com.woka.googleads.GAME_BANNER_AD
import com.woka.userdata.UserRepository import com.woka.userdata.UserRepository
import com.woka.userdata.userDataModels.VideoViewRequestData import com.woka.userdata.userDataModels.VideoViewRequestData
import com.woka.utils.TAG import com.woka.utils.TAG
@@ -72,6 +76,8 @@ class FMActivity : WokaBaseActivity() {
setObservers() setObservers()
loadGoogleAds()
playbackStartTime = System.currentTimeMillis() playbackStartTime = System.currentTimeMillis()
} }
@@ -198,6 +204,22 @@ class FMActivity : WokaBaseActivity() {
}) })
} }
private fun loadGoogleAds() {
val adView = AdView(this)
adView.adUnitId = GAME_BANNER_AD
adView.setAdSize(AdSize(AdSize.FULL_WIDTH, 60))
binding.adsContainer.removeAllViews()
binding.adsContainer.addView(adView)
adView.loadAd(
AdRequest.Builder()
.build()
)
}
private fun updateVolumeButtons(){ private fun updateVolumeButtons(){
val volume = (Math.round(player.volume * 10) / 10.0).toFloat() val volume = (Math.round(player.volume * 10) / 10.0).toFloat()
Log.d(TAG, "updateVolumeButtons: $volume") Log.d(TAG, "updateVolumeButtons: $volume")

View File

@@ -188,8 +188,8 @@ class HomeActivity : WokaBaseActivity(),
(getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager).unregisterNetworkCallback(networkCallback) (getSystemService(CONNECTIVITY_SERVICE) as ConnectivityManager).unregisterNetworkCallback(networkCallback)
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
RemoteSync.syncClickEvents() // RemoteSync.syncClickEvents()
RemoteSync.syncAdClickEvents() // RemoteSync.syncAdClickEvents()
} }
} }

View File

@@ -31,10 +31,14 @@ import androidx.media3.common.PlaybackException
import androidx.media3.common.Player import androidx.media3.common.Player
import androidx.media3.common.util.UnstableApi import androidx.media3.common.util.UnstableApi
import androidx.media3.exoplayer.ExoPlayer import androidx.media3.exoplayer.ExoPlayer
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.woka.R import com.woka.R
import com.woka.database.helpers.ClicksHelper import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType import com.woka.database.models.ContentType
import com.woka.databinding.ActivityKaraokePlayerrBinding import com.woka.databinding.ActivityKaraokePlayerrBinding
import com.woka.googleads.GAME_BANNER_AD
import com.woka.players.models.PlayBackState import com.woka.players.models.PlayBackState
import com.woka.userdata.UserRepository import com.woka.userdata.UserRepository
import com.woka.userdata.userDataModels.VideoViewRequestData import com.woka.userdata.userDataModels.VideoViewRequestData
@@ -158,6 +162,8 @@ class KaraokePlayerActivity : WokaBaseActivity() {
loadAudioFromUrl() loadAudioFromUrl()
loadGoogleAds()
onBackPressedDispatcher.addCallback { onBackPressedDispatcher.addCallback {
if (playbackStartTime > 0) { if (playbackStartTime > 0) {
val elapsed = System.currentTimeMillis() - playbackStartTime val elapsed = System.currentTimeMillis() - playbackStartTime
@@ -459,7 +465,7 @@ class KaraokePlayerActivity : WokaBaseActivity() {
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
try { try {
val url = URL(karaokePlayerData?.karaokeVideoUrl) val url = URL("https://content.jwplatform.com/videos/699dmCGz-7bKGpMKj.mp4")
copyStreamToFile(url.openConnection().getInputStream(), File(karaokeMusicPath)) copyStreamToFile(url.openConnection().getInputStream(), File(karaokeMusicPath))
runOnUiThread { runOnUiThread {
binding.recorderView.show() binding.recorderView.show()
@@ -477,6 +483,22 @@ class KaraokePlayerActivity : WokaBaseActivity() {
} }
} }
private fun loadGoogleAds() {
val adView = AdView(this)
adView.adUnitId = GAME_BANNER_AD
adView.setAdSize(AdSize(AdSize.FULL_WIDTH, 100))
binding.adsContainer.removeAllViews()
binding.adsContainer.addView(adView)
adView.loadAd(
AdRequest.Builder()
.build()
)
}
private fun playStopPlayingAudio() { private fun playStopPlayingAudio() {
when (recordingState) { when (recordingState) {
RecordingState.NOT_RECORDING -> { RecordingState.NOT_RECORDING -> {

View File

@@ -18,6 +18,10 @@ import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.SimpleItemAnimator import androidx.recyclerview.widget.SimpleItemAnimator
import com.google.android.gms.ads.AdListener
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.google.android.material.appbar.CollapsingToolbarLayout import com.google.android.material.appbar.CollapsingToolbarLayout
import com.woka.R import com.woka.R
import com.woka.WokaApp.Companion.userPrefs import com.woka.WokaApp.Companion.userPrefs
@@ -28,6 +32,8 @@ import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType import com.woka.database.models.ContentType
import com.woka.databinding.ActivityKaraokeBinding import com.woka.databinding.ActivityKaraokeBinding
import com.woka.databinding.DialogModuleShowerBinding import com.woka.databinding.DialogModuleShowerBinding
import com.woka.googleads.KARAOKE_BANNER_AD
import com.woka.googleads.KARAOKE_TRAILER_AD
import com.woka.karaoke.KaraokeRepository import com.woka.karaoke.KaraokeRepository
import com.woka.karaoke.adapters.ContinueKaraokeAdapter import com.woka.karaoke.adapters.ContinueKaraokeAdapter
import com.woka.karaoke.adapters.KaraokeAdapter import com.woka.karaoke.adapters.KaraokeAdapter
@@ -68,7 +74,7 @@ class KaraokeActivity : WokaBaseActivity() {
private lateinit var playerLauncher: ActivityResultLauncher<Intent> private lateinit var playerLauncher: ActivityResultLauncher<Intent>
private var adLoaded = false private var customAdLoaded = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@@ -101,6 +107,8 @@ class KaraokeActivity : WokaBaseActivity() {
noSignInDialog = NoSignInDialog(this) noSignInDialog = NoSignInDialog(this)
customAdLoaded = false
initLaunchers() initLaunchers()
initViews() initViews()
@@ -109,10 +117,10 @@ class KaraokeActivity : WokaBaseActivity() {
clickEvents() clickEvents()
setObservers()
loadAds() loadAds()
setObservers()
if (!viewModel.karaokeLiveData.isInitialized) { if (!viewModel.karaokeLiveData.isInitialized) {
viewModel.loadKaraokeSongs() viewModel.loadKaraokeSongs()
} }
@@ -202,9 +210,11 @@ class KaraokeActivity : WokaBaseActivity() {
} }
private fun loadTrailerData(karaokeData: KaraokeData) { private fun loadTrailerData(karaokeData: KaraokeData) {
if (adLoaded) return
binding.apply { binding.apply {
if (customAdLoaded) {
return
}
trailerView.show() trailerView.show()
adjustTrailerImage() adjustTrailerImage()
@@ -522,6 +532,10 @@ class KaraokeActivity : WokaBaseActivity() {
newList.size newList.size
) )
} }
if (!customAdLoaded){
loadGoogleAds()
}
} }
} }
} }
@@ -565,7 +579,7 @@ class KaraokeActivity : WokaBaseActivity() {
AdClicksHelper.addImpression(adDetails.id) AdClicksHelper.addImpression(adDetails.id)
adLoaded = true customAdLoaded = true
binding.trailerBtn.hide() binding.trailerBtn.hide()
binding.trailerName.hide() binding.trailerName.hide()
@@ -599,4 +613,66 @@ class KaraokeActivity : WokaBaseActivity() {
} }
} }
} }
private fun loadGoogleAds(){
if (customAdLoaded) return
// banner ad
val adView = AdView(this)
adView.adListener = object : AdListener(){
override fun onAdLoaded() {
super.onAdLoaded()
binding.trailerBtn.hide()
binding.trailerName.hide()
binding.adBtn.hide()
adjustTrailerImage()
}
}
adView.setAdSize(
AdSize.LARGE_BANNER
)
adView.adUnitId = KARAOKE_BANNER_AD
binding.toolbarAdsContainer.addView(adView)
adView.loadAd(AdRequest.Builder().build())
// full ad at masila image
binding.trailerImage.post {
val adView2 = AdView(this)
adView2.adListener = object : AdListener(){
override fun onAdLoaded() {
super.onAdLoaded()
binding.trailerBtn.hide()
binding.trailerName.hide()
binding.adBtn.hide()
binding.adsContainer.setBackgroundResource(R.color.black)
adjustTrailerImage()
customAdLoaded = true
}
}
adView2.setAdSize(
AdSize(
binding.trailerImage.width / resources.displayMetrics.density.toInt(),
binding.trailerImage.height / resources.displayMetrics.density.toInt(),
)
)
adView2.adUnitId = KARAOKE_TRAILER_AD
binding.adsContainer.removeAllViews()
binding.adsContainer.addView(adView2)
adView2.loadAd(
AdRequest.Builder()
.build()
)
}
}
} }

View File

@@ -37,6 +37,8 @@ import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType import com.woka.database.models.ContentType
import com.woka.databinding.DialogContinueEpisodeBinding import com.woka.databinding.DialogContinueEpisodeBinding
import com.woka.databinding.FragmentWebSeriesBinding import com.woka.databinding.FragmentWebSeriesBinding
import com.woka.googleads.WEB_SERIES_BANNER_AD
import com.woka.googleads.WEB_SERIES_TRAILER_AD
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
import com.woka.players.models.VideoPlayList import com.woka.players.models.VideoPlayList
import com.woka.players.models.VideoViewData import com.woka.players.models.VideoViewData
@@ -49,7 +51,6 @@ import com.woka.utils.hide
import com.woka.utils.lightStatusBar import com.woka.utils.lightStatusBar
import com.woka.utils.setVisibility import com.woka.utils.setVisibility
import com.woka.utils.show import com.woka.utils.show
import com.woka.utils.toast
import com.woka.webseries.adapters.ContinueEpisodeAdapter import com.woka.webseries.adapters.ContinueEpisodeAdapter
import com.woka.webseries.adapters.SpinnerAdapter import com.woka.webseries.adapters.SpinnerAdapter
import com.woka.webseries.adapters.WebSeriesShowAdapter import com.woka.webseries.adapters.WebSeriesShowAdapter
@@ -76,6 +77,8 @@ class WebSeriesFragment : Fragment() {
private lateinit var playerLauncher: ActivityResultLauncher<Intent> private lateinit var playerLauncher: ActivityResultLauncher<Intent>
private var isAdLoaded = false
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
@@ -92,6 +95,9 @@ class WebSeriesFragment : Fragment() {
it.window.statusBarColor = 0 it.window.statusBarColor = 0
it.window.lightStatusBar(false) it.window.lightStatusBar(false)
} }
isAdLoaded = false
loadingMore = false
return binding.root return binding.root
} }
@@ -115,7 +121,7 @@ class WebSeriesFragment : Fragment() {
setObservers() setObservers()
loadAds() loadCustomAds()
if (!viewModel.showCategoryLiveData.isInitialized) { if (!viewModel.showCategoryLiveData.isInitialized) {
viewModel.loadCategories() viewModel.loadCategories()
@@ -395,7 +401,7 @@ class WebSeriesFragment : Fragment() {
} }
} }
private fun loadAds(){ private fun loadCustomAds(){
lifecycleScope.launch { lifecycleScope.launch {
AdsRepository.getADs()?.let { ads -> AdsRepository.getADs()?.let { ads ->
val theme1ads = ads.filter { it.for_page == ForPage.WEB_SERIES.value} val theme1ads = ads.filter { it.for_page == ForPage.WEB_SERIES.value}
@@ -405,6 +411,8 @@ class WebSeriesFragment : Fragment() {
AdClicksHelper.addImpression(adDetails.id) AdClicksHelper.addImpression(adDetails.id)
isAdLoaded = true
binding.trailerBtn.hide() binding.trailerBtn.hide()
binding.trailerTxt.hide() binding.trailerTxt.hide()
@@ -438,6 +446,30 @@ class WebSeriesFragment : Fragment() {
} }
private fun loadGoogleAds(){ private fun loadGoogleAds(){
if (isAdLoaded) return
// banner ad
val adView = AdView(requireContext())
adView.adListener = object : AdListener(){
override fun onAdLoaded() {
super.onAdLoaded()
binding.trailerBtn.hide()
binding.trailerTxt.hide()
binding.adBtn.hide()
adjustMasilaImage()
}
}
adView.setAdSize(
AdSize.LARGE_BANNER
)
adView.adUnitId = WEB_SERIES_BANNER_AD
binding.toolbarAdsContainer.addView(adView)
adView.loadAd(AdRequest.Builder().build())
// full ad at masila image
binding.masilaImage.post { binding.masilaImage.post {
val adView2 = AdView(requireContext()) val adView2 = AdView(requireContext())
@@ -446,6 +478,9 @@ class WebSeriesFragment : Fragment() {
super.onAdLoaded() super.onAdLoaded()
binding.trailerBtn.hide() binding.trailerBtn.hide()
binding.trailerTxt.hide() binding.trailerTxt.hide()
binding.adBtn.hide()
binding.adsContainer.setBackgroundResource(R.color.black)
adjustMasilaImage() adjustMasilaImage()
} }
@@ -457,7 +492,7 @@ class WebSeriesFragment : Fragment() {
binding.masilaImage.height / resources.displayMetrics.density.toInt(), binding.masilaImage.height / resources.displayMetrics.density.toInt(),
) )
) )
adView2.adUnitId = "ca-app-pub-5699008063638916/6110095586" adView2.adUnitId = WEB_SERIES_TRAILER_AD
binding.adsContainer.removeAllViews() binding.adsContainer.removeAllViews()
binding.adsContainer.addView(adView2) binding.adsContainer.addView(adView2)

View File

@@ -10,10 +10,14 @@ import android.webkit.WebSettings
import android.webkit.WebViewClient import android.webkit.WebViewClient
import androidx.core.view.WindowCompat import androidx.core.view.WindowCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.woka.R import com.woka.R
import com.woka.database.helpers.ClicksHelper import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType import com.woka.database.models.ContentType
import com.woka.databinding.ActivityGamePlayerBinding import com.woka.databinding.ActivityGamePlayerBinding
import com.woka.googleads.GAME_BANNER_AD
import com.woka.userdata.UserRepository import com.woka.userdata.UserRepository
import com.woka.userdata.userDataModels.VideoViewRequestData import com.woka.userdata.userDataModels.VideoViewRequestData
import com.woka.utils.DecisionDialog import com.woka.utils.DecisionDialog
@@ -61,6 +65,8 @@ class GamePlayerActivity : WokaBaseActivity() {
initWebView(it.gameUrl) initWebView(it.gameUrl)
} }
loadGoogleAds()
binding.webView.setOnTouchListener { _, event -> binding.webView.setOnTouchListener { _, event ->
if (event.action == MotionEvent.ACTION_DOWN){ if (event.action == MotionEvent.ACTION_DOWN){
clicksCount++ clicksCount++
@@ -165,4 +171,20 @@ class GamePlayerActivity : WokaBaseActivity() {
} }
decisionDialog.show() decisionDialog.show()
} }
private fun loadGoogleAds() {
val adView = AdView(this)
adView.adUnitId = GAME_BANNER_AD
adView.setAdSize(AdSize(AdSize.FULL_WIDTH, 60))
binding.adsContainer.removeAllViews()
binding.adsContainer.addView(adView)
adView.loadAd(
AdRequest.Builder()
.build()
)
}
} }

View File

@@ -16,6 +16,10 @@ import androidx.core.view.WindowInsetsCompat
import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.SimpleItemAnimator import androidx.recyclerview.widget.SimpleItemAnimator
import com.google.android.gms.ads.AdListener
import com.google.android.gms.ads.AdRequest
import com.google.android.gms.ads.AdSize
import com.google.android.gms.ads.AdView
import com.google.android.material.appbar.CollapsingToolbarLayout import com.google.android.material.appbar.CollapsingToolbarLayout
import com.woka.R import com.woka.R
import com.woka.WokaApp.Companion.userPrefs import com.woka.WokaApp.Companion.userPrefs
@@ -26,8 +30,10 @@ import com.woka.database.helpers.ClicksHelper
import com.woka.database.models.ContentType import com.woka.database.models.ContentType
import com.woka.databinding.ActivityGamesBinding import com.woka.databinding.ActivityGamesBinding
import com.woka.databinding.DialogModuleShowerBinding import com.woka.databinding.DialogModuleShowerBinding
import com.woka.googleads.GAME_BANNER_AD
import com.woka.googleads.InterstitialAds import com.woka.googleads.InterstitialAds
import com.woka.googleads.TEST_INTERSTITIAL_AD import com.woka.googleads.GAME_INTERSTITIAL_AD
import com.woka.googleads.GAME_TRAILER_AD
import com.woka.networking.ApiResult import com.woka.networking.ApiResult
import com.woka.userPreference.UserType import com.woka.userPreference.UserType
import com.woka.utils.NoSignInDialog import com.woka.utils.NoSignInDialog
@@ -63,7 +69,7 @@ class GamesActivity : WokaBaseActivity() {
private lateinit var noSignInDialog: NoSignInDialog private lateinit var noSignInDialog: NoSignInDialog
private var adLoaded = false private var customAdLoaded = false
private lateinit var interstitialAds: InterstitialAds private lateinit var interstitialAds: InterstitialAds
@@ -94,7 +100,9 @@ class GamesActivity : WokaBaseActivity() {
noSignInDialog.show() noSignInDialog.show()
} }
interstitialAds = InterstitialAds(this, TEST_INTERSTITIAL_AD) interstitialAds = InterstitialAds(this, GAME_INTERSTITIAL_AD)
customAdLoaded = false
initViews() initViews()
@@ -102,10 +110,10 @@ class GamesActivity : WokaBaseActivity() {
clickEvents() clickEvents()
setObservers()
loadAds() loadAds()
setObservers()
if (!viewModel.gamesLiveData.isInitialized){ if (!viewModel.gamesLiveData.isInitialized){
viewModel.loadGames() viewModel.loadGames()
} }
@@ -186,9 +194,11 @@ class GamesActivity : WokaBaseActivity() {
} }
private fun loadTrailerData(gameData: GameData) { private fun loadTrailerData(gameData: GameData) {
if (adLoaded) return
binding.apply { binding.apply {
if (customAdLoaded) {
return
}
trailerView.show() trailerView.show()
adjustTrailerImage() adjustTrailerImage()
@@ -448,6 +458,10 @@ class GamesActivity : WokaBaseActivity() {
newList.size newList.size
) )
} }
if (!customAdLoaded){
loadGoogleAds()
}
} }
} }
} }
@@ -465,7 +479,7 @@ class GamesActivity : WokaBaseActivity() {
AdClicksHelper.addImpression(adDetails.id) AdClicksHelper.addImpression(adDetails.id)
adLoaded = true customAdLoaded = true
binding.trailerBtn.hide() binding.trailerBtn.hide()
binding.trailerName.hide() binding.trailerName.hide()
@@ -499,4 +513,69 @@ class GamesActivity : WokaBaseActivity() {
} }
} }
} }
private fun loadGoogleAds(){
if (customAdLoaded) return
// banner ad
val adView = AdView(this)
adView.adListener = object : AdListener(){
override fun onAdLoaded() {
super.onAdLoaded()
binding.trailerBtn.hide()
binding.trailerName.hide()
binding.adBtn.hide()
adjustTrailerImage()
}
}
adView.setAdSize(
AdSize.LARGE_BANNER
)
adView.adUnitId = GAME_BANNER_AD
binding.toolbarAdsContainer.removeAllViews()
binding.toolbarAdsContainer.addView(adView)
adView.loadAd(AdRequest.Builder().build())
// full ad at masila image
binding.trailerImage.post {
val adView2 = AdView(this)
adView2.adListener = object : AdListener(){
override fun onAdLoaded() {
super.onAdLoaded()
binding.trailerBtn.hide()
binding.trailerName.hide()
binding.adBtn.hide()
binding.adsContainer.setBackgroundResource(R.color.black)
adjustTrailerImage()
customAdLoaded = true
}
}
adView2.setAdSize(
AdSize(
binding.trailerImage.width / resources.displayMetrics.density.toInt(),
binding.trailerImage.height / resources.displayMetrics.density.toInt(),
)
)
adView2.adUnitId = GAME_TRAILER_AD
binding.adsContainer.removeAllViews()
binding.adsContainer.addView(adView2)
adView2.loadAd(
AdRequest.Builder()
.build()
)
}
}
} }

View File

@@ -153,6 +153,14 @@
android:layout_gravity="top" android:layout_gravity="top"
/> />
<LinearLayout
android:id="@+id/ads_container"
android:layout_width="match_parent"
android:layout_height="@dimen/_160sdp"
android:orientation="vertical"
android:gravity="center"
android:translationZ="1dp"/>
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
android:id="@+id/top_pinned_view" android:id="@+id/top_pinned_view"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -227,6 +235,23 @@
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardElevation="0dp"
app:cardCornerRadius="3dp"
app:cardBackgroundColor="@android:color/transparent">
<LinearLayout
android:id="@+id/toolbar_ads_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"/>
</androidx.cardview.widget.CardView>
</LinearLayout> </LinearLayout>
</androidx.appcompat.widget.Toolbar> </androidx.appcompat.widget.Toolbar>

View File

@@ -27,7 +27,6 @@
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:padding="15dp"
android:orientation="vertical" android:orientation="vertical"
android:background="@drawable/img_fm_bg"> android:background="@drawable/img_fm_bg">
@@ -43,6 +42,8 @@
android:src="@drawable/img_fm_masila" android:src="@drawable/img_fm_masila"
android:contentDescription="@string/image" android:contentDescription="@string/image"
android:scaleType="fitXY" android:scaleType="fitXY"
android:layout_marginTop="15dp"
/> />
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
@@ -159,6 +160,15 @@
android:layout_marginTop="15dp" android:layout_marginTop="15dp"
/> />
<LinearLayout
android:id="@+id/ads_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:layout_marginTop="15dp"
/>
</LinearLayout> </LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -11,7 +11,18 @@
<WebView <WebView
android:id="@+id/web_view" android:id="@+id/web_view"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"/> android:layout_height="match_parent"
android:layout_above="@id/ads_container"
/>
<LinearLayout
android:id="@+id/ads_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:layout_alignParentBottom="true"
/>
<androidx.cardview.widget.CardView <androidx.cardview.widget.CardView
android:id="@+id/back_btn" android:id="@+id/back_btn"

View File

@@ -153,6 +153,14 @@
android:layout_gravity="top" android:layout_gravity="top"
/> />
<LinearLayout
android:id="@+id/ads_container"
android:layout_width="match_parent"
android:layout_height="@dimen/_160sdp"
android:orientation="vertical"
android:gravity="center"
android:translationZ="1dp"/>
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
android:id="@+id/top_pinned_view" android:id="@+id/top_pinned_view"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -227,6 +235,23 @@
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardElevation="0dp"
app:cardCornerRadius="3dp"
app:cardBackgroundColor="@android:color/transparent">
<LinearLayout
android:id="@+id/toolbar_ads_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"/>
</androidx.cardview.widget.CardView>
</LinearLayout> </LinearLayout>
</androidx.appcompat.widget.Toolbar> </androidx.appcompat.widget.Toolbar>

View File

@@ -143,6 +143,14 @@
android:src="@drawable/img_masila_full" android:src="@drawable/img_masila_full"
app:layout_collapseMode="parallax" /> app:layout_collapseMode="parallax" />
<LinearLayout
android:id="@+id/ads_container"
android:layout_width="match_parent"
android:layout_height="@dimen/_160sdp"
android:orientation="vertical"
android:gravity="center"
android:translationZ="1dp"/>
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
android:id="@+id/top_pinned_view" android:id="@+id/top_pinned_view"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -216,6 +224,23 @@
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardElevation="0dp"
app:cardCornerRadius="3dp"
app:cardBackgroundColor="@android:color/transparent">
<LinearLayout
android:id="@+id/toolbar_ads_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"/>
</androidx.cardview.widget.CardView>
</LinearLayout> </LinearLayout>
</androidx.appcompat.widget.Toolbar> </androidx.appcompat.widget.Toolbar>

View File

@@ -14,6 +14,18 @@
android:layout_height="match_parent" android:layout_height="match_parent"
> >
<LinearLayout
android:id="@+id/ads_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"
android:layout_below="@id/constraintLayout"
android:layout_marginTop="15dp"
/>
<androidx.media3.ui.PlayerView <androidx.media3.ui.PlayerView
android:id="@+id/player_view" android:id="@+id/player_view"
android:layout_width="match_parent" android:layout_width="match_parent"
@@ -24,50 +36,50 @@
/> />
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/constraintLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<ImageView <ImageView
android:id="@+id/back_btn" android:id="@+id/back_btn"
style="@style/ExoStyledControls.Button.Center.PlayPause"
android:layout_width="25dp" android:layout_width="25dp"
android:layout_height="25dp" android:layout_height="25dp"
android:contentDescription="@string/image"
android:src="@drawable/ic_close"
android:layout_margin="25dp" android:layout_margin="25dp"
android:contentDescription="@string/image"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:padding="5dp" android:padding="5dp"
android:src="@drawable/ic_close"
app:layout_constraintBottom_toBottomOf="parent"
style="@style/ExoStyledControls.Button.Center.PlayPause" app:layout_constraintStart_toStartOf="parent"
/>
app:layout_constraintTop_toTopOf="parent" />
<TextView <TextView
android:id="@+id/title" android:id="@+id/title"
style="@style/ExoStyledControls.Button.Center.PlayPause"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:fontFamily="@font/exo_2_bold" android:layout_margin="15dp"
android:textColor="@color/white"
android:textSize="@dimen/_14ssp"
android:textAlignment="center"
android:ems="10"
android:maxLines="1"
android:ellipsize="end" android:ellipsize="end"
android:layout_gravity="center_horizontal" android:ems="10"
android:fontFamily="@font/exo_2_bold"
android:maxLines="1"
android:layout_margin="15dp" android:textAlignment="center"
android:textColor="@color/white"
android:textSize="@dimen/_14ssp"
app:layout_constraintBottom_toBottomOf="@id/back_btn"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/back_btn" app:layout_constraintTop_toTopOf="@id/back_btn"
app:layout_constraintBottom_toBottomOf="@id/back_btn"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
style="@style/ExoStyledControls.Button.Center.PlayPause"
/> />

View File

@@ -531,15 +531,14 @@
</HorizontalScrollView> </HorizontalScrollView>
<com.google.android.gms.ads.AdView <LinearLayout
xmlns:ads="http://schemas.android.com/apk/res-auto" android:id="@+id/ads_container"
android:id="@+id/ad_view" android:layout_width="match_parent"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="center_horizontal" android:orientation="vertical"
android:gravity="center"
android:layout_marginTop="25dp" android:layout_marginTop="25dp"
ads:adSize="320x100" />
ads:adUnitId="ca-app-pub-5699008063638916/6110095586" />
<TextView <TextView
android:id="@+id/coming_soon_txt" android:id="@+id/coming_soon_txt"

View File

@@ -155,6 +155,7 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="@dimen/_160sdp" android:layout_height="@dimen/_160sdp"
android:orientation="vertical" android:orientation="vertical"
android:gravity="center"
android:translationZ="1dp"/> android:translationZ="1dp"/>
<androidx.appcompat.widget.Toolbar <androidx.appcompat.widget.Toolbar
@@ -233,6 +234,23 @@
</androidx.cardview.widget.CardView> </androidx.cardview.widget.CardView>
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardElevation="0dp"
app:cardCornerRadius="3dp"
app:cardBackgroundColor="@android:color/transparent">
<LinearLayout
android:id="@+id/toolbar_ads_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center"/>
</androidx.cardview.widget.CardView>
</LinearLayout> </LinearLayout>
</androidx.appcompat.widget.Toolbar> </androidx.appcompat.widget.Toolbar>