diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4fef996..1269a61 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.app.brush.guitar.ink" minSdk = 24 targetSdk = 36 - versionCode = 1 - versionName = "1.0" + versionCode = 2 + versionName = "1.1" setProperty( "archivesBaseName", "RandomKeyboard_V" + versionName + "(${versionCode})_$timestamp" ) @@ -78,6 +80,49 @@ dependencies { implementation("com.google.android.material:material:1.8.0") + implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.6.2") + implementation("com.google.android.gms:play-services-ads-identifier:18.0.1") + implementation("com.google.android.gms:play-services-location:21.0.1") + implementation("com.google.android.gms:play-services-appset:16.0.1") + // Import the Firebase BoM + implementation(platform("com.google.firebase:firebase-bom:34.6.0")) + implementation("com.google.firebase:firebase-crashlytics-ndk") + implementation("com.google.firebase:firebase-analytics") + // okhttp + implementation("com.squareup.okhttp3:okhttp:4.12.0") + implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") + implementation(files("libs/IronSourceLibrary_01_07_18_13-release.aar")) + implementation(files("libs/UpLoadLibrary_12_03_15_13-release.aar")) + //---------------------------ironSource + 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..09952f9 --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "1083327770366", + "project_id": "randomkeyboard-399e1", + "storage_bucket": "randomkeyboard-399e1.firebasestorage.app" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:1083327770366:android:f896bca0cf313f09bb3faf", + "android_client_info": { + "package_name": "com.app.brush.guitar.ink" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyDMqgmBjgvtbtMb3x3hlt4skHm5ZgvJ6HI" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/libs/IronSourceLibrary_01_07_18_13-release.aar b/app/libs/IronSourceLibrary_01_07_18_13-release.aar new file mode 100644 index 0000000..97be64b Binary files /dev/null and b/app/libs/IronSourceLibrary_01_07_18_13-release.aar differ 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 438dba4..e4de2a5 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -43,3 +43,14 @@ -keep class com.omicronapplications.** { *; } -keep class net.sf.sevenzipjbinding.** { *; } +-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 b7cddbb..caaf9f6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -3,7 +3,8 @@ xmlns:tools="http://schemas.android.com/tools"> - + + }) + + ISAdManager.init("ocean", this, + "24d0ff7fd", + "693xdmd9cr0qkiv3", + "ijo9mg4t2m8a0as8", + "l4eic48lokbz4ub8", true, + onInitSuccess = { + }, onInitFail = { + + }) } + private fun dealFile() { val openFile = appInstance.assets.open("new_res.json") val jsonString = getJsonString(openFile) @@ -68,23 +84,22 @@ class App : Application() { } beanDetailsList.add( DichotomyDetails().apply { - setImgPath(imgPath) - setZipPath(zipPath) - setTitleName(title) - setImgGif(imgGif) - thumbUrl = thUrl - thumbGif = thGif - }) + setImgPath(imgPath) + setZipPath(zipPath) + setTitleName(title) + setImgGif(imgGif) + thumbUrl = thUrl + thumbGif = thGif + }) } } val shuffled = beanDetailsList.shuffled() - val dataBeanWrapper = EphemeralWrapper() - .apply { - parentName = pName - keyboardList = shuffled - } + val dataBeanWrapper = EphemeralWrapper().apply { + parentName = pName + keyboardList = shuffled + } dataList.add(dataBeanWrapper) } @@ -98,6 +113,7 @@ class App : Application() { list = mainList } + private fun getJsonString(fileInputStream: InputStream): String? { return try { // FileInputStream fileInputStream = new FileInputStream(path); @@ -116,5 +132,4 @@ class App : Application() { } - } \ No newline at end of file diff --git a/app/src/main/java/com/app/brush/guitar/ink/eraser/BaseActivity.kt b/app/src/main/java/com/app/brush/guitar/ink/eraser/BaseActivity.kt new file mode 100644 index 0000000..41ac3e5 --- /dev/null +++ b/app/src/main/java/com/app/brush/guitar/ink/eraser/BaseActivity.kt @@ -0,0 +1,36 @@ +package com.app.brush.guitar.ink.eraser + +import android.os.Bundle +import androidx.activity.OnBackPressedCallback +import androidx.appcompat.app.AppCompatActivity + +open class BaseActivity: AppCompatActivity() { + protected var backPressedCallback: OnBackPressedCallback? = null + /** 子类是否需要拦截返回 */ + protected open fun shouldInterceptBackPress(): Boolean = false + + /** 子类定义拦截后的操作(例如弹窗) */ + protected open fun onInterceptBackPressed() {} + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setupBackPressedCallback()//初始化back事件 + } + private fun setupBackPressedCallback() { + backPressedCallback = object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + if (shouldInterceptBackPress()) { + // 由子类处理拦截动作 + onInterceptBackPressed() + } else { + // 不拦截:关闭自己 + isEnabled = false + onBackPressedDispatcher.onBackPressed() + } + } + } + + onBackPressedDispatcher.addCallback(this, backPressedCallback!!) + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/app/brush/guitar/ink/eraser/CategoryListResonance.java b/app/src/main/java/com/app/brush/guitar/ink/eraser/CategoryListResonance.java index 9021ae2..ce8fddc 100644 --- a/app/src/main/java/com/app/brush/guitar/ink/eraser/CategoryListResonance.java +++ b/app/src/main/java/com/app/brush/guitar/ink/eraser/CategoryListResonance.java @@ -9,7 +9,11 @@ import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; import androidx.recyclerview.widget.GridLayoutManager; +import kotlin.Unit; +import kotlin.jvm.functions.Function0; +import com.ad.ironsourcelibrary.ActionListener; +import com.ad.ironsourcelibrary.ISAdManager; import com.app.brush.guitar.ink.App; import com.app.brush.guitar.ink.R; import com.app.brush.guitar.ink.drama.DichotomyDetails; @@ -20,7 +24,7 @@ import com.app.brush.guitar.ink.iguana.ListDecorationFossil; import java.util.List; -public class CategoryListResonance extends AppCompatActivity { +public class CategoryListResonance extends BaseActivity { private SmallActivityListCategoryBinding vb; public static final String KEY_NAME ="class_name"; private String name; @@ -31,6 +35,7 @@ public class CategoryListResonance extends AppCompatActivity { vb = SmallActivityListCategoryBinding.inflate(getLayoutInflater()); EdgeToEdge.enable(this); setContentView(vb.getRoot()); + ISAdManager.loadAllAd(); ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); @@ -59,9 +64,22 @@ public class CategoryListResonance extends AppCompatActivity { vb.back.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - finish(); + onInterceptBackPressed(); } }); } + @Override + protected boolean shouldInterceptBackPress() { + return true; + } + + @Override + protected void onInterceptBackPressed() { + ISAdManager.showIsAd(this, () -> {}); + if (getBackPressedCallback() != null) { + getBackPressedCallback().setEnabled(false); + } + getOnBackPressedDispatcher().onBackPressed(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/app/brush/guitar/ink/eraser/CategoryPanorama.java b/app/src/main/java/com/app/brush/guitar/ink/eraser/CategoryPanorama.java index c398123..bc6b719 100644 --- a/app/src/main/java/com/app/brush/guitar/ink/eraser/CategoryPanorama.java +++ b/app/src/main/java/com/app/brush/guitar/ink/eraser/CategoryPanorama.java @@ -16,6 +16,7 @@ import androidx.fragment.app.Fragment; import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.widget.ViewPager2; +import com.ad.ironsourcelibrary.ISAdManager; import com.app.brush.guitar.ink.R; import com.app.brush.guitar.ink.databinding.FlatActivityCategoryMainBinding; import com.app.brush.guitar.ink.iguana.IsotopeTextView; @@ -48,6 +49,12 @@ public class CategoryPanorama extends AppCompatActivity { } + @Override + protected void onResume() { + super.onResume(); + ISAdManager.loadAllAd(); + } + private void init() { List listFragment = new ArrayList<>(); listFragment.add(QuixoticHome.newInstance()); diff --git a/app/src/main/java/com/app/brush/guitar/ink/eraser/LauncherSilhouette.kt b/app/src/main/java/com/app/brush/guitar/ink/eraser/LauncherSilhouette.kt index 26b27b1..cac0ab3 100644 --- a/app/src/main/java/com/app/brush/guitar/ink/eraser/LauncherSilhouette.kt +++ b/app/src/main/java/com/app/brush/guitar/ink/eraser/LauncherSilhouette.kt @@ -5,6 +5,7 @@ import android.content.Intent import android.os.Bundle import android.os.CountDownTimer import android.widget.ProgressBar +import com.ad.ironsourcelibrary.ISAdManager import com.app.brush.guitar.ink.R import com.app.brush.guitar.ink.iguana.UbiquitousSerene import kotlin.math.roundToInt @@ -16,7 +17,7 @@ import kotlin.math.roundToInt class LauncherSilhouette : Activity() { private lateinit var progressBar: ProgressBar - private var countTime = 1500L + private var countTime = 15000L private lateinit var timer: CountDownTimer override fun onCreate(savedInstanceState: Bundle?) { @@ -29,22 +30,16 @@ class LauncherSilhouette : 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() - } - + timer = ISAdManager.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() + timer.start() } private fun toHome() { diff --git a/app/src/main/java/com/app/brush/guitar/ink/eraser/SearchTrajectory.kt b/app/src/main/java/com/app/brush/guitar/ink/eraser/SearchTrajectory.kt index f984616..bd30895 100644 --- a/app/src/main/java/com/app/brush/guitar/ink/eraser/SearchTrajectory.kt +++ b/app/src/main/java/com/app/brush/guitar/ink/eraser/SearchTrajectory.kt @@ -9,17 +9,18 @@ import android.view.View import android.view.inputmethod.EditorInfo import android.view.inputmethod.InputMethodManager import androidx.activity.enableEdgeToEdge -import androidx.appcompat.app.AppCompatActivity import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat import androidx.recyclerview.widget.GridLayoutManager +import com.ad.ironsourcelibrary.ActionListener +import com.ad.ironsourcelibrary.ISAdManager import com.app.brush.guitar.ink.App import com.app.brush.guitar.ink.databinding.CoolActivitySearchKeyboardBinding import com.app.brush.guitar.ink.drama.DichotomyDetails import com.app.brush.guitar.ink.gallery.HomeChildGalvanize import com.app.brush.guitar.ink.iguana.ListDecorationFossil -class SearchTrajectory : AppCompatActivity() { +class SearchTrajectory : BaseActivity() { private lateinit var vb: CoolActivitySearchKeyboardBinding private lateinit var adapter: HomeChildGalvanize @@ -54,7 +55,7 @@ class SearchTrajectory : AppCompatActivity() { private fun setupViews() { // 返回按钮 vb.ivBack.setOnClickListener { - finish() + onInterceptBackPressed() } // 搜索框 @@ -162,5 +163,21 @@ class SearchTrajectory : AppCompatActivity() { vb.recyclerSearch.visibility = View.VISIBLE } } + + override fun shouldInterceptBackPress(): Boolean { + return true + } + + override fun onInterceptBackPressed() { + ISAdManager.showIsAd(this,object : ActionListener{ + override fun onAction() { + + } + }) + if (backPressedCallback != null) { + backPressedCallback!!.isEnabled = false + } + onBackPressedDispatcher.onBackPressed() + } } diff --git a/app/src/main/java/com/app/brush/guitar/ink/eraser/SetKeyboardAmplify.kt b/app/src/main/java/com/app/brush/guitar/ink/eraser/SetKeyboardAmplify.kt index 152874a..ec8f10f 100644 --- a/app/src/main/java/com/app/brush/guitar/ink/eraser/SetKeyboardAmplify.kt +++ b/app/src/main/java/com/app/brush/guitar/ink/eraser/SetKeyboardAmplify.kt @@ -20,6 +20,8 @@ import androidx.core.view.isVisible import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.ad.ironsourcelibrary.ActionListener +import com.ad.ironsourcelibrary.ISAdManager import com.app.brush.guitar.ink.App import com.app.brush.guitar.ink.R import com.app.brush.guitar.ink.drama.DichotomyDetails @@ -92,6 +94,7 @@ class SetKeyboardAmplify : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.fast_activity_keyboard_setting) + ISAdManager.loadAllAd() this.enableEdgeToEdge() ViewCompat.setOnApplyWindowInsetsListener( findViewById(R.id.main), @@ -100,7 +103,11 @@ class SetKeyboardAmplify : AppCompatActivity() { v!!.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets }) + ISAdManager.showIsAd(this,object : ActionListener{ + override fun onAction() { + } + }) findViewId() getExtraData() displayData() diff --git a/app/src/main/java/com/app/brush/guitar/ink/eraser/SuccessPreviewBewilder.java b/app/src/main/java/com/app/brush/guitar/ink/eraser/SuccessPreviewBewilder.java index e6542dc..5ab9e5c 100644 --- a/app/src/main/java/com/app/brush/guitar/ink/eraser/SuccessPreviewBewilder.java +++ b/app/src/main/java/com/app/brush/guitar/ink/eraser/SuccessPreviewBewilder.java @@ -18,6 +18,7 @@ import androidx.core.graphics.Insets; import androidx.core.view.ViewCompat; import androidx.core.view.WindowInsetsCompat; +import com.ad.ironsourcelibrary.ISAdManager; import com.app.brush.guitar.ink.R; import com.app.brush.guitar.ink.databinding.BigActivityPreviewSuccessBinding; import com.app.brush.guitar.ink.iguana.DiodeEclipse; @@ -32,7 +33,7 @@ import com.bumptech.glide.request.target.Target; import jp.wasabeef.glide.transformations.BlurTransformation; -public class SuccessPreviewBewilder extends AppCompatActivity { +public class SuccessPreviewBewilder extends BaseActivity { private BigActivityPreviewSuccessBinding vb; public static String key_name = "key_name"; private int mPreviousKeyboardHeight = -1; @@ -66,7 +67,7 @@ public class SuccessPreviewBewilder extends AppCompatActivity { vb.idBack.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - finish(); + onInterceptBackPressed(); } }); if (curPath == null) { @@ -128,4 +129,19 @@ public class SuccessPreviewBewilder extends AppCompatActivity { } }); } + + + @Override + protected boolean shouldInterceptBackPress() { + return true; + } + + @Override + protected void onInterceptBackPressed() { + ISAdManager.showIsAd(this, () -> {}); + if (getBackPressedCallback() != null) { + getBackPressedCallback().setEnabled(false); + } + getOnBackPressedDispatcher().onBackPressed(); + } } \ No newline at end of file diff --git a/app/src/main/res/xml/net.xml b/app/src/main/res/xml/net.xml new file mode 100644 index 0000000..4c12327 --- /dev/null +++ b/app/src/main/res/xml/net.xml @@ -0,0 +1,6 @@ + + + + mobile-server.lux-ad.com + + \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index d4e8229..3d3bc68 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -3,4 +3,6 @@ plugins { id("com.android.application") version "8.11.1" 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.4" apply false + id("com.google.firebase.crashlytics") version "3.0.6" apply false } diff --git a/settings.gradle.kts b/settings.gradle.kts index 654ecad..f0a4577 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -11,8 +11,30 @@ dependencyResolutionManagement { repositories { google() mavenCentral() - maven("https://jitpack.io") + flatDir { + dirs("libs") + } + maven("https://jitpack.io") + //------------------------- IronSource + 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") + } } }