fix(Playwire): load banner on Activity restart

This commit is contained in:
Adam M. Szalkowski 2026-06-08 15:53:16 +02:00
parent c929aa40d5
commit 2e434b2ecf
5 changed files with 40 additions and 23 deletions

View file

@ -16,7 +16,7 @@ android {
providers.environmentVariable("APPID").getOrElse("de.szalkowski.activitylauncher")
minSdk = 16
targetSdk = 36
versionCode = 7501
versionCode = 7502
versionName = "2.2.5"
multiDexEnabled = true
@ -41,9 +41,9 @@ android {
create("ads") {
dimension = "ads"
val admobAppId =
providers.environmentVariable("ADMOB_APP_ID").getOrElse("ca-app-pub-3940256099942544~3347511713")
val publisherId = providers.environmentVariable("PUBLISHER_ID").getOrElse("")
val appId = providers.environmentVariable("APP_ID").getOrElse("")
providers.environmentVariable("ADMOB_APP_ID").get()
val publisherId = providers.environmentVariable("PUBLISHER_ID").get()
val appId = providers.environmentVariable("APP_ID").get()
manifestPlaceholders["ADMOB_APP_ID"] = admobAppId
resValue("string", "publisher_id", publisherId)
resValue("string", "app_id", appId)
@ -109,7 +109,7 @@ if (isAdsBuild) {
// Configure AppLovin Quality Service if applied
if (isAdsBuild) {
extensions.findByName("applovin")?.let { extension ->
val adReviewKey = providers.environmentVariable("AD_REVIEW_KEY").getOrElse("")
val adReviewKey = providers.environmentVariable("AD_REVIEW_KEY").get()
val method = extension.javaClass.methods.find { it.name == "setApiKey" }
method?.invoke(extension, adReviewKey)
}

View file

@ -1,6 +1,7 @@
package de.szalkowski.activitylauncher.services
import android.app.Activity
import android.content.Context
import android.view.View
import android.view.ViewGroup
import com.intergi.playwiresdk.PWNotifier
@ -8,18 +9,19 @@ import com.intergi.playwiresdk.PlaywireSDK
import com.intergi.playwiresdk.ads.view.PWViewAd
import com.intergi.playwiresdk.ads.view.banner.PWBannerView
import dagger.hilt.android.qualifiers.ApplicationContext
import de.szalkowski.activitylauncher.BuildConfig
import de.szalkowski.activitylauncher.R
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class PlaywireServiceImpl @Inject constructor(
@ApplicationContext private val context: android.content.Context,
@ApplicationContext private val context: Context,
) : AdService {
private var isInitialized = false
private var banner: PWBannerView? = null
override fun initialize(activity: Activity, container: ViewGroup) {
override fun initialize(activity: Activity) {
if (isInitialized) return
val publisherId = context.getString(R.string.publisher_id)
@ -29,16 +31,20 @@ class PlaywireServiceImpl @Inject constructor(
return
}
PWNotifier.startConsoleLogger()
if (BuildConfig.DEBUG) {
PWNotifier.startConsoleLogger()
}
PlaywireSDK.start(publisherId, appId, activity) { success, _ ->
if (success) {
isInitialized = true
setupBanner(activity, container)
}
}
}
fun setupBanner(activity: Activity, container: ViewGroup) {
override fun loadBanner(context: Context, container: ViewGroup) {
banner?.destroy()
val listener = object : PWViewAd.Listener {
override fun onViewAdLoaded(ad: PWViewAd) {
container.visibility = View.VISIBLE
@ -54,9 +60,14 @@ class PlaywireServiceImpl @Inject constructor(
override fun onViewAdImpression(ad: PWViewAd) {}
}
val banner = PWBannerView(activity, "banner-320x50", listener)
banner = PWBannerView(context, "banner-320x50", listener)
container.removeAllViews()
container.addView(banner)
banner.load()
banner?.load()
}
override fun destroyBanner() {
banner?.destroy()
banner = null
}
}

View file

@ -74,7 +74,8 @@ class MainActivity : AppCompatActivity(), ActionBarSearch {
val toolbar = findViewById<MaterialToolbar>(R.id.toolbar)
setSupportActionBar(toolbar)
adService.initialize(this, binding.adContainer)
adService.initialize(this)
adService.loadBanner(this, binding.adContainer)
settingsService.applyLocaleConfiguration(baseContext)
if (!settingsService.disclaimerAccepted) {
@ -193,6 +194,11 @@ class MainActivity : AppCompatActivity(), ActionBarSearch {
}
}
override fun onDestroy() {
adService.destroyBanner()
super.onDestroy()
}
private fun navigateToAll(navController: NavController) {
if (packageListService.isLoaded) {
navController.navigate(R.id.PackageListFragment)

View file

@ -1,11 +1,11 @@
package de.szalkowski.activitylauncher.services
import android.app.Activity
import android.content.Context
import android.view.ViewGroup
interface AdService {
fun initialize(
activity: Activity,
container: ViewGroup,
)
fun initialize(activity: Activity)
fun loadBanner(context: Context, container: ViewGroup)
fun destroyBanner()
}

View file

@ -1,14 +1,14 @@
package de.szalkowski.activitylauncher.services
import android.app.Activity
import android.content.Context
import android.view.ViewGroup
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class AdServiceImpl @Inject constructor(
@ApplicationContext private val context: android.content.Context,
) : AdService {
override fun initialize(activity: Activity, container: ViewGroup) {}
class AdServiceImpl @Inject constructor() : AdService {
override fun initialize(activity: Activity) {}
override fun loadBanner(context: Context, container: ViewGroup) {}
override fun destroyBanner() {}
}