V1.0.1(2)集成topon

This commit is contained in:
litingting 2025-03-21 17:06:37 +08:00
parent 713a96feaa
commit d236fe6f37
19 changed files with 656 additions and 118 deletions

View File

@ -5,8 +5,8 @@ import java.text.SimpleDateFormat
plugins { plugins {
id("com.android.application") id("com.android.application")
id("org.jetbrains.kotlin.android") id("org.jetbrains.kotlin.android")
// id("com.google.gms.google-services") id("com.google.gms.google-services")
// id("com.google.firebase.crashlytics") id("com.google.firebase.crashlytics")
kotlin("kapt") kotlin("kapt")
id ("kotlin-android") id ("kotlin-android")
} }
@ -21,8 +21,8 @@ android {
applicationId = "com.keyboard.skinning.cool" applicationId = "com.keyboard.skinning.cool"
minSdk = 23 minSdk = 23
targetSdk = 34 targetSdk = 34
versionCode = 1 versionCode = 2
versionName = "1.0.0" versionName = "1.0.1"
setProperty( setProperty(
"archivesBaseName", "archivesBaseName",
"Keyboard Skinning_V" + versionName + "(${versionCode})_$timestamp" "Keyboard Skinning_V" + versionName + "(${versionCode})_$timestamp"
@ -80,67 +80,99 @@ dependencies {
implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0") implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")
implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0") implementation ("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0")
// implementation(platform("com.google.firebase:firebase-bom:33.7.0")) implementation(platform("com.google.firebase:firebase-bom:33.7.0"))
// implementation("com.google.firebase:firebase-crashlytics") implementation("com.google.firebase:firebase-crashlytics")
// implementation("com.google.firebase:firebase-analytics") implementation("com.google.firebase:firebase-analytics")
// implementation("com.google.firebase:firebase-config") implementation("com.google.firebase:firebase-config")
//-----------------------------------------------TopOn(pangle、IronSource、mintegral、unityads、liftoff(vungle)、Bigo) //-----------------------------------------------TopOn(Mintegral、Pangle、UnitAds、Digital Turbine(Fyber)、Chartboost&Helium、Ironsource、Liftoff(Vungle)、Inmobi、Start.io、Appnext、Bigo)
//Anythink (Necessary) //Anythink (Necessary)
// implementation("com.anythink.sdk:core-tpn:6.3.68") implementation("com.anythink.sdk:core-tpn:6.4.07")
// implementation("com.anythink.sdk:nativead-tpn:6.3.68") implementation("com.anythink.sdk:nativead-tpn:6.4.07")
// implementation("com.anythink.sdk:banner-tpn:6.3.68") implementation("com.anythink.sdk:banner-tpn:6.4.07")
// implementation("com.anythink.sdk:interstitial-tpn:6.3.68") implementation("com.anythink.sdk:interstitial-tpn:6.4.07")
// implementation("com.anythink.sdk:rewardedvideo-tpn:6.3.68") implementation("com.anythink.sdk:rewardedvideo-tpn:6.4.07")
// implementation("com.anythink.sdk:splash-tpn:6.3.68") implementation("com.anythink.sdk:splash-tpn:6.4.07")
//
// //Androidx (Necessary) //Androidx (Necessary)
// implementation("androidx.appcompat:appcompat:1.1.0") implementation("androidx.appcompat:appcompat:1.1.0")
// implementation("androidx.browser:browser:1.4.0") implementation("androidx.browser:browser:1.4.0")
//
// //Vungle //StartApp
// implementation("com.anythink.sdk:adapter-tpn-vungle:6.3.68") implementation("com.anythink.sdk:adapter-tpn-startapp:6.4.07")
// implementation("com.vungle:vungle-ads:7.3.2") implementation("com.startapp:inapp-sdk:5.0.2")
// implementation("com.google.android.gms:play-services-basement:18.1.0")
// implementation("com.google.android.gms:play-services-ads-identifier:18.0.1") //Appnext
// implementation("com.anythink.sdk:adapter-tpn-appnext:6.4.07")
// //UnityAds implementation("com.appnext.sdk:ads:2.7.1.473")
// implementation("com.anythink.sdk:adapter-tpn-unityads:6.3.68") implementation("com.appnext.sdk:banners:2.7.1.473")
// implementation("com.unity3d.ads:unity-ads:4.9.3") implementation("com.appnext.sdk:native-ads2:2.7.1.473")
// implementation("com.appnext.sdk:actions:2.4.6.472")
// //Ironsource implementation("androidx.constraintlayout:constraintlayout:2.0.4")
// implementation("com.anythink.sdk:adapter-tpn-ironsource:6.3.68")
// implementation("com.ironsource.sdk:mediationsdk:8.1.0") //Vungle
// implementation("com.google.android.gms:play-services-appset:16.0.2") implementation("com.anythink.sdk:adapter-tpn-vungle:6.4.07")
// implementation("com.google.android.gms:play-services-ads-identifier:18.0.1") implementation("com.vungle:vungle-ads:7.4.0")
// implementation("com.google.android.gms:play-services-basement:18.1.0") implementation("com.google.android.gms:play-services-basement:18.1.0")
// implementation("com.google.android.gms:play-services-ads-identifier:18.0.1")
// //Bigo
// implementation("com.anythink.sdk:adapter-tpn-bigo:6.3.68") //UnityAds
// implementation("com.bigossp:bigo-ads:4.7.4") implementation("com.anythink.sdk:adapter-tpn-unityads:6.4.07")
// implementation("com.unity3d.ads:unity-ads:4.12.2")
// //Pangle
// implementation("com.anythink.sdk:adapter-tpn-pangle-nonchina:6.3.68.1") //Ironsource
// implementation( "com.pangle.global:ads-sdk:6.0.0.3") implementation("com.anythink.sdk:adapter-tpn-ironsource:6.4.07")
// implementation( "com.google.android.gms:play-services-ads-identifier:18.0.1") implementation("com.ironsource.sdk:mediationsdk:8.2.1")
// implementation("com.google.android.gms:play-services-appset:16.0.2")
// //Mintegral implementation("com.google.android.gms:play-services-ads-identifier:18.0.1")
// implementation("com.anythink.sdk:adapter-tpn-mintegral-nonchina:6.3.68") implementation("com.google.android.gms:play-services-basement:18.1.0")
// implementation("com.mbridge.msdk.oversea:reward:16.7.51")
// implementation("com.mbridge.msdk.oversea:newinterstitial:16.7.51") //Bigo
// implementation("com.mbridge.msdk.oversea:mbnative:16.7.51") implementation("com.anythink.sdk:adapter-tpn-bigo:6.4.07")
// implementation("com.mbridge.msdk.oversea:mbnativeadvanced:16.7.51") implementation("com.bigossp:bigo-ads:4.9.0")
// implementation("com.mbridge.msdk.oversea:mbsplash:16.7.51")
// implementation("com.mbridge.msdk.oversea:mbbanner:16.7.51") //Pangle
// implementation("com.mbridge.msdk.oversea:mbbid:16.7.51") implementation("com.anythink.sdk:adapter-tpn-pangle-nonchina:6.4.07")
// implementation("androidx.recyclerview:recyclerview:1.1.0") implementation("com.pangle.global:ads-sdk:6.1.0.9")
// implementation("com.google.android.gms:play-services-ads-identifier:18.0.1")
// //Tramini
// implementation("com.anythink.sdk:tramini-plugin-tpn:6.3.68") //Inmobi
// implementation("com.anythink.sdk:adapter-tpn-inmobi:6.4.07")
// // Debugger UI Tools implementation("com.inmobi.monetization:inmobi-ads-kotlin:10.7.5")
// implementation ("com.anythink.sdk:debugger-ui:1.0.7")
//Mintegral
implementation("com.anythink.sdk:adapter-tpn-mintegral-nonchina:6.4.07")
implementation("com.mbridge.msdk.oversea:reward:16.8.11")
implementation("com.mbridge.msdk.oversea:newinterstitial:16.8.11")
implementation("com.mbridge.msdk.oversea:mbnative:16.8.11")
implementation("com.mbridge.msdk.oversea:mbnativeadvanced:16.8.11")
implementation("com.mbridge.msdk.oversea:mbsplash:16.8.11")
implementation("com.mbridge.msdk.oversea:mbbanner:16.8.11")
implementation("com.mbridge.msdk.oversea:mbbid:16.8.11")
implementation("androidx.recyclerview:recyclerview:1.1.0")
//Chartboost
implementation("com.anythink.sdk:adapter-tpn-chartboost:6.4.07")
implementation("com.chartboost:chartboost-sdk:9.7.0")
implementation("com.chartboost:chartboost-mediation-sdk:4.9.1")
implementation("com.chartboost:chartboost-mediation-adapter-chartboost:4.9.7.0.0")
implementation("com.jakewharton.retrofit:retrofit2-kotlinx-serialization-converter:1.0.0")
implementation("com.squareup.okhttp3:logging-interceptor:4.10.0")
implementation("com.squareup.okhttp3:okhttp:4.10.0")
implementation("com.squareup.retrofit2:converter-scalars:2.9.0")
implementation("com.squareup.retrofit2:retrofit:2.9.0")
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.1")
implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.5.1")
//Fyber
implementation("com.anythink.sdk:adapter-tpn-fyber:6.4.07")
implementation("com.fyber:marketplace-sdk:8.3.0")
implementation("com.google.android.gms:play-services-ads-identifier:18.0.1")
// Debugger UI Tools
//implementation ("com.anythink.sdk:debugger-ui:1.0.7")
//----------------------------------------------TopOn //----------------------------------------------TopOn

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

@ -0,0 +1,29 @@
{
"project_info": {
"project_number": "104263901419",
"project_id": "keyboard-skinning",
"storage_bucket": "keyboard-skinning.firebasestorage.app"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:104263901419:android:eb99ebb6acec197adc5eae",
"android_client_info": {
"package_name": "com.keyboard.skinning.cool"
}
},
"oauth_client": [],
"api_key": [
{
"current_key": "AIzaSyDICni_uHuKg6bMIaK5d2ThxJRqqM583hs"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": []
}
}
}
],
"configuration_version": "1"
}

128
app/proguard-rules.pro vendored
View File

@ -43,3 +43,131 @@
-keep class com.omicronapplications.** { *; } -keep class com.omicronapplications.** { *; }
-keep class net.sf.sevenzipjbinding.** { *; } -keep class net.sf.sevenzipjbinding.** { *; }
#---------------------------------------------Topon
-keep class com.startapp.** {
*;
}
-keep class com.truenet.** {
*;
}
-keepattributes Exceptions, InnerClasses, Signature, Deprecated, SourceFile,
LineNumberTable, *Annotation*, EnclosingMethod
-dontwarn android.webkit.JavascriptInterface
-dontwarn com.startapp.**
-dontwarn org.jetbrains.annotations.**
-keep class com.appnext.** { *; }
-dontwarn com.appnext.**
# Vungle
-dontwarn com.vungle.ads.**
-keepclassmembers class com.vungle.ads.** {
*;
}
-keep class com.vungle.ads.**
# Google
-keep class com.google.android.gms.** { *; }
-dontwarn com.google.android.gms.**
# START OkHttp + Okio
# JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.**
# A resource is loaded with a relative path so the package of this class must be preserved.
-adaptresourcefilenames okhttp3/internal/publicsuffix/PublicSuffixDatabase.gz
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*
# OkHttp platform used only on JVM and when Conscrypt and other security providers are available.
-dontwarn okhttp3.internal.platform.**
-dontwarn org.conscrypt.**
-dontwarn org.bouncycastle.**
-dontwarn org.openjsse.**
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.*
# END OkHttp + Okio
# START Protobuf
-dontwarn com.google.protobuf.**
-keepclassmembers class com.google.protobuf.** {
*;
}
-keep class * extends com.google.protobuf.GeneratedMessageLite { *; }
# END Protobuf
-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.** { *;
}
-dontwarn com.ironsource.mediationsdk.**
-dontwarn com.ironsource.adapters.**
-keepattributes JavascriptInterface
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
-keep class com.bytedance.sdk.** { *; }
-keep class com.inmobi.** { *; }
-keep public class com.google.android.gms.**
-dontwarn com.google.android.gms.**
-dontwarn com.squareup.picasso.**
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient{
public *;
}
-keep class com.google.android.gms.ads.identifier.AdvertisingIdClient$Info{
public *;
}
# skip the Picasso library classes
-keep class com.squareup.picasso.** {*;}
-dontwarn com.squareup.okhttp.**
# skip Moat classes
-keep class com.moat.** {*;}
-dontwarn com.moat.**
# skip IAB classes
-keep class com.iab.** {*;}
-dontwarn com.iab.**
-keepattributes Signature
-keepattributes *Annotation*
-keep class com.mbridge.** {*; }
-keep interface com.mbridge.** {*; }
-keep class android.support.v4.** { *; }
-dontwarn com.mbridge.**
-keep class **.R$* { public static final int mbridge*; }
-keep public class com.mbridge.* extends androidx.** { *; }
-keep public class androidx.viewpager.widget.PagerAdapter{ *; }
-keep public class androidx.viewpager.widget.ViewPager.OnPageChangeListener{ *; }
-keep interface androidx.annotation.IntDef{ *; }
-keep interface androidx.annotation.Nullable{ *; }
-keep interface androidx.annotation.CheckResult{ *; }
-keep interface androidx.annotation.NonNull{ *; }
-keep public class androidx.fragment.app.Fragment{ *; }
-keep public class androidx.core.content.FileProvider{ *; }
-keep public class androidx.core.app.NotificationCompat{ *; }
-keep public class androidx.appcompat.widget.AppCompatImageView { *; }
-keep public class androidx.recyclerview.*{ *; }
-keep class com.chartboost.** { *; }
#---------------------------------------------Topon

View File

@ -2,6 +2,9 @@ package com.keyboard.skinning.cool
import android.app.Application import android.app.Application
import android.graphics.Typeface import android.graphics.Typeface
import com.anythink.core.api.ATSDK
import com.anythink.core.api.NetTrafficeCallback
import com.keyboard.skinning.cool.ad.AdManager
import com.keyboard.skinning.cool.data.ChildData import com.keyboard.skinning.cool.data.ChildData
import com.keyboard.skinning.cool.data.ClassData import com.keyboard.skinning.cool.data.ClassData
//import com.pretty.keyboard.theme.keyboard.helper.ObjectBox //import com.pretty.keyboard.theme.keyboard.helper.ObjectBox
@ -27,7 +30,7 @@ class App : Application() {
override fun onCreate() { override fun onCreate() {
super.onCreate() super.onCreate()
appInstance = this appInstance = this
// ObjectBox.init(this) initAd()
defaultFont = Typeface.createFromAsset(assets, "my_font.ttf") defaultFont = Typeface.createFromAsset(assets, "my_font.ttf")
dealFile() dealFile()
@ -72,13 +75,13 @@ class App : Application() {
} }
childDataList.add( childDataList.add(
ChildData().apply { ChildData().apply {
setImgPath(imgPath) setImgPath(imgPath)
setZipPath(zipPath) setZipPath(zipPath)
setTitleName(title) setTitleName(title)
setImgGif(imgGif) setImgGif(imgGif)
thumbUrl = thUrl thumbUrl = thUrl
thumbGif = thGif thumbGif = thGif
}) })
} }
@ -86,9 +89,9 @@ class App : Application() {
val shuffled = childDataList.shuffled() val shuffled = childDataList.shuffled()
val dataClassData = ClassData() val dataClassData = ClassData()
.apply { .apply {
parentName = pName parentName = pName
keyboardList = shuffled keyboardList = shuffled
} }
dataList.add(dataClassData) dataList.add(dataClassData)
} }
@ -102,6 +105,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);
@ -120,5 +124,26 @@ class App : Application() {
} }
private fun initAd() {
ATSDK.checkIsEuTraffic(this, object : NetTrafficeCallback {
override fun onResultCallback(isEU: Boolean) {
if (isEU && ATSDK.getGDPRDataLevel(this@App) == ATSDK.UNKNOWN) {
ATSDK.showGdprAuth(this@App)
}
}
override fun onErrorCallback(errorMsg: String) {
}
})
val APPId = "h67db7f232075e"
val AppKey = "ad87edbfa080f02492716cd8e4499fa07"
ATSDK.init(this, APPId, AppKey);
//测试工具
// ATDebuggerUITest.showDebuggerUI(this,debug_KEy);
AdManager.loadAllAd()
}
} }

View File

@ -7,6 +7,8 @@ import android.os.Bundle;
import android.view.View; import android.view.View;
import com.keyboard.skinning.cool.App; import com.keyboard.skinning.cool.App;
import com.keyboard.skinning.cool.ad.AdManager;
import com.keyboard.skinning.cool.ad.onActionListener;
import com.keyboard.skinning.cool.adpter.AdapterChild; import com.keyboard.skinning.cool.adpter.AdapterChild;
import com.keyboard.skinning.cool.data.ChildData; import com.keyboard.skinning.cool.data.ChildData;
import com.keyboard.skinning.cool.data.ClassData; import com.keyboard.skinning.cool.data.ClassData;
@ -18,40 +20,54 @@ import java.util.List;
public class AllActivity extends AppCompatActivity { public class AllActivity extends AppCompatActivity {
private ActivityAllBinding vb; private ActivityAllBinding vb;
public static final String KEY_NAME ="class_name"; public static final String KEY_NAME = "class_name";
private String name; private String name;
private List<ChildData> data; private List<ChildData> data;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
vb = ActivityAllBinding.inflate(getLayoutInflater()); vb = ActivityAllBinding.inflate(getLayoutInflater());
Helper.INSTANCE.initFullScreen(this, false); Helper.INSTANCE.initFullScreen(this, false);
setContentView(vb.getRoot()); setContentView(vb.getRoot());
AdManager.loadAllAd();
name = getIntent().getStringExtra(KEY_NAME); name = getIntent().getStringExtra(KEY_NAME);
initData(); initData();
initClick(); initClick();
AdManager.showTopOn(AllActivity.this, new onActionListener() {
@Override
public void onAction() {
}
});
} }
private void initData(){ private void initData() {
vb.className.setText(name); vb.className.setText(name);
for (ClassData classData : App.list) { for (ClassData classData : App.list) {
if(classData.getParentName().equals(name)){ if (classData.getParentName().equals(name)) {
data = classData.getKeyboardList(); data = classData.getKeyboardList();
} }
} }
ItemDec itemDec = new ItemDec(3, 3, 0); ItemDec itemDec = new ItemDec(3, 3, 0);
AdapterChild adapterMain = new AdapterChild(this,data); AdapterChild adapterMain = new AdapterChild(this, data);
vb.recycler.setLayoutManager(new GridLayoutManager(AllActivity.this,3)); vb.recycler.setLayoutManager(new GridLayoutManager(AllActivity.this, 3));
vb.recycler.setAdapter(adapterMain); vb.recycler.setAdapter(adapterMain);
vb.recycler.addItemDecoration(itemDec); vb.recycler.addItemDecoration(itemDec);
} }
private void initClick(){
private void initClick() {
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(); AdManager.showTopOn(AllActivity.this, new onActionListener() {
@Override
public void onAction() {
finish();
}
});
} }
}); });
} }

View File

@ -23,12 +23,13 @@ import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.target.Target
import com.keyboard.skinning.cool.App import com.keyboard.skinning.cool.App
import com.keyboard.skinning.cool.R import com.keyboard.skinning.cool.R
import com.keyboard.skinning.cool.ad.AdManager
import com.keyboard.skinning.cool.adpter.AdapterRecommend import com.keyboard.skinning.cool.adpter.AdapterRecommend
import com.keyboard.skinning.cool.data.ChildData import com.keyboard.skinning.cool.data.ChildData
import com.keyboard.skinning.cool.db.DbFunction import com.keyboard.skinning.cool.db.DbFunction
import com.keyboard.skinning.cool.fragment.FragmentEnable import com.keyboard.skinning.cool.fragment.FragmentEnable
import com.keyboard.skinning.cool.listener.ItemClickListener
import com.keyboard.skinning.cool.listener.ApplySkinListener import com.keyboard.skinning.cool.listener.ApplySkinListener
import com.keyboard.skinning.cool.listener.ItemClickListener
import com.keyboard.skinning.cool.tools.Download import com.keyboard.skinning.cool.tools.Download
import com.keyboard.skinning.cool.tools.Helper import com.keyboard.skinning.cool.tools.Helper
import com.keyboard.skinning.cool.tools.SpSkin import com.keyboard.skinning.cool.tools.SpSkin
@ -87,13 +88,16 @@ class ApplySkinsActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_apply) setContentView(R.layout.activity_apply)
Helper.initFullScreen(this,false) Helper.initFullScreen(this, false)
AdManager.loadAllAd()
findViewId() findViewId()
getExtraData() getExtraData()
displayData() displayData()
setApply() setApply()
onClick() onClick()
AdManager.showTopOn(
this@ApplySkinsActivity
) { }
} }
@ -159,15 +163,20 @@ class ApplySkinsActivity : AppCompatActivity() {
} }
imgLike.setOnClickListener { imgLike.setOnClickListener {
imgLike.isSelected = !imgLike.isSelected
lifecycleScope.launch { AdManager.showTopOn(this@ApplySkinsActivity) {
if (imgLike.isSelected) { imgLike.isSelected = !imgLike.isSelected
DbFunction.addLike(data)
} else { lifecycleScope.launch {
DbFunction.removeLike(data) if (imgLike.isSelected) {
DbFunction.addLike(data)
} else {
DbFunction.removeLike(data)
}
} }
} }
} }
val forYouList = App.list.filter { val forYouList = App.list.filter {
it.parentName == getString(R.string.recommend_name) it.parentName == getString(R.string.recommend_name)
@ -175,7 +184,7 @@ class ApplySkinsActivity : AppCompatActivity() {
} }
recommendedRecycler.run { recommendedRecycler.run {
adapter = AdapterRecommend( adapter = AdapterRecommend(
this@ApplySkinsActivity this@ApplySkinsActivity
).apply { ).apply {
val shuffled = forYouList[0].keyboardList.shuffled() val shuffled = forYouList[0].keyboardList.shuffled()
@ -230,13 +239,16 @@ class ApplySkinsActivity : AppCompatActivity() {
private fun setApply() { private fun setApply() {
applyBtn.setOnClickListener { applyBtn.setOnClickListener {
val checkEnable = Helper.checkEnable(this) AdManager.showTopOn(this@ApplySkinsActivity) {
val checkSetDefault = Helper.checkSetDefault(this) val checkEnable = Helper.checkEnable(this)
if (!checkEnable || !checkSetDefault) { val checkSetDefault = Helper.checkSetDefault(this)
showDialog() if (!checkEnable || !checkSetDefault) {
return@setOnClickListener showDialog()
return@showTopOn
}
startDown()
} }
startDown()
} }
} }
@ -320,6 +332,4 @@ class ApplySkinsActivity : AppCompatActivity() {
} }
} }

View File

@ -14,6 +14,7 @@ import androidx.viewpager2.widget.ViewPager2;
import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayout;
import com.keyboard.skinning.cool.R; import com.keyboard.skinning.cool.R;
import com.keyboard.skinning.cool.ad.AdManager;
import com.keyboard.skinning.cool.databinding.ActivityMainBinding; import com.keyboard.skinning.cool.databinding.ActivityMainBinding;
import com.keyboard.skinning.cool.fragment.FragmentFavorite; import com.keyboard.skinning.cool.fragment.FragmentFavorite;
import com.keyboard.skinning.cool.fragment.FragmentMain; import com.keyboard.skinning.cool.fragment.FragmentMain;
@ -33,6 +34,7 @@ public class MainActivity extends AppCompatActivity {
vb = ActivityMainBinding.inflate(getLayoutInflater()); vb = ActivityMainBinding.inflate(getLayoutInflater());
Helper.INSTANCE.initFullScreen(this,false); Helper.INSTANCE.initFullScreen(this,false);
setContentView(vb.getRoot()); setContentView(vb.getRoot());
AdManager.loadAllAd();
init(); init();
} }

View File

@ -19,6 +19,7 @@ import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException; import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.target.Target; import com.bumptech.glide.request.target.Target;
import com.keyboard.skinning.cool.ad.AdManager;
import com.keyboard.skinning.cool.databinding.ActivitySuccessBinding; import com.keyboard.skinning.cool.databinding.ActivitySuccessBinding;
import com.keyboard.skinning.cool.tools.CconfigKey; import com.keyboard.skinning.cool.tools.CconfigKey;
import com.keyboard.skinning.cool.tools.Helper; import com.keyboard.skinning.cool.tools.Helper;
@ -39,7 +40,7 @@ public class OkActivity extends AppCompatActivity {
Helper.INSTANCE.initFullScreen(this,false); Helper.INSTANCE.initFullScreen(this,false);
vb = ActivitySuccessBinding.inflate(getLayoutInflater()); vb = ActivitySuccessBinding.inflate(getLayoutInflater());
setContentView(vb.getRoot()); setContentView(vb.getRoot());
AdManager.loadAllAd();
onInit(); onInit();
} }

View File

@ -6,37 +6,34 @@ import android.os.CountDownTimer
import android.widget.ProgressBar import android.widget.ProgressBar
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.keyboard.skinning.cool.R import com.keyboard.skinning.cool.R
import com.keyboard.skinning.cool.ad.AdManager
import com.keyboard.skinning.cool.tools.Helper import com.keyboard.skinning.cool.tools.Helper
import kotlin.math.roundToInt import kotlin.math.roundToInt
class WelcomeActivity : AppCompatActivity() { class WelcomeActivity : AppCompatActivity() {
private lateinit var progressBar: ProgressBar private lateinit var progressBar: ProgressBar
private var countTime = 1000L private var countTime = 12000L
private lateinit var timer: CountDownTimer private lateinit var timer: CountDownTimer
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_welcome) setContentView(R.layout.activity_welcome)
Helper.initFullScreen(this,false) Helper.initFullScreen(this, false)
AdManager.loadAllAd()
init() init()
findView() findView()
} }
private fun init() { private fun init() {
timer = object : CountDownTimer(countTime, 100) { timer = AdManager.showWelcomeAd(this@WelcomeActivity, countTime, { millisUntilFinished ->
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 }) {
} progressBar.progress = 100
toHome()
override fun onFinish() {
progressBar.progress = 100
toHome()
}
} }
timer.start() timer.start()

View File

@ -0,0 +1,10 @@
package com.keyboard.skinning.cool.ad;
public interface AdListener {
void loadFail(String placeId);
void showSuccess();
void showFail();
void showClose();
}

View File

@ -0,0 +1,247 @@
package com.keyboard.skinning.cool.ad;
import android.app.Activity;
import android.os.CountDownTimer;
import android.util.Log;
import androidx.annotation.NonNull;
import com.anythink.core.api.ATAdInfo;
import com.anythink.core.api.AdError;
import com.anythink.interstitial.api.ATInterstitial;
import com.anythink.interstitial.api.ATInterstitialListener;
import com.keyboard.skinning.cool.App;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class AdManager {
private static final int type_no_cache = 0;
private static final int type_has_cache = 1;
private static final int type_show_success = 2;
private static final int type_show_close = 3;
private static final int type_show_fail = 4;
private static final String place1Id = "n67db7f3f3ff30";
private static final String place2Id = "n67db7f3e9c687";
private static final String place3Id = "n67db7f3e0169a";
private static boolean place1LoadFail = false;
private static boolean place2LoadFail = false;
private static boolean place3LoadFail = false;
private static boolean alreadyShow = false;
private static List<ATInterstitial> list = new ArrayList<>();
public static void loadAllAd() {
if (list.size() == 0) {
ATInterstitial mInterstitialAd1 = new ATInterstitial(App.appInstance, place1Id);
ATInterstitial mInterstitialAd2 = new ATInterstitial(App.appInstance, place2Id);
ATInterstitial mInterstitialAd3 = new ATInterstitial(App.appInstance, place3Id);
list.add(mInterstitialAd1);
list.add(mInterstitialAd2);
list.add(mInterstitialAd3);
}
for (ATInterstitial ad : list) {
if (!ad.isAdReady()) {
setCallBack(ad, new AdListener() {
@Override
public void loadFail(@NonNull String placeId) {
if (placeId.equals(place1Id)) {
place1LoadFail = true;
}
if (placeId.equals(place2Id)) {
place2LoadFail = true;
}
if (placeId.equals(place3Id)) {
place3LoadFail = true;
}
}
@Override
public void showSuccess() {
}
@Override
public void showFail() {
}
@Override
public void showClose() {
}
});
ad.load();
}
}
}
private static ATInterstitial getReadyAd() {
Collections.shuffle(list);
for (ATInterstitial ad : list) {
if (ad.isAdReady()) {
Log.d(App.TAG, "-has Cache------------");
return ad;
}
}
Log.d(App.TAG, "-No Cache------------");
return null;
}
private static void setCallBack(ATInterstitial ad, AdListener listener) {
ad.setAdListener(new ATInterstitialListener() {
@Override
public void onInterstitialAdLoaded() {
Log.d(App.TAG, "LoadLoaded " + ad.mPlacementId);
}
@Override
public void onInterstitialAdLoadFail(AdError adError) {
listener.loadFail(ad.mPlacementId);
Log.d(App.TAG, "LoadFail:--" + ad.mPlacementId + "--" + adError.getCode() + "---" + adError.getDesc());
}
@Override
public void onInterstitialAdClicked(ATAdInfo atAdInfo) {
}
@Override
public void onInterstitialAdShow(ATAdInfo atAdInfo) {
Log.d(App.TAG, "AdShow " + atAdInfo.getShowId());
listener.showSuccess();
ad.load();
}
@Override
public void onInterstitialAdClose(ATAdInfo atAdInfo) {
listener.showClose();
}
@Override
public void onInterstitialAdVideoStart(ATAdInfo atAdInfo) {
}
@Override
public void onInterstitialAdVideoEnd(ATAdInfo atAdInfo) {
}
@Override
public void onInterstitialAdVideoError(AdError adError) {
}
});
}
public static CountDownTimer showWelcomeAd(
Activity activity,
Long totalTim,
CountAction countAction,
GoMainAction goMain
) {
Log.d(App.TAG,"----------alreadyShow="+alreadyShow);
alreadyShow = false;
CountDownTimer timer = new CountDownTimer(totalTim, 100) {
@Override
public void onTick(long millisUntilFinished) {
countAction.onCount(millisUntilFinished);
if (!alreadyShow) {
showAD(activity, new AdStatusAction() {
@Override
public void onStatus(int adType) {
if (adType == type_has_cache) {
alreadyShow = true;
}
if (adType == type_show_close || adType == type_show_fail) {
goMain.onGo();
}
}
});
}
}
@Override
public void onFinish() {
if (!alreadyShow) {
showTopOn(activity, new onActionListener() {
@Override
public void onAction() {
goMain.onGo();
}
});
}
}
};
return timer;
}
private static void showAD(Activity activity, AdStatusAction action) {
ATInterstitial readyAd = getReadyAd();
if (readyAd != null) {
action.onStatus(type_has_cache);
setCallBack(readyAd, new AdListener() {
@Override
public void loadFail(@NonNull String placeId) {
}
@Override
public void showSuccess() {
action.onStatus(type_show_success);
}
@Override
public void showFail() {
action.onStatus(type_show_fail);
}
@Override
public void showClose() {
action.onStatus(type_show_close);
}
});
readyAd.show(activity);
} else {
action.onStatus(type_no_cache);
}
}
public static void showTopOn(Activity activity, onActionListener listener) {
showAD(activity, new AdStatusAction() {
@Override
public void onStatus(int adType) {
if (adType == type_no_cache || adType == type_show_close || adType == type_show_fail) {
listener.onAction();
}
}
});
}
}

View File

@ -0,0 +1,5 @@
package com.keyboard.skinning.cool.ad;
public interface AdStatusAction {
void onStatus(int adType);
}

View File

@ -0,0 +1,5 @@
package com.keyboard.skinning.cool.ad;
public interface CountAction {
void onCount(long millisUntilFinished);
}

View File

@ -0,0 +1,5 @@
package com.keyboard.skinning.cool.ad;
public interface GoMainAction {
void onGo();
}

View File

@ -0,0 +1,6 @@
package com.keyboard.skinning.cool.ad;
public interface onActionListener {
void onAction();
}

View File

@ -117,7 +117,7 @@ public class InputView extends CusKeyBoardView {
for (CusKeyBoard.Key curKey : getKeyboard().getKeys()) { for (CusKeyBoard.Key curKey : getKeyboard().getKeys()) {
int code = curKey.codes[0]; int code = curKey.codes[0];
if (config != null) { if (config != null&&config.getLayouts().size()>0) {
if (code == 113 ||code == 81 || code == 49||code == 91) { if (code == 113 ||code == 81 || code == 49||code == 91) {
i = 0; i = 0;
KeyboardLayout keyboardLayout = config.getLayouts().get(0); KeyboardLayout keyboardLayout = config.getLayouts().get(0);

View File

@ -2,7 +2,7 @@
plugins { plugins {
id("com.android.application") version "8.1.0" apply false id("com.android.application") version "8.1.0" apply false
id("org.jetbrains.kotlin.android") version "1.8.20" apply false id("org.jetbrains.kotlin.android") version "1.8.20" apply false
// id("com.google.gms.google-services") version "4.4.2" apply false id("com.google.gms.google-services") version "4.4.2" apply false
// id ("com.google.firebase.crashlytics") version "3.0.2" apply false id ("com.google.firebase.crashlytics") version "3.0.2" apply false
kotlin("kapt") version "2.0.0" kotlin("kapt") version "2.0.0"
} }

View File

@ -6,7 +6,7 @@
# http://www.gradle.org/docs/current/userguide/build_environment.html # http://www.gradle.org/docs/current/userguide/build_environment.html
# Specifies the JVM arguments used for the daemon process. # Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings. # The setting is particularly useful for tweaking memory settings.
org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode. # When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit # This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects

View File

@ -12,7 +12,27 @@ dependencyResolutionManagement {
google() google()
mavenCentral() mavenCentral()
maven("https://jitpack.io") maven("https://jitpack.io")
//Anythink(Core)
maven ("https://jfrog.anythinktech.com/artifactory/overseas_sdk")
//Appnext
maven ("https://dl.appnext.com")
//Ironsource
maven ("https://android-sdk.is.com/")
//Pangle
maven ("https://artifact.bytedance.com/repository/pangle")
//Mintegral
maven ("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea")
//Chartboost
maven ("https://cboost.jfrog.io/artifactory/chartboost-ads")
maven ("https://cboost.jfrog.io/artifactory/chartboost-mediation")
//TopOn集成测试工具
// maven ( "https://jfrog.anythinktech.com/artifactory/debugger")
} }
} }