From ffefede40ca6083813d317c06d0a19abec7b286b Mon Sep 17 00:00:00 2001 From: AdityaGaikwad Date: Tue, 1 Oct 2024 20:11:28 +0530 Subject: [PATCH] Added custom ads to fm, more, notifications, mylist and blogs screen. Added interstitial ad to LiveStreamPlayerActivity AdiImageView failure callback to handle error on Home1Fragment custom ads testing code to load ads everytime user visits Home1Fragment --- .../com/woka/advertisements/AdsRepository.kt | 6 ++ .../com/woka/advertisements/models/ForPage.kt | 1 + .../main/java/com/woka/googleads/AdUnitIds.kt | 8 ++- .../com/woka/home/fragments/Home1Fragment.kt | 10 +++- .../com/woka/home/fragments/MyListFragment.kt | 23 +++++++- .../notifications/NotificationsActivity.kt | 19 +++++++ .../java/com/woka/home/views/FMActivity.kt | 24 +++++++- .../com/woka/home/views/MoreHomeActivity.kt | 20 ++++++- .../woka/modules/blogs/view/BlogsActivity.kt | 55 +++++++++++++++++++ .../woka/onboard/fragments/SplashFragment.kt | 2 +- .../players/views/LiveStreamPlayerActivity.kt | 24 ++++++++ .../com/woka/players/views/PlayerActivity.kt | 2 +- .../main/java/com/woka/utils/AdiImageView.kt | 3 +- app/src/main/res/layout/activity_blogs.xml | 22 +++++++- .../main/res/layout/activity_fmactivity.xml | 12 +++- .../main/res/layout/activity_more_home.xml | 10 +++- .../res/layout/activity_notifications.xml | 12 +++- app/src/main/res/layout/fragment_my_list.xml | 12 +++- 18 files changed, 246 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/woka/advertisements/AdsRepository.kt b/app/src/main/java/com/woka/advertisements/AdsRepository.kt index 0c4f63c..c0be9f5 100644 --- a/app/src/main/java/com/woka/advertisements/AdsRepository.kt +++ b/app/src/main/java/com/woka/advertisements/AdsRepository.kt @@ -12,6 +12,12 @@ object AdsRepository { @Volatile private var adsData: List? = null + // testing purpose remove this function + suspend fun loadNewAds(){ + adsData = null + getADs() + } + suspend fun getADs(): List?{ if (adsData != null){ return adsData diff --git a/app/src/main/java/com/woka/advertisements/models/ForPage.kt b/app/src/main/java/com/woka/advertisements/models/ForPage.kt index d5f0b20..81bc7b6 100644 --- a/app/src/main/java/com/woka/advertisements/models/ForPage.kt +++ b/app/src/main/java/com/woka/advertisements/models/ForPage.kt @@ -14,6 +14,7 @@ enum class ForPage(val value: String) { GAME_PLAYER("game-web-view"), KARAOKE_PLAYER("karaoke-player"), + BLOGS("shop-listing"), MY_LIST_AND_NOTIFICATION("my-list"), MORE("more"), LIVE_TV_ADS("live-tv-ad"), diff --git a/app/src/main/java/com/woka/googleads/AdUnitIds.kt b/app/src/main/java/com/woka/googleads/AdUnitIds.kt index e61a6ca..3377551 100644 --- a/app/src/main/java/com/woka/googleads/AdUnitIds.kt +++ b/app/src/main/java/com/woka/googleads/AdUnitIds.kt @@ -39,4 +39,10 @@ const val SHOP = "ca-app-pub-5699008063638916/3861755438" const val GAME_PLAYER = "ca-app-pub-5699008063638916/3679353228" // my list -const val MY_LIST = "ca-app-pub-5699008063638916/6836037599" \ No newline at end of file +const val MY_LIST = "ca-app-pub-5699008063638916/6836037599" + +// blogs +const val BLOGS = "ca-app-pub-5699008063638916/1117904532" + +// live stream video +const val LIVE_STREAM_VIDEO = "ca-app-pub-5699008063638916/7062735475" \ No newline at end of file diff --git a/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt b/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt index 11cc6ea..19bc243 100644 --- a/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt +++ b/app/src/main/java/com/woka/home/fragments/Home1Fragment.kt @@ -193,6 +193,11 @@ class Home1Fragment : Fragment() { } binding.playerView.show() + + // remove this : for testing purpose + lifecycleScope.launch { + AdsRepository.loadNewAds() + } } override fun onPause() { @@ -611,7 +616,10 @@ class Home1Fragment : Fragment() { adClickHelper.addImpression(adDetails.id) adDetails.banner_image?.let {url -> - binding.imgAd.loadImage(url) + binding.imgAd.loadImage(url, + failureListener = { + binding.adView.hide() + }) binding.adView.show() } diff --git a/app/src/main/java/com/woka/home/fragments/MyListFragment.kt b/app/src/main/java/com/woka/home/fragments/MyListFragment.kt index b841189..319beef 100644 --- a/app/src/main/java/com/woka/home/fragments/MyListFragment.kt +++ b/app/src/main/java/com/woka/home/fragments/MyListFragment.kt @@ -7,6 +7,7 @@ import android.content.res.ColorStateList import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.graphics.drawable.InsetDrawable +import android.net.Uri import android.os.Bundle import android.text.Html import android.view.LayoutInflater @@ -31,6 +32,7 @@ import com.woka.advertisements.AdsRepository import com.woka.advertisements.models.ForPage import com.woka.audiobooks.AudioBookRepository import com.woka.audiobooks.models.audiodata.AudioBookData +import com.woka.database.helpers.AdClicksHelper import com.woka.database.helpers.ClicksHelper import com.woka.database.models.ContentType import com.woka.databinding.DialogModuleShowerBinding @@ -143,7 +145,7 @@ class MyListFragment : Fragment() { if (userPrefs?.userType != UserType.GUEST) { loadFavoriteList() - loadGoogleAds() + loadAds() } else { binding.noSignInView.show() } @@ -326,12 +328,29 @@ class MyListFragment : Fragment() { } } - private fun loadGoogleAds() { + private fun loadAds() { lifecycleScope.launch { AdsRepository.getADs()?.let { ads -> val fmAds = ads.filter { it.slug == ForPage.MY_LIST_AND_NOTIFICATION.value } if (fmAds.isNotEmpty()){ + + fmAds.first().advertisement?.let {adv -> + AdClicksHelper.addImpression(adv.id) + + binding.imgCustomAd.show() + binding.imgCustomAd.loadImage(adv.banner_image) + binding.imgCustomAd.setOnClickListener { + adv.ad_link?.let {url -> + AdClicksHelper.addClick(adv.id) + startActivity( + Intent(Intent.ACTION_VIEW, Uri.parse(url)) + ) + } + } + return@launch + } + fmAds.first().google_ad?.let { val adView = AdView(requireContext()) diff --git a/app/src/main/java/com/woka/home/notifications/NotificationsActivity.kt b/app/src/main/java/com/woka/home/notifications/NotificationsActivity.kt index 175a4be..e7e630e 100644 --- a/app/src/main/java/com/woka/home/notifications/NotificationsActivity.kt +++ b/app/src/main/java/com/woka/home/notifications/NotificationsActivity.kt @@ -1,6 +1,7 @@ package com.woka.home.notifications import android.content.Intent +import android.net.Uri import android.os.Bundle import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat @@ -13,6 +14,7 @@ import com.woka.R import com.woka.advertisements.AdsRepository import com.woka.advertisements.models.ForPage import com.woka.audiobooks.views.AudioBooksActivity +import com.woka.database.helpers.AdClicksHelper import com.woka.database.helpers.ClicksHelper import com.woka.database.models.ContentType import com.woka.databinding.ActivityNotificationsBinding @@ -144,6 +146,23 @@ class NotificationsActivity : WokaBaseActivity() { val fmAds = ads.filter { it.slug == ForPage.MY_LIST_AND_NOTIFICATION.value } if (fmAds.isNotEmpty()){ + + fmAds.first().advertisement?.let {adv -> + AdClicksHelper.addImpression(adv.id) + + binding.imgCustomAd.show() + binding.imgCustomAd.loadImage(adv.banner_image) + binding.imgCustomAd.setOnClickListener { + adv.ad_link?.let {url -> + AdClicksHelper.addClick(adv.id) + startActivity( + Intent(Intent.ACTION_VIEW, Uri.parse(url)) + ) + } + } + return@launch + } + fmAds.first().google_ad?.let { val adView = AdView(this@NotificationsActivity) diff --git a/app/src/main/java/com/woka/home/views/FMActivity.kt b/app/src/main/java/com/woka/home/views/FMActivity.kt index bf29b00..a29ec4c 100644 --- a/app/src/main/java/com/woka/home/views/FMActivity.kt +++ b/app/src/main/java/com/woka/home/views/FMActivity.kt @@ -1,7 +1,9 @@ package com.woka.home.views import android.annotation.SuppressLint +import android.content.Intent import android.graphics.Color +import android.net.Uri import android.os.Bundle import android.util.Log import androidx.activity.enableEdgeToEdge @@ -18,6 +20,7 @@ import com.google.android.gms.ads.AdView import com.woka.R import com.woka.advertisements.AdsRepository import com.woka.advertisements.models.ForPage +import com.woka.database.helpers.AdClicksHelper import com.woka.database.helpers.ClicksHelper import com.woka.database.models.ContentType import com.woka.databinding.ActivityFmactivityBinding @@ -80,7 +83,7 @@ class FMActivity : WokaBaseActivity() { setObservers() - loadGoogleAds() + loadAds() playbackStartTime = System.currentTimeMillis() } @@ -208,12 +211,29 @@ class FMActivity : WokaBaseActivity() { }) } - private fun loadGoogleAds() { + private fun loadAds() { lifecycleScope.launch { AdsRepository.getADs()?.let {ads -> val fmAds = ads.filter { it.slug == ForPage.FM.value } if (fmAds.isNotEmpty()){ + + fmAds.first().advertisement?.let {adv -> + AdClicksHelper.addImpression(adv.id) + + binding.imgCustomAd.show() + binding.imgCustomAd.loadImage(adv.banner_image) + binding.imgCustomAd.setOnClickListener { + adv.ad_link?.let {url -> + AdClicksHelper.addClick(adv.id) + startActivity( + Intent(Intent.ACTION_VIEW, Uri.parse(url)) + ) + } + } + return@launch + } + fmAds.first().google_ad?.let { val adView = AdView(this@FMActivity) diff --git a/app/src/main/java/com/woka/home/views/MoreHomeActivity.kt b/app/src/main/java/com/woka/home/views/MoreHomeActivity.kt index 9d5e0ab..6c55e62 100644 --- a/app/src/main/java/com/woka/home/views/MoreHomeActivity.kt +++ b/app/src/main/java/com/woka/home/views/MoreHomeActivity.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.graphics.drawable.InsetDrawable +import android.net.Uri import android.os.Bundle import android.text.Html import android.view.WindowManager @@ -22,11 +23,11 @@ import com.woka.R import com.woka.WokaApp.Companion.userPrefs import com.woka.advertisements.AdsRepository import com.woka.advertisements.models.ForPage +import com.woka.database.helpers.AdClicksHelper import com.woka.database.helpers.ClicksHelper import com.woka.database.models.ContentType import com.woka.databinding.ActivityMoreHomeBinding import com.woka.databinding.DialogBlogsBinding -import com.woka.googleads.FM import com.woka.googleads.MORE_ACTIVITY import com.woka.modules.blogs.BlogsAdapter import com.woka.modules.blogs.BlogsRepository @@ -102,6 +103,23 @@ class MoreHomeActivity : WokaBaseActivity() { val fmAds = ads.filter { it.slug == ForPage.MORE.value } if (fmAds.isNotEmpty()){ + + fmAds.first().advertisement?.let {adv -> + AdClicksHelper.addImpression(adv.id) + + binding.imgCustomAd.show() + binding.imgCustomAd.loadImage(adv.banner_image) + binding.imgCustomAd.setOnClickListener { + adv.ad_link?.let {url -> + AdClicksHelper.addClick(adv.id) + startActivity( + Intent(Intent.ACTION_VIEW, Uri.parse(url)) + ) + } + } + return@launch + } + fmAds.first().google_ad?.let { val adView1 = AdView(this@MoreHomeActivity) adView1.adUnitId = MORE_ACTIVITY diff --git a/app/src/main/java/com/woka/modules/blogs/view/BlogsActivity.kt b/app/src/main/java/com/woka/modules/blogs/view/BlogsActivity.kt index 88b14d5..fb207e8 100644 --- a/app/src/main/java/com/woka/modules/blogs/view/BlogsActivity.kt +++ b/app/src/main/java/com/woka/modules/blogs/view/BlogsActivity.kt @@ -1,21 +1,31 @@ package com.woka.modules.blogs.view import android.app.Dialog +import android.content.Intent import android.graphics.Color import android.graphics.drawable.ColorDrawable import android.graphics.drawable.InsetDrawable +import android.net.Uri import android.os.Bundle import android.text.Html import android.view.WindowManager import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.lifecycle.lifecycleScope +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.WokaApp +import com.woka.advertisements.AdsRepository +import com.woka.advertisements.models.ForPage +import com.woka.database.helpers.AdClicksHelper import com.woka.database.helpers.ClicksHelper import com.woka.database.models.ContentType import com.woka.databinding.ActivityBlogsBinding import com.woka.databinding.DialogBlogsBinding +import com.woka.googleads.BLOGS import com.woka.modules.blogs.BlogsGridAdapter import com.woka.modules.blogs.BlogsRepository import com.woka.modules.blogs.models.Blog @@ -24,6 +34,7 @@ import com.woka.utils.WokaBaseActivity import com.woka.utils.hide import com.woka.utils.lightStatusBar import com.woka.utils.show +import kotlinx.coroutines.launch class BlogsActivity : WokaBaseActivity() { @@ -56,6 +67,8 @@ class BlogsActivity : WokaBaseActivity() { initBlogDialog() setObservers() + + loadAds() } @Suppress("DEPRECATION") @@ -174,4 +187,46 @@ class BlogsActivity : WokaBaseActivity() { } } } + + private fun loadAds() { + lifecycleScope.launch { + AdsRepository.getADs()?.let { ads -> + val fmAds = ads.filter { it.slug == ForPage.BLOGS.value } + + if (fmAds.isNotEmpty()){ + + fmAds.first().advertisement?.let {adv -> + AdClicksHelper.addImpression(adv.id) + + binding.imgCustomAd.show() + binding.imgCustomAd.loadImage(adv.banner_image) + binding.imgCustomAd.setOnClickListener { + adv.ad_link?.let {url -> + AdClicksHelper.addClick(adv.id) + startActivity( + Intent(Intent.ACTION_VIEW, Uri.parse(url)) + ) + } + } + return@launch + } + + fmAds.first().google_ad?.let { + val adView = AdView(this@BlogsActivity) + + adView.adUnitId = BLOGS + adView.setAdSize(AdSize(AdSize.FULL_WIDTH, 60)) + + binding.adsContainer.removeAllViews() + binding.adsContainer.addView(adView) + + adView.loadAd( + AdRequest.Builder() + .build() + ) + } + } + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt b/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt index 774795c..dc5c4fb 100644 --- a/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt +++ b/app/src/main/java/com/woka/onboard/fragments/SplashFragment.kt @@ -83,7 +83,7 @@ class SplashFragment : Fragment(), Observer?> { clickEvents() - loadGoogleAds() +// loadGoogleAds() } private fun loadGoogleAds() { diff --git a/app/src/main/java/com/woka/players/views/LiveStreamPlayerActivity.kt b/app/src/main/java/com/woka/players/views/LiveStreamPlayerActivity.kt index 0145c9d..d85d109 100644 --- a/app/src/main/java/com/woka/players/views/LiveStreamPlayerActivity.kt +++ b/app/src/main/java/com/woka/players/views/LiveStreamPlayerActivity.kt @@ -11,6 +11,10 @@ import androidx.activity.enableEdgeToEdge import androidx.core.view.ViewCompat import androidx.core.view.WindowCompat import androidx.core.view.WindowInsetsCompat +import com.google.android.gms.ads.AdRequest +import com.google.android.gms.ads.LoadAdError +import com.google.android.gms.ads.interstitial.InterstitialAd +import com.google.android.gms.ads.interstitial.InterstitialAdLoadCallback import com.jwplayer.pub.api.JWPlayer import com.jwplayer.pub.api.configuration.PlayerConfig import com.jwplayer.pub.api.events.EventType @@ -20,6 +24,7 @@ import com.jwplayer.pub.api.media.playlists.PlaylistItem import com.woka.database.helpers.ClicksHelper import com.woka.database.models.ContentType import com.woka.databinding.ActivityLiveStreamPlayerBinding +import com.woka.googleads.LIVE_STREAM_VIDEO import com.woka.players.KeepScreenOnHandler import com.woka.players.models.PlayBackState import com.woka.userdata.UserRepository @@ -57,6 +62,9 @@ class LiveStreamPlayerActivity : WokaBaseActivity(), FullscreenHandler { private var playbackStartTime: Long = 0 private var totalPlaybackDuration: Long = 0 + // make false to make ads working + private var initialAdLoaded = true + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) enableEdgeToEdge() @@ -160,6 +168,22 @@ class LiveStreamPlayerActivity : WokaBaseActivity(), FullscreenHandler { } private fun addListeners() { + player.addListener(EventType.READY, VideoPlayerEvents.OnReadyListener { + if (initialAdLoaded.not()){ + InterstitialAd.load(this@LiveStreamPlayerActivity, LIVE_STREAM_VIDEO, + AdRequest.Builder().build(), object : InterstitialAdLoadCallback() { + override fun onAdFailedToLoad(adError: LoadAdError) { + + } + + override fun onAdLoaded(interstitialAd: InterstitialAd) { + interstitialAd.show(this@LiveStreamPlayerActivity) + initialAdLoaded = true + } + }) + } + }) + player.addListener(EventType.PLAY, VideoPlayerEvents.OnPlayListener { playbackState = PlayBackState.PLAY binding.playerView.show() 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 6f34472..c49d208 100644 --- a/app/src/main/java/com/woka/players/views/PlayerActivity.kt +++ b/app/src/main/java/com/woka/players/views/PlayerActivity.kt @@ -195,7 +195,7 @@ class PlayerActivity : WokaBaseActivity(), FullscreenHandler { config = PlayerConfig.Builder() .playlist(videoPlayList?.playlist) - .advertisingConfig(imaAdvertising) +// .advertisingConfig(imaAdvertising) .build() // to keep up the screen om when video is being played diff --git a/app/src/main/java/com/woka/utils/AdiImageView.kt b/app/src/main/java/com/woka/utils/AdiImageView.kt index 40cfad6..5aa7646 100644 --- a/app/src/main/java/com/woka/utils/AdiImageView.kt +++ b/app/src/main/java/com/woka/utils/AdiImageView.kt @@ -66,7 +66,7 @@ class AdiImageView: FrameLayout { } - fun loadImage(url: String?, successListener: (() -> Unit)? = null) { + fun loadImage(url: String?, successListener: (() -> Unit)? = null, failureListener: (() -> Unit)? = null) { imageView?.let { progressView?.show() @@ -82,6 +82,7 @@ class AdiImageView: FrameLayout { ): Boolean { progressView?.hide() imageView?.setImageDrawable(errorSrc) + failureListener?.invoke() return false } diff --git a/app/src/main/res/layout/activity_blogs.xml b/app/src/main/res/layout/activity_blogs.xml index f8ac51d..990646d 100644 --- a/app/src/main/res/layout/activity_blogs.xml +++ b/app/src/main/res/layout/activity_blogs.xml @@ -105,7 +105,7 @@ android:id="@+id/rv_blogs" android:visibility="gone" android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_height="0dp" tools:listitem="@layout/blog_view_holder_grid" app:layoutManager="androidx.recyclerview.widget.GridLayoutManager" @@ -114,6 +114,9 @@ android:layout_marginTop="10dp" + app:layout_constraintTop_toTopOf="parent" + app:layout_constraintBottom_toTopOf="@id/ads_container" + /> + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_fmactivity.xml b/app/src/main/res/layout/activity_fmactivity.xml index d0780d1..18b99f0 100644 --- a/app/src/main/res/layout/activity_fmactivity.xml +++ b/app/src/main/res/layout/activity_fmactivity.xml @@ -166,8 +166,16 @@ android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center" - android:layout_marginTop="15dp" - /> + android:layout_marginTop="15dp"> + + + + diff --git a/app/src/main/res/layout/activity_more_home.xml b/app/src/main/res/layout/activity_more_home.xml index a2855d2..66c2b6f 100644 --- a/app/src/main/res/layout/activity_more_home.xml +++ b/app/src/main/res/layout/activity_more_home.xml @@ -147,8 +147,14 @@ android:orientation="vertical" android:gravity="center" android:layout_marginTop="10dp" - android:background="@color/white" - /> + android:background="@color/white"> + + + app:layout_constraintBottom_toBottomOf="parent"> + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_my_list.xml b/app/src/main/res/layout/fragment_my_list.xml index 89353a7..996d4dc 100644 --- a/app/src/main/res/layout/fragment_my_list.xml +++ b/app/src/main/res/layout/fragment_my_list.xml @@ -481,8 +481,16 @@ android:orientation="vertical" android:gravity="center" android:layout_marginBottom="25dp" - app:layout_constraintBottom_toBottomOf="parent" - /> + app:layout_constraintBottom_toBottomOf="parent"> + + + +