Commit 63c7a50f authored by wanglei's avatar wanglei

...

parent ea161f3e
...@@ -5,8 +5,6 @@ import android.content.Intent ...@@ -5,8 +5,6 @@ import android.content.Intent
import android.graphics.Color import android.graphics.Color
import androidx.activity.OnBackPressedCallback import androidx.activity.OnBackPressedCallback
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.activity.junkclean.ScanJunkActivity
import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacyPinOneActivity import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacyPinOneActivity
import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacySpaceActivity import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacySpaceActivity
import com.base.filerecoveryrecyclebin.activity.recovery.FileScanResultActivity import com.base.filerecoveryrecyclebin.activity.recovery.FileScanResultActivity
...@@ -14,8 +12,6 @@ import com.base.filerecoveryrecyclebin.activity.repeat.RepeatAnimationActivity ...@@ -14,8 +12,6 @@ import com.base.filerecoveryrecyclebin.activity.repeat.RepeatAnimationActivity
import com.base.filerecoveryrecyclebin.activity.screenshot.ScreenShotAnimationActivity import com.base.filerecoveryrecyclebin.activity.screenshot.ScreenShotAnimationActivity
import com.base.filerecoveryrecyclebin.adapter.AppFunctionAdapter import com.base.filerecoveryrecyclebin.adapter.AppFunctionAdapter
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper 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 import com.base.filerecoveryrecyclebin.bean.ConstObject.JUNK_CLEANER
import com.base.filerecoveryrecyclebin.bean.ConstObject.PRIVACY_SPACE import com.base.filerecoveryrecyclebin.bean.ConstObject.PRIVACY_SPACE
import com.base.filerecoveryrecyclebin.bean.ConstObject.RECOVERY_DOCUMENTS import com.base.filerecoveryrecyclebin.bean.ConstObject.RECOVERY_DOCUMENTS
......
...@@ -10,7 +10,6 @@ import android.text.style.UnderlineSpan ...@@ -10,7 +10,6 @@ import android.text.style.UnderlineSpan
import android.view.View import android.view.View
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.MyApplication import com.base.filerecoveryrecyclebin.MyApplication
import com.base.filerecoveryrecyclebin.activity.junkclean.ScanJunkActivity
import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacyPinOneActivity import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacyPinOneActivity
import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacySpaceActivity import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacySpaceActivity
import com.base.filerecoveryrecyclebin.activity.recovery.FileScanResultActivity import com.base.filerecoveryrecyclebin.activity.recovery.FileScanResultActivity
...@@ -19,7 +18,6 @@ import com.base.filerecoveryrecyclebin.activity.screenshot.ScreenShotActivity ...@@ -19,7 +18,6 @@ import com.base.filerecoveryrecyclebin.activity.screenshot.ScreenShotActivity
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.ads.admob.AdmobNativeUtils import com.base.filerecoveryrecyclebin.ads.admob.AdmobNativeUtils
import com.base.filerecoveryrecyclebin.ads.admob.AdmobOpenUtils
import com.base.filerecoveryrecyclebin.ads.max.AdMaxInterstitialUtils import com.base.filerecoveryrecyclebin.ads.max.AdMaxInterstitialUtils
import com.base.filerecoveryrecyclebin.ads.max.AdMaxOpenUtils import com.base.filerecoveryrecyclebin.ads.max.AdMaxOpenUtils
import com.base.filerecoveryrecyclebin.bean.ConstObject import com.base.filerecoveryrecyclebin.bean.ConstObject
......
package com.base.filerecoveryrecyclebin.activity.junkclean package com.base.filerecoveryrecyclebin.activity.junkclean
import android.animation.ValueAnimator import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.graphics.Color import android.graphics.Color
import android.view.View
import android.view.animation.LinearInterpolator import android.view.animation.LinearInterpolator
import android.widget.Toast import android.widget.Toast
import androidx.activity.addCallback import androidx.activity.addCallback
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.databinding.ActivityLayoutScanJunkBinding import com.base.filerecoveryrecyclebin.databinding.ActivityLayoutScanJunkBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.help.PermissionHelp.checkStorePermission import com.base.filerecoveryrecyclebin.help.PermissionHelp.checkStorePermission
import com.base.filerecoveryrecyclebin.help.PermissionHelp.requestStorePermission import com.base.filerecoveryrecyclebin.help.PermissionHelp.requestStorePermission
import com.base.filerecoveryrecyclebin.utils.BarUtils import com.base.filerecoveryrecyclebin.utils.BarUtils
import com.base.filerecoveryrecyclebin.view.DialogViews.showGerPermission import com.base.filerecoveryrecyclebin.view.DialogViews.showGerPermission
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
/** /**
* 清理动画页面 * 清理动画页面
*/ */
class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() { class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() {
private val TAG = "ScanJunkActivity"
override val binding: ActivityLayoutScanJunkBinding by lazy { override val binding: ActivityLayoutScanJunkBinding by lazy {
ActivityLayoutScanJunkBinding.inflate(layoutInflater) ActivityLayoutScanJunkBinding.inflate(layoutInflater)
} }
private var job: Job? = null
override fun initView() { override fun initView() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT) BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
binding.root.updatePadding(top = BarUtils.getStatusBarHeight()) binding.root.updatePadding(top = BarUtils.getStatusBarHeight())
if (checkStorePermission()) { if (!checkStorePermission()) {
playLottie()
} else {
showGerPermission(tittle = "Storage Permission Required", showGerPermission(tittle = "Storage Permission Required",
desc = "This feature requires access to your storage to scan your files and clean up junk files and unused APK files. We will not transmit your data to any third-party service. Please grant permission so that we can provide you with better service.", desc = "This feature requires access to your storage to scan your files and clean up junk files and unused APK files. We will not transmit your data to any third-party service. Please grant permission so that we can provide you with better service.",
deny = { finishToMain() }, deny = { finishToMain() },
allow = { allow = {
requestStorePermission(launcher, result = { requestStorePermission(launcher, result = {
if (it) { if (it) {
playLottie(false)
} else { } else {
finishToMain() finishToMain()
} }
}) })
}) })
} }
} }
override fun initListener() { override fun initListener() {
onBackPressedDispatcher.addCallback { onBackPressedDispatcher.addCallback {
...@@ -55,13 +59,13 @@ class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() { ...@@ -55,13 +59,13 @@ class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() {
} }
} }
private var isPause = false
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
if (isPause) { if (checkStorePermission()) {
binding.idJunkScan.resumeAnimation() resumeLottie()
job = waitJob()
} }
isPause = false
} }
override fun onDestroy() { override fun onDestroy() {
...@@ -69,76 +73,81 @@ class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() { ...@@ -69,76 +73,81 @@ class ScanJunkActivity : BaseActivity<ActivityLayoutScanJunkBinding>() {
animator1?.cancel() animator1?.cancel()
animator2?.cancel() animator2?.cancel()
animator3?.cancel() animator3?.cancel()
binding.idJunkScan.cancelAnimation() binding.lottie.cancelAnimation()
} }
override fun onPause() { override fun onPause() {
super.onPause() super.onPause()
isPause = true
animator1?.pause() animator1?.pause()
animator2?.pause() animator2?.pause()
animator3?.pause() animator3?.pause()
binding.idJunkScan.pauseAnimation() binding.lottie.pauseAnimation()
job?.cancel()
} }
private fun playLottie(showAd: Boolean = true) { @SuppressLint("SetTextI18n")
val a1 = ValueAnimator.ofFloat(0f, 360f) private fun resumeLottie() {
a1.run { if (animator1 == null) {
duration = 1000 animator1 = ValueAnimator.ofFloat(0f, 360f)
repeatMode = ValueAnimator.RESTART animator1?.run {
repeatCount = ValueAnimator.INFINITE duration = 1000
interpolator = LinearInterpolator() repeatMode = ValueAnimator.RESTART
addUpdateListener { repeatCount = ValueAnimator.INFINITE
binding.idView1.rotation = it.animatedValue as Float interpolator = LinearInterpolator()
addUpdateListener {
binding.idView1.rotation = it.animatedValue as Float
}
} }
start()
} }
val a2 = ValueAnimator.ofFloat(0f, 360f) animator1?.start()
a2.run { if (animator2 == null) {
duration = 1000 animator2 = ValueAnimator.ofFloat(0f, 360f)
repeatMode = ValueAnimator.RESTART animator2?.run {
repeatCount = ValueAnimator.INFINITE duration = 1000
interpolator = LinearInterpolator() repeatMode = ValueAnimator.RESTART
addUpdateListener { repeatCount = ValueAnimator.INFINITE
binding.idView2.rotation = it.animatedValue as Float interpolator = LinearInterpolator()
addUpdateListener {
binding.idView2.rotation = it.animatedValue as Float
}
} }
start()
} }
val a3 = ValueAnimator.ofFloat(0f, 360f) animator2?.start()
a3.run { if (animator3 == null) {
duration = 1000 animator3 = ValueAnimator.ofFloat(0f, 360f)
repeatMode = ValueAnimator.RESTART animator3?.run {
repeatCount = ValueAnimator.INFINITE duration = 1000
interpolator = LinearInterpolator() repeatMode = ValueAnimator.RESTART
addUpdateListener { repeatCount = ValueAnimator.INFINITE
binding.idView3.rotation = it.animatedValue as Float interpolator = LinearInterpolator()
addUpdateListener {
binding.idView3.rotation = it.animatedValue as Float
}
} }
start()
} }
animator3?.start()
binding.lottie.imageAssetsFolder = "junk_scan/images/"
binding.lottie.setAnimation("junk_scan/data.json")
binding.lottie.playAnimation()
}
binding.idJunkScan.imageAssetsFolder = "junk_scan/images/" private fun waitJob() = lifecycleScope.launch(Dispatchers.Main) {
binding.idJunkScan.setAnimation("junk_scan/data.json") delay(5000)
binding.idJunkScan.playAnimation() binding.lottie.visibility = View.GONE
binding.root.postDelayed({ binding.lottieCompleted.visibility = View.VISIBLE
binding.lottieCompleted.playAnimation()
if (showAd) { binding.tv.text = "Completed!"
AdmobMaxHelper.admobMaxShowInterstitialAd(this) { animator1?.cancel()
a1.cancel() animator2?.cancel()
a2.cancel() animator3?.cancel()
a3.cancel() delay(1000)
startActivity(Intent(this, CleanJunkActivity::class.java)) admobMaxShowInterstitialAd(this@ScanJunkActivity) {
finish() startActivity(Intent(this@ScanJunkActivity, CleanJunkActivity::class.java))
} finish()
} else { }
a1.cancel()
a2.cancel()
a3.cancel()
startActivity(Intent(this, CleanJunkActivity::class.java))
finish()
}
}, 5000)
} }
private var animator1: ValueAnimator? = null private var animator1: ValueAnimator? = null
private var animator2: ValueAnimator? = null private var animator2: ValueAnimator? = null
private var animator3: ValueAnimator? = null private var animator3: ValueAnimator? = null
......
...@@ -7,6 +7,7 @@ import android.database.Cursor ...@@ -7,6 +7,7 @@ import android.database.Cursor
import android.net.Uri import android.net.Uri
import android.os.Handler import android.os.Handler
import android.provider.MediaStore import android.provider.MediaStore
import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.getRecycleBinDir
import com.base.filerecoveryrecyclebin.bean.RecycleBinBean import com.base.filerecoveryrecyclebin.bean.RecycleBinBean
import com.base.filerecoveryrecyclebin.utils.LogEx import com.base.filerecoveryrecyclebin.utils.LogEx
import com.google.gson.Gson import com.google.gson.Gson
...@@ -74,32 +75,16 @@ class MediaContentObserver(val context: Context, val handler: Handler? = null) : ...@@ -74,32 +75,16 @@ class MediaContentObserver(val context: Context, val handler: Handler? = null) :
recycleBinDir.mkdirs() recycleBinDir.mkdirs()
} }
val recycleBinFile = File(recycleBinDir, ".$name")
src.copyTo(recycleBinFile, true)
LogEx.logDebug(TAG, "size=${src.length()}") LogEx.logDebug(TAG, "size=${src.length()}")
val binBean = RecycleBinBean(src.path, 0, src.length(), mimeType) if (src.length() > 0L) {
val binFile = File(recycleBinDir, ".$name.bin") val recycleBinFile = File(getRecycleBinDir(), ".$name")
binFile.createNewFile() src.copyTo(recycleBinFile, true)
binFile.writeText(Gson().toJson(binBean)) val binBean = RecycleBinBean(src.path, 0, src.length(), mimeType)
LogEx.logDebug(TAG, "回收站备份成功") val binFile = File(recycleBinDir, ".$name.bin")
handler?.sendEmptyMessage(99) binFile.createNewFile()
binFile.writeText(Gson().toJson(binBean))
LogEx.logDebug(TAG, "RecycleBin backup")
// if (!recycleBinFile.exists()) { handler?.sendEmptyMessage(99)
// recycleBinFile.createNewFile() }
// } else {
// if (recycleBinFile.length()==0L){
// src.copyTo(recycleBinFile, true)
// LogEx.logDebug(TAG, "size=${src.length()}")
// val binBean = RecycleBinBean(src.path, 0, src.length(), mimeType)
// val binFile = File(recycleBinDir, ".$name.bin")
// binFile.createNewFile()
// binFile.writeText(Gson().toJson(binBean))
// LogEx.logDebug(TAG, "回收站备份成功")
// handler?.sendEmptyMessage(99)
// }
// }
} }
} }
package com.base.filerecoveryrecyclebin.activity.recyclebin package com.base.filerecoveryrecyclebin.activity.recyclebin
import android.annotation.SuppressLint
import android.os.Build import android.os.Build
import android.os.FileObserver import android.os.FileObserver
import android.os.Handler import android.os.Handler
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.findRecycleBinFile
import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.findRecycleBinJsonFile
import com.base.filerecoveryrecyclebin.bean.RecycleBinBean import com.base.filerecoveryrecyclebin.bean.RecycleBinBean
import com.base.filerecoveryrecyclebin.help.BaseApplication
import com.base.filerecoveryrecyclebin.utils.LogEx import com.base.filerecoveryrecyclebin.utils.LogEx
import com.google.gson.Gson import com.google.gson.Gson
import java.io.File import java.io.File
...@@ -79,23 +81,4 @@ class MyFileObserver(val handler: Handler? = null, files: List<File>) : FileObse ...@@ -79,23 +81,4 @@ class MyFileObserver(val handler: Handler? = null, files: List<File>) : FileObse
} }
companion object {
fun getRecycleBinDir(): File {
val file = BaseApplication.context.filesDir
val recycleBinDir = File(file, "RecycleBin")
if (!recycleBinDir.exists()) {
recycleBinDir.mkdirs()
}
return recycleBinDir
}
fun findRecycleBinFile(namePath: String): File? {
return getRecycleBinDir().listFiles()?.find { it.name.contains(namePath) }
}
fun findRecycleBinJsonFile(namePath: String): File? {
return getRecycleBinDir().listFiles()?.find { it.name.contains(".$namePath.bin") }
}
}
} }
\ No newline at end of file
...@@ -5,8 +5,8 @@ import android.graphics.Color ...@@ -5,8 +5,8 @@ import android.graphics.Color
import android.os.Build import android.os.Build
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import com.base.filerecoveryrecyclebin.activity.ResultActivity import com.base.filerecoveryrecyclebin.activity.ResultActivity
import com.base.filerecoveryrecyclebin.activity.recyclebin.MyFileObserver.Companion.findRecycleBinFile import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.findRecycleBinFile
import com.base.filerecoveryrecyclebin.activity.recyclebin.MyFileObserver.Companion.findRecycleBinJsonFile import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.findRecycleBinJsonFile
import com.base.filerecoveryrecyclebin.bean.ConstObject.RECYCLE_BIN import com.base.filerecoveryrecyclebin.bean.ConstObject.RECYCLE_BIN
import com.base.filerecoveryrecyclebin.bean.RecycleBinBean import com.base.filerecoveryrecyclebin.bean.RecycleBinBean
import com.base.filerecoveryrecyclebin.databinding.ActivityRecycleBinDetailBinding import com.base.filerecoveryrecyclebin.databinding.ActivityRecycleBinDetailBinding
......
package com.base.filerecoveryrecyclebin.activity.recyclebin
import com.base.filerecoveryrecyclebin.help.BaseApplication
import java.io.File
object RecycleBinFileEx {
fun getRecycleBinDir(): File {
val file = BaseApplication.context.filesDir
val recycleBinDir = File(file, "RecycleBin")
if (!recycleBinDir.exists()) {
recycleBinDir.mkdirs()
}
return recycleBinDir
}
fun findRecycleBinFile(namePath: String): File? {
return getRecycleBinDir().listFiles()?.find { it.name.contains(namePath) }
}
fun findRecycleBinJsonFile(namePath: String): File? {
return getRecycleBinDir().listFiles()?.find { it.name.contains(".$namePath.bin") }
}
}
\ No newline at end of file
...@@ -8,7 +8,7 @@ import androidx.annotation.RequiresApi ...@@ -8,7 +8,7 @@ import androidx.annotation.RequiresApi
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.filerecoveryrecyclebin.R import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.activity.recyclebin.MyFileObserver.Companion.findRecycleBinFile import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.findRecycleBinFile
import com.base.filerecoveryrecyclebin.bean.RecycleBinBean import com.base.filerecoveryrecyclebin.bean.RecycleBinBean
import com.base.filerecoveryrecyclebin.databinding.ItemRecyclebinFileBinding import com.base.filerecoveryrecyclebin.databinding.ItemRecyclebinFileBinding
import com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatSize import com.base.filerecoveryrecyclebin.help.KotlinExt.toFormatSize
......
...@@ -12,7 +12,7 @@ import com.base.filerecoveryrecyclebin.ads.max.AdMaxOpenUtils ...@@ -12,7 +12,7 @@ import com.base.filerecoveryrecyclebin.ads.max.AdMaxOpenUtils
import com.base.filerecoveryrecyclebin.help.ConfigHelper import com.base.filerecoveryrecyclebin.help.ConfigHelper
object AdmobMaxHelper { object AdmobMaxHelper {
private val TAG = "" private val TAG = "AdmobMaxHelper"
fun admobMaxShowInterstitialAd(activity: Activity, onHidden: (() -> Unit)? = null) { fun admobMaxShowInterstitialAd(activity: Activity, onHidden: (() -> Unit)? = null) {
if (ConfigHelper.admobTrueMaxFlase) { if (ConfigHelper.admobTrueMaxFlase) {
......
...@@ -89,6 +89,7 @@ object AdMaxInterstitialUtils { ...@@ -89,6 +89,7 @@ object AdMaxInterstitialUtils {
EventUtils.event("ad_show_error", ext = obj2) EventUtils.event("ad_show_error", ext = obj2)
} }
}) })
interstitialAd?.setRevenueListener(AdMaxEvent.EventOnPaidEventListener())
} }
} }
...@@ -121,7 +122,7 @@ object AdMaxInterstitialUtils { ...@@ -121,7 +122,7 @@ object AdMaxInterstitialUtils {
} }
AdMaxInterstitialUtils.onHidden = onHidden AdMaxInterstitialUtils.onHidden = onHidden
interstitialAd?.setRevenueListener(AdMaxEvent.EventOnPaidEventListener())
if (interstitialAd?.isReady == true) { if (interstitialAd?.isReady == true) {
LogEx.logDebug(TAG, "isReady=true") LogEx.logDebug(TAG, "isReady=true")
interstitialAd?.showAd() interstitialAd?.showAd()
......
...@@ -72,9 +72,7 @@ object AdMaxOpenUtils { ...@@ -72,9 +72,7 @@ object AdMaxOpenUtils {
} }
}) })
appOpenAd?.setRevenueListener { ad -> appOpenAd?.setRevenueListener(AdMaxEvent.EventOnPaidEventListener())
}
} }
} }
...@@ -113,7 +111,6 @@ object AdMaxOpenUtils { ...@@ -113,7 +111,6 @@ object AdMaxOpenUtils {
if (appOpenAd?.isReady == true) { if (appOpenAd?.isReady == true) {
LogEx.logDebug(TAG, "isReady=false") LogEx.logDebug(TAG, "isReady=false")
appOpenAd?.setRevenueListener(AdMaxEvent.EventOnPaidEventListener())
appOpenAd?.showAd() appOpenAd?.showAd()
} else { } else {
appOpenAd?.loadAd() appOpenAd?.loadAd()
......
package com.base.filerecoveryrecyclebin.fragment package com.base.filerecoveryrecyclebin.fragment
import android.animation.AnimatorSet
import android.animation.ObjectAnimator
import android.animation.ValueAnimator import android.animation.ValueAnimator
import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
import android.view.View
import android.view.animation.AccelerateDecelerateInterpolator
import com.base.filerecoveryrecyclebin.activity.SettingActivity import com.base.filerecoveryrecyclebin.activity.SettingActivity
import com.base.filerecoveryrecyclebin.activity.junkclean.ScanJunkActivity
import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacyPinOneActivity
import com.base.filerecoveryrecyclebin.activity.privacyspace.PrivacySpaceActivity
import com.base.filerecoveryrecyclebin.activity.recovery.FileScanResultActivity import com.base.filerecoveryrecyclebin.activity.recovery.FileScanResultActivity
import com.base.filerecoveryrecyclebin.activity.repeat.RepeatAnimationActivity import com.base.filerecoveryrecyclebin.activity.repeat.RepeatAnimationActivity
import com.base.filerecoveryrecyclebin.activity.screenshot.ScreenShotAnimationActivity import com.base.filerecoveryrecyclebin.activity.screenshot.ScreenShotAnimationActivity
import com.base.filerecoveryrecyclebin.ads.AdmobMaxHelper 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_AUDIOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_DOCUMENTS import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_DOCUMENTS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_PHOTOS import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_PHOTOS
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_VIDEOS 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.FragmentHome3Binding
import com.base.filerecoveryrecyclebin.databinding.FragmentHomeBinding
import com.base.filerecoveryrecyclebin.help.BaseFragment import com.base.filerecoveryrecyclebin.help.BaseFragment
import com.base.filerecoveryrecyclebin.help.ConfigHelper
class HomeFragment : BaseFragment<FragmentHome3Binding>() { class HomeFragment : BaseFragment<FragmentHome3Binding>() {
......
...@@ -7,8 +7,8 @@ import androidx.annotation.RequiresApi ...@@ -7,8 +7,8 @@ import androidx.annotation.RequiresApi
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.lifecycle.lifecycleScope import androidx.lifecycle.lifecycleScope
import com.base.filerecoveryrecyclebin.activity.MainActivity import com.base.filerecoveryrecyclebin.activity.MainActivity
import com.base.filerecoveryrecyclebin.activity.recyclebin.MyFileObserver.Companion.getRecycleBinDir
import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinDetailActivity import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinDetailActivity
import com.base.filerecoveryrecyclebin.activity.recyclebin.RecycleBinFileEx.getRecycleBinDir
import com.base.filerecoveryrecyclebin.adapter.RecycleBinAdapter import com.base.filerecoveryrecyclebin.adapter.RecycleBinAdapter
import com.base.filerecoveryrecyclebin.bean.RecycleBinBean import com.base.filerecoveryrecyclebin.bean.RecycleBinBean
import com.base.filerecoveryrecyclebin.databinding.FragmentRecycleBinBinding import com.base.filerecoveryrecyclebin.databinding.FragmentRecycleBinBinding
...@@ -22,7 +22,6 @@ import com.google.gson.Gson ...@@ -22,7 +22,6 @@ import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import java.io.File
class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>() { class RecycleBinFragment : BaseFragment<FragmentRecycleBinBinding>() {
......
...@@ -15,14 +15,12 @@ import android.os.Environment ...@@ -15,14 +15,12 @@ import android.os.Environment
import android.os.Handler import android.os.Handler
import android.os.IBinder import android.os.IBinder
import android.provider.MediaStore import android.provider.MediaStore
import android.util.Log
import android.widget.RemoteViews import android.widget.RemoteViews
import androidx.annotation.RequiresApi import androidx.annotation.RequiresApi
import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat
import androidx.core.graphics.drawable.IconCompat import androidx.core.graphics.drawable.IconCompat
import com.base.filerecoveryrecyclebin.R import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.activity.MainActivity import com.base.filerecoveryrecyclebin.activity.MainActivity
import com.base.filerecoveryrecyclebin.activity.junkclean.ScanJunkActivity
import com.base.filerecoveryrecyclebin.activity.recovery.FileScanResultActivity import com.base.filerecoveryrecyclebin.activity.recovery.FileScanResultActivity
import com.base.filerecoveryrecyclebin.activity.recyclebin.MediaContentObserver import com.base.filerecoveryrecyclebin.activity.recyclebin.MediaContentObserver
import com.base.filerecoveryrecyclebin.activity.recyclebin.MyFileObserver import com.base.filerecoveryrecyclebin.activity.recyclebin.MyFileObserver
......
...@@ -14,7 +14,6 @@ import android.view.View ...@@ -14,7 +14,6 @@ import android.view.View
import android.view.WindowManager import android.view.WindowManager
import androidx.lifecycle.LifecycleCoroutineScope import androidx.lifecycle.LifecycleCoroutineScope
import com.base.filerecoveryrecyclebin.R import com.base.filerecoveryrecyclebin.R
import com.base.filerecoveryrecyclebin.activity.junkclean.ScanJunkActivity
import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils.showInterAdSp import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils.showInterAdSp
import com.base.filerecoveryrecyclebin.bean.RecycleBinBean import com.base.filerecoveryrecyclebin.bean.RecycleBinBean
import com.base.filerecoveryrecyclebin.databinding.DialogCameraSettingBinding import com.base.filerecoveryrecyclebin.databinding.DialogCameraSettingBinding
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
</RelativeLayout> </RelativeLayout>
<com.base.filerecoveryrecyclebin.view.XmlLottieAnimationView <FrameLayout
android:id="@+id/id_junk_scan" android:id="@+id/id_junk_scan"
android:layout_width="300dp" android:layout_width="300dp"
android:layout_height="300dp" android:layout_height="300dp"
...@@ -38,7 +38,27 @@ ...@@ -38,7 +38,27 @@
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
app:lottie_autoPlay="true" app:lottie_autoPlay="true"
app:lottie_loop="true" /> app:lottie_loop="true">
<com.base.filerecoveryrecyclebin.view.XmlLottieAnimationView
android:id="@+id/lottie"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:adjustViewBounds="true"
app:lottie_autoPlay="true"
app:lottie_loop="true" />
<com.base.filerecoveryrecyclebin.view.XmlLottieAnimationView
android:id="@+id/lottie_completed"
android:layout_width="90dp"
android:layout_height="90dp"
android:layout_gravity="center"
android:visibility="gone"
app:lottie_autoPlay="false"
app:lottie_rawRes="@raw/loading_completed" />
</FrameLayout>
<TextView <TextView
android:id="@+id/tv" android:id="@+id/tv"
......
{"nm":"Success Animation","ddd":0,"h":400,"w":400,"meta":{"g":"@lottiefiles/toolkit-js 0.33.2"},"layers":[{"ty":4,"nm":"Success_Tick","sr":1,"st":4.00000016292334,"op":154.000006272549,"ip":4.00000016292334,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[29,-36,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[205.75,194.75,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Shape 1","ix":1,"cix":2,"np":3,"it":[{"ty":"sh","bm":0,"hd":false,"mn":"ADBE Vector Shape - Group","nm":"Path 1","ix":1,"d":1,"ks":{"a":0,"k":{"c":false,"i":[[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0]],"v":[[-48,-34],[2,16],[94.5,-77.5]]},"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":2,"lj":2,"ml":1,"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.146,"y":1},"s":[15],"t":4},{"s":[30],"t":25.0000010182709}],"ix":5},"c":{"a":0,"k":[0,0.3922,0.7882],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[0,0],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"tm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Trim","nm":"Trim Paths 1","ix":2,"e":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.113,"y":1},"s":[0],"t":4},{"s":[100],"t":25.0000010182709}],"ix":2},"o":{"a":0,"k":0,"ix":3},"s":{"a":0,"k":0,"ix":1},"m":1}],"ind":1},{"ty":4,"nm":"Circle","sr":1,"st":0,"op":150.000006109625,"ip":0,"hd":false,"ddd":0,"bm":0,"hasMask":false,"ao":0,"ks":{"a":{"a":0,"k":[30.765,23.931,0],"ix":1},"s":{"a":0,"k":[100,100,100],"ix":6},"sk":{"a":0,"k":0},"p":{"a":0,"k":[200,200,0],"ix":2},"r":{"a":0,"k":0,"ix":10},"sa":{"a":0,"k":0},"o":{"a":0,"k":100,"ix":11}},"ef":[{"ty":22,"mn":"ADBE Stroke","nm":"Stroke","ix":1,"en":1,"ef":[{"ty":10,"mn":"ADBE Stroke-0001","nm":"Path","ix":1,"v":{"a":0,"k":0,"ix":1}},{"ty":7,"mn":"ADBE Stroke-0010","nm":"All Masks","ix":2,"v":{"a":0,"k":0,"ix":2}},{"ty":7,"mn":"ADBE Stroke-0011","nm":"Stroke Sequentially","ix":3,"v":{"a":0,"k":1,"ix":3}},{"ty":2,"mn":"ADBE Stroke-0002","nm":"Color","ix":4,"v":{"a":0,"k":[1,1,1],"ix":4}},{"ty":0,"mn":"ADBE Stroke-0003","nm":"Brush Size","ix":5,"v":{"a":0,"k":2,"ix":5}},{"ty":0,"mn":"ADBE Stroke-0004","nm":"Brush Hardness","ix":6,"v":{"a":0,"k":0.75,"ix":6}},{"ty":0,"mn":"ADBE Stroke-0005","nm":"Opacity","ix":7,"v":{"a":0,"k":1,"ix":7}},{"ty":0,"mn":"ADBE Stroke-0008","nm":"Start","ix":8,"v":{"a":0,"k":0,"ix":8}},{"ty":0,"mn":"ADBE Stroke-0009","nm":"End","ix":9,"v":{"a":0,"k":100,"ix":9}},{"ty":7,"mn":"ADBE Stroke-0006","nm":"Spacing","ix":10,"v":{"a":0,"k":15,"ix":10}},{"ty":7,"mn":"ADBE Stroke-0007","nm":"Paint Style","ix":11,"v":{"a":0,"k":1,"ix":11}}]}],"shapes":[{"ty":"gr","bm":0,"hd":false,"mn":"ADBE Vector Group","nm":"Ellipse 1","ix":1,"cix":2,"np":3,"it":[{"ty":"el","bm":0,"hd":false,"mn":"ADBE Vector Shape - Ellipse","nm":"Ellipse Path 1","d":1,"p":{"a":0,"k":[0,0],"ix":3},"s":{"a":0,"k":[318.933,318.933],"ix":2}},{"ty":"st","bm":0,"hd":false,"mn":"ADBE Vector Graphic - Stroke","nm":"Stroke 1","lc":2,"lj":1,"ml":4,"o":{"a":0,"k":100,"ix":4},"w":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.188,"y":1},"s":[50],"t":0},{"s":[20],"t":20.0000008146167}],"ix":5},"c":{"a":0,"k":[0,0.3922,0.7882],"ix":3}},{"ty":"tr","a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"sk":{"a":0,"k":0,"ix":4},"p":{"a":0,"k":[30.765,23.931],"ix":2},"r":{"a":0,"k":0,"ix":6},"sa":{"a":0,"k":0,"ix":5},"o":{"a":0,"k":100,"ix":7}}]},{"ty":"tm","bm":0,"hd":false,"mn":"ADBE Vector Filter - Trim","nm":"Trim Paths 1","ix":2,"e":{"a":0,"k":100,"ix":2},"o":{"a":0,"k":0,"ix":3},"s":{"a":1,"k":[{"o":{"x":0.333,"y":0},"i":{"x":0.096,"y":1},"s":[100],"t":0},{"s":[0],"t":20.0000008146167}],"ix":1},"m":1}],"ind":2}],"v":"5.7.4","fr":29.9700012207031,"op":30.0000012219251,"ip":0,"assets":[]}
\ No newline at end of file
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