Commit 23411b6c authored by wanghai's avatar wanghai

广告合规修改

parent 07222529
......@@ -19,6 +19,7 @@ android {
versionCode = 21
versionName = "2.1"
testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"
setProperty("archivesBaseName", "AntiVirus-Cleaner-Junk-V${versionName}")
}
// 添加签名配置
signingConfigs {
......@@ -126,4 +127,5 @@ dependencies {
implementation ("com.facebook.shimmer:shimmer:0.5.0")
implementation(files("../app/libs/linkplayad_v1.0.0-release.aar"))
}
\ No newline at end of file
......@@ -39,7 +39,7 @@
android:theme="@style/Theme.SwiftCleanerPhoneHelper"
tools:targetApi="31">
<activity
android:name=".view.activity.ClooseFunActivity"
android:name=".view.activity.WhichWantGuideActivity"
android:exported="false" />
<activity
android:name=".view.activity.AnimatorActivity"
......
......@@ -5,7 +5,6 @@ import android.app.AlarmManager
import android.app.Application
import android.app.PendingIntent
import android.app.job.JobService
import android.content.Context
import android.content.Intent
import android.content.SharedPreferences
import android.os.Bundle
......@@ -16,7 +15,6 @@ import androidx.work.NetworkType
import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkManager
import com.bumptech.glide.Glide
import com.link.play.ad.LinkPlaySdk
import com.reyun.solar.engine.OnAttributionListener
import com.reyun.solar.engine.SolarEngineConfig
import com.reyun.solar.engine.SolarEngineManager
......@@ -25,12 +23,8 @@ import com.swiftcleaner.chovey.GlobalConfig.KEY_INIT
import com.swiftcleaner.chovey.GlobalConfig.KEY_INSTALL_TIME
import com.swiftcleaner.chovey.GlobalConfig.KEY_SOLAR
import com.swiftcleaner.chovey.GlobalConfig.KEY_UUID
import com.swiftcleaner.chovey.business.BlacklistUtils
import com.swiftcleaner.chovey.business.DeviceUtils
import com.swiftcleaner.chovey.business.EventUtils
import com.swiftcleaner.chovey.business.InstallReferrerUtils
import com.swiftcleaner.chovey.business.admob.AdmobManager
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps
import com.swiftcleaner.chovey.business.push.Alarm2Receiver
import com.swiftcleaner.chovey.business.push.AlarmReceiver
import com.swiftcleaner.chovey.business.push.FirebaseUtils
......@@ -40,9 +34,7 @@ import com.swiftcleaner.chovey.business.push.PackageReceiver
import com.swiftcleaner.chovey.business.push.UnlockReceiver
import com.swiftcleaner.chovey.util.SPUtils
import com.swiftcleaner.chovey.view.activity.StartActivity
import com.tool.elite.battery.business.push.BadgeUtils
import com.swiftcleaner.chovey.view.function.constellation.ActivityManagerUtils
import com.swiftcleaner.chovey.view.function.weather.WeatherUtils
import org.json.JSONObject
import java.util.Calendar
import java.util.UUID
......@@ -66,7 +58,7 @@ class CleanApplication : Application() {
override fun onCreate() {
super.onCreate()
context = this
WeatherUtils.requestWeatherData()
DeviceUtils.init()
registerActivityLifecycle()
......@@ -79,12 +71,6 @@ class CleanApplication : Application() {
if (SPUtils.getInstance().getBoolean(KEY_INIT)) init()
Thread { Glide.get(this).clearDiskCache() }.start()
//日志
LinkPlaySdk.isDebug(true)
//接口配置
// LinkPlaySdk.init(this,GlobalConfig.URL_API,GlobalConfig.PACKAGE_NAME,GlobalConfig.KEY_AES)
LinkPlaySdk.init(this,"https://feedapihk.zhangxinhulian.com","com.unamzo.pdfreader.badcc","1qd6f41dgpjsep9t")
guideSharedPreferences = getSharedPreferences("ButtonSP", MODE_PRIVATE)
}
......@@ -93,9 +79,6 @@ class CleanApplication : Application() {
}
private fun init() {
startNotification()
InstallReferrerUtils.init()
// BlacklistUtils.requestBlacklist { AdmobManager.blacklist = it }
BlacklistUtils.requestBlacklist { AdmobHelps.blacklist = it }
initSolar()
initFirebase()
initAlarm(1, 1800000, AlarmReceiver::class.java)
......
......@@ -39,7 +39,7 @@ object GlobalConfig {
const val KEY_SOLAR = "17697786c4fcd7e9"
/* 以下测试广告id*/
// // admob广告位id
inline val ID_ADMOB_OPEN get() = "/6499/example/app-open"
inline val ID_ADMOB_OPEN get() = "ca-app-pub-3940256099942544/9257395921"
inline val ID_ADMOB_INTER get() = "ca-app-pub-3940256099942544/1033173712"
inline val ID_ADMOB_NATIVE get() = "ca-app-pub-3940256099942544/2247696110"
inline val ID_ADMOB_BANNER get() = "ca-app-pub-3940256099942544/9214589741"
......@@ -96,6 +96,8 @@ object GlobalConfig {
const val KEY_DEVICE_NAME = "key_device_name"
const val KEY_REFERRER = "referrer"
const val KEY_MALWARE_SCAN = "malware_scan_agree"
const val KEY_GET_CONFIG = "getConfigInterval"
const val KEY_BLACKLIST = "blacklist"
const val ID_CLEAN_JUNK = 12000
const val ID_BATTERY_INFO = 12020
......@@ -126,4 +128,12 @@ object GlobalConfig {
get() = SPUtils.getInstance().getBoolean(KEY_MALWARE_SCAN)
set(value) = SPUtils.getInstance().putBoolean(KEY_MALWARE_SCAN, value)
inline var useAdmob
get() = SPUtils.getInstance().getInt(KEY_AD, 1)
set(value) = SPUtils.getInstance().putInt(KEY_AD, value)
inline var blacklist
get() = SPUtils.getInstance().getInt(KEY_BLACKLIST, 1)
set(value) = SPUtils.getInstance().put(KEY_BLACKLIST, value)
}
\ No newline at end of file
package com.swiftcleaner.chovey.business
import com.swiftcleaner.chovey.util.SPUtils
import kotlin.random.Random
object AdIntervalTimeUtils {
// 间隔逻辑字段 start---------
const val INTERVAL_AD_SHOWED_COUNT = "intervalAdShowedCount" // 插屏的展示次数
const val LAST_OPEN_SHOWED_ON_HIDDEN_TIME = "lastOpenShowedOnHiddenTime" // 开屏广告最后一次展示的时间(关闭的时候)
const val LAST_INTER_SHOWED_ON_HIDDEN_TIME = "lastInterShowedOnHiddenTime" // 插屏广告最后一次展示的时间(关闭的时候)
const val LAST_NATIVE_SHOWED_ON_HIDDEN_TIME = "lastNativeShowedOnHiddenTime" // 原生广告最后一次展示的时间(展示的时候)
fun updateOpenTime(){
SPUtils.getInstance().putLong(LAST_OPEN_SHOWED_ON_HIDDEN_TIME, System.currentTimeMillis())
}
// 开屏广告是否在间隔时间内(true 是)
fun isAdIntervalOpen(): Boolean{
// 广告间隔时间
val adIntervalOpen = SPUtils.getInstance().getInt("adIntervalOpen", 20)
val lastShowTime = SPUtils.getInstance().getLong(LAST_OPEN_SHOWED_ON_HIDDEN_TIME, 0L)
if (lastShowTime != 0L && (System.currentTimeMillis() - lastShowTime) < adIntervalOpen * 1000){
return true
}
return false
}
private fun updateInterstitialCount(){
val adShowCount = SPUtils.getInstance().getInt(INTERVAL_AD_SHOWED_COUNT, 0)
if (adShowCount < 5) { //只记录前5次,多了没有意义
SPUtils.getInstance().putInt(INTERVAL_AD_SHOWED_COUNT, adShowCount + 1)
}
}
fun updateInterstitialTime(){
SPUtils.getInstance().putLong(LAST_INTER_SHOWED_ON_HIDDEN_TIME, System.currentTimeMillis())
updateInterstitialCount()
}
// 插屏广告是否在间隔时间内(true 是)
fun isAdIntervalInterstitial(): Boolean{
val adIntervalStart = SPUtils.getInstance().getInt("adIntervalStart", 40)
val adIntervalEnd = SPUtils.getInstance().getInt("adIntervalEnd", 70)
val lastShowTime = SPUtils.getInstance().getLong(LAST_INTER_SHOWED_ON_HIDDEN_TIME, 0L)
// 第二次展示固定30秒的间隔
if (SPUtils.getInstance().getInt(INTERVAL_AD_SHOWED_COUNT, 0) == 1){
if ((System.currentTimeMillis() - lastShowTime) < 30 * 1000) {
EventUtils.event("ad_interval")
return true
}
} else {
if (adIntervalEnd > adIntervalStart){
val time = Random.nextInt(adIntervalStart, adIntervalEnd) * 1000
if ((System.currentTimeMillis() - lastShowTime) < time && lastShowTime != 0L) {
EventUtils.event("ad_interval")
return true
}
}
}
return false
}
// 获取原生广告间隔时间
fun getNativeIntervalTime(): Int{
return SPUtils.getInstance().getInt("adIntervalNative", 0)
}
fun updateNativeTime(){
SPUtils.getInstance().putLong(LAST_NATIVE_SHOWED_ON_HIDDEN_TIME, System.currentTimeMillis())
}
// 开屏广告是否在间隔时间内(true 是)
fun isAdIntervalNative(): Boolean{
val lastShowTime = SPUtils.getInstance().getLong(LAST_NATIVE_SHOWED_ON_HIDDEN_TIME, 0L)
val adIntervalNative = getNativeIntervalTime()
if (lastShowTime != 0L && (System.currentTimeMillis() - lastShowTime) < adIntervalNative * 1000){
return true
}
return false
}
// 间隔逻辑字段 end------------
}
\ No newline at end of file
package com.swiftcleaner.chovey.business
import com.swiftcleaner.chovey.util.SPUtils
import java.text.SimpleDateFormat
import java.util.Calendar
import java.util.Locale
object AdMaxCountUtils {
// 本地字段
private const val LAST_USE_DATE_KEY = "lastUseDateKey"
private const val OPEN_AD_COUNT_KEY = "openAdCountKey"
private const val INTER_AD_COUNT_KEY = "interAdCountKey"
private const val NATIVE_AD_COUNT_KEY = "nativeAdCountKey"
private var lastUseDate = ""
private var currentUseDate = getCurrentDate()
private var openAdCount = SPUtils.getInstance().getInt(OPEN_AD_COUNT_KEY, 0)
private var openAdMaxCount = SPUtils.getInstance().getInt("openadShow", 10) // 配置字段,开屏展示最大值
private var interAdCount = SPUtils.getInstance().getInt(INTER_AD_COUNT_KEY, 0)
private var interAdMaxCount = SPUtils.getInstance().getInt("interadShow", 10) // 配置字段,插屏展示最大值
private var nativeAdCount = SPUtils.getInstance().getInt(NATIVE_AD_COUNT_KEY, 0)
private var nativeAdMaxCount = SPUtils.getInstance().getInt("nativeadShow", 20) // 配置字段,原生展示最大值
init {
if (lastUseDate.isEmpty()) {
lastUseDate = SPUtils.getInstance().getString(LAST_USE_DATE_KEY, "")
}
if (lastUseDate != currentUseDate){ //不是同一天,初始化值
lastUseDate = currentUseDate
SPUtils.getInstance().putString(LAST_USE_DATE_KEY, currentUseDate)
openAdCount = 0
interAdCount = 0
nativeAdCount = 0
SPUtils.getInstance().putInt(OPEN_AD_COUNT_KEY, 0)
SPUtils.getInstance().putInt(INTER_AD_COUNT_KEY, 0)
SPUtils.getInstance().putInt(NATIVE_AD_COUNT_KEY, 0)
}
}
fun isOpenAdCountMax(): Boolean{
return openAdCount >= openAdMaxCount
}
//增加开屏次数
fun addOpenAdCount() {
openAdCount++
SPUtils.getInstance().putInt(OPEN_AD_COUNT_KEY, openAdCount)
}
fun isInterAdCountMax(): Boolean{
return interAdCount >= interAdMaxCount
}
//增加插屏屏次数
fun addInterAdCount() {
interAdCount++
SPUtils.getInstance().putInt(INTER_AD_COUNT_KEY, interAdCount)
}
fun isNativeAdCountMax(): Boolean{
return nativeAdCount >= nativeAdMaxCount
}
//增加原生次数
fun addNativeAdCount() {
nativeAdCount++
SPUtils.getInstance().putInt(NATIVE_AD_COUNT_KEY, nativeAdCount)
}
private fun getCurrentDate(): String {
val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
val currentDate = Calendar.getInstance().time
return dateFormat.format(currentDate)
}
}
\ No newline at end of file
package com.swiftcleaner.chovey.business
import android.util.Log
import com.swiftcleaner.chovey.BuildConfig
import com.swiftcleaner.chovey.GlobalConfig
import com.swiftcleaner.chovey.GlobalConfig.PACKAGE_NAME
import com.swiftcleaner.chovey.GlobalConfig.URL_API
import com.swiftcleaner.chovey.util.SPUtils
import okhttp3.Call
import okhttp3.Callback
import okhttp3.MediaType.Companion.toMediaTypeOrNull
......@@ -21,8 +24,15 @@ object BlacklistUtils {
url.append("?pkg=${PACKAGE_NAME}")
url.toString()
}
private inline var updateBlacklistTime
get() = SPUtils.getInstance().getLong("updateBlacklistTimeKey")
set(value) = SPUtils.getInstance().putLong("updateBlacklistTimeKey", value)
fun requestBlacklist(block: (Int) -> Unit) {
fun requestBlacklist() {
if (!ConfigIntervalTimeUtils.isConfigIntervalPass(updateBlacklistTime)){
return
}
Log.e("ConfigInterval", "requestBlacklist")
val data = JSONObject()
.put("bp", DeviceUtils.getConfigParams())
.toString()
......@@ -46,12 +56,13 @@ object BlacklistUtils {
override fun onResponse(call: Call, response: Response) {
response.body?.string()?.let {
updateBlacklistTime = System.currentTimeMillis()
val result = Regex("\"data\":\"(.*?)\"").find(it)
if (result != null && result.toString() != "null") {
result.groupValues[1].let {
val str = AESUtils.decrypt(it)
val blacklist = if (str == "true") 0 else 1
block.invoke(blacklist)
GlobalConfig.blacklist = blacklist
}
}
}
......
package com.swiftcleaner.chovey.business
import android.app.Activity
import android.util.Log
import com.link.play.ad.LinkPlaySdk
import com.swiftcleaner.chovey.BuildConfig
import com.swiftcleaner.chovey.GlobalConfig
import com.swiftcleaner.chovey.util.SPUtils
object ConfigIntervalTimeUtils {
// true 超过配置的时间
fun isConfigIntervalPass(lastTime: Long): Boolean{
val intervalLimit = SPUtils.getInstance().getInt(GlobalConfig.KEY_GET_CONFIG, 4)
val interval = System.currentTimeMillis() - lastTime
return interval >= intervalLimit * 60 * 60 * 1000
}
private const val KEY_LAST_LINK_PLAY_TIME = "key_last_link_play_time"
private inline var updateLinkTime
get() = SPUtils.getInstance().getLong(KEY_LAST_LINK_PLAY_TIME, 0L)
set(value) = SPUtils.getInstance().putLong(KEY_LAST_LINK_PLAY_TIME, value)
fun initLinkPlaySdk(activity: Activity){
if (!ConfigIntervalTimeUtils.isConfigIntervalPass(updateLinkTime)){
return
}
Log.e("ConfigInterval", "initLinkPlaySdk")
//日志
// LinkPlaySdk.isDebug(true)
//接口配置
// LinkPlaySdk.init(this,GlobalConfig.URL_API,GlobalConfig.PACKAGE_NAME,GlobalConfig.KEY_AES)
// LinkPlaySdk.init(this,"https://feedapihk.zhangxinhulian.com","com.unamzo.pdfreader.badcc","1qd6f41dgpjsep9t")
// 引流
LinkPlaySdk.init(
activity, if (BuildConfig.DEBUG) {
"https://feedapihk.zhangxinhulian.com"
} else {
GlobalConfig.URL_API
}, if (BuildConfig.DEBUG) {
"com.unamzo.pdfreader.badcc"
} else {
GlobalConfig.PACKAGE_NAME
}, GlobalConfig.KEY_AES
){
if (it) updateLinkTime = System.currentTimeMillis()
}
}
}
\ No newline at end of file
......@@ -36,7 +36,20 @@ object ConfigUtils {
url.toString()
}
private const val KEY_LAST_CONFIG_TIME = "key_last_config_time"
private inline var updateTime
get() = SPUtils.getInstance().getLong(KEY_LAST_CONFIG_TIME)
set(value) = SPUtils.getInstance().putLong(KEY_LAST_CONFIG_TIME, value)
fun requestConfig(block: () -> Unit) {
//配置请求间隔默认4小时
//判断间隔时间是否到达要求
if (!ConfigIntervalTimeUtils.isConfigIntervalPass(updateTime)){
block.invoke()
return
}
Log.e("ConfigInterval", "requestConfig")
val client = OkHttpClient.Builder().apply {
if (BuildConfig.DEBUG) {
addInterceptor(HttpLoggingInterceptor().apply {
......@@ -68,6 +81,7 @@ object ConfigUtils {
SPUtils.getInstance().put(t, u)
}
block.invoke()
updateTime = System.currentTimeMillis()
val jsonObject = JSONObject()
jsonObject.put("ut", SPUtils.getInstance().getInt("ut"))
EventUtils.event("user_type", ext = jsonObject)
......
......@@ -5,6 +5,7 @@ import com.swiftcleaner.chovey.BuildConfig
import com.swiftcleaner.chovey.GlobalConfig.PACKAGE_NAME
import com.swiftcleaner.chovey.GlobalConfig.URL_EVENT
import com.swiftcleaner.chovey.GlobalConfig.isInit
import com.swiftcleaner.chovey.util.SPUtils
import okhttp3.Call
import okhttp3.Callback
import okhttp3.MediaType.Companion.toMediaTypeOrNull
......@@ -24,9 +25,38 @@ object EventUtils {
url.toString()
}
//广告事件只有这些'ad_pull', 'ad_show', 'ad_click', 'ad_price', 'ad_pull_start', 'ad_prepare_show'
private val pushAds by lazy {
arrayOf(
"ad_pull",
"ad_show",
"ad_click",
"ad_price",
"ad_pull_start",
"ad_prepare_show"
)
}
// 本地默认要开
private fun openAdPushReportSwitch(): Boolean {
return SPUtils.getInstance().getInt("ad_event_switch", 1) == 1
}
//本地默认要开
private fun openOtherPushReportSwitch(): Boolean {
return SPUtils.getInstance().getInt("other_event_switch", 1) == 1
}
fun event(action: String, value: String? = null, ext: JSONObject? = null) {
if (!isInit) return
if (pushAds.contains(action.lowercase())){
//广告上报开关
if (!openAdPushReportSwitch()) return
} else {
//非广告上报开关
if (!openOtherPushReportSwitch()) return
}
val data = JSONObject()
.put("action", action)
.put("value", value)
......
......@@ -4,7 +4,6 @@ import com.android.installreferrer.api.InstallReferrerClient
import com.android.installreferrer.api.InstallReferrerStateListener
import com.swiftcleaner.chovey.CleanApplication
import com.swiftcleaner.chovey.GlobalConfig.KEY_REFERRER
import com.swiftcleaner.chovey.business.push.NotCleanTimer
import com.swiftcleaner.chovey.business.push.PushTimer
import com.swiftcleaner.chovey.util.SPUtils
import kotlinx.coroutines.Dispatchers
......@@ -13,11 +12,19 @@ import kotlinx.coroutines.launch
import org.json.JSONObject
object InstallReferrerUtils {
private inline var installHelpsSuccess
get() = SPUtils.getInstance().getString("installHelpsSuccess", "")
set(value) = SPUtils.getInstance().putString("installHelpsSuccess", value)
fun init() {
MainScope().launch(Dispatchers.IO) {
updateInstallReferrer()
if (installHelpsSuccess.isNullOrEmpty()) {
MainScope().launch(Dispatchers.IO) {
updateInstallReferrer()
}
} else {
getHttpConfig()
}
}
private fun updateInstallReferrer() {
......@@ -27,6 +34,7 @@ object InstallReferrerUtils {
try {
when (responseCode) {
InstallReferrerClient.InstallReferrerResponse.OK -> {
installHelpsSuccess = "success"
val response = referrerClient.installReferrer
val installInfo = response.installReferrer
val obj = JSONObject()
......
......@@ -98,16 +98,16 @@ object AdmobManager {
private var lastShowTime: Long = 0
var blacklist = 1
private var blacklist = 1
private var showTime
get() = SPUtils.getInstance()
.getLong(KEY_LAST_DISPLAY_TIME)
set(value) = SPUtils.getInstance().putLong(KEY_LAST_DISPLAY_TIME, value)
inline var useAdmob
get() = SPUtils.getInstance().getBoolean("sAd", true)
set(value) = SPUtils.getInstance().putBoolean("sAd", value)
private inline var useAdmob
get() = SPUtils.getInstance().getBoolean("sAds", true)
set(value) = SPUtils.getInstance().putBoolean("sAds", value)
fun init(
......
package com.swiftcleaner.chovey.business.newAdmob
import android.animation.ObjectAnimator
import android.animation.ValueAnimator.INFINITE
import android.app.AlertDialog
import android.app.Activity
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 android.widget.TextView
import com.swiftcleaner.chovey.R
import com.swiftcleaner.chovey.databinding.DialogAdLoadingBinding
object AdDialog {
fun Context.showAdLoadingDialog(): AlertDialog {
// 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
// }
fun Activity.showAdLoadingDialog(adsContent: String = ""): Dialog? {
if (this.isFinishing && this.isDestroyed) return null
val binding = DialogAdLoadingBinding.inflate(LayoutInflater.from(this))
val dialog = AlertDialog.Builder(this).create()
dialog.setView(binding.root)
val dialog = Dialog(this)
dialog.setContentView(binding.root)
dialog.setCancelable(false)
dialog.setCanceledOnTouchOutside(false)
if (adsContent.isNotEmpty()){
dialog.findViewById<TextView>(R.id.tv_loading).text = adsContent
}
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
......@@ -40,24 +40,24 @@ class NativeView1 @JvmOverloads constructor(
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.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
(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
(adView.callToActionView as? Button?)?.text = nativeAd.callToAction
}
if (nativeAd.icon == null) {
adView.iconView?.visibility = View.GONE
} else {
(adView.iconView as ImageView?)?.setImageDrawable(
(adView.iconView as? ImageView?)?.setImageDrawable(
nativeAd.icon?.drawable
)
adView.iconView?.visibility = View.VISIBLE
......
package com.swiftcleaner.chovey.view
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import androidx.viewbinding.ViewBinding
abstract class BaseFragment<T : ViewBinding> : Fragment() {
protected abstract val binding: T
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setView()
setListener()
}
protected abstract fun setView()
protected open fun setListener() {}
}
\ No newline at end of file
......@@ -27,22 +27,18 @@ import android.provider.Settings;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.widget.Toast;
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.link.play.ad.LinkPlaySdk;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.databinding.ActivityMainBinding;
import com.swiftcleaner.chovey.databinding.DialogMalwareTipsBinding;
import com.swiftcleaner.chovey.model.tool.MemoryUtils;
import com.swiftcleaner.chovey.model.util.NetWork;
import com.swiftcleaner.chovey.model.util.PermissionUtils;
import com.swiftcleaner.chovey.view.activity.AnimatorActivity;
import com.swiftcleaner.chovey.view.activity.CleanJunkActivity;
import com.swiftcleaner.chovey.view.activity.ClooseFunActivity;
import com.swiftcleaner.chovey.view.activity.MalwareCleanActivity;
import com.swiftcleaner.chovey.view.activity.SettingActivity;
import com.swiftcleaner.chovey.view.activity.SimilarPhotosActivity;
......@@ -55,7 +51,6 @@ import com.swiftcleaner.chovey.view.function.weather.WeatherBean;
import com.swiftcleaner.chovey.view.function.weather.WeatherInterface;
import com.swiftcleaner.chovey.view.function.weather.WeatherUtils;
import org.checkerframework.checker.units.qual.A;
import java.util.Random;
import java.util.concurrent.atomic.AtomicBoolean;
......@@ -458,8 +453,6 @@ public class MainActivity extends AppCompatActivity {
fullscreenDialog.dismiss();
fullscreenDialog = null; // 释放引用
}
Log.e("isShowAdNative",AdmobManager.INSTANCE.isShowAdNative()+"");
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
if (binding.lottieAnimattionView != null) {
binding.lottieAnimattionView.resumeAnimation(); // 恢复动画
}
......@@ -467,6 +460,7 @@ public class MainActivity extends AppCompatActivity {
if (bannerShowed.get()) return;
bannerShowed.set(true);
if (AdmobHelps.INSTANCE.isShowAdBanner()){
binding.flBanner.setVisibility(View.VISIBLE);
AdmobHelps.INSTANCE.showBannerAd(this, binding.flBanner, "bottom", null, null);
}
......
......@@ -61,11 +61,11 @@ public class AnimatorActivity extends BaseActivity<ActivityAnimatorBinding> {
default:
Log.e("AnimatorActivity", "Invalid animator intent value: " + animatorIntent);
}
initPage();
initPage(animatorIntent);
}
private void initPage() {
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeAnimator(),false);
private void initPage(int animatorIntent) {
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowLoadingNative(),false);
binding.radarview.setSearching(true);
initAnimotor();
countDownTimer = new CountDownTimer(5000, 1000) {
......@@ -78,31 +78,28 @@ public class AnimatorActivity extends BaseActivity<ActivityAnimatorBinding> {
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,false
);
}else {
startInt();
}
boolean isShowAd = animatorIntent == 5 ? AdmobHelps.INSTANCE.isDeleteInterAd() : 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, isShowAd, true
);
}
}.start();
}
......
package com.swiftcleaner.chovey.view.activity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.Manifest;
import android.animation.ValueAnimator;
import android.app.Activity;
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.CountDownTimer;
import android.os.Environment;
import android.provider.Settings;
import android.util.Log;
import android.view.View;
import android.content.Intent;
import android.widget.Toast;
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.databinding.ActivityCleanJunkBinding;
import com.swiftcleaner.chovey.model.bean.CleanFileBean;
import com.swiftcleaner.chovey.model.tool.FileHelps;
......@@ -35,16 +32,12 @@ import com.swiftcleaner.chovey.model.tool.MediaHelps;
import com.swiftcleaner.chovey.model.util.AppSchedulers;
import com.swiftcleaner.chovey.model.util.FinishMain;
import com.swiftcleaner.chovey.view.BaseActivity;
import com.swiftcleaner.chovey.view.BaseActivityKotlin;
import com.swiftcleaner.chovey.view.MainActivity;
import com.swiftcleaner.chovey.view.adapter.ApkCleanAdapter;
import com.swiftcleaner.chovey.view.adapter.EmptyCleanAdapter;
import com.swiftcleaner.chovey.view.adapter.LogsCleanAdapter;
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;
......@@ -89,7 +82,7 @@ public class CleanJunkActivity extends BaseActivity<ActivityCleanJunkBinding> {
@Override
protected void onResume() {
super.onResume();
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNative(),false);
}
private void initPage() {
......@@ -595,31 +588,27 @@ public class CleanJunkActivity extends BaseActivity<ActivityCleanJunkBinding> {
@Override
public void onSubmit() {
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,false
);
}else {
FinishMain.INSTANCE.finishToMain(activity);
}
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,AdmobHelps.INSTANCE.isShowAdBackInter(), true
);
}
});
......
......@@ -4,111 +4,103 @@ import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
import com.swiftcleaner.chovey.databinding.ActivityClooseFunBinding;
import com.swiftcleaner.chovey.databinding.ActivityGuideBinding;
import com.swiftcleaner.chovey.model.util.FinishMain;
import com.swiftcleaner.chovey.view.adapter.ViewPagerAdapter;
public class ClooseFunActivity extends AppCompatActivity {
ActivityClooseFunBinding binding;
private long lastClickTime = 0; // 记录上次点击的时间
private static final long MIN_CLICK_INTERVAL = 300; // 设置最小点击间隔
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityClooseFunBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
initBar();
EventUtils.INSTANCE.event("page_ClooseFunActivity", "", null);
initView();
}
private void adMob() {
new Thread(() -> {
runOnUiThread(() -> {
AdmobHelps.INSTANCE.showNativeAd(this, binding.flAd, R.layout.layout_ad_native_small, AdmobHelps.INSTANCE.isShowAdNativeBottom(), false);
});
}).start();
}
private void handleItemClick(Runnable action) {
long currentTime = System.currentTimeMillis();
if (currentTime - lastClickTime >= MIN_CLICK_INTERVAL) {
lastClickTime = currentTime;
action.run();
}
}
private void initView() {
adMob();
binding.tvText.setOnClickListener(v->{
FinishMain.INSTANCE.finishToMain(this);
});
binding.cl1.setOnClickListener(v->{
handleItemClick(() -> {
boolean isChecked = binding.checkPhoto.isChecked();
binding.checkPhoto.setChecked(!isChecked);
if (AdmobHelps.INSTANCE.isShowAdClooseNative() && !isChecked) {
adMob();
}
});
});
binding.cl2.setOnClickListener(v->{
handleItemClick(() -> {
boolean isChecked = binding.checkVideo.isChecked();
binding.checkVideo.setChecked(!isChecked);
if (AdmobHelps.INSTANCE.isShowAdClooseNative() && !isChecked) {
adMob();
}
});
});
binding.cl3.setOnClickListener(v->{
handleItemClick(() -> {
boolean isChecked = binding.checkAudio.isChecked();
binding.checkAudio.setChecked(!isChecked);
if (AdmobHelps.INSTANCE.isShowAdClooseNative() && !isChecked) {
adMob();
}
});
});
binding.cl4.setOnClickListener(v->{
handleItemClick(() -> {
boolean isChecked = binding.checkDocument.isChecked();
binding.checkDocument.setChecked(!isChecked);
if (AdmobHelps.INSTANCE.isShowAdClooseNative() && !isChecked) {
adMob();
}
});
});
binding.tvContinue.setOnClickListener(v->{
handleItemClick(() -> {
startActivity(new Intent(this,GuideActivity.class));
finish();
});
});
}
private void initBar() {
ImmersionBar.with(this)
.transparentStatusBar() // 透明状态栏
.statusBarDarkFont(true) // 状态栏字体颜色为深色
.navigationBarDarkIcon(false) // 导航栏图标颜色为浅色
.init();
}
// ActivityClooseFunBinding binding;
// private long lastClickTime = 0; // 记录上次点击的时间
// private static final long MIN_CLICK_INTERVAL = 300; // 设置最小点击间隔
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// binding = ActivityClooseFunBinding.inflate(getLayoutInflater());
// View view = binding.getRoot();
// setContentView(view);
// initBar();
// EventUtils.INSTANCE.event("page_ClooseFunActivity", "", null);
// initView();
// }
// private void adMob() {
// new Thread(() -> {
// runOnUiThread(() -> {
// AdmobHelps.INSTANCE.showNativeAd(this, binding.flAd, R.layout.layout_ad_native_small, AdmobHelps.INSTANCE.isShowAdNative(), false);
// });
// }).start();
// }
//
// private void handleItemClick(Runnable action) {
// long currentTime = System.currentTimeMillis();
// if (currentTime - lastClickTime >= MIN_CLICK_INTERVAL) {
// lastClickTime = currentTime;
// action.run();
// }
// }
// private void initView() {
// adMob();
// binding.tvText.setOnClickListener(v->{
// FinishMain.INSTANCE.finishToMain(this);
// });
//
// binding.cl1.setOnClickListener(v->{
// handleItemClick(() -> {
// boolean isChecked = binding.checkPhoto.isChecked();
// binding.checkPhoto.setChecked(!isChecked);
// if (AdmobHelps.INSTANCE.isShowAdClooseNative() && !isChecked) {
// adMob();
// }
// });
//
// });
// binding.cl2.setOnClickListener(v->{
// handleItemClick(() -> {
// boolean isChecked = binding.checkVideo.isChecked();
// binding.checkVideo.setChecked(!isChecked);
// if (AdmobHelps.INSTANCE.isShowAdClooseNative() && !isChecked) {
// adMob();
// }
// });
//
// });
// binding.cl3.setOnClickListener(v->{
// handleItemClick(() -> {
// boolean isChecked = binding.checkAudio.isChecked();
// binding.checkAudio.setChecked(!isChecked);
// if (AdmobHelps.INSTANCE.isShowAdClooseNative() && !isChecked) {
// adMob();
// }
// });
//
// });
// binding.cl4.setOnClickListener(v->{
// handleItemClick(() -> {
// boolean isChecked = binding.checkDocument.isChecked();
// binding.checkDocument.setChecked(!isChecked);
// if (AdmobHelps.INSTANCE.isShowAdClooseNative() && !isChecked) {
// adMob();
// }
// });
//
// });
// binding.tvContinue.setOnClickListener(v->{
// handleItemClick(() -> {
// startActivity(new Intent(this, GuideActivity2.class));
// finish();
// });
//
// });
// }
// private void initBar() {
// ImmersionBar.with(this)
// .transparentStatusBar() // 透明状态栏
// .statusBarDarkFont(true) // 状态栏字体颜色为深色
// .navigationBarDarkIcon(false) // 导航栏图标颜色为浅色
// .init();
// }
}
\ No newline at end of file
package com.swiftcleaner.chovey.view.activity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.animation.ValueAnimator;
import android.content.ActivityNotFoundException;
......@@ -18,19 +12,21 @@ 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.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
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.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.databinding.ActivityCollectBinding;
import com.swiftcleaner.chovey.databinding.ActivityMainBinding;
import com.swiftcleaner.chovey.view.MainActivity;
public class CollectActivity extends AppCompatActivity {
......@@ -45,6 +41,10 @@ public class CollectActivity extends AppCompatActivity {
binding = ActivityCollectBinding.inflate(getLayoutInflater());
View view = binding.getRoot();
setContentView(view);
SharedPreferences preferences = CleanApplication.context.getGuideSharedPreferences();
SharedPreferences.Editor edit = preferences.edit();
edit.putBoolean("isGuideSP",true);
edit.commit();
initBar();
EventUtils.INSTANCE.event("page_CollectActivity", "", null);
startProgressAnimation();
......@@ -54,15 +54,11 @@ public class CollectActivity extends AppCompatActivity {
@Override
protected void onResume() {
super.onResume();
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNative(),false);
}
private void initShow() {
SharedPreferences preferences = CleanApplication.context.getGuideSharedPreferences();
binding.scanButton.setOnClickListener(v->{
SharedPreferences.Editor edit = preferences.edit();
edit.putBoolean("isGuideSP",true);
edit.commit();
checkAndRequestPermissions();
});
binding.scanSkip.setOnClickListener(v->{
......
package com.swiftcleaner.chovey.view.activity;
import android.animation.ValueAnimator;
import android.content.Intent;
import android.os.CountDownTimer;
import android.util.Log;
import android.view.View;
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.databinding.ActivityEndCleanJunkBinding;
import com.swiftcleaner.chovey.model.util.FinishMain;
import com.swiftcleaner.chovey.view.BaseActivity;
import com.swiftcleaner.chovey.view.BaseActivityKotlin;
import com.swiftcleaner.chovey.view.MainActivity;
import com.swiftcleaner.chovey.view.dialog.CustomScoreDialog;
import com.swiftcleaner.chovey.view.dialog.LoadingDialog;
public class EndCleanJunkActivity extends BaseActivity<ActivityEndCleanJunkBinding> {
private CustomScoreDialog customScoreDialog;
......@@ -41,7 +34,7 @@ public class EndCleanJunkActivity extends BaseActivity<ActivityEndCleanJunkBindi
@Override
protected void onResume() {
super.onResume();
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNative(),false);
}
private void initPage() {
......@@ -108,31 +101,27 @@ public class EndCleanJunkActivity extends BaseActivity<ActivityEndCleanJunkBindi
@Override
public void onSubmit() {
if (AdmobHelps.INSTANCE.isShowAdBackInter()){
AdmobHelps.INSTANCE.showInterstitialAd(
EndCleanJunkActivity.this,
() -> {
FinishMain.INSTANCE.finishToMain(EndCleanJunkActivity.this);
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
return null;
},
() -> {
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.");
return null;
},
() -> {
FinishMain.INSTANCE.finishToMain(EndCleanJunkActivity.this);
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.");
return null;
},
false,false
);
}else {
FinishMain.INSTANCE.finishToMain(EndCleanJunkActivity.this);
}
AdmobHelps.INSTANCE.showInterstitialAd(
EndCleanJunkActivity.this,
() -> {
FinishMain.INSTANCE.finishToMain(EndCleanJunkActivity.this);
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
return null;
},
() -> {
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.");
return null;
},
() -> {
FinishMain.INSTANCE.finishToMain(EndCleanJunkActivity.this);
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.");
return null;
},
false,true, true
);
}
});
......
package com.swiftcleaner.chovey.view.activity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager;
import android.Manifest;
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.FrameLayout;
import android.widget.Toast;
import com.swiftcleaner.chovey.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;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityGuideBinding.inflate(getLayoutInflater());
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(true
);
binding.viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
// 页面切换时处理逻辑
}
});
}
private void initBar() {
ImmersionBar.with(this)
.transparentStatusBar() // 透明状态栏
.statusBarDarkFont(true) // 状态栏字体颜色为深色
.navigationBarDarkIcon(false) // 导航栏图标颜色为浅色
.init();
}
@Override
protected void onResume() {
super.onResume();
}
public void nextPage() {
if (adapter == null || adapter.getCount() == 0) {
Toast.makeText(this, "No pages available", Toast.LENGTH_SHORT).show();
return;
}
int currentPosition = binding.viewPager.getCurrentItem();
if (currentPosition < adapter.getCount() - 1) {
binding.viewPager.setCurrentItem(currentPosition + 1, true);
} else {
if (AdmobHelps.INSTANCE.isShowAdInter()) {
AdmobHelps.INSTANCE.showInterstitialAd(
GuideActivity.this,
() -> {
startIntent();
// 当广告被关闭时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
return null;
},
() -> {
// 当广告展示完成时的逻辑
Log.d("AdmobHelps", "Interstitial Ad was shown.");
return null;
},
() -> {
startIntent();
// 当广告加载失败时的逻辑
Log.d("AdmobHelps", "Interstitial Ad failed to load.");
return null;
},
false,false
);
}else {
startIntent();
}
}
}
private void startIntent() {
startActivity(new Intent(GuideActivity.this, CollectActivity.class));
finish(); // 关闭当前的 GuideActivity
}
@Override
protected void onDestroy() {
super.onDestroy();
if (binding.viewPager != null) {
binding.viewPager.clearOnPageChangeListeners();
}
}
}
\ No newline at end of file
package com.swiftcleaner.chovey.view.activity
import android.content.Intent
import android.graphics.Color
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.swiftcleaner.chovey.business.AdIntervalTimeUtils
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps
import com.swiftcleaner.chovey.databinding.ActivityGuideBinding
import com.swiftcleaner.chovey.view.BaseActivity
import com.swiftcleaner.chovey.view.function.constellation.BarUtils
class GuideActivity : BaseActivity<ActivityGuideBinding>() {
private val page1: GuideFragment by lazy {
GuideFragment().apply { page = 0 }
}
private val page2: GuideFragment by lazy {
GuideFragment().apply { page = 1 }
}
private val page3: GuideFragment by lazy {
GuideFragment().apply { page = 3 }
}
private val pageNative: NativeFullFragment by lazy {
NativeFullFragment()
}
private val pageNative2: NativeFullFragment by lazy {
NativeFullFragment()
}
private var currentIndex = 0
override fun getViewBinding(): ActivityGuideBinding {
return ActivityGuideBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
val fragments = if (AdmobHelps.isShowGuideAd() && AdIntervalTimeUtils.getNativeIntervalTime() == 0) {
mutableListOf(page1, pageNative, page2, pageNative2, page3)
} else mutableListOf(page1, page2, page3)
binding.viewpager2.run {
adapter = object : FragmentStateAdapter(this@GuideActivity) {
override fun getItemCount(): Int {
return fragments.size
}
override fun createFragment(position: Int): Fragment {
return fragments[position]
}
}
}
binding.viewpager2.registerOnPageChangeCallback(object :
ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(position: Int) {
currentIndex = position
}
})
}
override fun initData() {
}
fun next() {
val nextPage = binding.viewpager2.currentItem + 1
if (nextPage < (binding.viewpager2.adapter?.itemCount ?: 0)){
binding.viewpager2.currentItem = nextPage
} else {
startActivity(Intent(this, CollectActivity::class.java))
finish()
}
}
}
\ No newline at end of file
package com.swiftcleaner.chovey.view.activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentStatePagerAdapter;
import androidx.viewpager.widget.ViewPager;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.business.EventUtils;
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.databinding.ActivityGuideBinding;
import com.swiftcleaner.chovey.view.adapter.ViewPagerAdapter;
public class GuideActivity2 extends AppCompatActivity {
// private ViewPagerAdapter adapter;
// ActivityGuideBinding binding;
//
// @Override
// protected void onCreate(Bundle savedInstanceState) {
// super.onCreate(savedInstanceState);
// binding = ActivityGuideBinding.inflate(getLayoutInflater());
// View view = binding.getRoot();
// setContentView(view);
// initBar();
// EventUtils.INSTANCE.event("page_GuideActivity", "", null);
// adapter = new ViewPagerAdapter(getSupportFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
// binding.viewpager2.setAdapter(adapter);
// binding.viewpager2.setPagingEnabled(true);
// binding.viewpager2.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
// @Override
// public void onPageSelected(int position) {
// // 页面切换时处理逻辑
// }
// });
// }
//
// private void initBar() {
// ImmersionBar.with(this)
// .transparentStatusBar() // 透明状态栏
// .statusBarDarkFont(true) // 状态栏字体颜色为深色
// .navigationBarDarkIcon(false) // 导航栏图标颜色为浅色
// .init();
// }
//
// @Override
// protected void onResume() {
// super.onResume();
// }
//
// public void nextPage() {
// if (adapter == null || adapter.getCount() == 0) {
// Toast.makeText(this, "No pages available", Toast.LENGTH_SHORT).show();
// return;
// }
//
// int currentPosition = binding.viewpager2.getCurrentItem();
// if (currentPosition < adapter.getCount() - 1) {
// binding.viewpager2.setCurrentItem(currentPosition + 1, true);
// } else {
// if (AdmobHelps.INSTANCE.isShowAdInter()) {
// AdmobHelps.INSTANCE.showInterstitialAd(
// GuideActivity2.this,
// () -> {
// startIntent();
// // 当广告被关闭时的逻辑
// Log.d("AdmobHelps", "Interstitial Ad was dismissed.");
// return null;
// },
// () -> {
// // 当广告展示完成时的逻辑
// Log.d("AdmobHelps", "Interstitial Ad was shown.");
// return null;
// },
// () -> {
// startIntent();
// // 当广告加载失败时的逻辑
// Log.d("AdmobHelps", "Interstitial Ad failed to load.");
// return null;
// },
// false,false
// );
// }else {
// startIntent();
// }
// }
// }
// private void startIntent() {
// startActivity(new Intent(GuideActivity2.this, CollectActivity.class));
// finish(); // 关闭当前的 GuideActivity
// }
//
//
// @Override
// protected void onDestroy() {
// super.onDestroy();
// if (binding.viewpager2 != null) {
// binding.viewpager2.clearOnPageChangeListeners();
// }
// }
}
\ No newline at end of file
package com.swiftcleaner.chovey.view.activity
import android.annotation.SuppressLint
import android.view.View
import androidx.core.view.isVisible
import com.swiftcleaner.chovey.R
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps
import com.swiftcleaner.chovey.databinding.FragmentGuideBinding
import com.swiftcleaner.chovey.view.BaseFragment
class GuideFragment : BaseFragment<FragmentGuideBinding>() {
private val TAG = "GuideFragment"
var page: Int = 1
override val binding: FragmentGuideBinding by lazy {
FragmentGuideBinding.inflate(layoutInflater)
}
@SuppressLint("SetTextI18n")
override fun setView() {
when (page) {
0 -> {
if (AdmobHelps.isShowGuideAd()) {
AdmobHelps.showNativeAd(requireActivity(), binding.idFlNative, layout = R.layout.layout_ad_native_guide)
}
binding.ivGuide.setImageResource(R.mipmap.gudie_one)
binding.ivGuideIndex.setImageResource(R.mipmap.icon1)
binding.tvGuideContent.text = getString(R.string.fragment_gudie_one_text)
}
1 -> {
binding.ivGuide.setImageResource(R.mipmap.gudie_two_img)
binding.ivGuideIndex.setImageResource(R.mipmap.icon2)
binding.tvGuideContent.text = getString(R.string.fragment_gudie_two_text)
binding.tvSideNext.isVisible = true
}
3 -> {
binding.ivGuide.setImageResource(R.mipmap.guide_three)
binding.ivGuideIndex.setImageResource(R.mipmap.icon3)
binding.tvGuideContent.text = getString(R.string.fragment_gudie_three_text)
binding.tvFinishBtn.isVisible = true
binding.tvBtn.visibility = View.INVISIBLE
binding.idFlNative.visibility = View.INVISIBLE
}
}
}
override fun setListener() {
super.setListener()
binding.tvBtn.setOnClickListener {
val activity = requireActivity() as GuideActivity?
activity ?: requireActivity()
activity?.next()
}
binding.tvFinishBtn.setOnClickListener {
val activity = requireActivity() as GuideActivity?
activity ?: requireActivity()
activity?.next()
}
}
// override fun onResume() {
// super.onResume()
// if (AdmobHelps.isShowGuideAd() && page == 0) {
// kotlin.runCatching {
// AdmobHelps.admobMaxShowNativeAd(requireActivity(), binding.idFlNative, 4)
// }
// }
//
// }
}
\ No newline at end of file
package com.swiftcleaner.chovey.view.activity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import android.Manifest;
import android.animation.ValueAnimator;
import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
......@@ -14,26 +9,26 @@ import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.net.Uri;
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.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.databinding.ActivityInfoBinding;
import com.swiftcleaner.chovey.model.util.BatteryReceiver;
import com.swiftcleaner.chovey.model.util.FinishMain;
import com.swiftcleaner.chovey.view.BaseActivity;
import com.swiftcleaner.chovey.view.BaseActivityKotlin;
import com.swiftcleaner.chovey.view.MainActivity;
import com.swiftcleaner.chovey.view.dialog.CustomScoreDialog;
import com.swiftcleaner.chovey.view.dialog.LoadingDialog;
public class InfoActivity extends BaseActivity<ActivityInfoBinding> {
private BatteryReceiver batteryReceiver;
......@@ -61,7 +56,7 @@ public class InfoActivity extends BaseActivity<ActivityInfoBinding> {
@Override
protected void onResume() {
super.onResume();
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNative(),false);
}
private void checkAndRequestPermissions() {
......@@ -178,31 +173,27 @@ public class InfoActivity extends BaseActivity<ActivityInfoBinding> {
@Override
public void onSubmit() {
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);
}
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,AdmobHelps.INSTANCE.isShowAdBackInter(),true
);
}
});
customScoreDialog.show();
......
package com.swiftcleaner.chovey.view.activity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatButton;
import androidx.cardview.widget.CardView;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import android.Manifest;
import android.animation.ValueAnimator;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Dialog;
......@@ -20,18 +11,24 @@ import android.content.pm.PackageManager;
import android.graphics.Color;
import android.net.Uri;
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.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatButton;
import androidx.cardview.widget.CardView;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.databinding.ActivityLargeFileBinding;
import com.swiftcleaner.chovey.model.bean.CleanFileBean;
import com.swiftcleaner.chovey.model.tool.FileHelps;
......@@ -39,12 +36,9 @@ import com.swiftcleaner.chovey.model.tool.MediaHelps;
import com.swiftcleaner.chovey.model.tool.ToastUtil;
import com.swiftcleaner.chovey.model.util.FinishMain;
import com.swiftcleaner.chovey.view.BaseActivity;
import com.swiftcleaner.chovey.view.BaseActivityKotlin;
import com.swiftcleaner.chovey.view.MainActivity;
import com.swiftcleaner.chovey.view.adapter.LargeFileAdapter;
import com.swiftcleaner.chovey.view.dialog.CustomScoreDialog;
import com.swiftcleaner.chovey.view.dialog.LoadingDialog;
import java.text.DecimalFormat;
import java.util.ArrayList;
......@@ -84,7 +78,7 @@ public class LargeFileActivity extends BaseActivity<ActivityLargeFileBinding> {
@Override
protected void onResume() {
super.onResume();
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNative(),false);
}
private void checkAndRequestPermissions() {
......@@ -284,31 +278,27 @@ public class LargeFileActivity extends BaseActivity<ActivityLargeFileBinding> {
@Override
public void onSubmit() {
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 {
FinishMain.INSTANCE.finishToMain(activity);
}
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,AdmobHelps.INSTANCE.isShowAdBackInter(), true
);
}
});
......
......@@ -20,9 +20,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.gyf.immersionbar.ImmersionBar
import com.swiftcleaner.chovey.R
import com.swiftcleaner.chovey.business.admob.AdmobManager.isShowAdInter
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps.isShowAdNativeBottom
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps.showInterstitialAd
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps.showNativeAd
import com.swiftcleaner.chovey.databinding.ActivityMalwareCleanBinding
......@@ -74,16 +72,11 @@ class MalwareCleanActivity : AppCompatActivity() {
if (position == itemCount - 1) View.GONE else View.VISIBLE
holder.itemView.setOnClickListener {
item.isSelected = !item.isSelected
if (isShowAdInter()) {
showInterstitialAd(this@MalwareCleanActivity, dismissed = {
uninstall(0, listOf(item))
}, failed = {
uninstall(0, listOf(item))
}, isRetry = false)
} else {
showInterstitialAd(this@MalwareCleanActivity, dismissed = {
uninstall(0, listOf(item))
}
}, failed = {
uninstall(0, listOf(item))
}, isRetry = false, isShowInterAd = AdmobHelps.isDeleteInterAd())
}
}
}
......@@ -118,15 +111,11 @@ class MalwareCleanActivity : AppCompatActivity() {
private fun initView() {
binding.clRadarview.isVisible = true
binding.radarview.setSearching(true)
if (isShowAdInter()) {
showInterstitialAd(this@MalwareCleanActivity, dismissed = {
initData(false)
}, failed = {
initData(false)
}, isRetry = false)
} else {
showInterstitialAd(this@MalwareCleanActivity, dismissed = {
initData(false)
}
}, failed = {
initData(false)
}, isRetry = false, isShowInterAd = AdmobHelps.isShowAdInter())
binding.rvMalware.adapter = adapter
binding.rvMalware.layoutManager = LinearLayoutManager(this)
......@@ -261,7 +250,7 @@ class MalwareCleanActivity : AppCompatActivity() {
this,
binding.flAd,
R.layout.layout_ad_native_small,
isShowAdNativeBottom(),
isShowAdNative = AdmobHelps.isShowAdNative(),
false
)
}
......@@ -288,7 +277,7 @@ class MalwareCleanActivity : AppCompatActivity() {
this,
binding.flAd,
R.layout.layout_ad_native_small,
isShowAdNativeBottom(),
isShowAdNative = AdmobHelps.isShowAdNative(),
false
)
}
......
package com.swiftcleaner.chovey.view.activity
import com.swiftcleaner.chovey.R
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps
import com.swiftcleaner.chovey.databinding.FragmentNativeFullBinding
import com.swiftcleaner.chovey.view.BaseFragment
class NativeFullFragment : BaseFragment<FragmentNativeFullBinding>() {
override val binding: FragmentNativeFullBinding by lazy {
FragmentNativeFullBinding.inflate(layoutInflater)
}
override fun setView() {
AdmobHelps.showNativeAd(requireActivity(), binding.flNativeAd , layout = R.layout.layout_ad_native_full)
binding.ivNext.setOnClickListener {
val activity = requireActivity() as GuideActivity?
activity ?: requireActivity()
activity?.next()
}
}
}
\ No newline at end of file
package com.swiftcleaner.chovey.view.activity;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatButton;
import androidx.cardview.widget.CardView;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import android.Manifest;
import android.animation.ValueAnimator;
import android.app.Activity;
import android.app.Dialog;
import android.content.ActivityNotFoundException;
......@@ -19,18 +10,24 @@ import android.content.pm.PackageManager;
import android.graphics.Color;
import android.net.Uri;
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.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.widget.AppCompatButton;
import androidx.cardview.widget.CardView;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.recyclerview.widget.GridLayoutManager;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.databinding.ActivityScreenShotBinding;
import com.swiftcleaner.chovey.model.bean.CleanFileBean;
import com.swiftcleaner.chovey.model.tool.FileHelps;
......@@ -39,11 +36,9 @@ import com.swiftcleaner.chovey.model.tool.ToastUtil;
import com.swiftcleaner.chovey.model.util.AppSchedulers;
import com.swiftcleaner.chovey.model.util.FinishMain;
import com.swiftcleaner.chovey.view.BaseActivity;
import com.swiftcleaner.chovey.view.BaseActivityKotlin;
import com.swiftcleaner.chovey.view.MainActivity;
import com.swiftcleaner.chovey.view.adapter.ScreenShotAdapter;
import com.swiftcleaner.chovey.view.dialog.CustomScoreDialog;
import com.swiftcleaner.chovey.view.dialog.LoadingDialog;
import java.text.DecimalFormat;
import java.util.ArrayList;
......@@ -82,7 +77,7 @@ public class ScreenShotActivity extends BaseActivity<ActivityScreenShotBinding>
@Override
protected void onResume() {
super.onResume();
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
AdmobHelps.INSTANCE.showNativeAd(this,binding.flAd,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNative(),false);
}
private void checkAndRequestPermissions() {
......@@ -299,32 +294,27 @@ public class ScreenShotActivity extends BaseActivity<ActivityScreenShotBinding>
@Override
public void onSubmit() {
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 {
FinishMain.INSTANCE.finishToMain(activity);
}
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,AdmobHelps.INSTANCE.isShowAdBackInter(),true
);
}
});
customScoreDialog.show();
......
......@@ -2,10 +2,6 @@ package com.swiftcleaner.chovey.view.activity;
import static com.swiftcleaner.chovey.GlobalConfig.URL_PRIVACY;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;
import androidx.cardview.widget.CardView;
import android.app.Dialog;
import android.content.ActivityNotFoundException;
import android.content.ClipData;
......@@ -20,14 +16,16 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.AppCompatButton;
import androidx.cardview.widget.CardView;
import com.gyf.immersionbar.ImmersionBar;
import com.swiftcleaner.chovey.GlobalConfig;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.EventUtils;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.databinding.ActivitySettingBinding;
import com.swiftcleaner.chovey.util.SPUtils;
import com.swiftcleaner.chovey.view.dialog.CustomScoreDialog;
public class SettingActivity extends AppCompatActivity {
ActivitySettingBinding binding;
......@@ -116,37 +114,6 @@ public class SettingActivity extends AppCompatActivity {
.init();
}
@Override
public void onBackPressed() {
// initCustDialog();
finish();
}
private void initCustDialog() {
CustomScoreDialog customScoreDialog = new CustomScoreDialog(this);
customScoreDialog.setOnDialogClickListener(new CustomScoreDialog.OnDialogClickListener() {
@Override
public void onCancel() {
customScoreDialog.dismiss();
}
@Override
public void onSubmit() {
AdmobManager.INSTANCE.showInterstitialAd(SettingActivity.this, () -> {
finish();
return null;
},
() -> {
return null;
},
() -> {
finish();
return null;
}, false);
}
});
customScoreDialog.show();
}
//复制
private void copyTextToClipboard(String text) {
......
......@@ -22,12 +22,12 @@ import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.LinearLayoutManager
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps.isShowAdBackInter
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps.isShowAdInter
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps.isShowAdNativeBottom
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps.showInterstitialAd
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps.showNativeAd
import com.gyf.immersionbar.ImmersionBar
import com.swiftcleaner.chovey.R
import com.swiftcleaner.chovey.business.EventUtils.event
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps
import com.swiftcleaner.chovey.databinding.ActivitySimilarPhotosBinding
import com.swiftcleaner.chovey.model.bean.ImageHelpers
import com.swiftcleaner.chovey.model.bean.SimilarBean
......@@ -209,7 +209,7 @@ class SimilarPhotosActivity : AppCompatActivity() {
this@SimilarPhotosActivity,
binding.flAd,
R.layout.layout_ad_native_small,
isShowAdNativeBottom(),
isShowAdNative = AdmobHelps.isShowAdNative(),
false
)
}
......@@ -252,31 +252,27 @@ class SimilarPhotosActivity : AppCompatActivity() {
}
override fun onSubmit() {
if (isShowAdBackInter()) {
showInterstitialAd(
this@SimilarPhotosActivity,
{
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
)
} else {
finishToMain(activity)
}
showInterstitialAd(
this@SimilarPhotosActivity,
{
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, isShowAdBackInter(), true
)
}
})
customScoreDialog.show()
......
package com.swiftcleaner.chovey.view.activity
import android.content.Intent
import android.widget.CheckBox
import android.widget.LinearLayout
import com.swiftcleaner.chovey.R
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps
import com.swiftcleaner.chovey.databinding.ActivityWhichWantGuideBinding
import com.swiftcleaner.chovey.view.BaseActivity
class WhichWantGuideActivity : BaseActivity<ActivityWhichWantGuideBinding>() {
private val checkListGoogle = mutableListOf<CheckBox>()
private val checkLinGO = mutableListOf<LinearLayout>()
private var isRefreshAd = false
override fun getViewBinding(): ActivityWhichWantGuideBinding {
return ActivityWhichWantGuideBinding.inflate(layoutInflater)
}
override fun initView() {
checkLinGO.add(binding.ll1)
checkLinGO.add(binding.ll2)
checkLinGO.add(binding.ll3)
checkLinGO.add(binding.ll4)
checkListGoogle.add(binding.checkbox1)
checkListGoogle.add(binding.checkbox2)
checkListGoogle.add(binding.checkbox3)
checkListGoogle.add(binding.checkbox4)
checkLinGO.forEachIndexed { index, linearLayout ->
linearLayout.setOnClickListener {
if (!it.isSelected) getAppAd()
it.isSelected = !it.isSelected
checkListGoogle[index].isChecked = !checkListGoogle[index].isChecked
isRefreshAd = true
}
}
getAppAd()
binding.tvNext.setOnClickListener {
startActivity(Intent(this, GuideActivity::class.java))
finish()
}
}
override fun initData() {
}
private fun getAppAd() {
if (!isRefreshAd) AdmobHelps.showNativeAd(this, binding.flAd, layout = R.layout.layout_ad_native_guide)
}
}
\ No newline at end of file
......@@ -4,17 +4,14 @@ import android.app.Activity;
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.swiftcleaner.chovey.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.business.newAdmob.AdmobHelps;
public class AppExitDialog extends Dialog {
......@@ -81,7 +78,7 @@ public class AppExitDialog extends Dialog {
setCanceledOnTouchOutside(false);
FrameLayout nativeView = findViewById(R.id.fl_ad);
AdmobHelps.INSTANCE.showNativeAd(activity,nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
AdmobHelps.INSTANCE.showNativeAd(activity,nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNative(),false);
}
public void show() {
......
......@@ -2,19 +2,14 @@ package com.swiftcleaner.chovey.view.dialog;
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.swiftcleaner.chovey.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 com.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import java.lang.ref.WeakReference;
......@@ -42,7 +37,7 @@ public class CustomScoreDialog extends Dialog {
FrameLayout nativeView = findViewById(R.id.fl_ad);
if (!isDialogDestroyed){
AdmobHelps.INSTANCE.showNativeAd(activity,nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeExitFunction(),false);
AdmobHelps.INSTANCE.showNativeAd(activity,nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdExitDialogNative(),false);
}
dialog_cancel.setOnClickListener(v -> {
......
......@@ -2,14 +2,8 @@ package com.swiftcleaner.chovey.view.dialog;
import android.app.Activity;
import android.app.Dialog;
import android.graphics.Color;
import androidx.appcompat.widget.AppCompatButton;
import androidx.cardview.widget.CardView;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.admob.NativeView;
public class LoadingDialog extends Dialog {
......
......@@ -9,8 +9,6 @@ import androidx.appcompat.widget.AppCompatButton;
import androidx.cardview.widget.CardView;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.admob.AdmobManager;
import com.swiftcleaner.chovey.business.admob.NativeView;
public class NoticeDialog extends Dialog {
......
package com.swiftcleaner.chovey.view.fragment;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
......@@ -12,14 +11,10 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.swiftcleaner.chovey.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;
import com.swiftcleaner.chovey.view.activity.GuideActivity2;
import io.reactivex.rxjava3.annotations.Nullable;
......@@ -36,10 +31,10 @@ public class GuideEndFragment extends Fragment {
buttonNext.setOnClickListener(v -> {
// 通知Activity切换到下一个页面
if (getActivity() instanceof GuideActivity) {
((GuideActivity) getActivity()).nextPage();
}
// // 通知Activity切换到下一个页面
// if (getActivity() instanceof GuideActivity2) {
// ((GuideActivity2) getActivity()).nextPage();
// }
});
return view;
......@@ -49,7 +44,7 @@ public class GuideEndFragment extends Fragment {
public void onResume() {
super.onResume();
Log.d("showNativeAd","111");
AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
// AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
@Override
......
package com.swiftcleaner.chovey.view.fragment;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
......@@ -12,14 +11,10 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.swiftcleaner.chovey.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;
import com.swiftcleaner.chovey.view.activity.GuideActivity2;
import io.reactivex.rxjava3.annotations.Nullable;
......@@ -36,9 +31,9 @@ public class GuideOneFragment extends Fragment {
buttonNext.setOnClickListener(v -> {
// 通知Activity切换到下一个页面
if (getActivity() instanceof GuideActivity) {
((GuideActivity) getActivity()).nextPage();
}
// if (getActivity() instanceof GuideActivity2) {
// ((GuideActivity2) getActivity()).nextPage();
// }
});
return view;
......@@ -48,7 +43,7 @@ public class GuideOneFragment extends Fragment {
public void onResume() {
super.onResume();
Log.d("showNativeAd","111");
AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
// AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
@Override
......
package com.swiftcleaner.chovey.view.fragment;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
......@@ -12,14 +11,10 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.swiftcleaner.chovey.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;
import com.swiftcleaner.chovey.view.activity.GuideActivity2;
import io.reactivex.rxjava3.annotations.Nullable;
......@@ -37,9 +32,9 @@ public class GuideThreeFragment extends Fragment {
buttonNext.setOnClickListener(v -> {
// 通知Activity切换到下一个页面
if (getActivity() instanceof GuideActivity) {
((GuideActivity) getActivity()).nextPage();
}
// if (getActivity() instanceof GuideActivity2) {
// ((GuideActivity2) getActivity()).nextPage();
// }
});
return view;
......@@ -49,7 +44,7 @@ public class GuideThreeFragment extends Fragment {
public void onResume() {
super.onResume();
Log.d("showNativeAd","111");
AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
// AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
@Override
......
package com.swiftcleaner.chovey.view.fragment;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
......@@ -12,14 +11,10 @@ import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.FrameLayout;
import android.widget.TextView;
import com.swiftcleaner.chovey.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;
import com.swiftcleaner.chovey.view.activity.GuideActivity2;
import io.reactivex.rxjava3.annotations.Nullable;
......@@ -38,9 +33,9 @@ public class GuideTwoFragment extends Fragment {
buttonNext.setOnClickListener(v -> {
// 通知Activity切换到下一个页面
if (getActivity() instanceof GuideActivity) {
((GuideActivity) getActivity()).nextPage();
}
// if (getActivity() instanceof GuideActivity2) {
// ((GuideActivity2) getActivity()).nextPage();
// }
});
return view;
}
......@@ -49,7 +44,7 @@ public class GuideTwoFragment extends Fragment {
public void onResume() {
super.onResume();
Log.d("showNativeAd","111");
AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
// AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_small,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
@Override
......
......@@ -13,7 +13,6 @@ import android.widget.FrameLayout;
import com.swiftcleaner.chovey.R;
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps;
import com.swiftcleaner.chovey.view.activity.GuideActivity;
import io.reactivex.rxjava3.annotations.Nullable;
......@@ -30,7 +29,7 @@ public class NaviteFragment extends Fragment {
public void onResume() {
super.onResume();
Log.d("showNativeAd","111");
AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_big,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
// AdmobHelps.INSTANCE.showNativeAd(requireActivity(),nativeView,R.layout.layout_ad_native_big,AdmobHelps.INSTANCE.isShowAdNativeBottom(),false);
}
@Override
......
......@@ -15,12 +15,9 @@ import androidx.activity.OnBackPressedCallback
import androidx.core.view.isVisible
import androidx.core.view.updatePadding
import androidx.recyclerview.widget.RecyclerView
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps.isShowAdNativeBottom
import com.google.android.gms.ads.nativead.NativeAd
import com.swiftcleaner.chovey.R
import com.swiftcleaner.chovey.business.newAdmob.AdmobHelps
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
......@@ -41,7 +38,7 @@ class WeatherInterface : BaseActivityKotlin<ActivityWeatherInterfaceBinding>() {
this,
binding.flAd,
R.layout.layout_ad_native_small,
isShowAdNativeBottom(),
isShowAdNative = AdmobHelps.isShowAdNative(),
false
)
}
......
package com.swiftcleaner.chovey.view.function.weather
import android.text.TextUtils
import android.util.Log
import com.google.gson.Gson
import com.swiftcleaner.chovey.BuildConfig
import com.swiftcleaner.chovey.GlobalConfig
import com.swiftcleaner.chovey.business.ConfigIntervalTimeUtils
import com.swiftcleaner.chovey.util.SPUtils
import okhttp3.Call
import okhttp3.Callback
import okhttp3.OkHttpClient
......@@ -75,8 +78,16 @@ object WeatherUtils {
url.append("&date=${sdf.format(Calendar.getInstance().time)}")
url.toString()
}
private const val KEY_LAST_WEATHER_TIME = "key_last_weather_time"
private inline var updateTime
get() = SPUtils.getInstance().getLong(KEY_LAST_WEATHER_TIME, 0L)
set(value) = SPUtils.getInstance().putLong(KEY_LAST_WEATHER_TIME, value)
fun requestWeatherData() {
if (!ConfigIntervalTimeUtils.isConfigIntervalPass(updateTime)) {
return
}
Log.e("ConfigInterval", "requestWeatherData")
val client = OkHttpClient.Builder().apply {
if (BuildConfig.DEBUG) {
addInterceptor(HttpLoggingInterceptor().apply {
......@@ -103,6 +114,7 @@ object WeatherUtils {
if (!TextUtils.isEmpty(data)) {
val str = AESHelper.decrypt(data ?: "")
saveWeatherData(str)
updateTime = System.currentTimeMillis()
}
}
}
......
......@@ -113,18 +113,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="10dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/img_adzhanwei_small"/>
</FrameLayout>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
......@@ -422,7 +411,20 @@
android:textAllCaps="false"
android:textColor="#FFFFFF"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@id/iv_bottom" />
app:layout_constraintBottom_toTopOf="@id/fl_ad" />
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
app:layout_constraintBottom_toTopOf="@id/iv_bottom" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/img_adzhanwei_small"/>
</FrameLayout>
<ImageView
android:id="@+id/iv_bottom"
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".view.activity.GuideActivity">
<com.swiftcleaner.chovey.model.tool.NoSwipeViewPager
android:id="@+id/viewPager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
android:background="#EFEFEF">
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewpager2"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -370,18 +370,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
android:layout_marginTop="10dp">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/img_adzhanwei_small"/>
</FrameLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
......@@ -400,7 +389,20 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:layout_marginBottom="9dp"
app:layout_constraintBottom_toTopOf="@id/iv_bottom"/>
app:layout_constraintBottom_toTopOf="@id/fl_ad"/>
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="13dp"
app:layout_constraintBottom_toTopOf="@id/iv_bottom">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/img_adzhanwei_small"/>
</FrameLayout>
<ImageView
android:id="@+id/iv_bottom"
android:layout_width="match_parent"
......
......@@ -62,19 +62,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="15dp"
app:layout_constraintTop_toBottomOf="@id/cl1">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/img_adzhanwei_small"/>
</FrameLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/large_file_recy"
android:layout_width="match_parent"
......@@ -84,7 +72,7 @@
android:overScrollMode="never"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/fl_ad"
app:layout_constraintTop_toBottomOf="@id/cl1"
android:layout_marginBottom="10dp"
app:layout_constraintBottom_toTopOf="@id/large_file_button"/>
......@@ -116,16 +104,30 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginBottom="12dp"
android:background="@drawable/shape_radio_80dp_hui_se"
android:gravity="center"
android:text="Delete"
android:textAllCaps="false"
android:textColor="#FFFFFF"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@id/large_file_bottomimg"
app:layout_constraintBottom_toTopOf="@id/fl_ad"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
app:layout_constraintBottom_toTopOf="@id/large_file_bottomimg"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/img_adzhanwei_small"/>
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".view.MainActivity">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="#F2F6FB">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="60dp">
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
......@@ -327,6 +328,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:visibility="gone"
android:layout_marginTop="10dp"
app:layout_constraintTop_toBottomOf="@id/cl3">
......@@ -499,21 +501,31 @@
</androidx.core.widget.NestedScrollView>
<FrameLayout
android:id="@+id/fl_banner"
</androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:id="@+id/fl_banner"
android:layout_width="match_parent"
android:layout_height="60dp"
android:visibility="gone"
tools:visibility="visible">
<com.facebook.shimmer.ShimmerFrameLayout
android:layout_width="match_parent"
android:layout_height="60dp"
app:layout_constraintBottom_toBottomOf="parent">
android:layout_height="match_parent"
app:shimmer_colored="true"
android:background="@color/white"
app:shimmer_highlight_color="#66242424">
<com.facebook.shimmer.ShimmerFrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
app:shimmer_colored="true"
android:background="@color/white"
app:shimmer_highlight_color="#66242424">
</com.facebook.shimmer.ShimmerFrameLayout>
</FrameLayout>
</com.facebook.shimmer.ShimmerFrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/zhanweitu2"
android:scaleType="centerCrop"
android:tag="zhanweitu"
tools:ignore="ContentDescription" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
</androidx.appcompat.widget.LinearLayoutCompat>
\ No newline at end of file
......@@ -103,19 +103,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="10dp"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/img_adzhanwei_small"/>
</FrameLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/screenshot_recy"
android:layout_width="match_parent"
......@@ -125,7 +113,7 @@
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginBottom="10dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/fl_ad"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/button_screenshot_delete"/>
<androidx.appcompat.widget.AppCompatCheckBox
......@@ -162,7 +150,20 @@
android:textAllCaps="false"
android:textColor="#FFFFFF"
android:textSize="18sp"
app:layout_constraintBottom_toTopOf="@id/iv_bottom" />
app:layout_constraintBottom_toTopOf="@id/fl_ad" />
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
app:layout_constraintBottom_toTopOf="@id/iv_bottom" >
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/img_adzhanwei_small"/>
</FrameLayout>
<ImageView
android:id="@+id/iv_bottom"
......
......@@ -47,27 +47,16 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="15dp"
app:layout_constraintTop_toBottomOf="@id/cl1">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/img_adzhanwei_small"/>
</FrameLayout>
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:overScrollMode="never"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/fl_ad"
app:layout_constraintTop_toBottomOf="@id/cl1"
app:layout_constraintBottom_toTopOf="@id/similar_photos_delete_button">
<androidx.constraintlayout.widget.ConstraintLayout
......@@ -139,19 +128,22 @@
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/similar_photos_delete_button"
android:layout_width="match_parent"
android:layout_height="44dp"
android:layout_marginHorizontal="16dp"
android:layout_marginBottom="46dp"
android:layout_marginBottom="10dp"
android:background="@drawable/shape_clean_up"
android:text="Delete"
android:textAllCaps="false"
android:textColor="@color/white"
android:textSize="18sp"
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent" />
app:layout_constraintBottom_toTopOf="@+id/fl_ad"/>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/cl_radarview"
android:layout_width="match_parent"
......@@ -215,4 +207,17 @@
android:src="@mipmap/bottom_img"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:src="@mipmap/img_adzhanwei_small"/>
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginTop="30dp"
android:gravity="center"
android:text="Which type do you want to clean?"
android:textColor="@color/color_text_black"
android:textSize="24sp"
android:textStyle="bold" />
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="15dp"
android:layout_weight="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingVertical="10dp">
<LinearLayout
android:id="@+id/ll1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginBottom="10dp"
android:background="@drawable/shape_which_bg"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingVertical="10dp">
<ImageView
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_marginStart="16dp"
android:src="@mipmap/icon_photo" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_weight="1"
android:text="@string/choose_photo"
android:textColor="@color/color_text_black"
android:textSize="20sp"
android:textStyle="bold" />
<CheckBox
android:id="@+id/checkbox1"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginEnd="15dp"
android:background="@drawable/check"
android:button="@null"
android:clickable="false" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginBottom="10dp"
android:background="@drawable/shape_which_bg"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingVertical="10dp">
<ImageView
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_marginStart="16dp"
android:src="@mipmap/icon_video" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_weight="1"
android:text="@string/choose_video"
android:textColor="@color/color_text_black"
android:textSize="20sp"
android:textStyle="bold" />
<CheckBox
android:id="@+id/checkbox2"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginEnd="15dp"
android:background="@drawable/check"
android:button="@null"
android:clickable="false" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginBottom="10dp"
android:background="@drawable/shape_which_bg"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingVertical="10dp">
<ImageView
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_marginStart="16dp"
android:src="@mipmap/icon_audio" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_weight="1"
android:text="@string/choose_audio"
android:textColor="@color/color_text_black"
android:textSize="20sp"
android:textStyle="bold" />
<CheckBox
android:id="@+id/checkbox3"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginEnd="15dp"
android:background="@drawable/check"
android:button="@null"
android:clickable="false" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="15dp"
android:layout_marginBottom="10dp"
android:background="@drawable/shape_which_bg"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingVertical="10dp">
<ImageView
android:layout_width="42dp"
android:layout_height="42dp"
android:layout_marginStart="16dp"
android:src="@mipmap/icon_document" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="20dp"
android:layout_weight="1"
android:text="@string/choose_document"
android:textColor="@color/color_text_black"
android:textSize="20sp"
android:textStyle="bold" />
<CheckBox
android:id="@+id/checkbox4"
android:layout_width="20dp"
android:layout_height="20dp"
android:layout_marginEnd="15dp"
android:background="@drawable/check"
android:button="@null"
android:clickable="false" />
</LinearLayout>
</LinearLayout>
</androidx.core.widget.NestedScrollView>
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
android:layout_marginEnd="5dp"
android:gravity="center"
android:padding="5dp"
android:text="Continue >"
android:textColor="#1364FF"
android:textSize="17sp"
android:textStyle="bold" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="300dp">
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
app:layout_constraintBottom_toBottomOf="parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@mipmap/img_adzhanwei_small" />
</FrameLayout>
</FrameLayout>
</LinearLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardview"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="15dp"
app:cardElevation="15sp">
android:background="@drawable/bg_white_12"
android:minWidth="200dp"
android:minHeight="120dp"
android:padding="20dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="228dp"
android:layout_height="124dp">
<LinearLayout
android:id="@+id/ll_top_loading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/xuanzhuan_img"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_marginStart="20dp"
android:layout_marginTop="20dp"
android:src="@mipmap/zhuanquan"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ProgressBar
android:id="@+id/ad_progress"
android:layout_width="46dp"
android:layout_height="46dp"
android:indeterminateTint="@color/theme_color" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="14dp"
android:text="AD LOADING"
android:textSize="20sp"
android:textColor="#111111"
android:layout_marginStart="10dp"
android:maxLines="1"
android:ellipsize="end"
app:layout_constraintStart_toEndOf="@id/xuanzhuan_img"
app:layout_constraintTop_toTopOf="@id/xuanzhuan_img"
app:layout_constraintBottom_toBottomOf="@id/xuanzhuan_img" />
android:textSize="20sp" />
</LinearLayout>
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:maxLines="1"
android:ellipsize="end"
android:gravity="center"
app:layout_constraintStart_toStartOf="@id/xuanzhuan_img"
app:layout_constraintTop_toBottomOf="@id/xuanzhuan_img"
android:text="Ads are about to be shown" />
<TextView
android:id="@+id/text_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:maxLines="1"
android:ellipsize="end"
android:gravity="center"
android:layout_marginEnd="5dp"
android:layout_marginStart="2dp"
app:layout_constraintStart_toEndOf="@id/text_view"
app:layout_constraintTop_toBottomOf="@id/xuanzhuan_img"
android:text="(3)" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
\ No newline at end of file
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/tv_loading"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:gravity="center"
android:text="@string/loading_ads_content"
android:textAlignment="center"
android:textColor="#666666"
android:textSize="14sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll_top_loading" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
......@@ -57,6 +57,7 @@
android:background="@drawable/shape_dialog_cancel"
android:gravity="center"
android:text="Cancel"
android:layout_marginBottom="15dp"
android:textAllCaps="false"
android:textColor="#000000"
android:textSize="18sp"
......@@ -69,6 +70,7 @@
android:layout_width="141dp"
android:layout_height="44dp"
android:layout_marginHorizontal="20dp"
android:layout_marginBottom="15dp"
android:layout_marginEnd="20dp"
android:background="@drawable/shape_clean_up"
android:gravity="center"
......@@ -85,8 +87,7 @@
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="10dp"
android:layout_marginTop="21dp">
android:layout_marginHorizontal="10dp">
<ImageView
android:layout_width="match_parent"
......
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF">
<ImageView
android:id="@+id/iv_guide"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="47dp"
android:layout_marginBottom="20dp"
app:layout_constraintBottom_toTopOf="@+id/tv_guide_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="1.0" />
<TextView
android:id="@+id/tv_guide_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="44dp"
android:layout_marginBottom="20dp"
android:textColor="@color/black"
android:gravity="center"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/tv_btn"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:text="test" />
<ImageView
android:id="@+id/iv_guide_index"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="24dp"
android:src="@mipmap/icon1"
app:layout_constraintBottom_toBottomOf="@+id/tv_btn"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/tv_btn" />
<TextView
android:id="@+id/tv_btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
android:layout_marginBottom="12dp"
android:padding="12dp"
android:text="@string/next"
android:textColor="#336DF3"
android:textSize="20sp"
android:textStyle="bold"
app:layout_constraintBottom_toTopOf="@+id/fl_father"
app:layout_constraintEnd_toEndOf="parent" />
<TextView
android:id="@+id/tv_finish_btn"
android:layout_width="220dp"
android:layout_height="44dp"
android:layout_marginTop="20dp"
android:background="@drawable/gradient"
android:gravity="center"
android:text="@string/next"
android:textColor="@color/white"
android:textSize="14sp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tv_btn"
tools:visibility="visible" />
<TextView
android:id="@+id/tv_side_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:drawableTop="@mipmap/icon_huadong"
android:drawablePadding="32dp"
android:text="Slide to the next one"
android:textColor="#222222"
android:textSize="16sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/fl_father"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/fl_father"
tools:visibility="visible" />
<FrameLayout
android:id="@+id/fl_father"
android:layout_width="match_parent"
android:layout_height="300dp"
app:layout_constraintBottom_toBottomOf="parent">
<FrameLayout
android:id="@+id/id_fl_native"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</FrameLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/flNativeAd"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
<ImageView
android:id="@+id/iv_next"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="15dp"
android:layout_marginTop="35dp"
android:layout_gravity="end"
android:src="@mipmap/guanbi_b"/>
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.gms.ads.nativead.NativeAdView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.gms.ads.nativead.MediaView
android:id="@+id/ad_media"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingHorizontal="16dp"
android:paddingVertical="14dp">
<ImageView
android:id="@+id/ad_icon"
android:layout_width="50dp"
android:layout_height="50dp"
android:scaleType="centerCrop"
tools:src="@color/white" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:orientation="vertical">
<TextView
android:id="@+id/ad_headline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:drawableStart="@mipmap/icon_ad_pop"
android:drawablePadding="5dp"
android:gravity="center_vertical"
android:textColor="#111111"
android:textSize="14sp"
android:textStyle="bold"
tools:text="text ad" />
<TextView
android:id="@+id/ad_body"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="#666666"
android:textSize="12sp"
tools:text="content" />
</LinearLayout>
</LinearLayout>
<Button
android:id="@+id/ad_call_to_action"
android:layout_width="match_parent"
android:layout_height="40dp"
android:layout_marginHorizontal="24dp"
android:layout_marginBottom="20dp"
android:background="@drawable/shape_start_bg"
android:gravity="center"
android:text="OPEN"
android:textColor="@color/white"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>
</com.google.android.gms.ads.nativead.NativeAdView>
<?xml version="1.0" encoding="utf-8"?>
<com.google.android.gms.ads.nativead.NativeAdView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#FFFFFF">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="300dp"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/ad_call_to_action"
android:layout_width="match_parent"
android:layout_height="45dp"
android:layout_marginTop="15dp"
android:layout_marginHorizontal="16dp"
android:background="@drawable/shape_dialog_delete"
android:gravity="center"
android:textColor="#FFFFFF"
android:textSize="14sp" />
<TextView
android:id="@+id/ad_headline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="18dp"
android:drawableStart="@mipmap/icon_ad_pop"
android:drawablePadding="5dp"
android:ellipsize="end"
android:gravity="center_vertical"
android:maxLines="1"
android:textColor="#111111"
android:textSize="17sp"
android:textStyle="bold"
tools:text="text ad" />
<com.google.android.gms.ads.nativead.MediaView
android:id="@+id/ad_media"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="12dp"
android:layout_weight="1" />
<!-- <TextView-->
<!-- android:id="@+id/ad_body"-->
<!-- android:layout_width="match_parent"-->
<!-- android:layout_height="wrap_content"-->
<!-- android:textColor="#666666"-->
<!-- android:textSize="12sp"-->
<!-- android:visibility="gone"-->
<!-- tools:text="content" />-->
</LinearLayout>
</com.google.android.gms.ads.nativead.NativeAdView>
......@@ -8,4 +8,6 @@
<color name="color_181b1f">#181B1F</color>
<color name="color_ebebeb">#EBEBEB</color>
<color name="bg_ad">#ECEEED</color>
<color name="color_text_black">#111111</color>
</resources>
\ No newline at end of file
......@@ -43,6 +43,12 @@
<string name="trustlook_privacy_policy">https://www.trustlook.com/privacy-policy</string>
<string name="no_network_try_again">No network, try again connect to network</string>
<string name="no_threats_found">Your phone is completely secure\nno threats found!</string>
<string name="loading_ads_content">Ads are about to be shown</string>
<string name="choose_photo">Photo</string>
<string name="choose_video">Video</string>
<string name="choose_audio">Audio</string>
<string name="choose_document">Document</string>
<string name="next">Next</string>
<string name="notification_malware_1">Your device may be at risk. Tap to scan and stay safe.</string>
<string name="notification_malware_2">Your device might be at risk. Tap to scan and secure it now.</string>
......
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