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 0000000..a3e30aa Binary files /dev/null and b/app/libs/UpLoadLibrary_12_03_15_13-release.aar differ 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") + } + } }