This commit is contained in:
ocean 2026-01-07 18:44:31 +08:00
parent 118f6f1847
commit 3c63df2c5d
17 changed files with 268 additions and 39 deletions

View File

@ -7,6 +7,8 @@ plugins {
id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.android")
kotlin("kapt") kotlin("kapt")
id ("kotlin-android") id ("kotlin-android")
id("com.google.gms.google-services")
id("com.google.firebase.crashlytics")
} }
val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date()) val timestamp = SimpleDateFormat("MM_dd_HH_mm").format(Date())
@ -17,8 +19,8 @@ android {
applicationId = "com.app.brush.guitar.ink" applicationId = "com.app.brush.guitar.ink"
minSdk = 24 minSdk = 24
targetSdk = 36 targetSdk = 36
versionCode = 1 versionCode = 2
versionName = "1.0" versionName = "1.1"
setProperty( setProperty(
"archivesBaseName", "RandomKeyboard_V" + versionName + "(${versionCode})_$timestamp" "archivesBaseName", "RandomKeyboard_V" + versionName + "(${versionCode})_$timestamp"
) )
@ -78,6 +80,49 @@ dependencies {
implementation("com.google.android.material:material:1.8.0") 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")
} }

29
app/google-services.json Normal file
View File

@ -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"
}

Binary file not shown.

Binary file not shown.

View File

@ -43,3 +43,14 @@
-keep class com.omicronapplications.** { *; } -keep class com.omicronapplications.** { *; }
-keep class net.sf.sevenzipjbinding.** { *; } -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.** { *;
}

View File

@ -3,7 +3,8 @@
xmlns:tools="http://schemas.android.com/tools"> xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application <application
android:name=".App" android:name=".App"
android:allowBackup="true" android:allowBackup="true"
@ -12,6 +13,8 @@
android:roundIcon="@mipmap/logo" android:roundIcon="@mipmap/logo"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/MyKeyBoard" android:theme="@style/MyKeyBoard"
android:networkSecurityConfig="@xml/net"
tools:replace="networkSecurityConfig"
tools:targetApi="31"> tools:targetApi="31">
<activity <activity
android:name=".eraser.CategoryListResonance" android:name=".eraser.CategoryListResonance"

View File

@ -2,8 +2,11 @@ package com.app.brush.guitar.ink
import android.app.Application import android.app.Application
import android.graphics.Typeface import android.graphics.Typeface
import com.ad.ironsourcelibrary.ISAdManager
import com.app.brush.guitar.ink.drama.DichotomyDetails import com.app.brush.guitar.ink.drama.DichotomyDetails
import com.app.brush.guitar.ink.drama.EphemeralWrapper import com.app.brush.guitar.ink.drama.EphemeralWrapper
import com.unity3d.mediation.LevelPlay
import com.up.uploadlibrary.UpLoadManager
//import com.pretty.keyboard.theme.keyboard.helper.ObjectBox //import com.pretty.keyboard.theme.keyboard.helper.ObjectBox
import org.json.JSONArray import org.json.JSONArray
import java.io.BufferedReader import java.io.BufferedReader
@ -29,7 +32,20 @@ class App : Application() {
appInstance = this appInstance = this
defaultFont = Typeface.createFromAsset(assets, "my_font.ttf") defaultFont = Typeface.createFromAsset(assets, "my_font.ttf")
dealFile() dealFile()
UpLoadManager.init(this,"ocean",{ss,s->})
ISAdManager.init("ocean", this,
"24d0ff7fd",
"693xdmd9cr0qkiv3",
"ijo9mg4t2m8a0as8",
"l4eic48lokbz4ub8", true,
onInitSuccess = {
}, onInitFail = {
})
} }
private fun dealFile() { private fun dealFile() {
val openFile = appInstance.assets.open("new_res.json") val openFile = appInstance.assets.open("new_res.json")
val jsonString = getJsonString(openFile) val jsonString = getJsonString(openFile)
@ -80,8 +96,7 @@ class App : Application() {
} }
val shuffled = beanDetailsList.shuffled() val shuffled = beanDetailsList.shuffled()
val dataBeanWrapper = EphemeralWrapper() val dataBeanWrapper = EphemeralWrapper().apply {
.apply {
parentName = pName parentName = pName
keyboardList = shuffled keyboardList = shuffled
} }
@ -98,6 +113,7 @@ class App : Application() {
list = mainList list = mainList
} }
private fun getJsonString(fileInputStream: InputStream): String? { private fun getJsonString(fileInputStream: InputStream): String? {
return try { return try {
// FileInputStream fileInputStream = new FileInputStream(path); // FileInputStream fileInputStream = new FileInputStream(path);
@ -116,5 +132,4 @@ class App : Application() {
} }
} }

View File

@ -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!!)
}
}

View File

@ -9,7 +9,11 @@ import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat; import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat; import androidx.core.view.WindowInsetsCompat;
import androidx.recyclerview.widget.GridLayoutManager; 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.App;
import com.app.brush.guitar.ink.R; import com.app.brush.guitar.ink.R;
import com.app.brush.guitar.ink.drama.DichotomyDetails; import com.app.brush.guitar.ink.drama.DichotomyDetails;
@ -20,7 +24,7 @@ import com.app.brush.guitar.ink.iguana.ListDecorationFossil;
import java.util.List; import java.util.List;
public class CategoryListResonance extends AppCompatActivity { public class CategoryListResonance extends BaseActivity {
private SmallActivityListCategoryBinding vb; private SmallActivityListCategoryBinding vb;
public static final String KEY_NAME ="class_name"; public static final String KEY_NAME ="class_name";
private String name; private String name;
@ -31,6 +35,7 @@ public class CategoryListResonance extends AppCompatActivity {
vb = SmallActivityListCategoryBinding.inflate(getLayoutInflater()); vb = SmallActivityListCategoryBinding.inflate(getLayoutInflater());
EdgeToEdge.enable(this); EdgeToEdge.enable(this);
setContentView(vb.getRoot()); setContentView(vb.getRoot());
ISAdManager.loadAllAd();
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom); 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() { vb.back.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { 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();
}
} }

View File

@ -16,6 +16,7 @@ import androidx.fragment.app.Fragment;
import androidx.viewpager2.adapter.FragmentStateAdapter; import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2; import androidx.viewpager2.widget.ViewPager2;
import com.ad.ironsourcelibrary.ISAdManager;
import com.app.brush.guitar.ink.R; import com.app.brush.guitar.ink.R;
import com.app.brush.guitar.ink.databinding.FlatActivityCategoryMainBinding; import com.app.brush.guitar.ink.databinding.FlatActivityCategoryMainBinding;
import com.app.brush.guitar.ink.iguana.IsotopeTextView; 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() { private void init() {
List<Fragment> listFragment = new ArrayList<>(); List<Fragment> listFragment = new ArrayList<>();
listFragment.add(QuixoticHome.newInstance()); listFragment.add(QuixoticHome.newInstance());

View File

@ -5,6 +5,7 @@ import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.os.CountDownTimer import android.os.CountDownTimer
import android.widget.ProgressBar import android.widget.ProgressBar
import com.ad.ironsourcelibrary.ISAdManager
import com.app.brush.guitar.ink.R import com.app.brush.guitar.ink.R
import com.app.brush.guitar.ink.iguana.UbiquitousSerene import com.app.brush.guitar.ink.iguana.UbiquitousSerene
import kotlin.math.roundToInt import kotlin.math.roundToInt
@ -16,7 +17,7 @@ import kotlin.math.roundToInt
class LauncherSilhouette : Activity() { class LauncherSilhouette : Activity() {
private lateinit var progressBar: ProgressBar private lateinit var progressBar: ProgressBar
private var countTime = 1500L private var countTime = 15000L
private lateinit var timer: CountDownTimer private lateinit var timer: CountDownTimer
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
@ -29,22 +30,16 @@ class LauncherSilhouette : Activity() {
} }
private fun init() { private fun init() {
timer = ISAdManager.showWelcomeAd(this,countTime,{ millisUntilFinished->
timer = object : CountDownTimer(countTime, 100) {
override fun onTick(millisUntilFinished: Long) {
val percentage: Float = 100 - millisUntilFinished.toFloat() / countTime * 100 val percentage: Float = 100 - millisUntilFinished.toFloat() / countTime * 100
val round = percentage.roundToInt() val round = percentage.roundToInt()
progressBar.progress = round progressBar.progress = round
} }){
override fun onFinish() {
progressBar.progress = 100 progressBar.progress = 100
toHome() toHome()
} }
}
timer.start() timer.start()
} }
private fun toHome() { private fun toHome() {

View File

@ -9,17 +9,18 @@ import android.view.View
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.appcompat.app.AppCompatActivity
import androidx.core.view.ViewCompat import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat import androidx.core.view.WindowInsetsCompat
import androidx.recyclerview.widget.GridLayoutManager 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.App
import com.app.brush.guitar.ink.databinding.CoolActivitySearchKeyboardBinding import com.app.brush.guitar.ink.databinding.CoolActivitySearchKeyboardBinding
import com.app.brush.guitar.ink.drama.DichotomyDetails import com.app.brush.guitar.ink.drama.DichotomyDetails
import com.app.brush.guitar.ink.gallery.HomeChildGalvanize import com.app.brush.guitar.ink.gallery.HomeChildGalvanize
import com.app.brush.guitar.ink.iguana.ListDecorationFossil import com.app.brush.guitar.ink.iguana.ListDecorationFossil
class SearchTrajectory : AppCompatActivity() { class SearchTrajectory : BaseActivity() {
private lateinit var vb: CoolActivitySearchKeyboardBinding private lateinit var vb: CoolActivitySearchKeyboardBinding
private lateinit var adapter: HomeChildGalvanize private lateinit var adapter: HomeChildGalvanize
@ -54,7 +55,7 @@ class SearchTrajectory : AppCompatActivity() {
private fun setupViews() { private fun setupViews() {
// 返回按钮 // 返回按钮
vb.ivBack.setOnClickListener { vb.ivBack.setOnClickListener {
finish() onInterceptBackPressed()
} }
// 搜索框 // 搜索框
@ -162,5 +163,21 @@ class SearchTrajectory : AppCompatActivity() {
vb.recyclerSearch.visibility = View.VISIBLE 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()
}
} }

View File

@ -20,6 +20,8 @@ import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView 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.App
import com.app.brush.guitar.ink.R import com.app.brush.guitar.ink.R
import com.app.brush.guitar.ink.drama.DichotomyDetails import com.app.brush.guitar.ink.drama.DichotomyDetails
@ -92,6 +94,7 @@ class SetKeyboardAmplify : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.fast_activity_keyboard_setting) setContentView(R.layout.fast_activity_keyboard_setting)
ISAdManager.loadAllAd()
this.enableEdgeToEdge() this.enableEdgeToEdge()
ViewCompat.setOnApplyWindowInsetsListener( ViewCompat.setOnApplyWindowInsetsListener(
findViewById<View?>(R.id.main), findViewById<View?>(R.id.main),
@ -100,7 +103,11 @@ class SetKeyboardAmplify : AppCompatActivity() {
v!!.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) v!!.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets insets
}) })
ISAdManager.showIsAd(this,object : ActionListener{
override fun onAction() {
}
})
findViewId() findViewId()
getExtraData() getExtraData()
displayData() displayData()

View File

@ -18,6 +18,7 @@ import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat; import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat; import androidx.core.view.WindowInsetsCompat;
import com.ad.ironsourcelibrary.ISAdManager;
import com.app.brush.guitar.ink.R; import com.app.brush.guitar.ink.R;
import com.app.brush.guitar.ink.databinding.BigActivityPreviewSuccessBinding; import com.app.brush.guitar.ink.databinding.BigActivityPreviewSuccessBinding;
import com.app.brush.guitar.ink.iguana.DiodeEclipse; 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; import jp.wasabeef.glide.transformations.BlurTransformation;
public class SuccessPreviewBewilder extends AppCompatActivity { public class SuccessPreviewBewilder extends BaseActivity {
private BigActivityPreviewSuccessBinding vb; private BigActivityPreviewSuccessBinding vb;
public static String key_name = "key_name"; public static String key_name = "key_name";
private int mPreviousKeyboardHeight = -1; private int mPreviousKeyboardHeight = -1;
@ -66,7 +67,7 @@ public class SuccessPreviewBewilder extends AppCompatActivity {
vb.idBack.setOnClickListener(new View.OnClickListener() { vb.idBack.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
finish(); onInterceptBackPressed();
} }
}); });
if (curPath == null) { 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();
}
} }

View File

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<network-security-config xmlns:tools="http://schemas.android.com/tools">
<domain-config cleartextTrafficPermitted="true">
<domain tools:ignore="NetworkSecurityConfig">mobile-server.lux-ad.com</domain>
</domain-config>
</network-security-config>

View File

@ -3,4 +3,6 @@ plugins {
id("com.android.application") version "8.11.1" apply false id("com.android.application") version "8.11.1" apply false
id("org.jetbrains.kotlin.android") version "2.2.21" apply false id("org.jetbrains.kotlin.android") version "2.2.21" apply false
kotlin("kapt") version "2.0.0" 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
} }

View File

@ -11,8 +11,30 @@ dependencyResolutionManagement {
repositories { repositories {
google() google()
mavenCentral() 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")
}
} }
} }