Commit e8114bd2 authored by Your Name's avatar Your Name

动态占位图(原生+banner)

parent 1399cca0
......@@ -11,11 +11,11 @@ android {
defaultConfig {
applicationId = "com.asdqwe.ada.aaa"
applicationId = "com.a.s"
minSdk = 28
targetSdk = 34
versionCode = 15
versionName = "1.5"
versionCode = 19
versionName = "1.9"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
}
// 添加签名配置
......@@ -29,7 +29,7 @@ android {
}
buildTypes {
release {
isMinifyEnabled = false
isMinifyEnabled = true
signingConfig = signingConfigs.getByName("release")
// 设置是否要自动上传
firebaseCrashlytics {
......@@ -82,6 +82,7 @@ dependencies {
implementation(libs.gson)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.glide)
implementation(libs.androidx.activity)
annotationProcessor(libs.glide.compiler)
implementation(libs.lottie)
implementation(libs.facebook.android.sdk)
......@@ -119,4 +120,6 @@ dependencies {
implementation ("androidx.lifecycle:lifecycle-viewmodel-ktx:2.7.0")
// debugApi ("com.squareup.leakcanary:leakcanary-android:2.12")//leakcanary
implementation ("com.facebook.shimmer:shimmer:0.5.0")
}
\ No newline at end of file
......@@ -9,7 +9,7 @@
"client_info": {
"mobilesdk_app_id": "1:136978743377:android:7127da27894a4e56137870",
"android_client_info": {
"package_name": "com.asdqwe.ada.aaa"
"package_name": "com.a.s"
}
},
"oauth_client": [],
......
package com.swiftcleaner.chovey;
import android.content.Context;
import androidx.test.platform.app.InstrumentationRegistry;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.*;
/**
* Instrumented test, which will execute on an Android device.
*
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
*/
@RunWith(AndroidJUnit4.class)
public class ExampleInstrumentedTest {
@Test
public void useAppContext() {
// Context of the app under test.
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
assertEquals("com.swiftcleaner.chovey", appContext.getPackageName());
}
}
\ No newline at end of file
......@@ -38,6 +38,9 @@
android:supportsRtl="true"
android:theme="@style/Theme.SwiftCleanerPhoneHelper"
tools:targetApi="31">
<activity
android:name=".view.activity.AnimatorActivity"
android:exported="false" />
<activity
android:name=".view.activity.MalwareCleanActivity"
android:exported="false"
......@@ -204,10 +207,8 @@
android:value="ca-app-pub-3940256099942544~3347511713" />
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
<!--测试的病毒扫描 包名=com.a.s key=cedfde13feb689ade7154c6322525c2d9fc10397fac1d4da5580542e-->
<!--正式的 包名=com.swiftcleaner.chovey key=fd80a9a3e13cafca2a24d0223aaf6baa541201328eb760cf6deb522d-->
android:value="@string/facebook_app_id" /> <!-- 测试的病毒扫描 包名=com.a.s key=cedfde13feb689ade7154c6322525c2d9fc10397fac1d4da5580542e -->
<!-- 正式的 包名=com.swiftcleaner.chovey key=fd80a9a3e13cafca2a24d0223aaf6baa541201328eb760cf6deb522d -->
<meta-data
android:name="com.trustlook.ApiKey"
android:value="cedfde13feb689ade7154c6322525c2d9fc10397fac1d4da5580542e" />
......
{"nm":"Comp 1","h":110,"w":110,"meta":{"g":"@lottiefiles/toolkit-js 0.33.2"},"layers":[{"ty":4,"nm":"Shape Layer 5","sr":1,"st":20,"op":620,"ip":20,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[22,22,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[55.22,55,0]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":20},{"s":[360],"t":110}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","nm":"Ellipse 1","it":[{"ty":"el","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[10,10]}},{"ty":"st","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0.98,0.604,1]}},{"ty":"fl","nm":"Fill 1","c":{"a":0,"k":[0,0.98,0.604,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":1},{"ty":4,"nm":"Shape Layer 3","sr":1,"st":10,"op":610,"ip":10,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[22,22,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[55.22,55,0]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":10},{"s":[360],"t":100}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","nm":"Ellipse 1","it":[{"ty":"el","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[30,30]}},{"ty":"st","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0.98,0.604,1]}},{"ty":"fl","nm":"Fill 1","c":{"a":0,"k":[0,0.98,0.604,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":2},{"ty":4,"nm":"Shape Layer 4","sr":1,"st":15,"op":615,"ip":15,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[22,22,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[55.22,55,0]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":15},{"s":[360],"t":105}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","nm":"Ellipse 1","it":[{"ty":"el","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[20,20]}},{"ty":"st","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0.98,0.604,1]}},{"ty":"fl","nm":"Fill 1","c":{"a":0,"k":[0,0.98,0.604,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":3},{"ty":4,"nm":"Shape Layer 2","sr":1,"st":5,"op":605,"ip":5,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[22,22,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[55.22,55,0]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":5},{"s":[360],"t":95}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","nm":"Ellipse 1","it":[{"ty":"el","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":0,"k":[40,40]}},{"ty":"st","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0.98,0.604,1]}},{"ty":"fl","nm":"Fill 1","c":{"a":0,"k":[0,0.98,0.604,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":4},{"ty":4,"nm":"Shape Layer 1","sr":1,"st":0,"op":600,"ip":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[0,0,0]},"s":{"a":0,"k":[22,22,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[55,55,0]},"r":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[0],"t":0},{"s":[360],"t":90}]},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}},"ef":[],"shapes":[{"ty":"gr","nm":"Ellipse 1","it":[{"ty":"el","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,-100]},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[50,50],"t":0},{"o":{"x":0.333,"y":0},"i":{"x":0.667,"y":1},"s":[40,40],"t":84},{"s":[50,50],"t":100}]}},{"ty":"st","nm":"Stroke 1","lc":1,"lj":1,"ml":4,"o":{"a":0,"k":100},"w":{"a":0,"k":0},"c":{"a":0,"k":[0,0.98,0.604,1]}},{"ty":"fl","nm":"Fill 1","c":{"a":0,"k":[0,0.98,0.604,1]},"r":1,"o":{"a":0,"k":100}},{"ty":"tr","a":{"a":0,"k":[0,0]},"s":{"a":0,"k":[100,100]},"sk":{"a":0,"k":0},"p":{"a":0,"k":[0,0]},"r":{"a":0,"k":0},"sa":{"a":0,"k":0},"o":{"a":0,"k":100}}]}],"ind":5}],"v":"5.8.1","fr":75,"op":106,"ip":0,"assets":[]}
\ No newline at end of file
package com.swiftcleaner.chovey.business
import android.util.Base64
import android.util.Log
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.swiftcleaner.chovey.BuildConfig
......@@ -31,7 +32,7 @@ object ConfigUtils {
url.append("&device=${SPUtils.getInstance().getString(KEY_GOOGLE_ADVERTISER_ID)}")
url.append("&aid=${SPUtils.getInstance().getString(KEY_UUID)}")
//打正式包注释掉 url.append("&mode=4")
url.append("&mode=2")
url.append("&mode=4")
url.toString()
}
......@@ -59,6 +60,7 @@ object ConfigUtils {
result.groupValues[1].let {
try {
val str = AESUtils.decrypt(it)
Log.e("tttttttt",str)
val gson = Gson()
val type = object : TypeToken<Map<String, Int>>() {}.type
val configMap = gson.fromJson<Map<String, Int>>(str, type)
......
package com.swiftcleaner.chovey.business.admob
import android.app.Activity
import android.content.Context
import android.os.Bundle
......@@ -163,7 +164,11 @@ object AdmobManager {
isLoadingAppOpenAd = true
Log.d(TAG, "app open Ad load.")
val reqId = UUID.randomUUID().toString()
ReportAdUtils.pullStartAd(reqId, APP_OPEN_AD_UNIT, (context as Activity).javaClass.simpleName)
ReportAdUtils.pullStartAd(
reqId,
APP_OPEN_AD_UNIT,
(context as Activity).javaClass.simpleName
)
if (useAdmob) {
val adRequest = AdRequest.Builder().build()
AppOpenAd.load(
......@@ -244,7 +249,11 @@ object AdmobManager {
isLoadingInterstitialAd = true
Log.d(TAG, "interstitial Ad load.")
val reqId = UUID.randomUUID().toString()
ReportAdUtils.pullStartAd(reqId, INTERSTITIAL_AD_UNIT, (context as Activity).javaClass.simpleName)
ReportAdUtils.pullStartAd(
reqId,
INTERSTITIAL_AD_UNIT,
(context as Activity).javaClass.simpleName
)
if (useAdmob) {
val adRequest = AdRequest.Builder().build()
InterstitialAd.load(
......@@ -708,10 +717,12 @@ object AdmobManager {
val isShowAdInter = SPUtils.getInstance().getInt(KEY_IS_SHOW_AD_INTER)
return isShowAdInter == 1
}
fun isShowAdInterGuide(): Boolean {
val isShowAdInterGuide = SPUtils.getInstance().getInt(KEY_IS_SHOW_AD_INTER_GUIDE)
return isShowAdInterGuide == 1
}
fun isShowAdBackInter(): Boolean {
val isShowAdBackInter = SPUtils.getInstance().getInt(KEY_IS_SHOW_AD_BACK_INTER)
return isShowAdBackInter == 1
......@@ -737,7 +748,7 @@ object AdmobManager {
return dateDifference < numMilliSecondsPerHour * numHours
}
// private fun isBlacklist(): Boolean {
// private fun isBlacklist(): Boolean {
// return blacklist != 1
// }
private fun isBlacklist(): Boolean {
......@@ -750,7 +761,7 @@ object AdmobManager {
return false
}
val currentTime = System.currentTimeMillis()
if (showTime==0L||showTime.toFormatTime4() != currentTime.toFormatTime4()) {
if (showTime == 0L || showTime.toFormatTime4() != currentTime.toFormatTime4()) {
SPUtils.getInstance().putInt(KEY_DISPLAY_NUMBER, 0)
SPUtils.getInstance().putInt(KEY_REQUEST_NUMBER, 0)
SPUtils.getInstance().putInt(KEY_CLICK_NUMBER, 0)
......@@ -776,7 +787,8 @@ object AdmobManager {
}
if (!checkIntervalTime) return true
val interval = SPUtils.getInstance().getInt(KEY_AD_INTERVAL, DEFAULT_AD_INTERVAL) * 60 * 1000
val interval =
SPUtils.getInstance().getInt(KEY_AD_INTERVAL, DEFAULT_AD_INTERVAL) * 60 * 1000
val flag = System.currentTimeMillis() - lastShowTime > interval
if (!flag) {
ReportAdUtils.limitErrorAd(EVENT_SHOW_INTERVAL_TIME, adUnit)
......@@ -800,7 +812,7 @@ object AdmobManager {
fun calculate(key: String) {
val currentTime = System.currentTimeMillis()
if (showTime==0L||showTime.toFormatTime4() != currentTime.toFormatTime4()) {
if (showTime == 0L || showTime.toFormatTime4() != currentTime.toFormatTime4()) {
SPUtils.getInstance().putInt(key, 0)
showTime = currentTime
}
......
package com.clean.file.b.business.newAdmob
import android.animation.ObjectAnimator
import android.animation.ValueAnimator.INFINITE
import android.app.AlertDialog
import android.app.Dialog
import android.content.Context
import android.os.Handler
import android.os.Looper
import android.view.LayoutInflater
import android.view.View
import android.view.animation.LinearInterpolator
import com.swiftcleaner.chovey.R
import com.swiftcleaner.chovey.databinding.DialogAdLoadingBinding
object AdDialog {
fun Context.showAdLoadingDialog(): AlertDialog {
val binding = DialogAdLoadingBinding.inflate(LayoutInflater.from(this))
val dialog = AlertDialog.Builder(this).create()
dialog.setView(binding.root)
dialog.setCancelable(false)
dialog.setCanceledOnTouchOutside(false)
dialog.show()
val params = dialog.window?.attributes
params?.width = resources.getDimensionPixelOffset(R.dimen.dp_228)
params?.height = resources.getDimensionPixelOffset(R.dimen.dp_124)
dialog.window?.attributes = params
dialog.window?.setBackgroundDrawableResource(android.R.color.transparent)
// 创建一个旋转动画
val rotateAnimator = ObjectAnimator.ofFloat(binding.xuanzhuanImg, "rotation", 0f, -360f)
rotateAnimator.setDuration(1000) // 设置动画持续时间为1000毫秒
rotateAnimator.repeatCount = INFINITE
rotateAnimator.interpolator = LinearInterpolator() // 设置插值器为线性插值
rotateAnimator.start()
val textTime = binding.textTime
var count = 3
val countDownRunnable = object : Runnable {
override fun run() {
if (count > 0) {
textTime.text = "($count)"
count--
Handler(Looper.getMainLooper()).postDelayed(this, 1000)
} else {
dialog.dismiss()
}
}
}
Handler(Looper.getMainLooper()).postDelayed(countDownRunnable, 0)
return dialog
}
}
\ No newline at end of file
package com.clean.file.b.business.newAdmob
import android.content.Context
import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.FrameLayout
import android.widget.ImageView
import android.widget.TextView
import com.google.android.gms.ads.nativead.NativeAd
import com.google.android.gms.ads.nativead.NativeAdView
import com.swiftcleaner.chovey.R
class NativeView1 @JvmOverloads constructor(
context: Context, val layout: Int, attrs: AttributeSet? = null
): FrameLayout(context, attrs) {
init {
layoutParams =
LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
}
fun setNativeAd(nativeAd: NativeAd?) {
nativeAd ?: return
val adView = LayoutInflater.from(context)
.inflate(layout, this, false) as NativeAdView
// runCatching {
// adView.advertiserView = adView.findViewById(R.id.ad_advertiser)
// }
adView.mediaView = adView.findViewById(R.id.ad_media)
adView.headlineView = adView.findViewById(R.id.ad_headline)
adView.bodyView = adView.findViewById(R.id.ad_body)
adView.callToActionView = adView.findViewById(R.id.ad_call_to_action)
adView.iconView = adView.findViewById(R.id.ad_icon)
(adView.headlineView as TextView?)?.text = nativeAd.headline
adView.mediaView?.mediaContent = nativeAd.mediaContent
if (nativeAd.body == null) {
adView.bodyView?.visibility = View.INVISIBLE
} else {
adView.bodyView?.visibility = View.VISIBLE
(adView.bodyView as TextView?)?.text = nativeAd.body
}
if (nativeAd.callToAction == null) {
adView.callToActionView?.visibility = View.INVISIBLE
} else {
adView.callToActionView?.visibility = View.VISIBLE
(adView.callToActionView as Button?)?.text = nativeAd.callToAction
}
if (nativeAd.icon == null) {
adView.iconView?.visibility = View.GONE
} else {
(adView.iconView as ImageView?)?.setImageDrawable(
nativeAd.icon?.drawable
)
adView.iconView?.visibility = View.VISIBLE
}
adView.setNativeAd(nativeAd)
removeAllViews()
addView(adView)
}
}
\ No newline at end of file
......@@ -316,7 +316,7 @@ object NotificationUtils {
notifyId: Int,
type: String,
) {
// if (CleanApplication.APP_STATE == 1) return
if (CleanApplication.APP_STATE == 1) return
val key = "${NOTIFICATION_CURRENT}_${context.toDate()}"
val notificationCount = SPUtils.getInstance().getInt("notificationCount", 100)
......
package com.swiftcleaner.chovey.view.activity;
import android.animation.ValueAnimator;
import android.content.Intent;
import android.os.CountDownTimer;
import android.util.Log;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.databinding.ActivityAnimatorBinding;
import com.swiftcleaner.chovey.view.BaseActivity;
public class AnimatorActivity extends BaseActivity<ActivityAnimatorBinding> {
private boolean isAnimatorCancelled = false;
private boolean isTimerCancelled = false;
private ValueAnimator animator;
private CountDownTimer countDownTimer;
private Intent startIntent;
@Override
protected ActivityAnimatorBinding getViewBinding() {
return ActivityAnimatorBinding.inflate(getLayoutInflater());
}
@Override
protected void initView() {
initBar();
}
@Override
protected void initData() {
Intent intent = getIntent();
int animatorIntent = intent.getIntExtra("animator", 0);
switch (animatorIntent) {
case 1:
binding.tupian.setBackgroundResource(R.mipmap.clean_img);
startIntent = new Intent(this, CleanJunkActivity.class);
break;
case 2:
binding.tupian.setBackgroundResource(R.mipmap.dianchi_img);
startIntent = new Intent(this, InfoActivity.class);
break;
case 3:
binding.tupian.setBackgroundResource(R.mipmap.large_file_img);
startIntent = new Intent(this, LargeFileActivity.class);
break;
case 4:
binding.tupian.setBackgroundResource(R.mipmap.screenshot_img);
startIntent = new Intent(this, ScreenShotActivity.class);
break;
case 5:
String stringExtra = intent.getStringExtra("cleanstr");
String title = intent.getStringExtra("title");
binding.tupian.setBackgroundResource(R.mipmap.clean_img);
startIntent = new Intent(this, EndCleanJunkActivity.class);
startIntent.putExtra("cleanstr", stringExtra);
startIntent.putExtra("title",title);
break;
case 6:
binding.tupian.setBackgroundResource(R.mipmap.appprocess_img);
startIntent = new Intent(this, AppProcessActivity.class);
break;
case 7:
binding.tupian.setBackgroundResource(R.mipmap.app_manager_img);
startIntent = new Intent(this, BatteryInfoActivity.class);
break;
case 8:
binding.tupian.setBackgroundResource(R.mipmap.whatsapp_img);
startIntent = new Intent(this, WhatsAppActivity.class);
break;
default:
Log.e("AnimatorActivity", "Invalid animator intent value: " + animatorIntent);
}
initPage();
}
private void initPage() {
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeAnimator(),false);
binding.radarview.setSearching(true);
initAnimotor();
countDownTimer = new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
binding.radarview.setSearching(false);
countDownTimer.cancel();
animator.cancel();
if (AdmobHelps.INSTANCE.isShowAdInter()) {
AdmobHelps.INSTANCE.showInterstitialAd(
AnimatorActivity.this,
() -> {
startInt();
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
return null;
},
() -> {
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.");
return null;
},
() -> {
startInt();
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.");
return null;
},
false
);
}else {
startInt();
}
}
}.start();
}
private void startInt() {
if (startIntent != null) {
startActivity(startIntent);
finish();
} else {
Log.e("AnimatorActivity", "Intent for next activity is null. Cannot start activity.");
finish(); // 如果 intent1 为 null,直接结束当前 Activity
}
}
private void initAnimotor() {
// 创建ValueAnimator,从1到100
animator = ValueAnimator.ofInt(1, 100);
animator.setDuration(5000); // 3秒
// 设置更新监听器,每帧更新进度文本
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int currentValue = (int) animation.getAnimatedValue();
binding.parText.setText(currentValue + "%");
}
});
// 开始动画
animator.start();
}
private void initBar() {
ImmersionBar.with(this).transparentStatusBar() // 透明状态栏
.statusBarDarkFont(false) // 状态栏字体颜色为浅色
.navigationBarDarkIcon(true) // 导航栏图标颜色为浅色
.init();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (binding.radarview != null) {
binding.radarview.setSearching(false);
}
if (countDownTimer != null && !isTimerCancelled) {
countDownTimer.cancel();
isTimerCancelled = true;
}
if (animator != null && !isAnimatorCancelled) {
animator.cancel();
isAnimatorCancelled = true;
}
}
}
\ No newline at end of file
......@@ -23,6 +23,7 @@ import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
......@@ -36,15 +37,12 @@ import com.swiftcleaner.chovey.view.BaseActivityKotlin;
import com.swiftcleaner.chovey.view.MainActivity;
import com.swiftcleaner.chovey.view.adapter.AppProcessAdapter;
import com.swiftcleaner.chovey.view.dialog.CustomScoreDialog;
import com.swiftcleaner.chovey.view.dialog.LoadingDialog;
import java.util.ArrayList;
import java.util.List;
public class AppProcessActivity extends BaseActivity<ActivityAppProcessBinding> {
private AppProcessAdapter adapter;
private ValueAnimator animator;
private CountDownTimer countDownTimer;
private static final int REQUEST_ALL_FILES_ACCESS_PERMISSION = 100;
private static final int REQUEST_PERMISSION_CODE = 101;
@Override
......@@ -57,79 +55,18 @@ public class AppProcessActivity extends BaseActivity<ActivityAppProcessBinding>
initBar();
}
@Override
protected void onResume() {
super.onResume();
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
@Override
protected void initData() {
EventUtils.INSTANCE.event("page_AppProcessActivity", "", null);
initPage();
checkAndRequestPermissions();
initShow();
}
private void initPage() {
binding.clRadarview.setVisibility(View.VISIBLE);
binding.radarview.setSearching(true);
AdmobManager.INSTANCE.showNativeAd(AppProcessActivity.this, (nativeAd) -> {
binding.flAdDonghua.removeAllViews();
binding.flAdDonghua.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
initAnimotor();
countDownTimer = new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
binding.radarview.setSearching(false);
countDownTimer.cancel();
animator.cancel();
binding.clRadarview.setVisibility(View.GONE);
LoadingDialog loadingDialog = new LoadingDialog(AppProcessActivity.this);
loadingDialog.show();
if (AdmobManager.INSTANCE.isShowAdInter()){
AdmobManager.INSTANCE.showInterstitialAd(AppProcessActivity.this, () -> {
return null;
},
() -> {
loadingDialog.dismiss();
checkAndRequestPermissions();
binding.flAdDonghua.removeAllViews();
return null;
},
() -> {
loadingDialog.dismiss();
checkAndRequestPermissions();
binding.flAdDonghua.removeAllViews();
return null;
}, false);
}else {
checkAndRequestPermissions();
loadingDialog.dismiss();
}
}
}.start();
AdmobManager.INSTANCE.showNativeAd(AppProcessActivity.this, (nativeAd) -> {
binding.flAd.removeAllViews();
binding.flAd.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
}
private void initAnimotor(){
// 创建ValueAnimator,从1到100
animator = ValueAnimator.ofInt(1, 100);
animator.setDuration(5000); // 3秒
// 设置更新监听器,每帧更新进度文本
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int currentValue = (int) animation.getAnimatedValue();
binding.parText.setText(currentValue + "%");
}
});
// 开始动画
animator.start();
}
private void initShow() {
binding.ivReturn.setOnClickListener(v -> {
initCustDialog();
......@@ -297,21 +234,28 @@ public class AppProcessActivity extends BaseActivity<ActivityAppProcessBinding>
@Override
public void onSubmit() {
if (AdmobManager.INSTANCE.isShowAdBackInter()){
AdmobManager.INSTANCE.showInterstitialAd(AppProcessActivity.this, () -> {
if (AdmobHelps.INSTANCE.isShowAdBackInter()){
AdmobHelps.INSTANCE.showInterstitialAd(
AppProcessActivity.this,
() -> {
FinishMain.INSTANCE.finishToMain(activity);
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
return null;
},
() -> {
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.");
return null;
},
() -> {
FinishMain.INSTANCE.finishToMain(activity);
if (AdmobManager.INSTANCE.isShowAdInter()){
}
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.");
return null;
}, false);
},
false
);
}else {
FinishMain.INSTANCE.finishToMain(activity);
}
......@@ -323,14 +267,6 @@ public class AppProcessActivity extends BaseActivity<ActivityAppProcessBinding>
@Override
protected void onDestroy() {
super.onDestroy();
if (binding.radarview != null) {
binding.radarview.setSearching(false);
}
if (animator != null) {
animator.cancel();
}
if (countDownTimer!=null){
countDownTimer.cancel();
}
}
}
\ No newline at end of file
......@@ -20,9 +20,11 @@ import android.os.Build;
import android.os.CountDownTimer;
import android.os.Environment;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
......@@ -36,7 +38,6 @@ import com.swiftcleaner.chovey.view.BaseActivityKotlin;
import com.swiftcleaner.chovey.view.MainActivity;
import com.swiftcleaner.chovey.view.adapter.AppInfoAdapter;
import com.swiftcleaner.chovey.view.dialog.CustomScoreDialog;
import com.swiftcleaner.chovey.view.dialog.LoadingDialog;
import java.util.ArrayList;
import java.util.List;
......@@ -47,8 +48,6 @@ import io.reactivex.rxjava3.disposables.Disposable;
public class BatteryInfoActivity extends BaseActivity<ActivityBatteryInfoBinding> {
private AppInfoAdapter adapter;
private Disposable disposable;
private ValueAnimator animator;
private CountDownTimer countDownTimer;
private static final int REQUEST_ALL_FILES_ACCESS_PERMISSION = 100;
private static final int REQUEST_PERMISSION_CODE = 101;
......@@ -62,64 +61,19 @@ public class BatteryInfoActivity extends BaseActivity<ActivityBatteryInfoBinding
initBar();
}
@Override
protected void onResume() {
super.onResume();
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
@Override
protected void initData() {
EventUtils.INSTANCE.event("page_BatteryInfoActivity", "", null);
initPage();
checkAndRequestPermissions();
initShow();
}
private void initPage() {
binding.clRadarview.setVisibility(View.VISIBLE);
binding.radarview.setSearching(true);
AdmobManager.INSTANCE.showNativeAd(BatteryInfoActivity.this, (nativeAd) -> {
binding.flAdDonghua.removeAllViews();
binding.flAdDonghua.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
initAnimotor();
countDownTimer = new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
binding.radarview.setSearching(false);
countDownTimer.cancel();
animator.cancel();
binding.clRadarview.setVisibility(View.GONE);
LoadingDialog loadingDialog = new LoadingDialog(BatteryInfoActivity.this);
loadingDialog.show();
if (AdmobManager.INSTANCE.isShowAdInter()) {
AdmobManager.INSTANCE.showInterstitialAd(BatteryInfoActivity.this, () -> {
return null;
},
() -> {
checkAndRequestPermissions();
loadingDialog.dismiss();
binding.flAdDonghua.removeAllViews();
return null;
},
() -> {
checkAndRequestPermissions();
loadingDialog.dismiss();
binding.flAdDonghua.removeAllViews();
return null;
}, false);
} else {
checkAndRequestPermissions();
loadingDialog.dismiss();
}
}
}.start();
AdmobManager.INSTANCE.showNativeAd(BatteryInfoActivity.this, (nativeAd) -> {
binding.flAd.removeAllViews();
binding.flAd.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
}
private void checkAndRequestPermissions() {
if (!checkFilesAccessPermission(this)) {
// 没有权限,请求权限
......@@ -189,22 +143,6 @@ public class BatteryInfoActivity extends BaseActivity<ActivityBatteryInfoBinding
}
}
private void initAnimotor() {
// 创建ValueAnimator,从1到100
animator = ValueAnimator.ofInt(1, 100);
animator.setDuration(5000); // 3秒
// 设置更新监听器,每帧更新进度文本
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int currentValue = (int) animation.getAnimatedValue();
binding.parText.setText(currentValue + "%");
}
});
// 开始动画
animator.start();
}
private void initShow() {
binding.idActivityAppmanagerLoading.setVisibility(View.VISIBLE);
......@@ -283,24 +221,31 @@ public class BatteryInfoActivity extends BaseActivity<ActivityBatteryInfoBinding
@Override
public void onSubmit() {
if (AdmobManager.INSTANCE.isShowAdBackInter()){
AdmobManager.INSTANCE.showInterstitialAd(BatteryInfoActivity.this, () -> {
if (AdmobHelps.INSTANCE.isShowAdBackInter()){
AdmobHelps.INSTANCE.showInterstitialAd(
BatteryInfoActivity.this,
() -> {
FinishMain.INSTANCE.finishToMain(activity);
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
return null;
},
() -> {
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.");
return null;
},
() -> {
FinishMain.INSTANCE.finishToMain(activity);
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.");
return null;
}, false);
},
false
);
}else {
FinishMain.INSTANCE.finishToMain(activity);
}
}
});
customScoreDialog.show();
......@@ -312,14 +257,5 @@ public class BatteryInfoActivity extends BaseActivity<ActivityBatteryInfoBinding
if (disposable != null && !disposable.isDisposed()) {
disposable.dispose();
}
if (binding.radarview != null) {
binding.radarview.setSearching(false);
}
if (animator != null) {
animator.cancel();
}
if (countDownTimer != null) {
countDownTimer.cancel();
}
}
}
\ No newline at end of file
......@@ -23,6 +23,7 @@ import android.view.View;
import android.content.Intent;
import android.widget.Toast;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
......@@ -43,6 +44,8 @@ import com.swiftcleaner.chovey.view.adapter.TempCleanAdapter;
import com.swiftcleaner.chovey.view.dialog.CustomScoreDialog;
import com.swiftcleaner.chovey.view.dialog.LoadingDialog;
import org.checkerframework.checker.units.qual.C;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
......@@ -65,8 +68,6 @@ public class CleanJunkActivity extends BaseActivity<ActivityCleanJunkBinding> {
public long totalSelectedSize = 0;
private long selectedSize = 0;
private CompositeDisposable compositeDisposable = new CompositeDisposable();
private ValueAnimator animator;
private CountDownTimer countDownTimer;
private SharedPreferences sharedPreferences;
@Override
protected ActivityCleanJunkBinding getViewBinding() {
......@@ -81,63 +82,24 @@ public class CleanJunkActivity extends BaseActivity<ActivityCleanJunkBinding> {
@Override
protected void initData() {
EventUtils.INSTANCE.event("page_CleanJunkActivity", "", null);
checkAndRequestPermissions();
initPage();
}
private void initPage() {
binding.clRadarview.setVisibility(View.VISIBLE);
binding.flAdDonghua.setVisibility(View.VISIBLE);
AdmobManager.INSTANCE.showNativeAd(CleanJunkActivity.this, (nativeAd) -> {
binding.flAdDonghua.removeAllViews();
binding.flAdDonghua.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
binding.radarview.setSearching(true);
initAnimotor();
countDownTimer = new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
binding.radarview.setSearching(false);
countDownTimer.cancel();
animator.cancel();
binding.clRadarview.setVisibility(View.GONE);
LoadingDialog loadingDialog = new LoadingDialog(CleanJunkActivity.this);
loadingDialog.show();
if (AdmobManager.INSTANCE.isShowAdInter()) {
AdmobManager.INSTANCE.showInterstitialAd(CleanJunkActivity.this, () -> {
return null;
},
() -> {
checkAndRequestPermissions();
loadingDialog.dismiss();
binding.flAdDonghua.removeAllViews();
return null;
},
() -> {
checkAndRequestPermissions();
loadingDialog.dismiss();
binding.flAdDonghua.removeAllViews();
return null;
}, false);
} else {
checkAndRequestPermissions();
loadingDialog.dismiss();
binding.flAdDonghua.setVisibility(View.GONE);
}
@Override
protected void onResume() {
super.onResume();
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
}
}.start();
AdmobManager.INSTANCE.showNativeAd(CleanJunkActivity.this, (nativeAd) -> {
binding.flAd.removeAllViews();
binding.flAd.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
private void initPage() {
sharedPreferences = getSharedPreferences("AppPrefs", MODE_PRIVATE);
boolean cleaned = sharedPreferences.getBoolean("cleaned", false);
if (!cleaned){
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("cleaned", true);
editor.commit();
}
}
private void checkAndRequestPermissions() {
......@@ -213,17 +175,10 @@ public class CleanJunkActivity extends BaseActivity<ActivityCleanJunkBinding> {
binding.emptyFilesRecy.setVisibility(View.VISIBLE);
}
});
sharedPreferences = getSharedPreferences("AppPrefs", MODE_PRIVATE);
binding.buttonCleanUp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (view != null) {
boolean cleaned = sharedPreferences.getBoolean("cleaned", false);
if (!cleaned){
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean("cleaned", true);
editor.commit();
}
onClickCleanUpButton(view);
}
}
......@@ -607,29 +562,11 @@ public class CleanJunkActivity extends BaseActivity<ActivityCleanJunkBinding> {
return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
}
//进入功能动画
private void initAnimotor() {
// 创建ValueAnimator,从1到100
animator = ValueAnimator.ofInt(1, 100);
animator.setDuration(5000); // 3秒
// 设置更新监听器,每帧更新进度文本
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int currentValue = (int) animation.getAnimatedValue();
binding.parText.setText(currentValue + "%");
}
});
// 开始动画
animator.start();
}
private void initAnimation(String str) {
Intent intent = new Intent(this, EndCleanJunkActivity.class);
Intent intent = new Intent(this, AnimatorActivity.class);
intent.putExtra("cleanstr", "Cleaned " + str + " junk files");
intent.putExtra("title", "Clean Junk");
intent.putExtra("type", false);
intent.putExtra("animator",5);
startActivity(intent);
finish();
}
......@@ -658,19 +595,29 @@ public class CleanJunkActivity extends BaseActivity<ActivityCleanJunkBinding> {
@Override
public void onSubmit() {
if (AdmobManager.INSTANCE.isShowAdBackInter()) {
AdmobManager.INSTANCE.showInterstitialAd(CleanJunkActivity.this, () -> {
if (AdmobHelps.INSTANCE.isShowAdBackInter()){
AdmobHelps.INSTANCE.showInterstitialAd(
CleanJunkActivity.this,
() -> {
FinishMain.INSTANCE.finishToMain(activity);
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
return null;
},
() -> {
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.");
return null;
},
() -> {
FinishMain.INSTANCE.finishToMain(activity);
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.");
return null;
}, false);
} else {
},
false
);
}else {
FinishMain.INSTANCE.finishToMain(activity);
}
......@@ -679,26 +626,10 @@ public class CleanJunkActivity extends BaseActivity<ActivityCleanJunkBinding> {
customScoreDialog.show();
}
@Override
protected void onPause() {
super.onPause();
if (binding.radarview != null) {
binding.radarview.setSearching(false);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if (binding.radarview != null) {
binding.radarview.setSearching(false);
}
if (countDownTimer != null) {
countDownTimer.cancel();
}
if (animator != null) {
animator.cancel();
}
compositeDisposable.clear();
if (sharedPreferences != null) {
......
......@@ -11,17 +11,22 @@ import android.animation.ValueAnimator;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.CleanApplication;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.admob.NativeView;
import com.swiftcleaner.chovey.databinding.ActivityCollectBinding;
......@@ -32,6 +37,8 @@ public class CollectActivity extends AppCompatActivity {
private ActivityCollectBinding binding;
private ValueAnimator animator;
private static final int REQUEST_ALL_FILES_ACCESS_PERMISSION = 100;
private static final int REQUEST_PERMISSION_CODE = 101;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -39,6 +46,7 @@ public class CollectActivity extends AppCompatActivity {
View view = binding.getRoot();
setContentView(view);
initBar();
EventUtils.INSTANCE.event("page_CollectActivity", "", null);
startProgressAnimation();
initShow();
}
......@@ -46,24 +54,29 @@ public class CollectActivity extends AppCompatActivity {
@Override
protected void onResume() {
super.onResume();
AdmobManager.INSTANCE.showNativeAd(CollectActivity.this, (nativeAd) -> {
binding.flAd.removeAllViews();
binding.flAd.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
private void initShow() {
SharedPreferences preferences = CleanApplication.context.getGuideSharedPreferences();
binding.scanButton.setOnClickListener(v->{
startActivity(new Intent(CollectActivity.this,CleanJunkActivity.class));
finish();
SharedPreferences.Editor edit = preferences.edit();
edit.putBoolean("isGuideSP",true);
edit.commit();
checkAndRequestPermissions();
});
binding.scanSkip.setOnClickListener(v->{
startActivity(new Intent(CollectActivity.this, MainActivity.class));
finish();
initStart();
});
}
private void initStart() {
Intent intent = new Intent(this, AnimatorActivity.class);
intent.putExtra("animator",1);
startActivity(intent);
finish();
}
private void startProgressAnimation() {
animator = ValueAnimator.ofInt(0, 100);
animator.setDuration(5000); // 5秒
......@@ -89,7 +102,69 @@ public class CollectActivity extends AppCompatActivity {
.init();
}
private void checkAndRequestPermissions() {
if (!checkFilesAccessPermission(this)) {
// 没有权限,请求权限
requestFilesAccessPermission();
}else {
initStart();
}
}
private boolean checkFilesAccessPermission(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
return Environment.isExternalStorageManager();
} else {
int readPermission = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE);
int writePermission = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
return readPermission == PackageManager.PERMISSION_GRANTED && writePermission == PackageManager.PERMISSION_GRANTED;
}
}
private void requestFilesAccessPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
try {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_ALL_FILES_ACCESS_PERMISSION);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, "Unable to request permission, please grant manually", Toast.LENGTH_SHORT).show();
}
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_ALL_FILES_ACCESS_PERMISSION || requestCode == REQUEST_PERMISSION_CODE) {
if (!checkFilesAccessPermission(this)) {
// 权限未授予,直接关闭页面
// Toast.makeText(this, "Unauthorized permission, the page is about to close", Toast.LENGTH_SHORT).show();
// finish();
initStart();
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_ALL_FILES_ACCESS_PERMISSION) {
// 检查权限是否已经授予
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
// 权限已授予,刷新页面或执行相关操作
initStart();
} else {
initStart();
// 权限未授予,提示用户
Toast.makeText(this, "Permission not granted, please grant manually", Toast.LENGTH_SHORT).show();
}
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
......
......@@ -24,20 +24,21 @@ import android.view.View;
import android.widget.FrameLayout;
import android.widget.Toast;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.CleanApplication;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.databinding.ActivityGuideBinding;
import com.swiftcleaner.chovey.view.MainActivity;
import com.swiftcleaner.chovey.view.adapter.ViewPagerAdapter;
import com.swiftcleaner.chovey.view.dialog.LoadingDialog;
public class GuideActivity extends AppCompatActivity {
private ViewPagerAdapter adapter;
ActivityGuideBinding binding;
private static final int REQUEST_ALL_FILES_ACCESS_PERMISSION = 100;
private static final int REQUEST_PERMISSION_CODE = 101;
private SharedPreferences preferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
......@@ -45,7 +46,7 @@ public class GuideActivity extends AppCompatActivity {
View view = binding.getRoot();
setContentView(view);
initBar();
EventUtils.INSTANCE.event("page_GuideActivity", "", null);
adapter = new ViewPagerAdapter(getSupportFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
binding.viewPager.setAdapter(adapter);
binding.viewPager.setPagingEnabled(false);
......@@ -55,7 +56,6 @@ public class GuideActivity extends AppCompatActivity {
// 页面切换时处理逻辑
}
});
}
private void initBar() {
......@@ -69,13 +69,6 @@ public class GuideActivity extends AppCompatActivity {
@Override
protected void onResume() {
super.onResume();
Log.d("showNativeAd","111");
AdmobManager.INSTANCE.showNativeAd(this, (nativeAd) -> {
binding.guideAd.removeAllViews();
Log.d("showNativeAd","222");
binding.guideAd.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
}
public void nextPage() {
......@@ -88,33 +81,30 @@ public class GuideActivity extends AppCompatActivity {
if (currentPosition < adapter.getCount() - 1) {
binding.viewPager.setCurrentItem(currentPosition + 1, true);
} else {
preferences = CleanApplication.context.getGuideSharedPreferences();
SharedPreferences.Editor edit = preferences.edit();
edit.putBoolean("isGuideSP",true);
edit.commit();
if (AdmobManager.INSTANCE.isShowAdInterGuide()){
AdmobManager.INSTANCE.showInterstitialAd(this,
if (AdmobHelps.INSTANCE.isShowAdInter()) {
AdmobHelps.INSTANCE.showInterstitialAd(
GuideActivity.this,
() -> {
startIntent();
checkAndRequestPermissions();
Log.d("isShowAdInterGuide","Ad loading failed");
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
return null;
},
() -> {
Log.d("isShowAdInterGuide","Advertisement loaded successfully");
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.");
return null;
},
() -> {
Log.d("isShowAdInterGuide","Ad loading ends");
startIntent();
checkAndRequestPermissions();
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.");
return null;
}, false);
},
false
);
}else {
startIntent();
checkAndRequestPermissions();
Log.d("isShowAdInterGuide",AdmobManager.INSTANCE.isShowAdInterGuide()+"Close Advertisement");
}
}
}
......@@ -123,70 +113,6 @@ public class GuideActivity extends AppCompatActivity {
finish(); // 关闭当前的 GuideActivity
}
private void checkAndRequestPermissions() {
if (!checkFilesAccessPermission(this)) {
// 没有权限,请求权限
requestFilesAccessPermission();
}
}
private boolean checkFilesAccessPermission(Context context) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
return Environment.isExternalStorageManager();
} else {
int readPermission = ContextCompat.checkSelfPermission(context, Manifest.permission.READ_EXTERNAL_STORAGE);
int writePermission = ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE);
return readPermission == PackageManager.PERMISSION_GRANTED && writePermission == PackageManager.PERMISSION_GRANTED;
}
}
private void requestFilesAccessPermission() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
try {
Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION);
intent.addCategory("android.intent.category.DEFAULT");
intent.setData(Uri.parse("package:" + getPackageName()));
startActivityForResult(intent, REQUEST_ALL_FILES_ACCESS_PERMISSION);
} catch (ActivityNotFoundException e) {
Toast.makeText(this, "Unable to request permission, please grant manually", Toast.LENGTH_SHORT).show();
}
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_PERMISSION_CODE);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == REQUEST_ALL_FILES_ACCESS_PERMISSION || requestCode == REQUEST_PERMISSION_CODE) {
if (!checkFilesAccessPermission(this)) {
// 权限未授予,直接关闭页面
Toast.makeText(this, "Unauthorized permission, the page is about to close", Toast.LENGTH_SHORT).show();
finish();
}
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_ALL_FILES_ACCESS_PERMISSION) {
// 检查权限是否已经授予
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
if (Environment.isExternalStorageManager()) {
// 权限已授予,刷新页面或执行相关操作
Intent intent = new Intent(this, GuideActivity.class);
startActivity(intent);
finish();
} else {
Intent intent = new Intent(this, MainActivity.class);
startActivity(intent);
finish();
// 权限未授予,提示用户
Toast.makeText(this, "Permission not granted, please grant manually", Toast.LENGTH_SHORT).show();
}
}
}
}
@Override
protected void onDestroy() {
......
......@@ -17,9 +17,11 @@ import android.os.Build;
import android.os.CountDownTimer;
import android.os.Environment;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
......@@ -35,8 +37,6 @@ import com.swiftcleaner.chovey.view.dialog.LoadingDialog;
public class InfoActivity extends BaseActivity<ActivityInfoBinding> {
private BatteryReceiver batteryReceiver;
private ValueAnimator animator;
private CountDownTimer countDownTimer;
private static final int REQUEST_ALL_FILES_ACCESS_PERMISSION = 100;
private static final int REQUEST_PERMISSION_CODE = 101;
......@@ -53,70 +53,15 @@ public class InfoActivity extends BaseActivity<ActivityInfoBinding> {
@Override
protected void initData() {
EventUtils.INSTANCE.event("page_InfoActivity", "", null);
initPage();
checkAndRequestPermissions();
initShow();
registerReceiver();
}
private void initPage() {
binding.clRadarview.setVisibility(View.VISIBLE);
binding.radarview.setSearching(true);
AdmobManager.INSTANCE.showNativeAd(InfoActivity.this, (nativeAd) -> {
binding.flAdDonghua.removeAllViews();
binding.flAdDonghua.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
initAnimotor();
countDownTimer = new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
binding.radarview.setSearching(false);
cancelCountDownTimerAndAnimator();
binding.clRadarview.setVisibility(View.GONE);
LoadingDialog loadingDialog = new LoadingDialog(InfoActivity.this);
loadingDialog.show();
if (AdmobManager.INSTANCE.isShowAdInter()) {
AdmobManager.INSTANCE.showInterstitialAd(InfoActivity.this, () -> {
return null;
},
() -> {
checkAndRequestPermissions();
loadingDialog.dismiss();
binding.flAdDonghua.removeAllViews();
return null;
},
() -> {
checkAndRequestPermissions();
loadingDialog.dismiss();
binding.flAdDonghua.removeAllViews();
return null;
}, false);
} else {
checkAndRequestPermissions();
loadingDialog.dismiss();
}
}
}.start();
AdmobManager.INSTANCE.showNativeAd(InfoActivity.this, (nativeAd) -> {
binding.flAd.removeAllViews();
binding.flAd.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
}
private void cancelCountDownTimerAndAnimator() {
if (countDownTimer!= null) {
countDownTimer.cancel();
}
if (animator!= null) {
animator.cancel();
}
@Override
protected void onResume() {
super.onResume();
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
private void checkAndRequestPermissions() {
......@@ -180,16 +125,6 @@ public class InfoActivity extends BaseActivity<ActivityInfoBinding> {
}
}
}
private void initAnimotor() {
animator = ValueAnimator.ofInt(1, 100);
animator.setDuration(5000);
animator.addUpdateListener(animation -> {
int currentValue = (int) animation.getAnimatedValue();
binding.parText.setText(currentValue + "%");
});
animator.start();
}
private void initBar() {
ImmersionBar.with(this).transparentStatusBar()
.statusBarDarkFont(false)
......@@ -225,7 +160,6 @@ public class InfoActivity extends BaseActivity<ActivityInfoBinding> {
if (batteryReceiver!= null) {
unregisterReceiver(batteryReceiver);
}
cancelCountDownTimerAndAnimator();
}
@Override
......@@ -244,18 +178,28 @@ public class InfoActivity extends BaseActivity<ActivityInfoBinding> {
@Override
public void onSubmit() {
if (AdmobManager.INSTANCE.isShowAdBackInter()){
AdmobManager.INSTANCE.showInterstitialAd(InfoActivity.this, () -> {
if (AdmobHelps.INSTANCE.isShowAdBackInter()){
AdmobHelps.INSTANCE.showInterstitialAd(
InfoActivity.this,
() -> {
FinishMain.INSTANCE.finishToMain(activity);
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
return null;
},
() -> {
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.");
return null;
},
() -> {
FinishMain.INSTANCE.finishToMain(activity);
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.");
return null;
}, false);
},
false
);
}else {
FinishMain.INSTANCE.finishToMain(activity);
}
......
......@@ -23,9 +23,11 @@ import android.os.Build;
import android.os.CountDownTimer;
import android.os.Environment;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
......@@ -56,10 +58,8 @@ public class LargeFileActivity extends BaseActivity<ActivityLargeFileBinding> {
private LargeFileAdapter largeFileAdapter;
private Set<CleanFileBean> allFiles; // 使用Set减少内存开销
private CountDownTimer countDownTimer;
private ExecutorService executorService = Executors.newSingleThreadExecutor();
private long selectedSize = 0;
private ValueAnimator animator;
private static final int REQUEST_ALL_FILES_ACCESS_PERMISSION = 100;
private static final int REQUEST_PERMISSION_CODE = 101;
......@@ -76,60 +76,15 @@ public class LargeFileActivity extends BaseActivity<ActivityLargeFileBinding> {
@Override
protected void initData() {
EventUtils.INSTANCE.event("page_LargeFileActivity", "", null);
initPage();
checkAndRequestPermissions();
initTypeFile();
initShow();
}
private void initPage() {
binding.clRadarview.setVisibility(View.VISIBLE);
binding.radarview.setSearching(true);
AdmobManager.INSTANCE.showNativeAd(LargeFileActivity.this, (nativeAd) -> {
binding.flAdDonghua.removeAllViews();
binding.flAdDonghua.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
initAnimotorPer();
countDownTimer = new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
binding.radarview.setSearching(false);
countDownTimer.cancel();
animator.cancel();
binding.clRadarview.setVisibility(View.GONE);
LoadingDialog loadingDialog = new LoadingDialog(LargeFileActivity.this);
loadingDialog.show();
if (AdmobManager.INSTANCE.isShowAdInter()) {
AdmobManager.INSTANCE.showInterstitialAd(LargeFileActivity.this, () -> {
return null;
},
() -> {
checkAndRequestPermissions();
loadingDialog.dismiss();
binding.flAdDonghua.removeAllViews();
return null;
},
() -> {
checkAndRequestPermissions();
loadingDialog.dismiss();
binding.flAdDonghua.removeAllViews();
return null;
}, false);
} else {
checkAndRequestPermissions();
loadingDialog.dismiss();
}
}
}.start();
AdmobManager.INSTANCE.showNativeAd(LargeFileActivity.this, (nativeAd) -> {
binding.flAd.removeAllViews();
binding.flAd.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
@Override
protected void onResume() {
super.onResume();
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
private void checkAndRequestPermissions() {
......@@ -294,28 +249,12 @@ public class LargeFileActivity extends BaseActivity<ActivityLargeFileBinding> {
});
}
private void initAnimotorPer() {
// 创建ValueAnimator,从1到100
animator = ValueAnimator.ofInt(1, 100);
animator.setDuration(5000); // 3秒
// 设置更新监听器,每帧更新进度文本
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int currentValue = (int) animation.getAnimatedValue();
binding.parText.setText(currentValue + "%");
}
});
// 开始动画
animator.start();
}
private void initAnimation(String str) {
Intent intent = new Intent(this, EndCleanJunkActivity.class);
Intent intent = new Intent(this, AnimatorActivity.class);
intent.putExtra("cleanstr", "Cleaned " + str + " junk files");
intent.putExtra("title", "Clean Junk");
intent.putExtra("type", false);
intent.putExtra("animator",5);
startActivity(intent);
finish();
}
......@@ -345,20 +284,30 @@ public class LargeFileActivity extends BaseActivity<ActivityLargeFileBinding> {
@Override
public void onSubmit() {
if (AdmobManager.INSTANCE.isShowAdBackInter()){
AdmobManager.INSTANCE.showInterstitialAd(LargeFileActivity.this, () -> {
if (AdmobHelps.INSTANCE.isShowAdBackInter()){
AdmobHelps.INSTANCE.showInterstitialAd(
LargeFileActivity.this,
() -> {
FinishMain.INSTANCE.finishToMain(activity);
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
return null;
},
() -> {
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.");
return null;
},
() -> {
FinishMain.INSTANCE.finishToMain(activity);
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.");
return null;
}, false);
},
false
);
}else {
finish();
FinishMain.INSTANCE.finishToMain(activity);
}
}
......@@ -370,11 +319,5 @@ public class LargeFileActivity extends BaseActivity<ActivityLargeFileBinding> {
protected void onDestroy() {
super.onDestroy();
executorService.shutdownNow(); // 使用shutdownNow确保线程池立即停止
if (countDownTimer != null) {
countDownTimer.cancel();
}
if (animator != null) {
animator.cancel();
}
}
}
......@@ -6,6 +6,7 @@ import android.content.Intent
import android.content.pm.PackageManager
import android.net.Uri
import android.os.Bundle
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
......@@ -17,13 +18,13 @@ import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.google.android.gms.ads.nativead.NativeAd
import com.clean.file.b.business.newAdmob.AdmobHelps
import com.clean.file.b.business.newAdmob.AdmobHelps.isShowAdNativeBottom
import com.clean.file.b.business.newAdmob.AdmobHelps.showInterstitialAd
import com.clean.file.b.business.newAdmob.AdmobHelps.showNativeAd
import com.gyf.immersionbar.ImmersionBar
import com.swiftcleaner.chovey.R
import com.swiftcleaner.chovey.business.admob.AdmobManager.isShowAdBackInter
import com.swiftcleaner.chovey.business.admob.AdmobManager.isShowAdInter
import com.swiftcleaner.chovey.business.admob.AdmobManager.showInterstitialAd
import com.swiftcleaner.chovey.business.admob.AdmobManager.showNativeAd
import com.swiftcleaner.chovey.databinding.ActivityMalwareCleanBinding
import com.swiftcleaner.chovey.databinding.DialogErrBinding
import com.swiftcleaner.chovey.databinding.ItemMalwareCleanBinding
......@@ -117,12 +118,6 @@ class MalwareCleanActivity : AppCompatActivity() {
private fun initView() {
binding.clRadarview.isVisible = true
binding.radarview.setSearching(true)
showNativeAd(this, { nativeAd: NativeAd? ->
nativeAd?.let {
binding.flAdDonghua.removeAllViews()
binding.flAdDonghua.setNativeAd(nativeAd, R.layout.layout_ad_native)
}
}, null, null)
if (isShowAdInter()) {
showInterstitialAd(this@MalwareCleanActivity, dismissed = {
initData(false)
......@@ -230,6 +225,7 @@ class MalwareCleanActivity : AppCompatActivity() {
}
override fun onScanError(p0: Int, p1: String?) {
Log.e("ttttttttttt","$p0 $p1")
isScanning = false
showErrDialog(this@MalwareCleanActivity) {
finishToMain(this@MalwareCleanActivity)
......@@ -262,10 +258,11 @@ class MalwareCleanActivity : AppCompatActivity() {
confirm.invoke()
}
showNativeAd(
context,
completed = {
binding.adNative.setExitNativeAd(it)
}
this,
binding.flAd,
R.layout.layout_ad_native_small,
isShowAdNativeBottom(),
false
)
}
......@@ -283,17 +280,17 @@ class MalwareCleanActivity : AppCompatActivity() {
val intent = Intent(this, EndCleanJunkActivity::class.java).apply {
putExtra("cleanstr", "Your phone is completely secure\\nno threats found!")
putExtra("title", "Antivirus Scan")
putExtra("type", true)
}
startActivity(intent)
finish()
} else {
showNativeAd(this, { nativeAd: NativeAd? ->
nativeAd?.let {
binding.adNative.removeAllViews()
binding.adNative.setNativeAd(nativeAd, R.layout.layout_ad_native)
}
}, null, null)
showNativeAd(
this,
binding.flAd,
R.layout.layout_ad_native_small,
isShowAdNativeBottom(),
false
)
}
}
......@@ -362,17 +359,27 @@ class MalwareCleanActivity : AppCompatActivity() {
}
override fun onSubmit() {
if (isShowAdBackInter()) {
if (AdmobHelps.isShowAdBackInter()) {
showInterstitialAd(
this@MalwareCleanActivity, {
this@MalwareCleanActivity,
{
finishToMain(activity)
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.")
null
},
{
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.")
null
},
{ null },
{
finishToMain(activity)
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.")
null
}, false
},
false
)
} else {
finishToMain(activity)
......
......@@ -26,6 +26,7 @@ import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
......@@ -59,8 +60,6 @@ public class ScreenShotActivity extends BaseActivity<ActivityScreenShotBinding>
private CompositeDisposable compositeDisposable = new CompositeDisposable();
private long wasteNumber = 0;
private long selectedSize = 0;
private ValueAnimator animator;
private CountDownTimer countDownTimer;
private static final int REQUEST_ALL_FILES_ACCESS_PERMISSION = 100;
private static final int REQUEST_PERMISSION_CODE = 101;
@Override
......@@ -76,60 +75,16 @@ public class ScreenShotActivity extends BaseActivity<ActivityScreenShotBinding>
@Override
protected void initData() {
EventUtils.INSTANCE.event("page_ScreenShotActivity", "", null);
initPage();
checkAndRequestPermissions();
initShow();
}
private void initPage() {
binding.clRadarview.setVisibility(View.VISIBLE);
binding.radarview.setSearching(true);
AdmobManager.INSTANCE.showNativeAd(ScreenShotActivity.this, (nativeAd) -> {
binding.flAdDonghua.removeAllViews();
binding.flAdDonghua.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
initAnimotorPer();
countDownTimer = new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
binding.radarview.setSearching(false);
countDownTimer.cancel();
animator.cancel();
binding.clRadarview.setVisibility(View.GONE);
LoadingDialog loadingDialog = new LoadingDialog(ScreenShotActivity.this);
loadingDialog.show();
if (AdmobManager.INSTANCE.isShowAdInter()){
AdmobManager.INSTANCE.showInterstitialAd(ScreenShotActivity.this, () -> {
return null;
},
() -> {
checkAndRequestPermissions();
binding.flAdDonghua.removeAllViews();
loadingDialog.dismiss();
return null;
},
() -> {
checkAndRequestPermissions();
loadingDialog.dismiss();
binding.flAdDonghua.removeAllViews();
return null;
}, false);
}else {
checkAndRequestPermissions();
loadingDialog.dismiss();
}
}
}.start();
AdmobManager.INSTANCE.showNativeAd(ScreenShotActivity.this, (nativeAd) -> {
binding.flAd.removeAllViews();
binding.flAd.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
@Override
protected void onResume() {
super.onResume();
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
private void checkAndRequestPermissions() {
if (!checkFilesAccessPermission(this)) {
// 没有权限,请求权限
......@@ -287,27 +242,11 @@ public class ScreenShotActivity extends BaseActivity<ActivityScreenShotBinding>
});
compositeDisposable.add(disposable);
}
private void initAnimotorPer(){
// 创建ValueAnimator,从1到100
animator = ValueAnimator.ofInt(1, 100);
animator.setDuration(5000); // 3秒
// 设置更新监听器,每帧更新进度文本
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int currentValue = (int) animation.getAnimatedValue();
binding.parText.setText(currentValue + "%");
}
});
// 开始动画
animator.start();
}
private void initAnimation(String cleanSize) {
Intent intent = new Intent(this, EndCleanJunkActivity.class);
Intent intent = new Intent(this, AnimatorActivity.class);
intent.putExtra("cleanstr", "Cleaned " + cleanSize + " junk files");
intent.putExtra("title", "Clean Junk");
intent.putExtra("type", false);
intent.putExtra("animator",5);
startActivity(intent);
finish();
}
......@@ -360,20 +299,30 @@ public class ScreenShotActivity extends BaseActivity<ActivityScreenShotBinding>
@Override
public void onSubmit() {
if (AdmobManager.INSTANCE.isShowAdBackInter()){
AdmobManager.INSTANCE.showInterstitialAd(ScreenShotActivity.this, () -> {
if (AdmobHelps.INSTANCE.isShowAdBackInter()){
AdmobHelps.INSTANCE.showInterstitialAd(
ScreenShotActivity.this,
() -> {
FinishMain.INSTANCE.finishToMain(activity);
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
return null;
},
() -> {
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.");
return null;
},
() -> {
FinishMain.INSTANCE.finishToMain(activity);
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.");
return null;
},false);
},
false
);
}else {
finish();
FinishMain.INSTANCE.finishToMain(activity);
}
}
......@@ -385,11 +334,5 @@ public class ScreenShotActivity extends BaseActivity<ActivityScreenShotBinding>
protected void onDestroy() {
super.onDestroy();
compositeDisposable.clear();
if (countDownTimer!=null){
countDownTimer.cancel();
}
if (animator!=null){
animator.cancel();
}
}
}
\ No newline at end of file
......@@ -88,6 +88,12 @@ public class SettingActivity extends AppCompatActivity {
Toast.makeText(this, "token为空", Toast.LENGTH_SHORT).show();
}
});
// NotificationUtils.INSTANCE.sendNotification(
// CleanApplication.context,
// ID_XINGZUO,
// "xingzuo"
// );
}
private void showCustomDialog() {
......
......@@ -22,6 +22,7 @@ import android.util.Log;
import android.view.View;
import android.widget.Toast;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
......@@ -66,8 +67,6 @@ public class WhatsAppActivity extends BaseActivity<ActivityWhatsAppBinding> {
List<CleanFileBean> audioList;
List<CleanFileBean> files;
private CompositeDisposable compositeDisposable = new CompositeDisposable();
private ValueAnimator animator;
private CountDownTimer countDownTimer;
private static final int REQUEST_ALL_FILES_ACCESS_PERMISSION = 100;
private static final int REQUEST_PERMISSION_CODE = 101;
......@@ -86,61 +85,15 @@ public class WhatsAppActivity extends BaseActivity<ActivityWhatsAppBinding> {
@Override
protected void initData() {
EventUtils.INSTANCE.event("page_StartActivity", "", null);
initPage();
EventUtils.INSTANCE.event("page_WhatsAppActivity", "", null);
checkAndRequestPermissions();
initShow();
}
private void initPage() {
binding.clRadarview.setVisibility(View.VISIBLE);
binding.radarview.setSearching(true);
AdmobManager.INSTANCE.showNativeAd(WhatsAppActivity.this, (nativeAd) -> {
binding.flAdDonghua.removeAllViews();
binding.flAdDonghua.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
initAnimotorPer();
countDownTimer = new CountDownTimer(5000, 1000) {
@Override
public void onTick(long millisUntilFinished) {
}
@Override
public void onFinish() {
binding.radarview.setSearching(false);
countDownTimer.cancel();
animator.cancel();
binding.clRadarview.setVisibility(View.GONE);
LoadingDialog loadingDialog = new LoadingDialog(WhatsAppActivity.this);
loadingDialog.show();
if (AdmobManager.INSTANCE.isShowAdInter()) {
AdmobManager.INSTANCE.showInterstitialAd(WhatsAppActivity.this, () -> {
return null;
},
() -> {
checkAndRequestPermissions();
loadingDialog.dismiss();
binding.flAdDonghua.removeAllViews();
return null;
},
() -> {
checkAndRequestPermissions();
loadingDialog.dismiss();
binding.flAdDonghua.removeAllViews();
return null;
}, false);
} else {
checkAndRequestPermissions();
loadingDialog.dismiss();
binding.flAdDonghua.removeAllViews();
}
}
}.start();
AdmobManager.INSTANCE.showNativeAd(WhatsAppActivity.this, (nativeAd) -> {
binding.flAd.removeAllViews();
binding.flAd.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
@Override
protected void onResume() {
super.onResume();
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
private void checkAndRequestPermissions() {
......@@ -288,28 +241,11 @@ public class WhatsAppActivity extends BaseActivity<ActivityWhatsAppBinding> {
initAnimation(formatFileSize(selectedSize));
}
private void initAnimotorPer() {
// 创建ValueAnimator,从1到100
animator = ValueAnimator.ofInt(1, 100);
animator.setDuration(5000); // 3秒
// 设置更新监听器,每帧更新进度文本
animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
@Override
public void onAnimationUpdate(ValueAnimator animation) {
int currentValue = (int) animation.getAnimatedValue();
binding.parText.setText(currentValue + "%");
}
});
// 开始动画
animator.start();
}
private void initAnimation(String str) {
Intent intent = new Intent(this, EndCleanJunkActivity.class);
Intent intent = new Intent(this, AnimatorActivity.class);
intent.putExtra("cleanstr", "Cleaned " + str + " junk files");
intent.putExtra("title", "Clean Junk");
intent.putExtra("type", false);
intent.putExtra("animator",5);
startActivity(intent);
finish();
}
......@@ -538,20 +474,30 @@ public class WhatsAppActivity extends BaseActivity<ActivityWhatsAppBinding> {
@Override
public void onSubmit() {
if (AdmobManager.INSTANCE.isShowAdBackInter()){
AdmobManager.INSTANCE.showInterstitialAd(WhatsAppActivity.this, () -> {
if (AdmobHelps.INSTANCE.isShowAdBackInter()){
AdmobHelps.INSTANCE.showInterstitialAd(
WhatsAppActivity.this,
() -> {
FinishMain.INSTANCE.finishToMain(activity);
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
return null;
},
() -> {
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.");
return null;
},
() -> {
FinishMain.INSTANCE.finishToMain(activity);
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.");
return null;
}, false);
},
false
);
}else {
finish();
FinishMain.INSTANCE.finishToMain(activity);
}
}
});
......@@ -561,15 +507,6 @@ public class WhatsAppActivity extends BaseActivity<ActivityWhatsAppBinding> {
@Override
protected void onDestroy() {
super.onDestroy();
if (binding.radarview != null) {
binding.radarview.setSearching(false);
}
if (countDownTimer != null) {
countDownTimer.cancel();
}
if (animator != null) {
animator.cancel();
}
compositeDisposable.clear();
if (compositeDisposable != null) {
compositeDisposable.dispose(); // 取消所有订阅
......
......@@ -5,11 +5,13 @@ import android.app.Dialog;
import android.graphics.Color;
import android.os.CountDownTimer;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import androidx.appcompat.widget.AppCompatButton;
import androidx.cardview.widget.CardView;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.admob.NativeView;
......@@ -80,12 +82,8 @@ public class AppExitDialog extends Dialog {
setCanceledOnTouchOutside(false);
NativeView nativeView = findViewById(R.id.fl_ad);
AdmobManager.INSTANCE.showNativeAd(activity, (nativeAd) -> {
nativeView.removeAllViews();
nativeView.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
FrameLayout nativeView = findViewById(R.id.fl_ad);
AdmobHelps.INSTANCE.showNativeAd(activity,nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
public void show() {
......
......@@ -6,6 +6,7 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CompoundButton;
import android.widget.ImageView;
import android.widget.Switch;
import androidx.annotation.NonNull;
......@@ -19,7 +20,8 @@ import com.swiftcleaner.chovey.R;
public class CustomBottomSheetDialog extends BottomSheetDialogFragment {
public interface OnOpenSettingClickListener {
void onOpenSettingClick(boolean isSwitchChecked);
void onOpenSettingClick();
void onCloseSettingClick();
}
private OnOpenSettingClickListener openSettingClickListener;
......@@ -28,8 +30,6 @@ public class CustomBottomSheetDialog extends BottomSheetDialogFragment {
this.openSettingClickListener = listener;
}
public CustomBottomSheetDialog() {
}
@Nullable
......@@ -37,26 +37,32 @@ public class CustomBottomSheetDialog extends BottomSheetDialogFragment {
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_bottom_large_file, container, false);
AppCompatButton open_setting = view.findViewById(R.id.open_setting);
Switch switch_id = view.findViewById(R.id.switch_id);
ImageView iv_close = view.findViewById(R.id.iv_close);
// Switch switch_id = view.findViewById(R.id.switch_id);
iv_close.setOnClickListener(v->{
if (openSettingClickListener != null) {
if (openSettingClickListener != null) {
openSettingClickListener.onCloseSettingClick();
}
}
});
open_setting.setOnClickListener(v -> {
if (openSettingClickListener != null) {
openSettingClickListener.onOpenSettingClick(switch_id.isChecked());
openSettingClickListener.onOpenSettingClick();
}
});
return view;
}
@Override
public void onPause() {
super.onPause();
dismiss();
}
@Override
public void onDestroy() {
super.onDestroy();
dismiss();
}
@NonNull
......@@ -77,3 +83,4 @@ public class CustomBottomSheetDialog extends BottomSheetDialogFragment {
return dialog;
}
}
......@@ -4,18 +4,25 @@ import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.graphics.Color;
import android.widget.FrameLayout;
import androidx.appcompat.widget.AppCompatButton;
import androidx.cardview.widget.CardView;
import androidx.core.content.ContextCompat;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.admob.NativeView;
import com.swiftcleaner.chovey.view.activity.EndCleanJunkActivity;
import java.lang.ref.WeakReference;
public class CustomScoreDialog extends Dialog {
private Activity activity;
private WeakReference<Activity> weakActivity;
private OnDialogClickListener listener;
private boolean isDialogDestroyed = false;
public interface OnDialogClickListener {
void onCancel();
......@@ -23,44 +30,48 @@ public class CustomScoreDialog extends Dialog {
void onSubmit();
}
public CustomScoreDialog(Activity activity) {
super(activity, R.style.TransparentDialogTheme);
this.activity = activity;
this.weakActivity = new WeakReference<>(activity);
setContentView(R.layout.dialog_function_exit_item);
AppCompatButton dialog_cancel = findViewById(R.id.dialog_cancel);
AppCompatButton dialog_ok = findViewById(R.id.dialog_ok);
CardView cardView = findViewById(R.id.cardview);
cardView.setCardBackgroundColor(Color.TRANSPARENT);
cardView.setCardBackgroundColor(ContextCompat.getColor(getContext(), android.R.color.transparent));
NativeView nativeView = findViewById(R.id.fl_ad);
AdmobManager.INSTANCE.showNativeAd(activity, (nativeAd) -> {
nativeView.removeAllViews();
nativeView.setNativeAd(nativeAd, R.layout.layout_ad_native);
return null;
}, null, null);
FrameLayout nativeView = findViewById(R.id.fl_ad);
if (!isDialogDestroyed){
AdmobHelps.INSTANCE.showNativeAd(activity,nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
dialog_cancel.setOnClickListener(v -> {
if (listener != null) {
listener.onCancel();
activity.runOnUiThread(() -> listener.onCancel());
}
dismiss();
});
dialog_ok.setOnClickListener(v -> {
if (listener != null) {
listener.onSubmit();
activity.runOnUiThread(() -> listener.onSubmit());
}
dismiss();
});
setCanceledOnTouchOutside(false);
}
@Override
public void dismiss() {
isDialogDestroyed = true;
super.dismiss();
}
public void show() {
super.show();
Activity activity = weakActivity.get();
if (activity != null && !activity.isFinishing() && !activity.isDestroyed()) {
super.show();
}
}
public void setOnDialogClickListener(OnDialogClickListener listener) {
......
......@@ -66,25 +66,32 @@ public class FullscreenDialog {
cl_fullscreen.setOnClickListener(v -> handleButtonClick());
lottieView = dialog.findViewById(R.id.lottie_animattion_view1);
lottieView.setAnimation(R.raw.cleaner_junk_found_animation); // 替换为你的动画文件名
lottieView.playAnimation(); // 开始播放动画
if (lottieView!=null){
lottieView.setAnimation(R.raw.cleaner_junk_found_animation); // 替换为你的动画文件名
lottieView.playAnimation(); // 开始播放动画
}
// 显示Dialog
dialog.show();
}
public void dismiss() {
if (dialog != null && dialog.isShowing()) {
dialog.setOnDismissListener(null); // 移除监听器,避免重复调用
dialog.setOnCancelListener(null); // 移除取消监听器
dialog.dismiss();
if (dialog!= null && dialog.isShowing()) {
// 移除监听器,避免重复调用
dialog.setOnDismissListener(null);
dialog.setOnCancelListener(null);
if (lottieView != null) {
if (lottieView!= null) {
lottieView.cancelAnimation(); // 停止动画
lottieView.clearAnimation(); // 清除动画
lottieView.setImageDrawable(null); // 清除图像
lottieView.destroyDrawingCache(); // 销毁缓存
}
dialog.dismiss();
dialog = null; // 释放dialog引用
}
}
......
......@@ -11,10 +11,13 @@ import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.admob.NativeView;
import com.swiftcleaner.chovey.view.MainActivity;
import com.swiftcleaner.chovey.view.activity.GuideActivity;
......@@ -23,14 +26,14 @@ import io.reactivex.rxjava3.annotations.Nullable;
public class GuideEndFragment extends Fragment {
private AppCompatButton buttonNext;
private TextView skipId;
private FrameLayout nativeView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_guide_end, container, false);
buttonNext = view.findViewById(R.id.end_button);
// skipId = view.findViewById(R.id.skip_id);
nativeView = view.findViewById(R.id.fl_ad);
buttonNext.setOnClickListener(v -> {
// 通知Activity切换到下一个页面
......@@ -39,41 +42,19 @@ public class GuideEndFragment extends Fragment {
}
});
// skipId.setOnClickListener(v -> {
// if (AdmobManager.INSTANCE.isShowAdInterGuide()){
// AdmobManager.INSTANCE.showInterstitialAd(requireActivity(),
// () -> {
// startIntent();
// Log.d("isShowAdInterGuide","Ad loading failed");
// return null;
// },
// () -> {
// Log.d("isShowAdInterGuide","Advertisement loaded successfully");
// return null;
// },
// () -> {
// Log.d("isShowAdInterGuide","Ad loading ends");
// startIntent();
// return null;
// }, false);
// }else {
// startIntent();
// Log.d("isShowAdInterGuide",AdmobManager.INSTANCE.isShowAdInterGuide()+"Close Advertisement");
// }
// });
return view;
}
private void startIntent() {
startActivity(new Intent(requireActivity(), MainActivity.class));
requireActivity().finish();
@Override
public void onResume() {
super.onResume();
Log.d("showNativeAd","111");
AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
@Override
public void onDestroyView() {
super.onDestroyView();
buttonNext = null;
skipId = null;
}
}
\ No newline at end of file
......@@ -11,8 +11,10 @@ import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.admob.NativeView;
......@@ -25,14 +27,13 @@ import io.reactivex.rxjava3.annotations.Nullable;
public class GuideOneFragment extends Fragment {
private AppCompatButton buttonNext;
private TextView skipId;
private FrameLayout nativeView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_guide_one, container, false);
buttonNext = view.findViewById(R.id.one_button);
skipId = view.findViewById(R.id.skip_id);
nativeView = view.findViewById(R.id.fl_ad);
buttonNext.setOnClickListener(v -> {
// 通知Activity切换到下一个页面
......@@ -41,40 +42,19 @@ public class GuideOneFragment extends Fragment {
}
});
skipId.setOnClickListener(v -> {
if (AdmobManager.INSTANCE.isShowAdInterGuide()){
AdmobManager.INSTANCE.showInterstitialAd(requireActivity(),
() -> {
startIntent();
Log.d("isShowAdInterGuide","Ad loading failed");
return null;
},
() -> {
Log.d("isShowAdInterGuide","Advertisement loaded successfully");
return null;
},
() -> {
Log.d("isShowAdInterGuide","Ad loading ends");
startIntent();
return null;
}, false);
}else {
startIntent();
Log.d("isShowAdInterGuide",AdmobManager.INSTANCE.isShowAdInterGuide()+"Close Advertisement");
}
});
return view;
}
private void startIntent(){
startActivity(new Intent(requireActivity(), MainActivity.class));
requireActivity().finish();
@Override
public void onResume() {
super.onResume();
Log.d("showNativeAd","111");
AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
@Override
public void onDestroyView() {
super.onDestroyView();
buttonNext = null;
skipId = null;
}
}
\ No newline at end of file
......@@ -11,10 +11,13 @@ import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.admob.NativeView;
import com.swiftcleaner.chovey.view.MainActivity;
import com.swiftcleaner.chovey.view.activity.GuideActivity;
......@@ -23,14 +26,14 @@ import io.reactivex.rxjava3.annotations.Nullable;
public class GuideThreeFragment extends Fragment {
private AppCompatButton buttonNext;
private TextView skipId;
private FrameLayout nativeView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_guide_three, container, false);
buttonNext = view.findViewById(R.id.three_button);
skipId = view.findViewById(R.id.skip_id);
nativeView = view.findViewById(R.id.fl_ad);
buttonNext.setOnClickListener(v -> {
// 通知Activity切换到下一个页面
......@@ -39,39 +42,19 @@ public class GuideThreeFragment extends Fragment {
}
});
skipId.setOnClickListener(v -> {
if (AdmobManager.INSTANCE.isShowAdInterGuide()){
AdmobManager.INSTANCE.showInterstitialAd(requireActivity(),
() -> {
startIntent();
Log.d("isShowAdInterGuide","Ad loading failed");
return null;
},
() -> {
Log.d("isShowAdInterGuide","Advertisement loaded successfully");
return null;
},
() -> {
Log.d("isShowAdInterGuide","Ad loading ends");
startIntent();
return null;
}, false);
}else {
startIntent();
Log.d("isShowAdInterGuide",AdmobManager.INSTANCE.isShowAdInterGuide()+"Close Advertisement");
}
});
return view;
}
private void startIntent(){
startActivity(new Intent(requireActivity(), MainActivity.class));
requireActivity().finish();
@Override
public void onResume() {
super.onResume();
Log.d("showNativeAd","111");
AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
@Override
public void onDestroyView() {
super.onDestroyView();
buttonNext = null;
skipId = null;
}
}
\ No newline at end of file
......@@ -11,10 +11,13 @@ import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.clean.file.b.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.admob.NativeView;
import com.swiftcleaner.chovey.view.MainActivity;
import com.swiftcleaner.chovey.view.activity.GuideActivity;
......@@ -23,14 +26,15 @@ import io.reactivex.rxjava3.annotations.Nullable;
public class GuideTwoFragment extends Fragment {
private AppCompatButton buttonNext;
private TextView skipId;
private FrameLayout nativeView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_guide_two, container, false);
buttonNext = view.findViewById(R.id.two_button);
skipId = view.findViewById(R.id.skip_id);
nativeView = view.findViewById(R.id.fl_ad);
buttonNext.setOnClickListener(v -> {
// 通知Activity切换到下一个页面
......@@ -38,41 +42,19 @@ public class GuideTwoFragment extends Fragment {
((GuideActivity) getActivity()).nextPage();
}
});
skipId.setOnClickListener(v -> {
if (AdmobManager.INSTANCE.isShowAdInterGuide()){
AdmobManager.INSTANCE.showInterstitialAd(requireActivity(),
() -> {
startIntent();
Log.d("isShowAdInterGuide","Ad loading failed");
return null;
},
() -> {
Log.d("isShowAdInterGuide","Advertisement loaded successfully");
return null;
},
() -> {
Log.d("isShowAdInterGuide","Ad loading ends");
startIntent();
return null;
}, false);
}else {
startIntent();
Log.d("isShowAdInterGuide",AdmobManager.INSTANCE.isShowAdInterGuide()+"Close Advertisement");
}
});
return view;
}
private void startIntent(){
startActivity(new Intent(requireActivity(), MainActivity.class));
requireActivity().finish();
@Override
public void onResume() {
super.onResume();
Log.d("showNativeAd","111");
AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
@Override
public void onDestroyView() {
super.onDestroyView();
buttonNext = null;
skipId = null;
}
}
\ No newline at end of file
......@@ -6,6 +6,7 @@ import android.content.Intent
import android.graphics.Bitmap
import android.net.Uri
import android.net.http.SslError
import android.util.Log
import android.view.View
import android.webkit.CookieManager
import android.webkit.JsResult
......@@ -21,6 +22,10 @@ import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.activity.OnBackPressedCallback
import androidx.lifecycle.lifecycleScope
import com.clean.file.b.business.newAdmob.AdmobHelps
import com.clean.file.b.business.newAdmob.AdmobHelps.isShowAdNativeBottom
import com.clean.file.b.business.newAdmob.AdmobHelps.showInterstitialAd
import com.clean.file.b.business.newAdmob.AdmobHelps.showNativeAd
import com.google.android.gms.ads.nativead.NativeAd
import com.swiftcleaner.chovey.R
import com.swiftcleaner.chovey.business.admob.AdmobManager
......@@ -40,11 +45,13 @@ class WebBrowserActivity : BaseActivityKotlin<ActivityWebBrowserBinding>() {
override fun initView() {
initWebSettings()
binding.webView.loadUrl("https://www.horoscope.com/us/index.aspx")
AdmobManager.showNativeAd(this@WebBrowserActivity, { nativeAd: NativeAd? ->
binding.idFlNative.removeAllViews()
nativeAd?.let { binding.idFlNative.setNativeAd(it, R.layout.layout_ad_native) }
null
}, null, null)
showNativeAd(
this,
binding.flAd,
R.layout.layout_ad_native_small,
isShowAdNativeBottom(),
false
)
}
override fun initListener() {
......@@ -63,17 +70,27 @@ class WebBrowserActivity : BaseActivityKotlin<ActivityWebBrowserBinding>() {
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
val activity: Activity = this@WebBrowserActivity
if (AdmobManager.isShowAdBackInter()) {
AdmobManager.showInterstitialAd(
this@WebBrowserActivity, {
if (AdmobHelps.isShowAdBackInter()) {
showInterstitialAd(
this@WebBrowserActivity,
{
FinishMain.finishToMain(activity)
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.")
null
},
{
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.")
null
},
{ null },
{
FinishMain.finishToMain(activity)
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.")
null
}, false
},
false
)
} else {
FinishMain.finishToMain(activity)
......
......@@ -3,15 +3,16 @@ package com.swiftcleaner.chovey.view.function.constellation
import android.animation.ValueAnimator
import android.content.Intent
import android.graphics.Color
import android.util.Log
import android.view.animation.LinearInterpolator
import android.widget.Toast
import androidx.activity.OnBackPressedCallback
import androidx.lifecycle.lifecycleScope
import com.google.android.gms.ads.nativead.NativeAd
import com.clean.file.b.business.newAdmob.AdmobHelps
import com.clean.file.b.business.newAdmob.AdmobHelps.isShowAdNativeBottom
import com.clean.file.b.business.newAdmob.AdmobHelps.showInterstitialAd
import com.clean.file.b.business.newAdmob.AdmobHelps.showNativeAd
import com.swiftcleaner.chovey.R
import com.swiftcleaner.chovey.business.admob.AdmobManager
import com.swiftcleaner.chovey.business.admob.AdmobManager.isShowAdInter
import com.swiftcleaner.chovey.business.admob.AdmobManager.showInterstitialAd
import com.swiftcleaner.chovey.databinding.ActivityXzLoadingBinding
import com.swiftcleaner.chovey.view.BaseActivityKotlin
import kotlinx.coroutines.Dispatchers
......@@ -24,11 +25,13 @@ class XzLoadingActivity : BaseActivityKotlin<ActivityXzLoadingBinding>() {
}
override fun initView() {
AdmobManager.showNativeAd(this@XzLoadingActivity, { nativeAd: NativeAd? ->
binding.idFlNative.removeAllViews()
nativeAd?.let { binding.idFlNative.setNativeAd(it, R.layout.layout_ad_native) }
null
}, null, null)
showNativeAd(
this,
binding.flAd,
R.layout.layout_ad_native_small,
isShowAdNativeBottom(),
false
)
BarUtils.setStatusBarLightMode(this, false)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
......@@ -67,20 +70,27 @@ class XzLoadingActivity : BaseActivityKotlin<ActivityXzLoadingBinding>() {
private fun playAnimal() {
lifecycleScope.launch(Dispatchers.Main) {
binding.root.postDelayed({
if (isShowAdInter()) {
if (AdmobHelps.isShowAdInter()) {
showInterstitialAd(
this@XzLoadingActivity,
{
startIntent()
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.")
null
},
{
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.")
null
},
{
startIntent()
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.")
null
}, false
},
false
)
} else {
startIntent()
......
package com.swiftcleaner.chovey.view.function.weather
import android.util.Base64
import com.swiftcleaner.chovey.GlobalConfig
import java.security.SecureRandom
import javax.crypto.Cipher
import javax.crypto.spec.GCMParameterSpec
......@@ -8,7 +9,7 @@ import javax.crypto.spec.SecretKeySpec
object AESHelper {
private const val aesKey = "j2xlm90mibmbpekw"
private const val aesKey = GlobalConfig.KEY_AES
private val cipher by lazy {
Cipher.getInstance("AES/GCM/NoPadding")
......
......@@ -4,6 +4,7 @@ import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.app.Activity
import android.graphics.Color
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
......@@ -14,13 +15,12 @@ import androidx.activity.OnBackPressedCallback
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.recyclerview.widget.RecyclerView
import com.clean.file.b.business.newAdmob.AdmobHelps
import com.clean.file.b.business.newAdmob.AdmobHelps.isShowAdNativeBottom
import com.google.android.gms.ads.nativead.NativeAd
import com.swiftcleaner.chovey.R
import com.swiftcleaner.chovey.business.admob.AdmobManager.isShowAdBackInter
import com.swiftcleaner.chovey.business.admob.AdmobManager.isShowAdInter
import com.swiftcleaner.chovey.business.admob.AdmobManager.showInterstitialAd
import com.swiftcleaner.chovey.business.admob.AdmobManager.showNativeAd
import com.swiftcleaner.chovey.databinding.ActivityWeatherInterfaceBinding
import com.swiftcleaner.chovey.model.util.FinishMain
import com.swiftcleaner.chovey.model.util.FinishMain.finishToMain
import com.swiftcleaner.chovey.view.BaseActivityKotlin
import com.swiftcleaner.chovey.view.dialog.CustomScoreDialog
......@@ -37,16 +37,13 @@ class WeatherInterface : BaseActivityKotlin<ActivityWeatherInterfaceBinding>() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.idBack.updatePadding(top = BarUtils.getStatusBarHeight())
getData()
showNativeAd(this@WeatherInterface, { nativeAd: NativeAd? ->
binding.idFlNative.removeAllViews()
nativeAd?.let { binding.idFlNative.setNativeAd(it, R.layout.layout_ad_native) }
null
}, null, null)
showNativeAd(this@WeatherInterface, { nativeAd: NativeAd? ->
binding.idFlAd.removeAllViews()
nativeAd?.let { binding.idFlAd.setNativeAd(it, R.layout.layout_ad_native) }
null
}, null, null)
AdmobHelps.showNativeAd(
this,
binding.flAd,
R.layout.layout_ad_native_small,
isShowAdNativeBottom(),
false
)
}
override fun initListener() {
......@@ -70,16 +67,27 @@ class WeatherInterface : BaseActivityKotlin<ActivityWeatherInterfaceBinding>() {
}
override fun onSubmit() {
if (isShowAdBackInter()) {
showInterstitialAd(this@WeatherInterface, {
finishToMain(activity)
null
},
{ null },
if (AdmobHelps.isShowAdBackInter()) {
AdmobHelps.showInterstitialAd(
this@WeatherInterface,
{
finishToMain(activity)
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.")
null
},
{
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.")
null
},
{
finishToMain(activity)
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.")
null
}, false
},
false
)
} else {
finishToMain(activity)
......@@ -97,20 +105,27 @@ class WeatherInterface : BaseActivityKotlin<ActivityWeatherInterfaceBinding>() {
WeatherUtils.requestWeatherData()
}
binding.root.postDelayed({
if (isShowAdInter()) {
showInterstitialAd(
this@WeatherInterface,
if (AdmobHelps.isShowAdInter()) {
AdmobHelps.showInterstitialAd(
this,
{
binding.idFlLoading.isVisible = false
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.")
null
},
{
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.")
null
},
{
binding.idFlLoading.isVisible = false
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.")
null
}, false
},
false
)
} else {
binding.idFlLoading.isVisible = false
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment