From 7ed0f72aab370247957e2c931ebbe2ca662dbb19 Mon Sep 17 00:00:00 2001 From: litingting Date: Tue, 6 Jan 2026 14:28:51 +0800 Subject: [PATCH] V1.1(2) IronSource --- app/build.gradle.kts | 46 ++- app/google-services.json | 29 ++ .../UpLoadLibrary_12_03_15_13-release.aar | Bin 0 -> 21581 bytes app/proguard-rules.pro | 15 + app/src/main/AndroidManifest.xml | 28 +- .../flowing/light/board/FlowingLightBoard.kt | 21 +- .../light/board/activity/SetActivity.kt | 59 +-- .../light/board/activity/StartActivity.kt | 31 +- .../board/activity/SuccessPreActivity.java | 15 +- .../flowing/light/board/ironad/AdManager.kt | 346 ++++++++++++++++++ .../light/board/ironad/IronListener.kt | 12 + .../light/board/ironad/WelcomeListener.kt | 6 + .../light/board/ironad/onActionListener.java | 6 + app/src/main/res/xml/net.xml | 6 + build.gradle.kts | 2 + settings.gradle.kts | 20 + 16 files changed, 588 insertions(+), 54 deletions(-) create mode 100644 app/google-services.json create mode 100644 app/libs/UpLoadLibrary_12_03_15_13-release.aar create mode 100644 app/src/main/java/com/flowing/light/board/ironad/AdManager.kt create mode 100644 app/src/main/java/com/flowing/light/board/ironad/IronListener.kt create mode 100644 app/src/main/java/com/flowing/light/board/ironad/WelcomeListener.kt create mode 100644 app/src/main/java/com/flowing/light/board/ironad/onActionListener.java create mode 100644 app/src/main/res/xml/net.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 2dc14ac..29ceea0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -7,6 +7,8 @@ plugins { id("org.jetbrains.kotlin.android") kotlin("kapt") id ("kotlin-android") + id("com.google.gms.google-services") + id("com.google.firebase.crashlytics") } val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) @@ -17,8 +19,8 @@ android { applicationId = "com.flowing.light.board" minSdk = 24 targetSdk = 36 - versionCode = 1 - versionName = "1.0" + versionCode = 2 + versionName = "1.1" setProperty( "archivesBaseName", "FlowingLightBoard_V" + versionName + "(${versionCode})_$timestamp" @@ -82,5 +84,45 @@ dependencies { implementation("com.google.code.gson:gson:2.10.1") + implementation(files("libs/UpLoadLibrary_12_03_15_13-release.aar")) + implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") + + implementation(platform("com.google.firebase:firebase-bom:34.6.0")) + implementation("com.google.firebase:firebase-crashlytics") + implementation("com.google.firebase:firebase-analytics") + implementation("com.google.firebase:firebase-config") + + +//--------------------------- + implementation("com.unity3d.ads-mediation:mediation-sdk:9.2.0") +// Add BIGO Ads Network + implementation("com.unity3d.ads-mediation:bigo-adapter:5.2.0") + implementation("com.bigossp:bigo-ads:5.6.2") +// Add Chartboost Network + implementation("com.unity3d.ads-mediation:chartboost-adapter:5.2.0") +// implementation("com.chartboost:chartboost-sdk:9.10.2") + + implementation("com.chartboost:chartboost-sdk:9.8.3") +// Add DT Exchange Network + implementation("com.unity3d.ads-mediation:fyber-adapter:5.2.0") + implementation("com.fyber:marketplace-sdk:8.4.1") +// Add InMobi Network + implementation("com.unity3d.ads-mediation:inmobi-adapter:5.3.0") + implementation("com.inmobi.monetization:inmobi-ads-kotlin:11.1.0") +// Add Liftoff Monetize Network + implementation("com.unity3d.ads-mediation:vungle-adapter:5.2.0") + implementation("com.vungle:vungle-ads:7.6.1") +// Add Mintegral Network + implementation("com.unity3d.ads-mediation:mintegral-adapter:5.3.0") + implementation("com.mbridge.msdk.oversea:mbridge_android_sdk:17.0.31") +// Add Moloco Network + implementation("com.unity3d.ads-mediation:moloco-adapter:5.5.0") + implementation("com.moloco.sdk:moloco-sdk:4.3.1") +// Add Pangle Network + implementation("com.unity3d.ads-mediation:pangle-adapter:5.4.0") + implementation("com.pangle.global:pag-sdk:7.8.0.7") +// Add Unity Ads Network + implementation("com.unity3d.ads-mediation:unityads-adapter:5.3.0") + implementation("com.unity3d.ads:unity-ads:4.16.4") } \ No newline at end of file diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..e7bbac6 --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "136251464858", + "project_id": "flowinglightboard", + "storage_bucket": "flowinglightboard.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:136251464858:android:e76767744c83d903559323", + "android_client_info": { + "package_name": "com.flowing.light.board" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyAcAWxvs0KLAzkVyFBMh6JMDs0zTf6Ah3o" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/libs/UpLoadLibrary_12_03_15_13-release.aar b/app/libs/UpLoadLibrary_12_03_15_13-release.aar new file mode 100644 index 0000000000000000000000000000000000000000..a3e30aacae042bf525f5eec498dbec4a8a476cf5 GIT binary patch literal 21581 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 BjSv6; literal 0 HcmV?d00001 diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index d6971ac..65359fb 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -54,3 +54,18 @@ -keep class com.flowing.light.board.tools.KeyboardData$Detail { *; } -keep class com.flowing.light.board.tools.KeyboardData$ThemeContent { *; } + + +-keepclassmembers class com.ironsource.sdk.controller.IronSourceWebView$JSInterface { + public *; +} +-keepclassmembers class * implements android.os.Parcelable { + public static final android.os.Parcelable$Creator *; +} +-keep public class com.google.android.gms.ads.** { + public *; +} +-keep class com.ironsource.adapters.** { *; +} + + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3d91637..a2c430c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,9 +1,10 @@ - + - + + - - - + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/flowing/light/board/FlowingLightBoard.kt b/app/src/main/java/com/flowing/light/board/FlowingLightBoard.kt index 9930632..3c382f6 100644 --- a/app/src/main/java/com/flowing/light/board/FlowingLightBoard.kt +++ b/app/src/main/java/com/flowing/light/board/FlowingLightBoard.kt @@ -2,9 +2,11 @@ package com.flowing.light.board import android.app.Application import android.graphics.Typeface +import android.util.Log import com.flowing.light.board.bean.BeanDetails import com.flowing.light.board.bean.BeanWrapper -//import com.pretty.keyboard.theme.keyboard.helper.ObjectBox +import com.flowing.light.board.ironad.AdManager +import com.up.uploadlibrary.UpLoadManager import org.json.JSONArray import java.io.BufferedReader import java.io.IOException @@ -18,17 +20,30 @@ class FlowingLightBoard : Application() { lateinit var list: MutableList - const val TAG = "-----------------" + const val TAG = "-----FlowingLightBoard------------" var defaultFont: Typeface? = null const val DB_VERSION = 2 const val DB_NAME = "db_name" + lateinit var context: Application } + override fun onCreate() { super.onCreate() + context = this flowingLightBoardInstance = this defaultFont = Typeface.createFromAsset(assets, "my_font.ttf") dealFile() + + AdManager.init(TAG, this,"24c994f7d","5vrcaivtsn22m6b8","tj4l2n2v9bio3atd","orzmjt542r4s4dqv",false,{ + Log.d(TAG,"----SDK --success") + }){ + + } + + UpLoadManager.init(this, TAG, { s: String?, s2: String? -> null }) + + } private fun dealFile() { val openFile = flowingLightBoardInstance.assets.open("res.json") @@ -37,8 +52,6 @@ class FlowingLightBoard : Application() { resolveJsonString(jsonString) } } - - private fun resolveJsonString(string: String) { val jsonData = JSONArray(string) var dataList: MutableList = mutableListOf() diff --git a/app/src/main/java/com/flowing/light/board/activity/SetActivity.kt b/app/src/main/java/com/flowing/light/board/activity/SetActivity.kt index 64d19aa..5e50568 100644 --- a/app/src/main/java/com/flowing/light/board/activity/SetActivity.kt +++ b/app/src/main/java/com/flowing/light/board/activity/SetActivity.kt @@ -21,23 +21,24 @@ import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView -import com.flowing.light.board.FlowingLightBoard -import com.flowing.light.board.R -import com.flowing.light.board.bean.BeanDetails -import com.flowing.light.board.callback.OnItemClickCallback -import com.flowing.light.board.callback.SetKeyboardCallback -import com.flowing.light.board.db.DatabaseManager -import com.flowing.light.board.adapter.SetAdapter -import com.flowing.light.board.fragment.DialogEnableSelect -import com.flowing.light.board.tools.Common -import com.flowing.light.board.tools.DealZipFile -import com.flowing.light.board.tools.SaveCurrentTheme import com.bumptech.glide.Glide import com.bumptech.glide.integration.webp.decoder.WebpDrawable import com.bumptech.glide.load.DataSource import com.bumptech.glide.load.engine.GlideException import com.bumptech.glide.request.RequestListener import com.bumptech.glide.request.target.Target +import com.flowing.light.board.FlowingLightBoard +import com.flowing.light.board.R +import com.flowing.light.board.adapter.SetAdapter +import com.flowing.light.board.bean.BeanDetails +import com.flowing.light.board.callback.OnItemClickCallback +import com.flowing.light.board.callback.SetKeyboardCallback +import com.flowing.light.board.db.DatabaseManager +import com.flowing.light.board.fragment.DialogEnableSelect +import com.flowing.light.board.ironad.AdManager +import com.flowing.light.board.tools.Common +import com.flowing.light.board.tools.DealZipFile +import com.flowing.light.board.tools.SaveCurrentTheme import kotlinx.coroutines.launch import java.io.File @@ -101,12 +102,13 @@ class SetActivity : AppCompatActivity() { v!!.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets }) - + AdManager.loadAllAd() findViewId() getExtraData() displayData() setApply() onClick() + AdManager.showIsAd(this) {} } @@ -168,7 +170,10 @@ class SetActivity : AppCompatActivity() { private fun onClick() { imgBack.setOnClickListener { - finish() + AdManager.showIsAd(this@SetActivity) { + finish() + } + } imgLike.setOnClickListener { @@ -188,7 +193,7 @@ class SetActivity : AppCompatActivity() { } recommendedRecycler.run { - adapter = SetAdapter( + adapter = SetAdapter( this@SetActivity ).apply { val shuffled = forYouList[0].keyboardList.shuffled() @@ -203,8 +208,10 @@ class SetActivity : AppCompatActivity() { } // 横向布局管理器 - layoutManager = LinearLayoutManager(this@SetActivity, - LinearLayoutManager.HORIZONTAL, false) + layoutManager = LinearLayoutManager( + this@SetActivity, + LinearLayoutManager.HORIZONTAL, false + ) // 正确设置横向间距 addItemDecoration(object : RecyclerView.ItemDecoration() { override fun getItemOffsets( @@ -227,6 +234,7 @@ class SetActivity : AppCompatActivity() { private fun Int.dpToPx(): Int { return (this * resources.displayMetrics.density).toInt() } + @SuppressLint("CheckResult") private fun loadImgGif() { Glide.with(this) @@ -262,19 +270,22 @@ class SetActivity : AppCompatActivity() { private fun setApply() { applyBtn.setOnClickListener { - val checkEnable = Common.checkEnable(this) - val checkSetDefault = Common.checkSetDefault(this) - if (!checkEnable || !checkSetDefault) { - showDialog() - return@setOnClickListener + AdManager.showIsAd(this@SetActivity) { + val checkEnable = Common.checkEnable(this) + val checkSetDefault = Common.checkSetDefault(this) + if (!checkEnable || !checkSetDefault) { + showDialog() + return@showIsAd + } + startDown() } - startDown() + } } private fun showDialog() { - dialog = dialog ?: DialogEnableSelect.newInstance() .apply{ + dialog = dialog ?: DialogEnableSelect.newInstance().apply { } @@ -356,6 +367,4 @@ class SetActivity : AppCompatActivity() { } - - } \ No newline at end of file diff --git a/app/src/main/java/com/flowing/light/board/activity/StartActivity.kt b/app/src/main/java/com/flowing/light/board/activity/StartActivity.kt index d37d7d4..2c6875f 100644 --- a/app/src/main/java/com/flowing/light/board/activity/StartActivity.kt +++ b/app/src/main/java/com/flowing/light/board/activity/StartActivity.kt @@ -4,9 +4,15 @@ import android.app.Activity import android.content.Intent import android.os.Bundle import android.os.CountDownTimer +import android.util.Log import android.widget.ProgressBar +import com.flowing.light.board.BuildConfig +import com.flowing.light.board.FlowingLightBoard +import com.flowing.light.board.FlowingLightBoard.Companion.TAG import com.flowing.light.board.R +import com.flowing.light.board.ironad.AdManager import com.flowing.light.board.tools.Common +import com.unity3d.mediation.LevelPlay import kotlin.math.roundToInt @@ -16,7 +22,7 @@ import kotlin.math.roundToInt class StartActivity : Activity() { private lateinit var progressBar: ProgressBar - private var countTime = 1500L + private var countTime = 15000L private lateinit var timer: CountDownTimer override fun onCreate(savedInstanceState: Bundle?) { @@ -30,19 +36,18 @@ class StartActivity : Activity() { private fun init() { - timer = object : CountDownTimer(countTime, 100) { - override fun onTick(millisUntilFinished: Long) { - val percentage: Float = 100 - millisUntilFinished.toFloat() / countTime * 100 - val round = percentage.roundToInt() - progressBar.progress = round - } - - override fun onFinish() { - progressBar.progress = 100 - toHome() - } - + if (BuildConfig.DEBUG) { + LevelPlay.validateIntegration(this) } + timer = AdManager.showWelcomeAd(this,countTime,{ millisUntilFinished-> + val percentage: Float = 100 - millisUntilFinished.toFloat() / countTime * 100 + val round = percentage.roundToInt() + progressBar.progress = round + }){ + progressBar.progress = 100 + toHome() + } + timer.start() } diff --git a/app/src/main/java/com/flowing/light/board/activity/SuccessPreActivity.java b/app/src/main/java/com/flowing/light/board/activity/SuccessPreActivity.java index 31a9a75..61c20fc 100644 --- a/app/src/main/java/com/flowing/light/board/activity/SuccessPreActivity.java +++ b/app/src/main/java/com/flowing/light/board/activity/SuccessPreActivity.java @@ -22,6 +22,8 @@ import androidx.core.view.WindowInsetsCompat; import com.flowing.light.board.R; import com.flowing.light.board.databinding.ActivitySuccessPreBinding; +import com.flowing.light.board.ironad.AdManager; +import com.flowing.light.board.ironad.onActionListener; import com.flowing.light.board.tools.KeyNames; import com.flowing.light.board.tools.Common; import com.flowing.light.board.tools.SaveCurrentTheme; @@ -51,13 +53,11 @@ public class SuccessPreActivity extends AppCompatActivity { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); return insets; }); - + AdManager.loadAllAd(); onInit(); } - - public void onInit() { String stringExtra = getIntent().getStringExtra(key_name); @@ -68,14 +68,19 @@ public class SuccessPreActivity extends AppCompatActivity { vb.idBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - finish(); + AdManager.showIsAd(SuccessPreActivity.this, new onActionListener() { + @Override + public void onAction() { + finish(); + } + }); } }); if (curPath == null) { return; } - String bgPath = curPath+"res/drawable-xxhdpi-v4/"+ KeyNames.previewBg; + String bgPath = curPath + "res/drawable-xxhdpi-v4/" + KeyNames.previewBg; Drawable bgDraw = Common.INSTANCE.getBgDrawable(this, bgPath); if (bgDraw != null) { diff --git a/app/src/main/java/com/flowing/light/board/ironad/AdManager.kt b/app/src/main/java/com/flowing/light/board/ironad/AdManager.kt new file mode 100644 index 0000000..c0c7881 --- /dev/null +++ b/app/src/main/java/com/flowing/light/board/ironad/AdManager.kt @@ -0,0 +1,346 @@ +package com.flowing.light.board.ironad + +import android.app.Activity +import android.app.Application +import android.os.CountDownTimer +import android.os.Handler +import android.util.Log + +import com.unity3d.mediation.LevelPlay +import com.unity3d.mediation.LevelPlayAdError +import com.unity3d.mediation.LevelPlayAdInfo +import com.unity3d.mediation.LevelPlayConfiguration +import com.unity3d.mediation.LevelPlayInitError +import com.unity3d.mediation.LevelPlayInitListener +import com.unity3d.mediation.LevelPlayInitRequest +import com.unity3d.mediation.interstitial.LevelPlayInterstitialAd +import com.unity3d.mediation.interstitial.LevelPlayInterstitialAdListener +import com.unity3d.services.UnityAdsSDK + + +object AdManager { + + //上次广告展示时刻 + var LAST_AD_SHOW = 0L + + const val type_no_cache = 0 + const val type_has_cache = 1 + const val type_show_success = 2 + const val type_show_close = 3 + const val type_show_fail = 4 + + + var place1Id = "" + var place2Id = "" + var place3Id = "" + + + var place1LoadFail = false + var place2LoadFail = false + var place3LoadFail = false + + val list = mutableListOf() + var mContext: Application? = null + var mTAG = "-----------IronSource-----------" + + + fun init( + tag: String, + context: Application, + appKey: String, + id1: String, + id2: String, + id3: String, + showDebugUI: Boolean, + onInitSuccess: (p0: LevelPlayConfiguration) -> Unit, + onInitFail: (p0: LevelPlayInitError) -> Unit + ) { + mTAG = tag + mContext = context + place1Id = id1 + place2Id = id2 + place3Id = id3 + + if(showDebugUI){ + LevelPlay.setMetaData("is_test_suite", "enable") + } + val initRequest = LevelPlayInitRequest.Builder(appKey) + .build() + LevelPlay.init(context, initRequest, object : LevelPlayInitListener { + override fun onInitSuccess(p0: LevelPlayConfiguration) { + onInitSuccess(p0) + //测试工具 + if (showDebugUI) { + mContext?.let { + LevelPlay.launchTestSuite(it) + } + } else { + loadAllAd() + } + } + + override fun onInitFailed(p0: LevelPlayInitError) { + onInitFail(p0) + } + + }) + + + + } + + + @JvmStatic + fun loadAllAd() { + if (list.size <= 0) { + place1LoadFail = false + place2LoadFail = false + place3LoadFail = false + val iSAd1 = LevelPlayInterstitialAd(place1Id) + val iSAd2 = LevelPlayInterstitialAd(place2Id) + val iSAd3 = LevelPlayInterstitialAd(place3Id) + list.add(iSAd1) + list.add(iSAd2) + list.add(iSAd3) + } + for (ad in list) { + if (!ad.isAdReady) { + setCallBack(ad, object : IronListener { + override fun onLoaded() { + } + + override fun onLoadFail() { + Log.d(mTAG, "-loadFail------placeId------${ad.adId}") + if (ad.adId == place1Id) { + place1LoadFail = true + } + if (ad.adId == place2Id) { + place2LoadFail = true + } + if (ad.adId == place3Id) { + place3LoadFail = true + } + } + + override fun onClose() { + + } + + override fun onShowFail() { + + } + + override fun onShowSuccess() { + + } + }) + ad.loadAd() + } + } + } + + @JvmStatic + fun getReadyAd(): LevelPlayInterstitialAd? { + list.shuffle() + for (ad in list) { + if (ad.isAdReady) { + Log.d(mTAG, "-cache------------") + return ad + } + } +// Log.d(mTAG, "-no cache------------") + return null + } + + + @JvmStatic + fun showWelcomeAd( + activity: Activity, + totalTim: Long, + countAction: (millisUntilFinished: Long) -> Unit, + goMain: () -> Unit + ): CountDownTimer { + var alreadyShow = false + var timer: CountDownTimer? = null + timer = object : CountDownTimer(totalTim, 100) { + override fun onTick(millisUntilFinished: Long) { + countAction(millisUntilFinished) + Log.d(mTAG, "onTick ${Thread.currentThread().name} timer=${timer}") + if (!alreadyShow) { + showAD(activity) { + if (it == type_has_cache) { + alreadyShow = true + } + if (it == type_show_close || it == type_show_fail) { + Log.d( + mTAG, + "goMain 111 ${Thread.currentThread().name} " + ) + goMain() + } + + } + } + } + + override fun onFinish() { + Log.d(mTAG, "onFinish() ${Thread.currentThread().name} ") + if (!alreadyShow) { + showAD(activity) { + if (it == type_show_close || it == type_show_fail || it == type_no_cache) { + Log.d( + mTAG, + "goMain 222 ${Thread.currentThread().name} " + ) + goMain() + } + } + } + } + } + return timer + } + + @JvmStatic + fun showWelComeAd( + activity: Activity, + handler: Handler, + totalTime: Long, + listener: WelcomeListener + ): Runnable { + var remainingTime = totalTime + var interval = 100L + var alreadyShow = false + + //继续更新进度 + var isContinue = true + return object : Runnable { + override fun run() { + remainingTime -= interval + if (remainingTime <= 0) { + if (!alreadyShow) { + showAD(activity) { + if (it == type_show_close || it == type_show_fail || it == type_no_cache) { + Log.d( + mTAG, + "goMain 222 ${Thread.currentThread().name} " + ) + listener.goMain() + } + } + } + } else { + val progress = (100 - remainingTime * 100 / totalTime).toInt() + listener.onTime(progress) + if (!alreadyShow) { + if (place1LoadFail + && place2LoadFail + && place3LoadFail + ) { + isContinue = false + listener.goMain() + Log.d( + mTAG, + "goMain 000 三个id都加载失败 ${Thread.currentThread().name} " + ) + + } + showAD(activity) { + if (it == type_has_cache) { + alreadyShow = true + } + if (it == type_show_close || it == type_show_fail) { + Log.d( + mTAG, + "goMain 111 ${Thread.currentThread().name} " + ) + isContinue = false + listener.goMain() + } + + } + } + if (isContinue) + handler.postDelayed(this, interval) + } + } + } + } + + + private fun setCallBack(ad: LevelPlayInterstitialAd, listener: IronListener) { + ad.setListener(object : LevelPlayInterstitialAdListener { + override fun onAdLoaded(p0: LevelPlayAdInfo) { + listener.onLoaded() + } + + override fun onAdLoadFailed(p0: LevelPlayAdError) { + listener.onLoadFail() + } + + override fun onAdDisplayed(p0: LevelPlayAdInfo) { + listener.onShowSuccess() + } + + override fun onAdClosed(p0: LevelPlayAdInfo) { + super.onAdClosed(p0) + listener.onClose() + } + + override fun onAdClicked(p0: LevelPlayAdInfo) { + super.onAdClicked(p0) + } + + override fun onAdDisplayFailed(p0: LevelPlayAdError, p1: LevelPlayAdInfo) { + super.onAdDisplayFailed(p0, p1) + listener.onShowFail() + } + + + }) + } + + + @JvmStatic + private fun showAD(activity: Activity, action: (type: Int) -> Unit) { + val readyAd = getReadyAd() + if (readyAd != null) { + Log.d(mTAG, "readyAd ${readyAd.adId} ") + action(type_has_cache) + setCallBack(readyAd, object : IronListener { + override fun onLoaded() { + } + + override fun onLoadFail() { + + } + + override fun onClose() { + action(type_show_close) + } + + override fun onShowFail() { + action(type_show_fail) + } + + override fun onShowSuccess() { + action(type_show_success) + LAST_AD_SHOW = System.currentTimeMillis() + } + }) + readyAd.showAd(activity) + } else { + action(type_no_cache) + + } + } + + @JvmStatic + fun showIsAd(activity: Activity, listener: onActionListener) { + showAD(activity) { type -> + if (type == type_no_cache || type == type_show_close || type == type_show_fail) { + listener.onAction() + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/flowing/light/board/ironad/IronListener.kt b/app/src/main/java/com/flowing/light/board/ironad/IronListener.kt new file mode 100644 index 0000000..f57c2ab --- /dev/null +++ b/app/src/main/java/com/flowing/light/board/ironad/IronListener.kt @@ -0,0 +1,12 @@ +package com.flowing.light.board.ironad + +interface IronListener { + fun onLoaded() + fun onLoadFail() + + fun onClose() + + fun onShowFail() + + fun onShowSuccess() +} \ No newline at end of file diff --git a/app/src/main/java/com/flowing/light/board/ironad/WelcomeListener.kt b/app/src/main/java/com/flowing/light/board/ironad/WelcomeListener.kt new file mode 100644 index 0000000..e6edfe1 --- /dev/null +++ b/app/src/main/java/com/flowing/light/board/ironad/WelcomeListener.kt @@ -0,0 +1,6 @@ +package com.flowing.light.board.ironad + +interface WelcomeListener { + fun onTime(progressInt:Int) + fun goMain() +} \ No newline at end of file diff --git a/app/src/main/java/com/flowing/light/board/ironad/onActionListener.java b/app/src/main/java/com/flowing/light/board/ironad/onActionListener.java new file mode 100644 index 0000000..72d34b5 --- /dev/null +++ b/app/src/main/java/com/flowing/light/board/ironad/onActionListener.java @@ -0,0 +1,6 @@ +package com.flowing.light.board.ironad; + +public interface onActionListener { + + void onAction(); +} diff --git a/app/src/main/res/xml/net.xml b/app/src/main/res/xml/net.xml new file mode 100644 index 0000000..0ac6102 --- /dev/null +++ b/app/src/main/res/xml/net.xml @@ -0,0 +1,6 @@ + + + + mobile-server.lux-ad.com + + diff --git a/build.gradle.kts b/build.gradle.kts index 6b4974f..7e19871 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,4 +3,6 @@ plugins { id("com.android.application") version "8.9.2" apply false id("org.jetbrains.kotlin.android") version "2.2.21" apply false kotlin("kapt") version "2.0.0" + id("com.google.gms.google-services") version "4.4.2" apply false + id ("com.google.firebase.crashlytics") version "3.0.2" apply false } diff --git a/settings.gradle.kts b/settings.gradle.kts index 3f2dbf4..d81ead4 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -13,6 +13,26 @@ dependencyResolutionManagement { mavenCentral() maven("https://jitpack.io") + + maven { + url = uri("https://android-sdk.is.com/") + } + maven { + url = uri("https://dl.bintray.com/ironsource-mobile/android-sdk") + } + maven { + url = uri("https://dl.bintray.com/ironsource-mobile/android-adapters") + } + maven { + url = uri("https://cboost.jfrog.io/artifactory/chartboost-ads/") + } + maven { + url = uri("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea") + } + maven { + url = uri("https://artifact.bytedance.com/repository/pangle") + } + } }