diff --git a/.gitignore b/.gitignore index aa724b7..49524a6 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,8 @@ .externalNativeBuild .cxx local.properties +.idea/ +.safedk/ +app/release/AppLocker pro_V1.0.1(2)_07_19_16_40-release.apk +app/release/AppLocker pro_V1.0.1(2)_07_19_17_24-release.aab +app/release/output-metadata.json diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3693453..cd7f997 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -6,22 +6,29 @@ plugins { id("com.android.application") id("org.jetbrains.kotlin.android") id("kotlin-kapt") - // id("com.google.gms.google-services") -// id("com.google.firebase.crashlytics") + id("com.google.gms.google-services") + id("com.google.firebase.crashlytics") + id("applovin-quality-service") +} +applovin { + apiKey = + "cwxHIA0xwtZC4J0O0D4ud92agwa21fVRElWRTpTok3DQINtfa417bkmh-CGuN7zvHCuIMPK5yzTEsIMe_786de" } - android { namespace = "com.tool.app.protectorpro" compileSdk = 34 defaultConfig { //com.tool.app.protectorpro - applicationId = "com.tool.app.test" + applicationId = "com.tool.app.protectorpro" minSdk = 23 targetSdk = 34 - versionCode = 1 - versionName = "1.0.0" - setProperty("archivesBaseName", "AppLocker pro_V" + versionName + "(${versionCode})_$timestamp") + versionCode = 2 + versionName = "1.0.1" + setProperty( + "archivesBaseName", + "AppLocker pro_V" + versionName + "(${versionCode})_$timestamp" + ) testInstrumentationRunner = "androidx.protectorpro.runner.AndroidJUnitRunner" } @@ -63,8 +70,11 @@ dependencies { implementation("com.google.firebase:firebase-crashlytics") implementation("com.google.firebase:firebase-analytics") - - + implementation("com.applovin:applovin-sdk:+") + implementation("com.applovin.mediation:vungle-adapter:+") + implementation("com.applovin.mediation:mintegral-adapter:+") + implementation("com.applovin.mediation:bytedance-adapter:+") + implementation("com.applovin.mediation:unityads-adapter:+") } \ No newline at end of file diff --git a/app/google-services.json b/app/google-services.json new file mode 100644 index 0000000..7e46dee --- /dev/null +++ b/app/google-services.json @@ -0,0 +1,29 @@ +{ + "project_info": { + "project_number": "46896618954", + "project_id": "applock-pro-a4572", + "storage_bucket": "applock-pro-a4572.appspot.com" + }, + "client": [ + { + "client_info": { + "mobilesdk_app_id": "1:46896618954:android:1c8089340d55ecf215c333", + "android_client_info": { + "package_name": "com.tool.app.protectorpro" + } + }, + "oauth_client": [], + "api_key": [ + { + "current_key": "AIzaSyD4RBPwCsQf9Hae8tA4Z1h0sa_MP36XwZY" + } + ], + "services": { + "appinvite_service": { + "other_platform_oauth_client": [] + } + } + } + ], + "configuration_version": "1" +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 55ab2f7..19bab3e 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + { @@ -60,8 +73,21 @@ public class MyApplication extends Application { } + private void initSDk() { + AppLovinSdkInitializationConfiguration initConfig = AppLovinSdkInitializationConfiguration.builder(MAX_SDK, this) + .setMediationProvider(AppLovinMediationProvider.MAX) + .build(); + AppLovinSdk.getInstance(this).initialize(initConfig, new AppLovinSdk.SdkInitializationListener() { + @Override + public void onSdkInitialized(final AppLovinSdkConfiguration sdkConfig) { + initSDK = true; + LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(AD_BROADCAST)); + } + }); + AppLovinSdk.getInstance(this).getSettings().setVerboseLogging(true); + } public static void updatePwd(String pwd) { diff --git a/app/src/main/java/com/tool/app/protectorpro/activity/ActivityMain.java b/app/src/main/java/com/tool/app/protectorpro/activity/ActivityMain.java index 4f42463..c5c0ea1 100644 --- a/app/src/main/java/com/tool/app/protectorpro/activity/ActivityMain.java +++ b/app/src/main/java/com/tool/app/protectorpro/activity/ActivityMain.java @@ -4,6 +4,7 @@ import android.content.Intent; import android.graphics.Color; import android.graphics.drawable.Drawable; import android.os.Bundle; +import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; @@ -18,12 +19,15 @@ import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.viewpager.widget.ViewPager; +import com.applovin.mediation.MaxAd; +import com.applovin.mediation.ads.MaxInterstitialAd; import com.google.android.material.bottomsheet.BottomSheetDialog; import com.google.android.material.tabs.TabLayout; import com.tool.app.protectorpro.MyApplication; import com.tool.app.protectorpro.R; import com.tool.app.protectorpro.databinding.ActivityMainLayoutBinding; import com.tool.app.protectorpro.databinding.TabViewBinding; +import com.tool.app.protectorpro.listener.Adcallback; import com.tool.app.protectorpro.listener.onPermssionListener; import com.tool.app.protectorpro.service.LockService; import com.tool.app.protectorpro.tools.Common; @@ -37,6 +41,9 @@ public class ActivityMain extends AppCompatActivity implements SearchView.OnQuer private DialogPer dialogPer; List fragmentList = new ArrayList<>(); + private static List adsList; + + private BottomSheetDialog bottomSheetDialog; private void initStatusBar() { View decorView = getWindow().getDecorView(); @@ -52,6 +59,9 @@ public class ActivityMain extends AppCompatActivity implements SearchView.OnQuer binding = ActivityMainLayoutBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); binding.searchItem.setOnQueryTextListener(this); + + adsList = Common.getAllAd(); + initStatusBar(); openPermission(); startService(new Intent(this, LockService.class)); @@ -148,7 +158,7 @@ public class ActivityMain extends AppCompatActivity implements SearchView.OnQuer if (isDestroyed()) return; - BottomSheetDialog bottomSheetDialog = new BottomSheetDialog(ActivityMain.this); + bottomSheetDialog = new BottomSheetDialog(ActivityMain.this); View bottomSheetView = LayoutInflater.from(ActivityMain.this).inflate(R.layout.set_bottom_sheet_layout, null); bottomSheetDialog.setContentView(bottomSheetView); @@ -161,10 +171,7 @@ public class ActivityMain extends AppCompatActivity implements SearchView.OnQuer // 按钮1点击事件 btnOption1.setOnClickListener(v -> { // TODO: 2024/7/19 - Intent intent = new Intent(ActivityMain.this, ActivitySetPwd.class); - intent.putExtra(MyApplication.init_pwd_key, MyApplication.type_1); - startActivity(intent); - bottomSheetDialog.dismiss(); + showAd(); }); @@ -179,6 +186,35 @@ public class ActivityMain extends AppCompatActivity implements SearchView.OnQuer bottomSheetDialog.show(); } + private void showAd() { + MaxInterstitialAd cachedAd = Common.onCache(adsList); + + if (cachedAd == null) { + goSet(); + } else { + Common.setCallBcak(cachedAd, new Adcallback() { + @Override + public void onShowFail(MaxAd ad) { + goSet(); + } + + @Override + public void onAdHidden() { + goSet(); + } + }); + cachedAd.showAd(this); + } + } + + private void goSet() { + + Intent intent = new Intent(ActivityMain.this, ActivitySetPwd.class); + intent.putExtra(MyApplication.init_pwd_key, MyApplication.type_1); + startActivity(intent); + bottomSheetDialog.dismiss(); + } + private void updateTab(TabLayout.Tab tab, boolean isSelected) { View customView = tab.getCustomView(); if (customView == null) return; diff --git a/app/src/main/java/com/tool/app/protectorpro/activity/ActivityWel.java b/app/src/main/java/com/tool/app/protectorpro/activity/ActivityWel.java index dcf058b..6a15204 100644 --- a/app/src/main/java/com/tool/app/protectorpro/activity/ActivityWel.java +++ b/app/src/main/java/com/tool/app/protectorpro/activity/ActivityWel.java @@ -1,15 +1,26 @@ package com.tool.app.protectorpro.activity; +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.graphics.Color; import android.os.Bundle; import android.os.CountDownTimer; +import android.util.Log; import android.view.View; import androidx.appcompat.app.AppCompatActivity; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; +import com.applovin.mediation.MaxAd; +import com.applovin.mediation.ads.MaxInterstitialAd; import com.tool.app.protectorpro.MyApplication; import com.tool.app.protectorpro.databinding.ActivityWelBinding; +import com.tool.app.protectorpro.listener.Adcallback; +import com.tool.app.protectorpro.tools.Common; + +import java.util.List; public class ActivityWel extends AppCompatActivity { @@ -18,6 +29,8 @@ public class ActivityWel extends AppCompatActivity { private CountDownTimer countDownTimer; private long totalTime = 11000; + private static List adsList; + public static boolean isAlreadyShow = false; @Override protected void onCreate(Bundle savedInstanceState) { @@ -26,7 +39,75 @@ public class ActivityWel extends AppCompatActivity { setContentView(binding.getRoot()); initBar(); - goMain(); + + countDownTimer = new CountDownTimer(totalTime, 200) { + @Override + public void onTick(long millisUntilFinished) { + if (!isAlreadyShow) { + showAdOrStartView(false); + } + } + + @Override + public void onFinish() { + if (!isAlreadyShow) { + showAdOrStartView(true); + } + + } + }; + registerBroadcastReceiver(); + + + + } + + private void showAdOrStartView(boolean go) { + MaxInterstitialAd cachedAd = Common.onCache(adsList); + if (cachedAd == null) { + isAlreadyShow = false; + if (go) { + goMain(); + } + } else { + isAlreadyShow = true; + Common.setCallBcak(cachedAd, new Adcallback() { + @Override + public void onShowFail(MaxAd ad) { + isAlreadyShow = false; + + } + + @Override + public void onAdHidden() { + isAlreadyShow = true; + goMain(); + } + }); + cachedAd.showAd(); + } + } + + private void registerBroadcastReceiver() { + if (!MyApplication.initSDK) { + BroadcastReceiver receiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + + loadAndStartAd(); + } + }; + + LocalBroadcastManager.getInstance(this).registerReceiver(receiver, new IntentFilter(MyApplication.AD_BROADCAST)); + } else { + + loadAndStartAd(); + } + } + + private void loadAndStartAd() { + adsList = Common.getAllAd(); + countDownTimer.start(); } private void goMain() { diff --git a/app/src/main/java/com/tool/app/protectorpro/listadapter/AdapterAllApp.java b/app/src/main/java/com/tool/app/protectorpro/listadapter/AdapterAllApp.java index 0f8ae0a..644a18e 100644 --- a/app/src/main/java/com/tool/app/protectorpro/listadapter/AdapterAllApp.java +++ b/app/src/main/java/com/tool/app/protectorpro/listadapter/AdapterAllApp.java @@ -18,11 +18,15 @@ import androidx.annotation.NonNull; import androidx.appcompat.widget.SwitchCompat; import androidx.recyclerview.widget.RecyclerView; +import com.applovin.mediation.MaxAd; +import com.applovin.mediation.ads.MaxInterstitialAd; import com.tool.app.protectorpro.MyApplication; import com.tool.app.protectorpro.R; +import com.tool.app.protectorpro.listener.Adcallback; import com.tool.app.protectorpro.listener.OnShowDialogMsgListener; import com.tool.app.protectorpro.mydb.DataApp; import com.tool.app.protectorpro.mydb.MyDataBase; +import com.tool.app.protectorpro.tools.Common; import com.tool.app.protectorpro.tools.MyThread; import java.util.ArrayList; @@ -36,7 +40,7 @@ public class AdapterAllApp extends RecyclerView.Adapter adsList; private OnShowDialogMsgListener listener; public void setListener(OnShowDialogMsgListener listener) { @@ -44,6 +48,7 @@ public class AdapterAllApp extends RecyclerView.Adapter { - if(MyApplication.userOption%5==0){ + MyApplication.userOption++; + if (MyApplication.userOption % 5 == 0) { // TODO: 2024/7/19 + + showAd(); + + MyThread.runIO(() -> { dataApp.setLock(isChecked); MyDataBase.getInstance().getRoomDao().updateData(dataApp); @@ -110,10 +120,10 @@ public class AdapterAllApp extends RecyclerView.Adapter { dataApp.setLock(isChecked); MyDataBase.getInstance().getRoomDao().updateData(dataApp); @@ -126,7 +136,7 @@ public class AdapterAllApp extends RecyclerView.Adapter adArrayList; + private static final String one_AD = "490a4576e075f605"; + private static final String two_Ad = "3549738d96239baa"; + private static final String three_ad = "075263b5dbd29916"; + + public static void setCallBcak(MaxInterstitialAd ad, Adcallback adcallback) { + ad.setListener(new MaxAdListener() { + @Override + public void onAdLoaded(@NonNull MaxAd maxAd) { + + } + + @Override + public void onAdDisplayed(@NonNull MaxAd maxAd) { + + } + + @Override + public void onAdHidden(@NonNull MaxAd maxAd) { + adcallback.onAdHidden(); + + } + + @Override + public void onAdClicked(@NonNull MaxAd maxAd) { + + } + + @Override + public void onAdLoadFailed(@NonNull String s, @NonNull MaxError maxError) { + + } + + @Override + public void onAdDisplayFailed(@NonNull MaxAd maxAd, @NonNull MaxError maxError) { + adcallback.onShowFail(maxAd); + } + }); + } + + public static MaxInterstitialAd onCache(List list) { + Collections.shuffle(list); + for (MaxInterstitialAd ad : list) { + if (ad.isReady()) { + return ad; + } + } + return null; + } + + public static List getAllAd() { + if (adArrayList == null) { + adArrayList = new ArrayList<>(); + adArrayList.add(createAd(one_AD, MyApplication.appContext)); + adArrayList.add(createAd(two_Ad, MyApplication.appContext)); + adArrayList.add(createAd(three_ad, MyApplication.appContext)); + } + for (MaxInterstitialAd ad : adArrayList) { + if (!ad.isReady()) { + setCallBcak(ad, new Adcallback() { + @Override + public void onShowFail(MaxAd ad) { + + } + + @Override + public void onAdHidden() { + + } + }); + ad.loadAd(); + } + } + return adArrayList; + } + + private static MaxInterstitialAd createAd(String adUnitId, Context context) { + MaxInterstitialAd ad = new MaxInterstitialAd(adUnitId, context); + return ad; + } + + public static float getPx(Context context, @DimenRes int id) { return context.getResources().getDimension(id); } diff --git a/build.gradle.kts b/build.gradle.kts index 3c8f26e..b9ea2a2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -4,4 +4,9 @@ plugins { id("org.jetbrains.kotlin.android") version "1.9.0" apply false id("com.google.gms.google-services") version "4.3.15" apply false id ("com.google.firebase.crashlytics") version "2.9.2" apply false +} +buildscript{ + dependencies{ + classpath("com.applovin.quality:AppLovinQualityServiceGradlePlugin:+") + } } \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 9f699c0..c58e8a1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -3,6 +3,8 @@ pluginManagement { google() mavenCentral() gradlePluginPortal() + + maven { url = uri("https://artifacts.applovin.com/android") } } } dependencyResolutionManagement { @@ -12,6 +14,8 @@ dependencyResolutionManagement { mavenCentral() maven (url ="https://jitpack.io" ) + maven { url = uri("https://dl-maven-android.mintegral.com/repository/mbridge_android_sdk_oversea") } + maven { url = uri("https://artifact.bytedance.com/repository/pangle") } } }