Commit 49a23028 authored by wanglei's avatar wanglei

切换max

parent b75e9002
......@@ -13,6 +13,7 @@ import com.base.filerecoveryrecyclebin.activity.recovery.FileScanResultActivity
import com.base.filerecoveryrecyclebin.activity.repeat.RepeatAnimationActivity
import com.base.filerecoveryrecyclebin.activity.screenshot.ScreenShotAnimationActivity
import com.base.filerecoveryrecyclebin.adapter.AppFunctionAdapter
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.ads.admob.AdmobNativeUtils
import com.base.filerecoveryrecyclebin.bean.ConstObject.JUNK_CLEANER
......@@ -115,7 +116,7 @@ class ResultActivity : BaseActivity<ActivityLayoutResultBinding>() {
onBackPressedDispatcher.addCallback(object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
AdmobInterstitialUtils.showInterstitialAd(this@ResultActivity) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@ResultActivity){
finishToMain()
}
}
......@@ -125,7 +126,7 @@ class ResultActivity : BaseActivity<ActivityLayoutResultBinding>() {
onBackPressedDispatcher.onBackPressed()
}
AdmobNativeUtils.showNativeAd(this@ResultActivity, binding.flAd, R.layout.layout_native_custom_white)
AdmobMaxHelper.admobMaxShowNativeAd(this@ResultActivity, binding.flAd, 0)
}
override fun onDestroy() {
......
......@@ -14,6 +14,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import com.base.filerecoveryrecyclebin.BuildConfig
import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.activity.ResultActivity
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.bean.ChildBean
import com.base.filerecoveryrecyclebin.bean.ConstObject.JUNK_CLEANER
......@@ -88,7 +89,7 @@ class CleanJunkActivity : BaseActivity<ActivityLayoutCleanJunkBinding>() {
override fun handleOnBackPressed() {
showExitFunctionDialog {
if (it) {
AdmobInterstitialUtils.showInterstitialAd(this@CleanJunkActivity) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@CleanJunkActivity) {
finishToMain()
}
} else {
......
......@@ -9,6 +9,7 @@ import androidx.activity.addCallback
import androidx.core.animation.doOnEnd
import androidx.core.view.updatePadding
import com.base.filerecoveryrecyclebin.activity.ResultActivity
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.bean.ConstObject.JUNK_CLEANER
import com.base.filerecoveryrecyclebin.databinding.ActivityLayoutCleanupingBinding
......@@ -77,7 +78,7 @@ class CleaningActivity : BaseActivity<ActivityLayoutCleanupingBinding>() {
binding.idTvJd.text = "${it.animatedValue as Int}"
}
doOnEnd {
AdmobInterstitialUtils.showInterstitialAd(this@CleaningActivity) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@CleaningActivity) {
startActivity(
Intent(this@CleaningActivity, ResultActivity::class.java).putExtra("from", JUNK_CLEANER)
.putExtra("clean_size", intentSize)
......
......@@ -7,6 +7,7 @@ import android.view.animation.LinearInterpolator
import android.widget.Toast
import androidx.activity.addCallback
import androidx.core.view.updatePadding
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.databinding.ActivityLayoutScanJunkBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity
......@@ -121,7 +122,7 @@ class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() {
binding.root.postDelayed({
if (showAd) {
AdmobInterstitialUtils.showInterstitialAd(this) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this) {
a1.cancel()
a2.cancel()
a3.cancel()
......
......@@ -8,6 +8,7 @@ import android.widget.Toast
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.adapter.MediaSubAdapter
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.bean.MediaBean
import com.base.filerecoveryrecyclebin.databinding.ActivityPrivacyManageBinding
......@@ -69,7 +70,7 @@ class PrivacyManageActivity : BaseActivity<ActivityPrivacyManageBinding>() {
private fun deleteFilesDirMedia() {
showDeletePermanentlyDialog {
AdmobInterstitialUtils.showInterstitialAd(this) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this) {
lifecycleScope.launch(Dispatchers.IO) {
val list = mediaSubAdapter.getSelectData()
list.forEach {
......
......@@ -8,6 +8,7 @@ import androidx.activity.addCallback
import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.bean.ConstObject.privacyPinPassword
import com.base.filerecoveryrecyclebin.databinding.ActivityPrivacySpaceBinding
......@@ -92,7 +93,7 @@ class PrivacySpaceActivity : BaseActivity<ActivityPrivacySpaceBinding>() {
onBackPressedDispatcher.addCallback {
showExitFunctionDialog(true) {
if (it) {
AdmobInterstitialUtils.showInterstitialAd(this@PrivacySpaceActivity) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@PrivacySpaceActivity) {
finishToMain()
}
} else {
......
......@@ -5,6 +5,7 @@ import android.graphics.Color
import android.os.Environment
import androidx.activity.addCallback
import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_AUDIOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_DOCUMENTS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_PHOTOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_VIDEOS
......@@ -34,6 +35,7 @@ class FileRecoveredActivity : BaseActivity<ActivityFileRecoveredBinding>() {
SCAN_PHOTOS -> if (number == 1) "Photo" else "Photos"
SCAN_VIDEOS -> if (number == 1) "Video" else "Videos"
SCAN_DOCUMENTS -> if (number == 1) "Document" else "Documents"
SCAN_AUDIOS -> if (number == 1) "Audio" else "Audios"
else -> ""
}
binding.tvType.text = type
......
......@@ -13,6 +13,7 @@ import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.adapter.FileTimeColumnsAdapter
import com.base.filerecoveryrecyclebin.adapter.RecoveryFilterAdapter
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_AUDIOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_DOCUMENTS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_PHOTOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_VIDEOS
......@@ -94,6 +95,9 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
binding.clThumbnails.visibility = View.GONE
}
SCAN_AUDIOS -> {
binding.clThumbnails.visibility = View.GONE
}
}
adapter = FileTimeColumnsAdapter(scanType,
......@@ -145,6 +149,7 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
SCAN_PHOTOS -> dirType = "Photo"
SCAN_DOCUMENTS -> dirType = "Document"
SCAN_VIDEOS -> dirType = "Video"
SCAN_AUDIOS -> dirType = "Audio"
}
val appName = this.resources.getString(R.string.app_name)
val appDir = File(Environment.getExternalStorageDirectory(), appName)
......
......@@ -4,6 +4,7 @@ import android.annotation.SuppressLint
import android.graphics.Color
import androidx.activity.addCallback
import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_DOCUMENTS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_PHOTOS
......@@ -54,7 +55,7 @@ class FileScanActivity : BaseActivity<ActivityFileScanBinding>() {
onBackPressedDispatcher.addCallback {
showExitFunctionDialog {
if (it) {
AdmobInterstitialUtils.showInterstitialAd(this@FileScanActivity) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@FileScanActivity) {
finishToMain()
}
} else {
......
......@@ -9,13 +9,16 @@ import androidx.activity.addCallback
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.adapter.FileFolderAdapter
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_AUDIOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_DOCUMENTS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_PHOTOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_VIDEOS
import com.base.filerecoveryrecyclebin.bean.FolderBean
import com.base.filerecoveryrecyclebin.bean.RecoveryBean
import com.base.filerecoveryrecyclebin.bean.RecoveryBean.Companion.setType
import com.base.filerecoveryrecyclebin.bean.RecoveryBean.Companion.setAudioType
import com.base.filerecoveryrecyclebin.bean.RecoveryBean.Companion.setDocumentType
import com.base.filerecoveryrecyclebin.databinding.ActivityFileScanResultBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.help.FileHelp.loadFileByFilter
......@@ -67,7 +70,12 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
SCAN_VIDEOS -> {
binding.tvTittle.text = "Video Recovery"
binding.tvFileType.text = "videos"
binding.tvFileType.text = "Videos"
}
SCAN_AUDIOS -> {
binding.tvTittle.text = "Audio Recovery"
binding.tvFileType.text = "Audios"
}
}
fileFolderAdapter = FileFolderAdapter(scanType) { folderBean ->
......@@ -94,7 +102,7 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
onBackPressedDispatcher.addCallback {
showExitFunctionDialog {
if (it) {
AdmobInterstitialUtils.showInterstitialAd(this@FileScanResultActivity) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@FileScanResultActivity) {
finishToMain()
}
} else {
......@@ -128,7 +136,6 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
val foundFlow: SharedFlow<Pair<Int, String>> = mFoundFlow
val dialogClass = FileScanDialog(this)
val scanDialog = dialogClass.showFileScanDialog(pathFlow, foundFlow) {
......@@ -141,6 +148,7 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
SCAN_PHOTOS -> FileHexEx::isImage
SCAN_DOCUMENTS -> FileHexEx::isDocument
SCAN_VIDEOS -> FileHexEx::isVideo
SCAN_AUDIOS -> FileHexEx::isAudio
else -> FileHexEx::isImage
}
val root = Environment.getExternalStorageDirectory()
......@@ -155,7 +163,7 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
lifecycleScope.launch(Dispatchers.Main) {
binding.ivWancheng.visibility = View.VISIBLE
binding.tvScanning.text = "Completed"
AdmobInterstitialUtils.showInterstitialAd(this@FileScanResultActivity, isShowDialog = false) {}
AdmobMaxHelper.admobMaxShowInterstitialAd(this@FileScanResultActivity)
binding.flEmpty.isVisible = pathList.isEmpty()
setAdapterData(null)
dialogClass.finishScan {
......@@ -188,7 +196,10 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
}
val recoveryBean = RecoveryBean(path)
if (scanType == SCAN_DOCUMENTS) {
recoveryBean.setType()
recoveryBean.setDocumentType()
}
if (scanType == SCAN_AUDIOS) {
recoveryBean.setAudioType()
}
hashMap[folder]?.add(recoveryBean)
return isNewFolder
......
......@@ -6,6 +6,7 @@ import androidx.activity.addCallback
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.adapter.MediaAdapter
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils.showInterAdSp
import com.base.filerecoveryrecyclebin.ads.admob.AdmobNativeUtils
......@@ -74,15 +75,9 @@ class RepeatActivity : BaseActivity<ActivityRepeatBinding>() {
onBackPressedDispatcher.addCallback {
showExitFunctionDialog {
if (it) {
if (ConfigHelper.admobTrueMaxFlase) {
AdmobInterstitialUtils.showInterstitialAd(this@RepeatActivity) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@RepeatActivity){
finishToMain()
}
} else {
AdMaxInterstitialUtils.showInterstitialAd(this@RepeatActivity) {
finishToMain()
}
}
} else {
finishToMain()
}
......@@ -99,7 +94,7 @@ class RepeatActivity : BaseActivity<ActivityRepeatBinding>() {
binding.tvClean.setOnClickListener {
showDeletePermanentlyDialog {
if (showInterAdSp()) {
AdmobInterstitialUtils.showInterstitialAd(this) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this){
cleanFile()
}
} else {
......@@ -141,7 +136,7 @@ class RepeatActivity : BaseActivity<ActivityRepeatBinding>() {
binding.progressBar.visibility = View.GONE
mediaAdapter.setData(beanList)
if (beanList.sumOf { it.beans.size } > 6 || ConfigHelper.mustShowNativeAd) {
AdmobNativeUtils.showNativeAd(this@RepeatActivity, binding.flAd)
AdmobMaxHelper.admobMaxShowNativeAd(this@RepeatActivity, binding.flAd)
}
}
}
......
......@@ -3,6 +3,7 @@ package com.base.filerecoveryrecyclebin.activity.repeat
import android.content.Intent
import android.widget.Toast
import androidx.activity.addCallback
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.ads.max.AdMaxInterstitialUtils
import com.base.filerecoveryrecyclebin.databinding.ActivityRepeatAnimationBinding
......@@ -19,17 +20,10 @@ class RepeatAnimationActivity : BaseActivity<ActivityRepeatAnimationBinding>() {
override fun initView() {
binding.root.postDelayed({
if (ConfigHelper.admobTrueMaxFlase) {
AdmobInterstitialUtils.showInterstitialAd(this) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this) {
startActivity(Intent(this, RepeatActivity::class.java))
finish()
}
} else {
AdMaxInterstitialUtils.showInterstitialAd(this) {
startActivity(Intent(this, RepeatActivity::class.java))
finish()
}
}
}, Random.nextLong(3000, 4500))
}
......
......@@ -7,6 +7,7 @@ import androidx.activity.addCallback
import androidx.core.view.updatePadding
import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.adapter.ScreenShotAdapter
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils.showInterAdSp
import com.base.filerecoveryrecyclebin.ads.admob.AdmobNativeUtils
......@@ -88,7 +89,7 @@ class ScreenShotActivity : BaseActivity<ActivityScreenShotBinding>() {
binding.tvSize.text = sizeF[0]
binding.tvUnit.text = sizeF[1]
if (list.sumOf { it.screenPhotoBean.size } > 6 || ConfigHelper.mustShowNativeAd) {
AdmobNativeUtils.showNativeAd(this@ScreenShotActivity, binding.flAd)
AdmobMaxHelper.admobMaxShowNativeAd(this@ScreenShotActivity, binding.flAd)
}
}
}
......@@ -101,7 +102,7 @@ class ScreenShotActivity : BaseActivity<ActivityScreenShotBinding>() {
onBackPressedDispatcher.addCallback {
showExitFunctionDialog {
if (it) {
AdmobInterstitialUtils.showInterstitialAd(this@ScreenShotActivity) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@ScreenShotActivity) {
finishToMain()
}
} else {
......@@ -122,7 +123,7 @@ class ScreenShotActivity : BaseActivity<ActivityScreenShotBinding>() {
showDeletePermanentlyDialog {
if (showInterAdSp()) {
AdmobInterstitialUtils.showInterstitialAd(this) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this) {
cleanFile()
}
} else {
......@@ -133,6 +134,7 @@ class ScreenShotActivity : BaseActivity<ActivityScreenShotBinding>() {
}
}
@SuppressLint("SetTextI18n")
private fun cleanFile() {
val files = screenShotAdapter.getSelectData()
lifecycleScope.launch(Dispatchers.IO) {
......
......@@ -3,6 +3,7 @@ package com.base.filerecoveryrecyclebin.activity.screenshot
import android.content.Intent
import android.widget.Toast
import androidx.activity.addCallback
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.databinding.ActivityScreenShotAnimationBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity
......@@ -16,7 +17,7 @@ class ScreenShotAnimationActivity : BaseActivity<ActivityScreenShotAnimationBind
override fun initView() {
binding.root.postDelayed({
AdmobInterstitialUtils.showInterstitialAd(this) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this) {
startActivity(Intent(this, ScreenShotActivity::class.java))
finish()
}
......
......@@ -12,6 +12,7 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_AUDIOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_DOCUMENTS
import com.base.filerecoveryrecyclebin.bean.FolderBean
import com.base.filerecoveryrecyclebin.bean.RecoveryBean
......@@ -55,7 +56,7 @@ class FileTimeColumnsAdapter(
val subAdapter = MediaColumnsAdapter()
if (scanType == SCAN_DOCUMENTS) {
if (scanType == SCAN_DOCUMENTS || scanType == SCAN_AUDIOS) {
binding.rvMediaColumns.layoutManager = LinearLayoutManager(context)
} else {
binding.rvMediaColumns.layoutManager = GridLayoutManager(context, columns)
......@@ -132,6 +133,9 @@ class FileTimeColumnsAdapter(
"DOC" -> R.mipmap.doc
"XLS" -> R.mipmap.xls
"PPT" -> R.mipmap.ppt
"MP3" -> R.mipmap.pdf
"WAV" -> R.mipmap.pdf
"FLAC" -> R.mipmap.pdf
else -> 0
}
binding.ivType.setImageResource(icon)
......
......@@ -7,8 +7,13 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.bean.RecycleBinBean
import com.base.filerecoveryrecyclebin.databinding.ItemMediaFileBinding
import com.base.filerecoveryrecyclebin.databinding.ItemRecycleBinBeanBinding
import com.base.filerecoveryrecyclebin.databinding.ItemRecyclebinFileBinding
import com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatTime
import com.base.filerecoveryrecyclebin.view.XmlEx.inflate
import com.bumptech.glide.Glide
import java.io.File
class RecycleBinAdapter : RecyclerView.Adapter<RecycleBinAdapter.RBAV>() {
......@@ -20,7 +25,7 @@ class RecycleBinAdapter : RecyclerView.Adapter<RecycleBinAdapter.RBAV>() {
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RBAV {
return RBAV(R.layout.item_recycle_bin_bean.inflate(parent))
return RBAV(R.layout.item_recyclebin_file.inflate(parent))
}
override fun getItemCount(): Int {
......@@ -29,13 +34,14 @@ class RecycleBinAdapter : RecyclerView.Adapter<RecycleBinAdapter.RBAV>() {
@SuppressLint("SetTextI18n")
override fun onBindViewHolder(holder: RBAV, position: Int) {
val binding = ItemRecycleBinBeanBinding.bind(holder.itemView)
val binding = ItemRecyclebinFileBinding.bind(holder.itemView)
val bean = beanList[position]
binding.tvPath.text = bean.path
binding.tvDeleted.text = "deleted=${bean.deleted}"
binding.tvDeleteTime.text = "time=" + bean.deleteTime.toString()
binding.tvSize.text = "size=${bean.size}"
binding.tvMimetype.text = "mimetype=${bean.mimeType}"
val file = File(bean.path)
val context = holder.itemView.context
Glide.with(context).load(bean.path).centerCrop().into(binding.iv)
binding.tvName.text = file.name
binding.tvTime.text = "delete time:" + bean.deleteTime.toString()
binding.tvSize.text = bean.size.toFormatTime()
}
@SuppressLint("NotifyDataSetChanged")
......
......@@ -4,12 +4,14 @@ import com.applovin.sdk.AppLovinMediationProvider
import com.applovin.sdk.AppLovinSdk
import com.applovin.sdk.AppLovinSdkInitializationConfiguration
import com.base.filerecoveryrecyclebin.utils.LogEx
import com.google.android.gms.ads.identifier.AdvertisingIdClient
import java.util.Collections
import java.util.concurrent.Executors
import java.util.concurrent.atomic.AtomicBoolean
object AdMaxInit {
private val TAG = "com.base.filerecoveryrecyclebin.ads.max.AdMaxInit"
private val TAG = "AdMaxInit"
var isAdMaxInit = AtomicBoolean(false)
var maxInitAction: (() -> Unit)? = null
......@@ -24,10 +26,10 @@ object AdMaxInit {
initConfigBuilder.mediationProvider = AppLovinMediationProvider.MAX
// Enable test mode by default for the current device. Cannot be run on the main thread.
// val currentGaid = AdvertisingIdClient.getAdvertisingIdInfo(this).id
// if (currentGaid != null) {
// initConfigBuilder.testDeviceAdvertisingIds = Collections.singletonList(currentGaid)
// }
val currentGaid = AdvertisingIdClient.getAdvertisingIdInfo(this).id
if (currentGaid != null) {
initConfigBuilder.testDeviceAdvertisingIds = Collections.singletonList(currentGaid)
}
// Initialize the AppLovin SDK
val sdk = AppLovinSdk.getInstance(this)
......
......@@ -24,6 +24,7 @@ object ConstObject {
const val SCAN_PHOTOS = 1
const val SCAN_DOCUMENTS = 2
const val SCAN_VIDEOS = 3
const val SCAN_AUDIOS = 4
var ifAgreePrivacy = false
......
......@@ -2,9 +2,12 @@ package com.base.filerecoveryrecyclebin.bean
import com.base.filerecoveryrecyclebin.utils.FileHexEx.isDoc
import com.base.filerecoveryrecyclebin.utils.FileHexEx.isDocx
import com.base.filerecoveryrecyclebin.utils.FileHexEx.isFlac
import com.base.filerecoveryrecyclebin.utils.FileHexEx.isMp3
import com.base.filerecoveryrecyclebin.utils.FileHexEx.isPPT
import com.base.filerecoveryrecyclebin.utils.FileHexEx.isPPTX
import com.base.filerecoveryrecyclebin.utils.FileHexEx.isPdf
import com.base.filerecoveryrecyclebin.utils.FileHexEx.isWav
import com.base.filerecoveryrecyclebin.utils.FileHexEx.isXls
import com.base.filerecoveryrecyclebin.utils.FileHexEx.isXlsx
import java.io.File
......@@ -17,7 +20,7 @@ data class RecoveryBean(
var type: String = ""
companion object {
fun RecoveryBean.setType() {
fun RecoveryBean.setDocumentType() {
val file = File(path)
if (isPdf(file)) {
type = "PDF"
......@@ -32,5 +35,19 @@ data class RecoveryBean(
type = "PPT"
}
}
fun RecoveryBean.setAudioType() {
val file = File(path)
if (isMp3(file)) {
type = "MP3"
}
if (isWav(file)) {
type = "WAV"
}
if (isFlac(file)) {
type = "FLAC"
}
}
}
}
\ No newline at end of file
......@@ -2,6 +2,7 @@ package com.base.filerecoveryrecyclebin.fragment
import android.animation.AnimatorSet
import android.animation.ObjectAnimator
import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.content.Intent
import android.view.View
......@@ -16,24 +17,24 @@ import com.base.filerecoveryrecyclebin.activity.screenshot.ScreenShotAnimationAc
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobNativeUtils
import com.base.filerecoveryrecyclebin.ads.max.AdMaxNativeUtils
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_AUDIOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_DOCUMENTS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_PHOTOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_VIDEOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.privacyPinPassword
import com.base.filerecoveryrecyclebin.databinding.FragmentHome3Binding
import com.base.filerecoveryrecyclebin.databinding.FragmentHomeBinding
import com.base.filerecoveryrecyclebin.help.BaseFragment
import com.base.filerecoveryrecyclebin.help.ConfigHelper
class HomeFragment : BaseFragment<FragmentHomeBinding>() {
class HomeFragment : BaseFragment<FragmentHome3Binding>() {
override val binding: FragmentHomeBinding by lazy {
FragmentHomeBinding.inflate(layoutInflater)
override val binding: FragmentHome3Binding by lazy {
FragmentHome3Binding.inflate(layoutInflater)
}
private lateinit var animatorSet: AnimatorSet
override fun setView() {
animatorSet = createHeartbeatAnimation(binding.flScan)
binding.lottie.repeatCount = ValueAnimator.INFINITE
AdmobMaxHelper.admobMaxShowNativeAd(requireActivity(), binding.flAd, 0)
}
......@@ -42,30 +43,27 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
startActivity(Intent(requireContext(), ScanJunkActivity::class.java))
// sendNotification(requireContext(), ConstObject.ID_SCREENSHOT_CLEAN)
}
binding.flRyPhoto.setOnClickListener {
binding.cardRyPhotos.setOnClickListener {
startActivity(Intent(requireContext(), FileScanResultActivity::class.java).apply {
putExtra("ScanType", SCAN_PHOTOS)
})
}
binding.flRyVideo.setOnClickListener {
binding.cardRyVideos.setOnClickListener {
startActivity(Intent(requireContext(), FileScanResultActivity::class.java).apply {
putExtra("ScanType", SCAN_VIDEOS)
})
}
binding.cardRyDocument.setOnClickListener {
binding.cardRyDocuments.setOnClickListener {
startActivity(Intent(requireContext(), FileScanResultActivity::class.java).apply {
putExtra("ScanType", SCAN_DOCUMENTS)
})
}
binding.cardPrivacySpace.setOnClickListener {
if (privacyPinPassword.isNotEmpty()) {
startActivity(Intent(requireContext(), PrivacyPinOneActivity::class.java))
} else {
startActivity(Intent(requireContext(), PrivacySpaceActivity::class.java).apply {
binding.cardRyAudios.setOnClickListener {
startActivity(Intent(requireContext(), FileScanResultActivity::class.java).apply {
putExtra("ScanType", SCAN_AUDIOS)
})
}
}
binding.cardScreenshot.setOnClickListener {
startActivity(Intent(requireContext(), ScreenShotAnimationActivity::class.java))
}
......@@ -77,40 +75,16 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
}
}
@SuppressLint("Recycle")
fun createHeartbeatAnimation(view: View): AnimatorSet {
// 创建放大动画
val scaleUpAnimator = ObjectAnimator.ofFloat(view, "scaleX", 1f, 1.1f)
scaleUpAnimator.setDuration(500)
scaleUpAnimator.interpolator = AccelerateDecelerateInterpolator()
scaleUpAnimator.repeatCount = ObjectAnimator.INFINITE
scaleUpAnimator.repeatMode = ObjectAnimator.REVERSE
// 创建缩小动画
val scaleDownAnimator = ObjectAnimator.ofFloat(view, "scaleY", 1.1f, 1f)
scaleDownAnimator.setDuration(500)
scaleDownAnimator.interpolator = AccelerateDecelerateInterpolator()
scaleDownAnimator.setStartDelay(500) // 延迟开始,以便与放大动画同步结束
scaleDownAnimator.repeatCount = ObjectAnimator.INFINITE
scaleDownAnimator.repeatMode = ObjectAnimator.REVERSE
// 组合放大和缩小动画
val animatorSet = AnimatorSet()
animatorSet.play(scaleUpAnimator).with(scaleDownAnimator)
// 启动动画
animatorSet.start()
return animatorSet
}
override fun onPause() {
super.onPause()
animatorSet.pause()
binding.lottie.cancelAnimation()
}
override fun onResume() {
super.onResume()
animatorSet.resume()
binding.lottie.playAnimation()
}
}
\ No newline at end of file
package com.base.filerecoveryrecyclebin.fragment
import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.view.View
import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.activity.MainActivity
import com.base.filerecoveryrecyclebin.adapter.RecycleBinAdapter
import com.base.filerecoveryrecyclebin.bean.RecycleBinBean
import com.base.filerecoveryrecyclebin.databinding.FragmentRecycleBinBinding
import com.base.filerecoveryrecyclebin.help.BaseFragment
import com.base.filerecoveryrecyclebin.help.PermissionHelp.checkStorePermission
import com.base.filerecoveryrecyclebin.help.PermissionHelp.requestStorePermission
import com.base.filerecoveryrecyclebin.service.StayNotificationService
import com.base.filerecoveryrecyclebin.utils.LogEx
import com.base.filerecoveryrecyclebin.view.DialogViews.showGerPermission
import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.File
class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>() {
private val TAG = "RecycleBinFragment"
private lateinit var handler: Handler
private lateinit var recycleBinAdapter: RecycleBinAdapter
override val binding: FragmentRecycleBinBinding by lazy {
FragmentRecycleBinBinding.inflate(layoutInflater)
}
override fun setView() {
handler = Handler(requireActivity().mainLooper) { message ->
if (message.what == 99) {
// LogEx.logDebug(TAG, "媒体库更新了")
}
if (message.what == 100) {
// LogEx.logDebug(TAG, "回收站数据更新了")
}
true
}
StayNotificationService.mainHandler = handler
requireActivity().startService(Intent(requireActivity(), StayNotificationService::class.java).apply {
this.action = StayNotificationService.MEDIA_OBSERVER_ACTION
})
requireActivity().startService(Intent(requireContext(), StayNotificationService::class.java).apply {
this.action = StayNotificationService.FILE_OBSERVER_ACTION
putExtra("isStart", true)
})
recycleBinAdapter = RecycleBinAdapter()
binding.rv.adapter = recycleBinAdapter
val launcher = (requireActivity() as MainActivity).launcher
if (requireActivity().checkStorePermission()) {
initData()
} else {
requireContext().showGerPermission(allow = {
requireContext().requestStorePermission(launcher, result = { flag ->
if (flag) {
initData()
}
})
})
}
}
private fun initData() {
lifecycleScope.launch(Dispatchers.IO) {
val file = requireActivity().filesDir
val recycleBinDir = File(file, "RecycleBin")
if (!recycleBinDir.exists()) {
recycleBinDir.mkdirs()
}
val binList = recycleBinDir.listFiles()?.filter { it.name.contains(".bin") }
val beanList = arrayListOf<RecycleBinBean>()
binList?.forEach {
val bean = Gson().fromJson(it.readText(), RecycleBinBean::class.java)
beanList.add(bean)
}
launch(Dispatchers.Main) {
binding.rv.isVisible = !binList.isNullOrEmpty()
binding.llEmpty.isVisible = binList.isNullOrEmpty()
recycleBinAdapter.setData(beanList)
}
}
}
}
\ No newline at end of file
......@@ -105,7 +105,7 @@ object FileHexEx {
val aviHex = "524946461C1BA900415649204C495354"
val hex = FileHelp.readFileRange(file.absolutePath, 0, 16).byteArrayToHexString()
val flag = hex == aviHex
LogEx.logDebug(TAG, "flag=$flag hex=${hex} ${file.absolutePath}")
// LogEx.logDebug(TAG, "flag=$flag hex=${hex} ${file.absolutePath}")
return flag
}
......@@ -126,5 +126,33 @@ object FileHexEx {
}
fun isAudio(file: File): Boolean {
return isMp3(file) || isFlac(file) || isWav(file)
}
fun isMp3(file: File): Boolean {
val mp3Hex1 = "49443303"
val hex1 = FileHelp.readFileRange(file.absolutePath, 0, 4).byteArrayToHexString()
val flag1 = hex1 == mp3Hex1
LogEx.logDebug(TAG, "flag1=$flag1 hex1=${hex1} ${file.absolutePath}")
return flag1
}
fun isFlac(file: File): Boolean {
val flacHex = "664C6143"
val hex1 = FileHelp.readFileRange(file.absolutePath, 0, 4).byteArrayToHexString()
val flag1 = hex1 == flacHex
LogEx.logDebug(TAG, "flag1=$flag1 hex1=${hex1} ${file.absolutePath}")
return flag1
}
fun isWav(file: File): Boolean {
val wavHex = "5249464668E7820957415645666D74"
val hex1 = FileHelp.readFileRange(file.absolutePath, 0, 15).byteArrayToHexString()
val flag1 = hex1 == wavHex
LogEx.logDebug(TAG, "flag1=$flag1 hex1=${hex1} ${file.absolutePath}")
return flag1
}
}
\ No newline at end of file
......@@ -7,7 +7,7 @@ object LogEx {
val isOpen = true
val filterTAG = arrayOf(
"FileScanActivity",
"FileHexEx",
// "FileHexEx",
"FileGridAdapter"
)
......
......@@ -9,6 +9,7 @@ import android.view.animation.LinearInterpolator
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobNativeUtils
import com.base.filerecoveryrecyclebin.databinding.DialogFileScanBinding
import kotlinx.coroutines.Dispatchers
......@@ -55,7 +56,7 @@ class FileScanDialog(
a1.cancel()
}
AdmobNativeUtils.showNativeAd(activity, binding.flAd, R.layout.layout_native_custom_big)
AdmobMaxHelper.admobMaxShowNativeAd(activity, binding.flAd, 1)
var pathShowed = false
activity.lifecycleScope.launch(Dispatchers.Main) {
......
This diff is collapsed.
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".fragment.RecycleBinFragment">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:listitem="@layout/item_media_file" />
</LinearLayout>
<LinearLayout
android:id="@+id/ll_empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:orientation="vertical"
android:visibility="gone"
tools:ignore="UseCompoundDrawables,UselessParent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:src="@mipmap/r_queshengtu"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="30dp"
android:gravity="center"
android:text="Mobispeedy is protecting your photos, videos, files &amp; App files from being deleted"
tools:ignore="HardcodedText" />
</LinearLayout>
</FrameLayout>
\ No newline at end of file
......@@ -39,6 +39,7 @@
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:singleLine="true"
android:textColor="#333333"
android:textSize="15sp"
......
<?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="wrap_content"
android:layout_marginHorizontal="20dp"
android:layout_marginVertical="6dp">
<androidx.cardview.widget.CardView
android:id="@+id/card"
android:layout_width="50dp"
android:layout_height="50dp"
app:cardCornerRadius="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<ImageView
android:id="@+id/iv"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:ignore="ContentDescription" />
</androidx.cardview.widget.CardView>
<LinearLayout
android:id="@+id/ll"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="@id/card"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/card"
app:layout_constraintTop_toTopOf="@id/card">
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="middle"
android:singleLine="true"
android:textColor="#333333"
android:textSize="15sp"
tools:text="VID_20240210_200748.mp3" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="8dp">
<TextView
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:textColor="#999999"
android:textSize="14sp"
tools:text="2024/07/16" />
<TextView
android:id="@+id/tv_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical|end"
android:textColor="#999999"
android:textSize="14sp"
tools:text="8.7 MB" />
</FrameLayout>
</LinearLayout>
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_marginTop="12dp"
android:layout_marginEnd="10dp"
android:background="#F4F4F4"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@id/ll" />
</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
This source diff could not be displayed because it is too large. You can view the blob instead.
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