diff --git a/app/build.gradle.kts b/app/build.gradle.kts index eb326a6..75dd66e 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -56,6 +56,11 @@ dependencies { implementation(libs.androidx.activity) implementation(libs.androidx.constraintlayout) implementation(libs.androidx.viewpager2) + implementation(libs.exoplayer) + implementation(libs.exoplayer.core) + implementation(libs.exoplayer.ui) + implementation(libs.extension.ima) + implementation(libs.koleton) testImplementation(libs.junit) diff --git a/app/libs/bwmobile.aar b/app/libs/bwmobile.aar index e1e8aef..8665082 100644 Binary files a/app/libs/bwmobile.aar and b/app/libs/bwmobile.aar differ diff --git a/app/src/main/java/com/bridgewell/quickstart/android/activity/TabbedViewActivity.kt b/app/src/main/java/com/bridgewell/quickstart/android/activity/TabbedViewActivity.kt index ca950f5..22f4fcc 100644 --- a/app/src/main/java/com/bridgewell/quickstart/android/activity/TabbedViewActivity.kt +++ b/app/src/main/java/com/bridgewell/quickstart/android/activity/TabbedViewActivity.kt @@ -10,8 +10,8 @@ import androidx.appcompat.app.AppCompatActivity import androidx.core.content.ContextCompat import androidx.viewpager2.widget.ViewPager2 import com.bridgewell.bwmobile.ads.inapp.InAppApi +import com.bridgewell.bwmobile.ads.inapp.view.BwsAdView import com.bridgewell.bwmobile.ads.inapp.listener.BwsAdViewListener -import com.bridgewell.bwmobile.ads.inapp.model.BwsAdView import com.bridgewell.quickstart.android.R import com.bridgewell.quickstart.android.activity.ui.adapter.TabbedViewAdapter import com.bridgewell.quickstart.android.data.AdType @@ -20,15 +20,20 @@ import com.google.android.material.tabs.TabLayout import com.google.android.material.tabs.TabLayoutMediator import koleton.api.hideSkeleton import org.prebid.mobile.api.exceptions.AdException -import timber.log.Timber class TabbedViewActivity : AppCompatActivity() { companion object { - const val CONFIG_ID_BANNER = "dev-bws-banner-ad" + const val CONFIG_ID_BANNER = "dev-bws-banner-video-ad-300x250-4_3" const val CONFIG_ID_POP_UP = "dev-bws-popup-ad" const val CONFIG_ID_RIGHT_SIDE_STICKY = "dev-bws-right-side-sticky-ad" const val CONFIG_ID_MOBILE_STICKY = "dev-bws-mobile-sticky-ad" + + const val CONFIG_ID_VIDEO_43 = "dev-bws-banner-video-ad-300x250-4_3" + const val CONFIG_ID_VIDEO_169 = "dev-bws-banner-video-ad-300x250-16_9" + + const val CONFIG_ID_VIDEO_POPUP_43 = "dev-bws-popup-video-ad-4_3" + const val CONFIG_ID_VIDEO_POPUP_169 = "dev-bws-popup-video-ad-16_9" } private val inAppApi = InAppApi() @@ -113,11 +118,14 @@ class TabbedViewActivity : AppCompatActivity() { override fun onAdViewFailed(bannerView: BwsAdView?, exception: AdException?) { showToast("onAdFailed ${exception?.message}") - Timber.d("onAdFailed ${exception?.message}") } - override fun onAdViewClicked(bannerView: BwsAdView?) { - showToast("onAdClicked") + override fun onAdViewClicked( + bannerView: BwsAdView?, + openUrl: String?, + linkOpenMethod: String + ) { + showToast("onAdClicked ${openUrl ?: ""} $linkOpenMethod") } override fun onAdModalBrowserClosed(bannerView: BwsAdView?) { @@ -178,6 +186,68 @@ class TabbedViewActivity : AppCompatActivity() { listener = listener ) } + AdType.VIDEO43 -> { + val skeletonContainer = findViewById(R.id.topSkeletonContainer) + skeletonContainer.visibility = View.VISIBLE + for (i in 1..6) { + val imageViewId = resources.getIdentifier("topImageView$i", "id", packageName) + val imageView = findViewById(imageViewId) + val skeletonColor = when (i) { + 1, 2 -> R.color.skeleton_gray_1 + else -> R.color.skeleton_gray_2 + } + imageView.setBackgroundColor(ContextCompat.getColor(this, skeletonColor)) + } + val adWrapperView = findViewById(R.id.frameAdWrapper) + inAppApi.createDisplayVideoAd( + this, + BWVideoView.LayoutType.LAYOUT_4_3, + CONFIG_ID_VIDEO_43, + 300, + 250, + adWrapperView, + listener + ) + } + AdType.VIDEO169 -> { + val skeletonContainer = findViewById(R.id.topSkeletonContainer) + skeletonContainer.visibility = View.VISIBLE + for (i in 1..6) { + val imageViewId = resources.getIdentifier("topImageView$i", "id", packageName) + val imageView = findViewById(imageViewId) + val skeletonColor = when (i) { + 1, 2 -> R.color.skeleton_gray_1 + else -> R.color.skeleton_gray_2 + } + imageView.setBackgroundColor(ContextCompat.getColor(this, skeletonColor)) + } + val adWrapperView = findViewById(R.id.frameAdWrapper) + inAppApi.createDisplayVideoAd( + this, + BWVideoView.LayoutType.LAYOUT_16_9, + CONFIG_ID_VIDEO_169, + 300, + 250, + adWrapperView, + listener + ) + } + AdType.POPUP_VIDEO43 -> { + inAppApi.createBwsPopupVideoAd( + this, + BWVideoView.LayoutType.LAYOUT_4_3, + CONFIG_ID_VIDEO_POPUP_43, + listener + ) + } + AdType.POPUP_VIDEO169 -> { + inAppApi.createBwsPopupVideoAd( + this, + BWVideoView.LayoutType.LAYOUT_16_9, + CONFIG_ID_VIDEO_POPUP_169, + listener + ) + } } } diff --git a/app/src/main/java/com/bridgewell/quickstart/android/activity/ui/AdAdapter.kt b/app/src/main/java/com/bridgewell/quickstart/android/activity/ui/AdAdapter.kt index 3eda40b..81a5420 100644 --- a/app/src/main/java/com/bridgewell/quickstart/android/activity/ui/AdAdapter.kt +++ b/app/src/main/java/com/bridgewell/quickstart/android/activity/ui/AdAdapter.kt @@ -14,7 +14,11 @@ class AdAdapter( AdType.POP_UP_AD, AdType.STICKY_BOTTOM_RIGHT, AdType.MOBILE_STICKY_BOTTOM, - AdType.BANNER + AdType.BANNER, + AdType.VIDEO43, + AdType.VIDEO169, + AdType.POPUP_VIDEO43, + AdType.POPUP_VIDEO169 ) override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AdTypeViewHolder { diff --git a/app/src/main/java/com/bridgewell/quickstart/android/application/QuickStartApplication.kt b/app/src/main/java/com/bridgewell/quickstart/android/application/QuickStartApplication.kt index 2046c1a..77e70d3 100644 --- a/app/src/main/java/com/bridgewell/quickstart/android/application/QuickStartApplication.kt +++ b/app/src/main/java/com/bridgewell/quickstart/android/application/QuickStartApplication.kt @@ -2,7 +2,6 @@ package com.bridgewell.quickstart.android.application import android.app.Application import android.util.Log -import com.bridgewell.bwmobile.BWMobile import com.bridgewell.bwmobile.listener.OnInitializationListener import com.bridgewell.bwmobile.model.HostServer import com.bridgewell.quickstart.android.data.ConfigData diff --git a/app/src/main/java/com/bridgewell/quickstart/android/data/AdType.kt b/app/src/main/java/com/bridgewell/quickstart/android/data/AdType.kt index f420095..0150211 100644 --- a/app/src/main/java/com/bridgewell/quickstart/android/data/AdType.kt +++ b/app/src/main/java/com/bridgewell/quickstart/android/data/AdType.kt @@ -6,5 +6,9 @@ enum class AdType(val titleStringRes: Int) { POP_UP_AD(R.string.in_app_pop_up_ad_implementation), STICKY_BOTTOM_RIGHT(R.string.in_app_sticky_bottom_right_ad_implementation), MOBILE_STICKY_BOTTOM(R.string.in_app_mobile_bottom_ad_implementation), - BANNER(R.string.in_app_banner_ad_implementation) + BANNER(R.string.in_app_banner_ad_implementation), + VIDEO43(R.string.video_43), + VIDEO169(R.string.video_169), + POPUP_VIDEO43(R.string.popup_video_43), + POPUP_VIDEO169(R.string.popup_video_169) } \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b1d3a20..e872731 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,4 +10,8 @@ Load sticky bottom banner Load banner ad WebView API usage + BwsBannerAd_Video 4:3 + BwsBannerAd_Video 16:9 + BwsPopupAd_Video 4:3 + BwsPopupAd_Video 16:9 \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 56f2e82..985ad54 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,7 @@ [versions] agp = "8.5.0" +exoplayer = "2.18.7" +exoplayer-ima = "2.18.7" gson = "2.10.1" koleton = "1.0.0-beta01" kotlin = "1.9.0" @@ -21,6 +23,10 @@ viewpager2 = "1.1.0" androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-viewpager2 = { module = "androidx.viewpager2:viewpager2", version.ref = "viewpager2" } bwmobile = { module = "com.bridgewell:bwmobile", version.ref = "bwmobile" } +exoplayer = { module = "com.google.android.exoplayer:exoplayer", version.ref = "exoplayer" } +exoplayer-core = { module = "com.google.android.exoplayer:exoplayer-core", version.ref = "exoplayer" } +exoplayer-ui = { module = "com.google.android.exoplayer:exoplayer-ui", version.ref = "exoplayer" } +extension-ima = { module = "com.google.android.exoplayer:extension-ima", version.ref = "exoplayer-ima" } gson = { module = "com.google.code.gson:gson", version.ref = "gson" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" }