Skip to content

Commit 6f3f40a

Browse files
committed
Refactor: Remove explicit activity parameter from composables
* **Implementation Refactoring:** * Functions in `commonMain` that were previously concrete (e.g., `rememberBannerAd`, `rememberNativeAd`) have been converted to `expect` functions. * The implementation logic has been moved to the `actual` declarations in the `androidMain` and `iosMain` source sets to handle platform-specific details. * **API Dump Update:** * The `basic-ads.api` file has been updated to reflect these signature changes.
1 parent d867a9f commit 6f3f40a

20 files changed

Lines changed: 632 additions & 145 deletions

‎basic-ads/api/basic-ads.api‎

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@ public final class app/lexilabs/basic/ads/BannerAdListener : com/google/android/
9090
public final class app/lexilabs/basic/ads/BasicAds {
9191
public static final field $stable I
9292
public static final field INSTANCE Lapp/lexilabs/basic/ads/BasicAds;
93+
public final fun DisableMediationAdapterInitialization (Landroidx/compose/runtime/Composer;I)V
94+
public final fun Initialize (Landroidx/compose/runtime/Composer;I)V
95+
public final fun OpenDebugMenu (Ljava/lang/String;Landroidx/compose/runtime/Composer;I)V
9396
public final fun disableMediationAdapterInitialization (Ljava/lang/Object;)V
9497
public final fun getConfiguration ()Lapp/lexilabs/basic/ads/RequestConfiguration;
9598
public final fun getErrorDomain ()Ljava/lang/String;
@@ -169,6 +172,7 @@ public final class app/lexilabs/basic/ads/ConsentRequestParameters$Builder {
169172
}
170173

171174
public final class app/lexilabs/basic/ads/ConvertersKt {
175+
public static final fun getActivity (Landroid/content/Context;)Landroid/app/Activity;
172176
public static final fun toAndroid (Lapp/lexilabs/basic/ads/AdSize;)Lcom/google/android/gms/ads/AdSize;
173177
public static final fun toAndroid (Lapp/lexilabs/basic/ads/RequestConfiguration$PublisherPrivacyPersonalizationState;)Lcom/google/android/gms/ads/RequestConfiguration$PublisherPrivacyPersonalizationState;
174178
public static final fun toAndroid (Lapp/lexilabs/basic/ads/RequestConfiguration;)Lcom/google/android/gms/ads/RequestConfiguration;
@@ -295,52 +299,67 @@ public final class app/lexilabs/basic/ads/composable/BannerAdKt {
295299
public final class app/lexilabs/basic/ads/composable/ConsentPopupKt {
296300
public static final fun ConsentPopup (Lapp/lexilabs/basic/ads/Consent;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
297301
public static final fun ConsentPopup (Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
302+
public static final fun ConsentPopup (Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V
298303
}
299304

300305
public final class app/lexilabs/basic/ads/composable/InterstitialAdKt {
301306
public static final fun InterstitialAd (Lapp/lexilabs/basic/ads/InterstitialAdHandler;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
302307
public static final fun InterstitialAd (Ljava/lang/Object;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
308+
public static final fun InterstitialAd (Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
303309
}
304310

305311
public final class app/lexilabs/basic/ads/composable/NativeAdKt {
306312
public static final fun NativeAd (Lapp/lexilabs/basic/ads/nativead/NativeAdHandler;Lapp/lexilabs/basic/ads/nativead/NativeAdTemplate;Landroidx/compose/runtime/Composer;II)V
313+
public static final fun NativeAd (Lapp/lexilabs/basic/ads/nativead/NativeAdTemplate;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
307314
public static final fun NativeAd (Ljava/lang/Object;Lapp/lexilabs/basic/ads/nativead/NativeAdTemplate;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
308315
}
309316

310317
public final class app/lexilabs/basic/ads/composable/RememberBannerAdKt {
311318
public static final fun rememberBannerAd (Ljava/lang/Object;Ljava/lang/String;Lapp/lexilabs/basic/ads/AdSize;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;
319+
public static final fun rememberBannerAd (Ljava/lang/String;Lapp/lexilabs/basic/ads/AdSize;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;
312320
}
313321

314322
public final class app/lexilabs/basic/ads/composable/RememberConsentKt {
323+
public static final fun rememberConsent (Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;
324+
public static final fun rememberConsent (Lapp/lexilabs/basic/ads/ConsentDebugSettings;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;
325+
public static final fun rememberConsent (Lapp/lexilabs/basic/ads/ConsentRequestParameters;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;
315326
public static final fun rememberConsent (Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState;
316327
}
317328

318329
public final class app/lexilabs/basic/ads/composable/RememberInterstitialAdKt {
319330
public static final fun rememberInterstitialAd (Ljava/lang/Object;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;
331+
public static final fun rememberInterstitialAd (Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;
320332
}
321333

322334
public final class app/lexilabs/basic/ads/composable/RememberNativeAdKt {
323335
public static final fun rememberNativeAd (Ljava/lang/Object;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;
336+
public static final fun rememberNativeAd (Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;
324337
}
325338

326339
public final class app/lexilabs/basic/ads/composable/RememberRewardedAdKt {
327340
public static final fun rememberRewardedAd (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;
328341
public static final fun rememberRewardedAd (Ljava/lang/Object;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;
342+
public static final fun rememberRewardedAd (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;
343+
public static final fun rememberRewardedAd (Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;
329344
}
330345

331346
public final class app/lexilabs/basic/ads/composable/RememberRewardedInterstitialAdKt {
332347
public static final fun rememberRewardedInterstitialAd (Ljava/lang/Object;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;
348+
public static final fun rememberRewardedInterstitialAd (Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState;
333349
}
334350

335351
public final class app/lexilabs/basic/ads/composable/RewardedAdKt {
336352
public static final fun RewardedAd (Lapp/lexilabs/basic/ads/RewardedAdHandler;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
337353
public static final fun RewardedAd (Ljava/lang/Object;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;III)V
338354
public static final fun RewardedAd (Ljava/lang/Object;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
355+
public static final fun RewardedAd (Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
356+
public static final fun RewardedAd (Ljava/lang/String;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
339357
}
340358

341359
public final class app/lexilabs/basic/ads/composable/RewardedInterstitialAdKt {
342360
public static final fun RewardedInterstitialAd (Lapp/lexilabs/basic/ads/RewardedInterstitialAdHandler;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V
343361
public static final fun RewardedInterstitialAd (Ljava/lang/Object;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
362+
public static final fun RewardedInterstitialAd (Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V
344363
}
345364

346365
public final class app/lexilabs/basic/ads/nativead/NativeAdConvertersKt {

‎basic-ads/src/androidMain/kotlin/app/lexilabs/basic/ads/composable/RememberBannerAd.kt‎

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,4 +67,63 @@ public actual fun rememberBannerAd(
6767
else -> { /** DO NOTHING **/ }
6868
}
6969
return ad
70+
}
71+
72+
/**
73+
* A Composable function that remembers a [BannerAdHandler] across compositions.
74+
*
75+
* This function creates and manages a [BannerAdHandler] instance, ensuring it persists
76+
* across recompositions. It automatically attempts to load an ad when the ad's state
77+
* is [AdState.DISMISSED] or [AdState.NONE].
78+
*
79+
* **Note:** This Composable depends on the Google Mobile Ads SDK. Ensure that the
80+
* SDK is properly integrated into your project.
81+
*
82+
* @param activity The current Activity or Context. This is crucial for the ad to function correctly.
83+
* It's recommended to pass the result of `LocalContext.current as Activity`.
84+
* @param adUnitId The ad unit ID for the banner ad. Defaults to [AdUnitId.BANNER_DEFAULT].
85+
* @param adSize The size of the banner ad. Defaults to [AdSize.FULL_BANNER].
86+
* @param onLoad A callback invoked when the ad has successfully loaded.
87+
* @param onFailure A callback invoked when the ad fails to load. It provides an [Exception]
88+
* with details about the failure.
89+
* @param onDismissed A callback invoked when the ad is dismissed by the user.
90+
* @param onShown A callback invoked when the ad is shown on the screen.
91+
* @param onImpression A callback invoked when an impression is recorded for the ad.
92+
* @param onClick A callback invoked when the ad is clicked by the user.
93+
* @return A [MutableState] holding the [BannerAdHandler]. You can use this state to
94+
* interact with the ad (e.g., to display it in your UI).
95+
*/
96+
@DependsOnGoogleMobileAds
97+
@Deprecated("The `activity` argument is no longer required as of v1.1.0-beta01")
98+
@RequiresPermission("android.permission.INTERNET")
99+
@Composable
100+
public actual fun rememberBannerAd(
101+
activity: Any?,
102+
adUnitId: String,
103+
adSize: AdSize,
104+
onLoad: () -> Unit,
105+
onFailure: (Exception) -> Unit,
106+
onDismissed: () -> Unit,
107+
onShown: () -> Unit,
108+
onImpression: () -> Unit,
109+
onClick: () -> Unit
110+
): MutableState<BannerAdHandler> {
111+
val ad = remember(activity) { mutableStateOf(BannerAdHandler(activity)) }
112+
when(ad.value.state){
113+
AdState.DISMISSED,
114+
AdState.NONE -> {
115+
ad.value.load(
116+
adUnitId = adUnitId,
117+
adSize = adSize,
118+
onLoad = onLoad,
119+
onFailure = onFailure,
120+
onDismissed = onDismissed,
121+
onShown = onShown,
122+
onImpression = onImpression,
123+
onClick = onClick
124+
)
125+
}
126+
else -> { /** DO NOTHING **/ }
127+
}
128+
return ad
70129
}

‎basic-ads/src/androidMain/kotlin/app/lexilabs/basic/ads/composable/RememberConsent.kt‎

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,3 +102,31 @@ public actual fun rememberConsent(debugSettings: ConsentDebugSettings): MutableS
102102
return consent
103103
}
104104

105+
/**
106+
* Composable function to remember and manage user consent for ads.
107+
*
108+
* This function creates and remembers a [Consent] object, which handles interactions
109+
* with the Google User Messaging Platform (UMP) SDK to obtain and manage user consent
110+
* for personalized advertising.
111+
*
112+
* It initializes the consent state and checks if privacy options are required and if ads can be requested.
113+
*
114+
* @param activity The current Activity context. This is crucial for the UMP SDK to function correctly.
115+
* It's recommended to pass the result of `LocalContext.current as? Activity`.
116+
* @return A [MutableState] holding the [Consent] object. This allows observing and reacting
117+
* to changes in the consent status within your Composable UI.
118+
*
119+
* @see Consent
120+
* @see DependsOnGoogleUserMessagingPlatform
121+
*/
122+
@DependsOnGoogleUserMessagingPlatform
123+
@Deprecated("The `activity` argument is no longer required as of v1.1.0-beta01")
124+
@Composable
125+
public actual fun rememberConsent(
126+
activity: Any?
127+
): MutableState<Consent> {
128+
val consent = remember(activity) { mutableStateOf(Consent(activity)) }
129+
consent.value.isPrivacyOptionsRequired()
130+
consent.value.canRequestAds()
131+
return consent
132+
}

‎basic-ads/src/androidMain/kotlin/app/lexilabs/basic/ads/composable/RememberInterstitialAd.kt‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,4 +43,40 @@ public actual fun rememberInterstitialAd(
4343
else -> { /** DO NOTHING **/ }
4444
}
4545
return ad
46+
}
47+
48+
/**
49+
* Composable function to remember an interstitial ad.
50+
*
51+
* This function creates and manages an [InterstitialAdHandler] instance,
52+
* automatically loading an ad when the state is [AdState.DISMISSED] or [AdState.NONE].
53+
*
54+
* @param activity The activity context, required for ad loading.
55+
* @param adUnitId The ad unit ID for the interstitial ad. Defaults to [AdUnitId.INTERSTITIAL_DEFAULT].
56+
* @param onLoad A callback function invoked when the ad is successfully loaded.
57+
* @param onFailure A callback function invoked when ad loading fails, providing the [Exception] that occurred.
58+
* @return A [MutableState] holding the [InterstitialAdHandler]. You can use this to control and observe the ad's state (e.g., to show the ad).
59+
*/
60+
@DependsOnGoogleMobileAds
61+
@Deprecated("The `activity` argument is no longer required as of v1.1.0-beta01")
62+
@Composable
63+
public actual fun rememberInterstitialAd(
64+
activity: Any?,
65+
adUnitId: String,
66+
onLoad: () -> Unit,
67+
onFailure: (Exception) -> Unit
68+
): MutableState<InterstitialAdHandler> {
69+
val ad = remember(activity) { mutableStateOf(InterstitialAdHandler(activity)) }
70+
when(ad.value.state){
71+
AdState.DISMISSED,
72+
AdState.NONE -> {
73+
ad.value.load(
74+
adUnitId = adUnitId,
75+
onLoad = onLoad,
76+
onFailure = onFailure
77+
)
78+
}
79+
else -> { /** DO NOTHING **/ }
80+
}
81+
return ad
4682
}

‎basic-ads/src/androidMain/kotlin/app/lexilabs/basic/ads/composable/RememberNativeAd.kt‎

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import app.lexilabs.basic.ads.AdUnitId
1212
import app.lexilabs.basic.ads.DependsOnGoogleMobileAds
1313
import app.lexilabs.basic.ads.getActivity
1414
import app.lexilabs.basic.ads.nativead.NativeAdHandler
15+
import kotlin.text.String
1516

1617
/**
1718
* Remembers a [NativeAdHandler] across compositions.
@@ -60,4 +61,55 @@ public actual fun rememberNativeAd(
6061
else -> { /** DO NOTHING **/ }
6162
}
6263
return ad
64+
}
65+
66+
/**
67+
* Remembers a [NativeAdHandler] across compositions.
68+
* @param activity the current Activity (only needed for Android Impl)
69+
* @param adUnitId Your AdMob AdUnitId [String]
70+
* @param onLoad Lambda expression that executes after the [NativeAdHandler] has fully loaded
71+
* @param onFailure Lambda expression that executes after the ad fails to load or redirect
72+
* @param onDismissed Lambda that executes when the user closes the ad
73+
* @param onShown Lambda expression that executes after the ad is presented
74+
* @param onImpression Lambda expression that executes after the user has seen the ad
75+
* @param onClick Lambda expression that executes after the user clicks the ad
76+
* @return a [MutableState] of [NativeAdHandler]
77+
* @see AdUnitId.autoSelect
78+
*/
79+
@DependsOnGoogleMobileAds
80+
@Deprecated("The `activity` argument is no longer required as of v1.1.0-beta01")
81+
@RequiresPermission("android.permission.INTERNET")
82+
@Composable
83+
public actual fun rememberNativeAd(
84+
activity: Any?,
85+
adUnitId: String,
86+
onLoad: () -> Unit,
87+
onFailure: (Exception) -> Unit,
88+
onDismissed: () -> Unit,
89+
onShown: () -> Unit,
90+
onImpression: () -> Unit,
91+
onClick: () -> Unit,
92+
): MutableState<NativeAdHandler> {
93+
val ad = remember(activity) { mutableStateOf(NativeAdHandler(activity)) }
94+
DisposableEffect(ad) {
95+
onDispose {
96+
ad.value.destroy()
97+
}
98+
}
99+
when(ad.value.state){
100+
AdState.DISMISSED,
101+
AdState.NONE -> {
102+
ad.value.load(
103+
adUnitId = adUnitId,
104+
onLoad = onLoad,
105+
onFailure = onFailure,
106+
onDismissed = onDismissed,
107+
onShown = onShown,
108+
onImpression = onImpression,
109+
onClick = onClick
110+
)
111+
}
112+
else -> { /** DO NOTHING **/ }
113+
}
114+
return ad
63115
}

0 commit comments

Comments
 (0)