V1.0.1(2) 接入topon

This commit is contained in:
litingting 2025-03-19 11:45:58 +08:00
parent b2f8727448
commit 26e8656b61
18 changed files with 660 additions and 122 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.shiny.keyboard" applicationId = "com.shiny.keyboard"
minSdk = 23 minSdk = 23
targetSdk = 34 targetSdk = 34
versionCode = 1 versionCode = 2
versionName = "1.0.0" versionName = "1.0.1"
setProperty( setProperty(
"archivesBaseName", "archivesBaseName",
"Shiny Keyboard_V" + versionName + "(${versionCode})_$timestamp" "Shiny Keyboard_V" + versionName + "(${versionCode})_$timestamp"
@ -79,67 +79,101 @@ 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("com.google.firebase:firebase-crashlytics")
// implementation("com.google.firebase:firebase-analytics")
// implementation("com.google.firebase:firebase-config")
//-----------------------------------------------TopOn(pangle、IronSource、mintegral、unityads、liftoff(vungle)、Bigo)
implementation(platform("com.google.firebase:firebase-bom:33.7.0"))
implementation("com.google.firebase:firebase-crashlytics")
implementation("com.google.firebase:firebase-analytics")
implementation("com.google.firebase:firebase-config")
//-----------------------------------------------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": "706545957639",
"project_id": "shiny-keyboard",
"storage_bucket": "shiny-keyboard.firebasestorage.app"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:706545957639:android:7372a71cf54ce73285a3a2",
"android_client_info": {
"package_name": "com.shiny.keyboard"
}
},
"oauth_client": [],
"api_key": [
{
"current_key": "AIzaSyDDApZFpYlgrMmz-JOeD0h42uYd8N6to5w"
}
],
"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.shiny.keyboard
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.shiny.keyboard.ad.AdManager
import com.shiny.keyboard.bean.ChildData import com.shiny.keyboard.bean.ChildData
import com.shiny.keyboard.bean.ClassData import com.shiny.keyboard.bean.ClassData
//import com.pretty.keyboard.theme.keyboard.helper.ObjectBox //import com.pretty.keyboard.theme.keyboard.helper.ObjectBox
@ -29,6 +32,7 @@ class MyApplication : Application() {
myApplicationInstance = this myApplicationInstance = this
// ObjectBox.init(this) // ObjectBox.init(this)
defaultFont = Typeface.createFromAsset(assets, "my_font.ttf") defaultFont = Typeface.createFromAsset(assets, "my_font.ttf")
initializationSDK()
dealFile() dealFile()
@ -72,13 +76,13 @@ class MyApplication : Application() {
} }
childDataList.add( childDataList.add(
com.shiny.keyboard.bean.ChildData().apply { com.shiny.keyboard.bean.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 +90,9 @@ class MyApplication : Application() {
val shuffled = childDataList.shuffled() val shuffled = childDataList.shuffled()
val dataClassData = com.shiny.keyboard.bean.ClassData() val dataClassData = com.shiny.keyboard.bean.ClassData()
.apply { .apply {
parentName = pName parentName = pName
keyboardList = shuffled keyboardList = shuffled
} }
dataList.add(dataClassData) dataList.add(dataClassData)
} }
@ -98,10 +102,11 @@ class MyApplication : Application() {
} }
private fun updateDataList(mainList: MutableList<com.shiny.keyboard.bean.ClassData>) { private fun updateDataList(mainList: MutableList<ClassData>) {
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);
@ -118,7 +123,22 @@ class MyApplication : Application() {
"" ""
} }
} }
private fun initializationSDK() {
val APPId = "h67d945e349d31"
val AppKey = "aedf7a84e6d488296607f2226d46addfb"
ATSDK.checkIsEuTraffic(this, object : NetTrafficeCallback {
override fun onResultCallback(isEU: Boolean) {
if (isEU && ATSDK.getGDPRDataLevel(this@MyApplication) == ATSDK.UNKNOWN) {
ATSDK.showGdprAuth(this@MyApplication)
}
}
override fun onErrorCallback(errorMsg: String) {}
})
ATSDK.init(this, APPId, AppKey)
//测试工具
// ATDebuggerUITest.showDebuggerUI(this,"04e8ce6db9751f67501af2bfed0cd0de0391453a");
AdManager.loadAllAd()
}
} }

View File

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

View File

@ -0,0 +1,244 @@
package com.shiny.keyboard.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.shiny.keyboard.MyApplication;
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 = "n67d9468502e47";
private static final String place2Id = "n67d9466aa9636";
private static final String place3Id = "n67d9464dc09ff";
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(MyApplication.myApplicationInstance, place1Id);
ATInterstitial mInterstitialAd2 = new ATInterstitial(MyApplication.myApplicationInstance, place2Id);
ATInterstitial mInterstitialAd3 = new ATInterstitial(MyApplication.myApplicationInstance, 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(MyApplication.TAG, "-has Cache------------");
return ad;
}
}
Log.d(MyApplication.TAG, "-No Cache------------");
return null;
}
private static void setCallBack(ATInterstitial ad, AdListener listener) {
ad.setAdListener(new ATInterstitialListener() {
@Override
public void onInterstitialAdLoaded() {
Log.d(MyApplication.TAG, "LoadLoaded " + ad.mPlacementId);
}
@Override
public void onInterstitialAdLoadFail(AdError adError) {
listener.loadFail(ad.mPlacementId);
Log.d(MyApplication.TAG, "LoadFail:--" + ad.mPlacementId + "--" + adError.getCode() + "---" + adError.getDesc());
}
@Override
public void onInterstitialAdClicked(ATAdInfo atAdInfo) {
}
@Override
public void onInterstitialAdShow(ATAdInfo atAdInfo) {
Log.d(MyApplication.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(MyApplication.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.shiny.keyboard.ad;
public interface AdStatusAction {
void onStatus(int adType);
}

View File

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

View File

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

View File

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

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.shiny.keyboard.R; import com.shiny.keyboard.R;
import com.shiny.keyboard.ad.AdManager;
import com.shiny.keyboard.databinding.ActMainBinding; import com.shiny.keyboard.databinding.ActMainBinding;
import com.shiny.keyboard.frag.FragmentFavorite; import com.shiny.keyboard.frag.FragmentFavorite;
import com.shiny.keyboard.frag.FragmentHome; import com.shiny.keyboard.frag.FragmentHome;
@ -33,6 +34,7 @@ public class MainActivity extends AppCompatActivity {
vb = ActMainBinding.inflate(getLayoutInflater()); vb = ActMainBinding.inflate(getLayoutInflater());
Utils.INSTANCE.initFullScreen(this,false); Utils.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.shiny.keyboard.ad.AdManager;
import com.shiny.keyboard.databinding.ActSuccessBinding; import com.shiny.keyboard.databinding.ActSuccessBinding;
import com.shiny.keyboard.helper.MyKey; import com.shiny.keyboard.helper.MyKey;
import com.shiny.keyboard.helper.SkinStore; import com.shiny.keyboard.helper.SkinStore;
@ -39,7 +40,7 @@ public class OkActivity extends AppCompatActivity {
Utils.INSTANCE.initFullScreen(this,false); Utils.INSTANCE.initFullScreen(this,false);
vb = ActSuccessBinding.inflate(getLayoutInflater()); vb = ActSuccessBinding.inflate(getLayoutInflater());
setContentView(vb.getRoot()); setContentView(vb.getRoot());
AdManager.loadAllAd();
onInit(); onInit();
} }

View File

@ -7,6 +7,8 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.GridLayoutManager;
import com.shiny.keyboard.MyApplication; import com.shiny.keyboard.MyApplication;
import com.shiny.keyboard.ad.AdManager;
import com.shiny.keyboard.ad.onActionListener;
import com.shiny.keyboard.bean.ChildData; import com.shiny.keyboard.bean.ChildData;
import com.shiny.keyboard.bean.ClassData; import com.shiny.keyboard.bean.ClassData;
import com.shiny.keyboard.databinding.ActAllBinding; import com.shiny.keyboard.databinding.ActAllBinding;
@ -18,40 +20,55 @@ import java.util.List;
public class SeeAllActivity extends AppCompatActivity { public class SeeAllActivity extends AppCompatActivity {
private ActAllBinding vb; private ActAllBinding 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 = ActAllBinding.inflate(getLayoutInflater()); vb = ActAllBinding.inflate(getLayoutInflater());
Utils.INSTANCE.initFullScreen(this, false); Utils.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(SeeAllActivity.this, new onActionListener() {
@Override
public void onAction() {
}
});
} }
private void initData(){ private void initData() {
vb.className.setText(name); vb.className.setText(name);
for (ClassData classData : MyApplication.list) { for (ClassData classData : MyApplication.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(SeeAllActivity.this,2)); vb.recycler.setLayoutManager(new GridLayoutManager(SeeAllActivity.this, 2));
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(SeeAllActivity.this, new onActionListener() {
@Override
public void onAction() {
finish();
}
});
} }
}); });
} }

View File

@ -23,13 +23,14 @@ import com.bumptech.glide.request.RequestListener
import com.bumptech.glide.request.target.Target import com.bumptech.glide.request.target.Target
import com.shiny.keyboard.MyApplication import com.shiny.keyboard.MyApplication
import com.shiny.keyboard.R import com.shiny.keyboard.R
import com.shiny.keyboard.ad.AdManager
import com.shiny.keyboard.database.DbHelper import com.shiny.keyboard.database.DbHelper
import com.shiny.keyboard.frag.DialogActive import com.shiny.keyboard.frag.DialogActive
import com.shiny.keyboard.helper.DealZip import com.shiny.keyboard.helper.DealZip
import com.shiny.keyboard.mylistener.SetThemesListener
import com.shiny.keyboard.mylistener.OnItemClickListener
import com.shiny.keyboard.helper.Utils
import com.shiny.keyboard.helper.SkinStore import com.shiny.keyboard.helper.SkinStore
import com.shiny.keyboard.helper.Utils
import com.shiny.keyboard.mylistener.OnItemClickListener
import com.shiny.keyboard.mylistener.SetThemesListener
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File import java.io.File
@ -85,13 +86,17 @@ class SetThemeActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.act_set_theme) setContentView(R.layout.act_set_theme)
Utils.initFullScreen(this,false) Utils.initFullScreen(this, false)
AdManager.loadAllAd()
findViewId() findViewId()
getExtraData() getExtraData()
displayData() displayData()
setApply() setApply()
onClick() onClick()
AdManager.showTopOn(this@SetThemeActivity) {
}
} }
@ -171,19 +176,27 @@ class SetThemeActivity : AppCompatActivity() {
private fun onClick() { private fun onClick() {
imgBack.setOnClickListener { imgBack.setOnClickListener {
finish()
AdManager.showTopOn(this@SetThemeActivity) {
finish()
}
} }
imgLike.setOnClickListener { imgLike.setOnClickListener {
imgLike.isSelected = !imgLike.isSelected
lifecycleScope.launch { AdManager.showTopOn(this@SetThemeActivity) {
if (imgLike.isSelected) { imgLike.isSelected = !imgLike.isSelected
DbHelper.addLike(data)
} else { lifecycleScope.launch {
DbHelper.removeLike(data) if (imgLike.isSelected) {
DbHelper.addLike(data)
} else {
DbHelper.removeLike(data)
}
} }
} }
} }
val forYouList = MyApplication.list.filter { val forYouList = MyApplication.list.filter {
it.parentName == getString(R.string.recommend_name) it.parentName == getString(R.string.recommend_name)
@ -191,11 +204,11 @@ class SetThemeActivity : AppCompatActivity() {
} }
recommendedRecycler.run { recommendedRecycler.run {
adapter = com.shiny.keyboard.recycler.AdapterRecommend( adapter = com.shiny.keyboard.recycler.AdapterRecommend(
this@SetThemeActivity this@SetThemeActivity
).apply { ).apply {
val shuffled = forYouList[0].keyboardList.shuffled() val shuffled = forYouList[0].keyboardList.shuffled()
setForYouList(shuffled.subList(0,8)) setForYouList(shuffled.subList(0, 8))
}.apply { }.apply {
setClickAction(object : OnItemClickListener { setClickAction(object : OnItemClickListener {
override fun onItemClick() { override fun onItemClick() {
@ -247,13 +260,16 @@ class SetThemeActivity : AppCompatActivity() {
private fun setApply() { private fun setApply() {
applyBtn.setOnClickListener { applyBtn.setOnClickListener {
val checkEnable = Utils.checkEnable(this) AdManager.showTopOn(this@SetThemeActivity) {
val checkSetDefault = Utils.checkSetDefault(this) val checkEnable = Utils.checkEnable(this)
if (!checkEnable || !checkSetDefault) { val checkSetDefault = Utils.checkSetDefault(this)
showDialog() if (!checkEnable || !checkSetDefault) {
return@setOnClickListener showDialog()
return@showTopOn
}
startDown()
} }
startDown()
} }
} }
@ -337,6 +353,4 @@ class SetThemeActivity : AppCompatActivity() {
} }
} }

View File

@ -6,13 +6,14 @@ import android.os.CountDownTimer
import android.widget.ProgressBar import android.widget.ProgressBar
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.shiny.keyboard.R import com.shiny.keyboard.R
import com.shiny.keyboard.ad.AdManager
import com.shiny.keyboard.helper.Utils import com.shiny.keyboard.helper.Utils
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?) {
@ -20,24 +21,20 @@ class WelcomeActivity : AppCompatActivity() {
setContentView(R.layout.act_welcome) setContentView(R.layout.act_welcome)
Utils.initFullScreen(this,false) Utils.initFullScreen(this,false)
init() init()
AdManager.loadAllAd()
findView() findView()
} }
private fun init() { private fun init() {
timer = AdManager.showWelcomeAd(this@WelcomeActivity,countTime,{millisUntilFinished->
timer = object : CountDownTimer(countTime, 100) { val percentage: Float = 100 - millisUntilFinished.toFloat() / countTime * 100
override fun onTick(millisUntilFinished: Long) { val round = percentage.roundToInt()
val percentage: Float = 100 - millisUntilFinished.toFloat() / countTime * 100 progressBar.progress = round
val round = percentage.roundToInt() }){
progressBar.progress = round progressBar.progress = 100
} toHome()
override fun onFinish() {
progressBar.progress = 100
toHome()
}
} }
timer.start() timer.start()
} }

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,6 +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")
} }
} }