1+ package com.rk.taskmanager.ads
2+
3+ import android.app.Activity
4+ import android.content.Context
5+ import android.util.Log
6+ import androidx.lifecycle.lifecycleScope
7+ import com.google.android.gms.ads.AdError
8+ import com.google.android.gms.ads.AdRequest
9+ import com.google.android.gms.ads.LoadAdError
10+ import com.google.android.gms.ads.rewarded.RewardedAd
11+ import com.google.android.gms.ads.rewarded.RewardedAdLoadCallback
12+ import com.google.android.gms.ads.FullScreenContentCallback
13+ import com.google.android.gms.ads.OnUserEarnedRewardListener
14+ import com.google.android.gms.common.api.internal.LifecycleActivity
15+ import com.rk.taskmanager.MainActivity
16+ import kotlinx.coroutines.Dispatchers
17+ import kotlinx.coroutines.GlobalScope
18+ import kotlinx.coroutines.launch
19+
20+ const val TEST_UNIT_AD_ID = " ca-app-pub-3940256099942544/5224354917"
21+ const val REWARDED_AD_UNIT_ID = " ca-app-pub-4934006287453841/1573729325"
22+
23+ private var rewardedAd: RewardedAd ? = null
24+ private const val TAG = " AD_MANAGER"
25+
26+ fun isAdAvailable (): Boolean = rewardedAd != null
27+
28+ fun loadAd (activity : MainActivity ){
29+ if (rewardedAd != null ){
30+ return
31+ }
32+ if (MainActivity .instance?.isinitialized == false ){
33+ return
34+ }
35+ activity.lifecycleScope.launch(Dispatchers .Main .immediate) {
36+ RewardedAd .load(
37+ activity,
38+ REWARDED_AD_UNIT_ID ,
39+ AdRequest .Builder ().build(),
40+ object : RewardedAdLoadCallback () {
41+ override fun onAdLoaded (ad : RewardedAd ) {
42+ Log .d(TAG , " Ad was loaded." )
43+ rewardedAd = ad
44+ }
45+
46+ override fun onAdFailedToLoad (adError : LoadAdError ) {
47+ Log .d(TAG , adError.message)
48+ rewardedAd = null
49+ }
50+ },
51+ )
52+ }
53+
54+ }
55+
56+
57+ fun showAd (activity : MainActivity , callback : () -> Unit ) {
58+ if (MainActivity .instance?.isinitialized == false ){
59+ return
60+ }
61+ activity.lifecycleScope.launch(Dispatchers .Main .immediate) {
62+ if (rewardedAd != null ) {
63+ var userEarnedReward = false
64+
65+ // Set up the full-screen callback BEFORE showing
66+ rewardedAd?.fullScreenContentCallback = object : FullScreenContentCallback () {
67+ override fun onAdDismissedFullScreenContent () {
68+ Log .d(TAG , " Ad was dismissed." )
69+ rewardedAd = null
70+
71+ // Only invoke callback if user actually earned the reward
72+ if (userEarnedReward) {
73+ callback.invoke()
74+ }
75+
76+ // Load next ad
77+ loadAd(activity)
78+ }
79+
80+ override fun onAdFailedToShowFullScreenContent (adError : AdError ) {
81+ Log .d(TAG , " Ad failed to show: ${adError.message} " )
82+ rewardedAd = null
83+ loadAd(activity)
84+ }
85+
86+ override fun onAdShowedFullScreenContent () {
87+ Log .d(TAG , " Ad showed fullscreen content." )
88+ }
89+ }
90+
91+ // Show the ad with reward listener
92+ rewardedAd?.show(activity) { rewardItem ->
93+ Log .d(TAG , " User earned the reward: ${rewardItem.amount} ${rewardItem.type} " )
94+ userEarnedReward = true
95+ // Don't call callback here - wait for onAdDismissedFullScreenContent
96+ }
97+ } else {
98+ Log .d(TAG , " Ad not ready, loading a new one..." )
99+ loadAd(activity)
100+ }
101+ }
102+ }
0 commit comments