fix(content): 상세 오디오 광고를 제거한다
This commit is contained in:
@@ -116,8 +116,6 @@ android {
|
||||
// release용 ad unit id는 배포 전 실제 값으로 교체한다.
|
||||
buildConfigField 'String', 'YANDEX_INLINE_BANNER_LIVE_TAB_AD_UNIT_ID', '"R-M-19140295-3"'
|
||||
buildConfigField 'String', 'YANDEX_INLINE_BANNER_LIVE_ROOM_DETAIL_AD_UNIT_ID', '"R-M-19140295-4"'
|
||||
buildConfigField 'String', 'YANDEX_INLINE_BANNER_AUDIO_CONTENT_DETAIL_AD_UNIT_ID', '"R-M-19140295-5"'
|
||||
buildConfigField 'String', 'YANDEX_INTERSTITIAL_AUDIO_CONTENT_PLAY_AD_UNIT_ID', '"R-M-19140295-6"'
|
||||
buildConfigField 'String', 'YANDEX_INLINE_BANNER_CREATOR_COMMUNITY_ALL_AD_UNIT_ID', '"R-M-19140295-7"'
|
||||
buildConfigField 'String', 'YANDEX_INLINE_BANNER_SERIES_MAIN_HOME_AD_UNIT_ID', '"R-M-19140295-8"'
|
||||
buildConfigField 'String', 'YANDEX_INLINE_BANNER_SERIES_MAIN_DAY_OF_WEEK_AD_UNIT_ID', '"R-M-19140295-9"'
|
||||
@@ -160,8 +158,6 @@ android {
|
||||
|
||||
buildConfigField 'String', 'YANDEX_INLINE_BANNER_LIVE_TAB_AD_UNIT_ID', '"R-M-19140297-3"'
|
||||
buildConfigField 'String', 'YANDEX_INLINE_BANNER_LIVE_ROOM_DETAIL_AD_UNIT_ID', '"R-M-19140297-4"'
|
||||
buildConfigField 'String', 'YANDEX_INLINE_BANNER_AUDIO_CONTENT_DETAIL_AD_UNIT_ID', '"R-M-19140297-5"'
|
||||
buildConfigField 'String', 'YANDEX_INTERSTITIAL_AUDIO_CONTENT_PLAY_AD_UNIT_ID', '"R-M-19140297-6"'
|
||||
buildConfigField 'String', 'YANDEX_INLINE_BANNER_CREATOR_COMMUNITY_ALL_AD_UNIT_ID', '"R-M-19140297-7"'
|
||||
buildConfigField 'String', 'YANDEX_INLINE_BANNER_SERIES_MAIN_HOME_AD_UNIT_ID', '"R-M-19140297-8"'
|
||||
buildConfigField 'String', 'YANDEX_INLINE_BANNER_SERIES_MAIN_DAY_OF_WEEK_AD_UNIT_ID', '"R-M-19140297-9"'
|
||||
|
||||
@@ -28,18 +28,6 @@ import coil.transform.RoundedCornersTransformation
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
import com.google.gson.Gson
|
||||
import com.orhanobut.logger.Logger
|
||||
import com.yandex.mobile.ads.banner.BannerAdSize
|
||||
import com.yandex.mobile.ads.common.AdError
|
||||
import com.yandex.mobile.ads.common.AdRequest
|
||||
import com.yandex.mobile.ads.common.AdRequestConfiguration
|
||||
import com.yandex.mobile.ads.common.AdRequestError
|
||||
import com.yandex.mobile.ads.common.ImpressionData
|
||||
import com.yandex.mobile.ads.interstitial.InterstitialAd
|
||||
import com.yandex.mobile.ads.interstitial.InterstitialAdEventListener
|
||||
import com.yandex.mobile.ads.interstitial.InterstitialAdLoadListener
|
||||
import com.yandex.mobile.ads.interstitial.InterstitialAdLoader
|
||||
import kr.co.vividnext.sodalive.BuildConfig
|
||||
import kr.co.vividnext.sodalive.R
|
||||
import kr.co.vividnext.sodalive.audio_content.AudioContentPlayService
|
||||
import kr.co.vividnext.sodalive.audio_content.PurchaseOption
|
||||
@@ -72,7 +60,6 @@ import kr.co.vividnext.sodalive.report.ReportType
|
||||
import kr.co.vividnext.sodalive.v2.creator.channel.CreatorChannelActivity
|
||||
import org.koin.android.ext.android.inject
|
||||
import kotlin.math.ceil
|
||||
import kotlin.math.roundToInt
|
||||
|
||||
@UnstableApi
|
||||
class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBinding>(
|
||||
@@ -101,42 +88,9 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
|
||||
private lateinit var orderType: OrderType
|
||||
private lateinit var imm: InputMethodManager
|
||||
|
||||
private var audioContentPlayInterstitialAdLoader: InterstitialAdLoader? = null
|
||||
private var audioContentPlayInterstitialAd: InterstitialAd? = null
|
||||
private var pendingAudioContentPlayAction: (() -> Unit)? = null
|
||||
private var hasConsumedAudioContentPlayInterstitialAttempt = false
|
||||
private var isAudioContentPlaying = false
|
||||
private var isAudioContentInterstitialEligible = false
|
||||
private var audioContentStartPlaybackAction: (() -> Unit)? = null
|
||||
|
||||
private val audioContentPlayInterstitialAdLoadListener = object : InterstitialAdLoadListener {
|
||||
override fun onAdLoaded(interstitialAd: InterstitialAd) {
|
||||
clearAudioContentPlayInterstitialAd()
|
||||
audioContentPlayInterstitialAd = interstitialAd
|
||||
}
|
||||
|
||||
override fun onAdFailedToLoad(error: AdRequestError) {
|
||||
Logger.e("Audio content interstitial failed to load: ${error.description}")
|
||||
}
|
||||
}
|
||||
|
||||
private val audioContentPlayInterstitialAdEventListener = object : InterstitialAdEventListener {
|
||||
override fun onAdShown() = Unit
|
||||
|
||||
override fun onAdFailedToShow(adError: AdError) {
|
||||
Logger.e("Audio content interstitial failed to show: ${adError.description}")
|
||||
continuePendingAudioContentPlayAction()
|
||||
}
|
||||
|
||||
override fun onAdDismissed() {
|
||||
continuePendingAudioContentPlayAction()
|
||||
}
|
||||
|
||||
override fun onAdClicked() = Unit
|
||||
|
||||
override fun onAdImpression(impressionData: ImpressionData?) = Unit
|
||||
}
|
||||
|
||||
@SuppressLint("SetTextI18n")
|
||||
override fun onNewIntent(intent: Intent) {
|
||||
super.onNewIntent(intent)
|
||||
@@ -154,9 +108,6 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
|
||||
binding.rlPreviewAlert.visibility = View.GONE
|
||||
|
||||
audioContentId = intent.getLongExtra(Constants.EXTRA_AUDIO_CONTENT_ID, 0)
|
||||
hasConsumedAudioContentPlayInterstitialAttempt = false
|
||||
releaseAudioContentPlayInterstitial()
|
||||
setupAudioContentPlayInterstitial()
|
||||
viewModel.getAudioContentDetail(audioContentId = audioContentId) { finish() }
|
||||
}
|
||||
|
||||
@@ -367,91 +318,9 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
|
||||
dialog.show(screenWidth - 26.7f.dpToPx().toInt())
|
||||
}
|
||||
|
||||
setupAudioContentDetailInlineBanner()
|
||||
setupAudioContentPlayInterstitial()
|
||||
setupBuyerList()
|
||||
}
|
||||
|
||||
private fun setupAudioContentDetailInlineBanner() {
|
||||
binding.yandexInlineBannerView.post {
|
||||
val density = resources.displayMetrics.density
|
||||
val adWidthPixels = binding.yandexInlineBannerView.width.takeIf { it > 0 } ?: screenWidth
|
||||
val adWidthDp = (adWidthPixels / density).roundToInt()
|
||||
val maxAdHeightDp = 90
|
||||
|
||||
binding.yandexInlineBannerView.apply {
|
||||
setAdUnitId(BuildConfig.YANDEX_INLINE_BANNER_AUDIO_CONTENT_DETAIL_AD_UNIT_ID)
|
||||
setAdSize(
|
||||
BannerAdSize.inlineSize(
|
||||
this@AudioContentDetailActivity,
|
||||
adWidthDp,
|
||||
maxAdHeightDp
|
||||
)
|
||||
)
|
||||
loadAd(AdRequest.Builder().build())
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupAudioContentPlayInterstitial() {
|
||||
val adUnitId = BuildConfig.YANDEX_INTERSTITIAL_AUDIO_CONTENT_PLAY_AD_UNIT_ID
|
||||
if (adUnitId.isBlank()) {
|
||||
Logger.e("Audio content interstitial blocked: ad unit id is blank.")
|
||||
return
|
||||
}
|
||||
|
||||
audioContentPlayInterstitialAdLoader = InterstitialAdLoader(this).apply {
|
||||
setAdLoadListener(audioContentPlayInterstitialAdLoadListener)
|
||||
}
|
||||
audioContentPlayInterstitialAdLoader?.loadAd(
|
||||
AdRequestConfiguration.Builder(adUnitId).build()
|
||||
)
|
||||
}
|
||||
|
||||
private fun playAudioContentWithInterstitialIfAvailable(playAction: () -> Unit) {
|
||||
if (hasConsumedAudioContentPlayInterstitialAttempt || isFinishing || isDestroyed) {
|
||||
playAction()
|
||||
return
|
||||
}
|
||||
|
||||
val interstitialAd = audioContentPlayInterstitialAd ?: run {
|
||||
playAction()
|
||||
return
|
||||
}
|
||||
|
||||
hasConsumedAudioContentPlayInterstitialAttempt = true
|
||||
pendingAudioContentPlayAction = playAction
|
||||
interstitialAd.setAdEventListener(audioContentPlayInterstitialAdEventListener)
|
||||
runCatching {
|
||||
interstitialAd.show(this)
|
||||
}.onFailure {
|
||||
Logger.e("Audio content interstitial failed to show: ${it.message}")
|
||||
continuePendingAudioContentPlayAction()
|
||||
}
|
||||
}
|
||||
|
||||
private fun continuePendingAudioContentPlayAction() {
|
||||
val playAction = pendingAudioContentPlayAction
|
||||
pendingAudioContentPlayAction = null
|
||||
clearAudioContentPlayInterstitialAd()
|
||||
if (isFinishing || isDestroyed) {
|
||||
return
|
||||
}
|
||||
playAction?.invoke()
|
||||
}
|
||||
|
||||
private fun clearAudioContentPlayInterstitialAd() {
|
||||
audioContentPlayInterstitialAd?.setAdEventListener(null)
|
||||
audioContentPlayInterstitialAd = null
|
||||
}
|
||||
|
||||
private fun releaseAudioContentPlayInterstitial() {
|
||||
audioContentPlayInterstitialAdLoader?.setAdLoadListener(null)
|
||||
audioContentPlayInterstitialAdLoader = null
|
||||
pendingAudioContentPlayAction = null
|
||||
clearAudioContentPlayInterstitialAd()
|
||||
}
|
||||
|
||||
private fun pauseAudioContentPlayback() {
|
||||
startService(
|
||||
Intent(this, AudioContentPlayService::class.java).apply {
|
||||
@@ -474,13 +343,7 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
|
||||
|
||||
binding.ivPlayOrPause.setImageResource(R.drawable.btn_audio_content_play)
|
||||
|
||||
val startPlaybackClickListener = View.OnClickListener {
|
||||
if (isAudioContentInterstitialEligible) {
|
||||
playAudioContentWithInterstitialIfAvailable(startPlaybackAction)
|
||||
} else {
|
||||
startPlaybackAction()
|
||||
}
|
||||
}
|
||||
val startPlaybackClickListener = View.OnClickListener { startPlaybackAction() }
|
||||
|
||||
binding.ivPlayOrPause.setOnClickListener(startPlaybackClickListener)
|
||||
binding.llPreview.setOnClickListener(startPlaybackClickListener)
|
||||
@@ -944,12 +807,10 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
|
||||
response.duration
|
||||
)
|
||||
audioContentStartPlaybackAction = null
|
||||
isAudioContentInterstitialEligible = false
|
||||
|
||||
isAlertPreview = response.creator.creatorId != SharedPreferenceManager.userId &&
|
||||
!response.existOrdered &&
|
||||
response.price > 0
|
||||
isAudioContentInterstitialEligible = response.price <= 0 || isAlertPreview
|
||||
|
||||
if (
|
||||
response.creator.creatorId != SharedPreferenceManager.userId && !response.existOrdered &&
|
||||
@@ -1046,7 +907,6 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
|
||||
}
|
||||
} else if (response.releaseDate == null) {
|
||||
audioContentStartPlaybackAction = null
|
||||
isAudioContentInterstitialEligible = false
|
||||
binding.llPreviewNo.visibility = View.VISIBLE
|
||||
}
|
||||
|
||||
@@ -1366,8 +1226,6 @@ class AudioContentDetailActivity : BaseActivity<ActivityAudioContentDetailBindin
|
||||
}
|
||||
|
||||
override fun onDestroy() {
|
||||
binding.yandexInlineBannerView.destroy()
|
||||
releaseAudioContentPlayInterstitial()
|
||||
super.onDestroy()
|
||||
}
|
||||
|
||||
|
||||
@@ -396,14 +396,6 @@
|
||||
android:visibility="gone" />
|
||||
</LinearLayout>
|
||||
|
||||
<com.yandex.mobile.ads.banner.BannerAdView
|
||||
android:id="@+id/yandex_inline_banner_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:maxHeight="90dp"
|
||||
android:layout_marginHorizontal="13.3dp"
|
||||
android:layout_marginTop="13.3dp" />
|
||||
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
|
||||
Reference in New Issue
Block a user