Commit 917c2804 authored by leichao.gao's avatar leichao.gao

Merge branch 'master' of gitlab.huolea.com:koko/file-recovery-recyclebin

parents 2e3c41f1 d7f40e24
......@@ -10,7 +10,7 @@ android {
compileSdk 34
defaultConfig {
applicationId "com.base.filerecoveryrecyclebin"
applicationId "com.kk.cleanmaster.file.cleanmaster.master"
minSdk 24
targetSdk 34
versionCode 1
......
......@@ -9,7 +9,7 @@
"client_info": {
"mobilesdk_app_id": "1:286059626470:android:561dad747cfdbdaac0e027",
"android_client_info": {
"package_name": "com.base.filerecoveryrecyclebin"
"package_name": "com.kk.cleanmaster.file.cleanmaster.master"
}
},
"oauth_client": [],
......
......@@ -24,6 +24,7 @@ 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.SCREENSHOT_CLEANER
import com.base.filerecoveryrecyclebin.bean.ConstObject.WHATSAPP_CLEANER
import com.base.filerecoveryrecyclebin.bean.ConstObject.privacyPinPassword
import com.base.filerecoveryrecyclebin.databinding.ActivityLayoutResultBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity
......@@ -104,6 +105,10 @@ class ResultActivity : BaseActivity<ActivityLayoutResultBinding>() {
AppPreferences.getInstance().put("last_use_junk_cleaner", System.currentTimeMillis())
}
WHATSAPP_CLEANER -> {
binding.tvInfo.text = "Complete."
}
RECYCLE_BIN -> {
binding.tvInfo.text = "Restore Success."
}
......
......@@ -23,6 +23,7 @@ import com.base.filerecoveryrecyclebin.ads.admob.AdmobInterstitialUtils
import com.base.filerecoveryrecyclebin.ads.admob.AdmobNativeUtils
import com.base.filerecoveryrecyclebin.ads.max.AdMaxInit
import com.base.filerecoveryrecyclebin.ads.max.AdMaxInterstitialUtils
import com.base.filerecoveryrecyclebin.ads.max.AdMaxNativeUtils
import com.base.filerecoveryrecyclebin.ads.max.AdMaxOpenUtils
import com.base.filerecoveryrecyclebin.bean.ConstObject
import com.base.filerecoveryrecyclebin.bean.ConstObject.ID_JUNK_CLEAN_PUSH
......@@ -115,6 +116,7 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>() {
AdMaxInit.maxInitAction = {
AdMaxOpenUtils.loadAppOpenAd(this)
AdMaxInterstitialUtils.loadInterstitialAd(this)
AdMaxNativeUtils.loadNativeAd()
}
}
}
......
......@@ -10,6 +10,7 @@ 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.databinding.ActivityFileRecoveredBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.utils.BarUtils
......@@ -66,4 +67,5 @@ class FileRecoveredActivity : BaseActivity<ActivityFileRecoveredBinding>() {
}
}
}
\ No newline at end of file
......@@ -2,6 +2,7 @@ package com.base.filerecoveryrecyclebin.activity.recovery
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.BitmapFactory
import android.graphics.Color
import android.os.Environment
......@@ -29,6 +30,8 @@ import com.base.filerecoveryrecyclebin.utils.TimeUtils.isWithinSixMonths
import com.base.filerecoveryrecyclebin.utils.TimeUtils.isWithinTwentyFourMonths
import com.base.filerecoveryrecyclebin.view.DialogViews.showRecoveringDialog
import com.google.gson.Gson
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.File
class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
......@@ -38,7 +41,6 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
ActivityFileRecoveryBinding.inflate(layoutInflater)
}
private var folderBean: FolderBean? = null
private lateinit var adapter: FileTimeColumnsAdapter
private lateinit var filterAdapter: RecoveryFilterAdapter
......@@ -69,22 +71,10 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
scanType = intent.extras?.getInt("ScanType") ?: 0
val json = intent.extras?.getString("Data") ?: ""
folderBean = Gson().fromJson(json, FolderBean::class.java)
when (scanType) {
SCAN_PHOTOS -> {
var size = 0
folderBean?.recoveryList?.forEach {
runCatching {
val bitmap = BitmapFactory.decodeFile(it.path)
if (bitmap.height < 256 || bitmap.width < 256) {
size++
it.isThumbnails = true
}
}
}
binding.tvThumbnails.text = "Hide thumbnails (${size})"
setThumbnails()
}
SCAN_DOCUMENTS -> {
......@@ -114,11 +104,32 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
filterDismiss(bean)
}
binding.rvFilter.adapter = filterAdapter
initData()
}
@SuppressLint("SetTextI18n")
private fun setThumbnails() = lifecycleScope.launch(Dispatchers.IO) {
var size = 0
folderBean?.recoveryList?.forEach { bean ->
runCatching {
val bitmap: Bitmap? = BitmapFactory.decodeFile(bean.path)
bitmap?.let {
if (it.height < 256 || it.width < 256) {
size++
bean.isThumbnails = true
}
}
}
}
launch(Dispatchers.Main) {
binding.tvThumbnails.text = "Hide thumbnails (${size})"
}
}
override fun onResume() {
super.onResume()
initData()
}
override fun initListener() {
......@@ -288,4 +299,8 @@ class FileRecoveryActivity : BaseActivity<ActivityFileRecoveryBinding>() {
}
}
companion object {
var folderBean: FolderBean? = FolderBean()
}
}
\ No newline at end of file
package com.base.filerecoveryrecyclebin.activity.recovery
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
import com.base.filerecoveryrecyclebin.bean.ConstObject.SCAN_VIDEOS
import com.base.filerecoveryrecyclebin.databinding.ActivityFileScanBinding
import com.base.filerecoveryrecyclebin.help.BaseActivity
import com.base.filerecoveryrecyclebin.utils.BarUtils
import com.base.filerecoveryrecyclebin.view.DialogViews.showExitFunctionDialog
/**
* 文件扫描,遍历文件夹的方式进行
*/
class FileScanActivity : BaseActivity<ActivityFileScanBinding>() {
private val TAG = "FileScanActivity"
private var scanOnce: Boolean = false
private var scanType = 0
override val binding: ActivityFileScanBinding by lazy {
ActivityFileScanBinding.inflate(layoutInflater)
}
@SuppressLint("SetTextI18n")
override fun initView() {
BarUtils.setStatusBarLightMode(this, false)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
scanType = intent.extras?.getInt("Type") ?: 0
when (scanType) {
SCAN_PHOTOS -> {
binding.tvTittle.text = "Photos Recovery"
binding.ivIcon.setImageResource(R.mipmap.tu_photos_scan)
}
SCAN_DOCUMENTS -> {
binding.tvTittle.text = "Documents Recovery"
binding.ivIcon.setImageResource(R.mipmap.tu_documents_scan)
}
SCAN_VIDEOS -> {
binding.tvTittle.text = "Videos Recovery"
binding.ivIcon.setImageResource(R.mipmap.tu_videos_scan)
}
}
}
override fun initListener() {
onBackPressedDispatcher.addCallback {
showExitFunctionDialog {
if (it) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this@FileScanActivity) {
finishToMain()
}
} else {
finishToMain()
}
}
}
binding.flFanhui.setOnClickListener {
onBackPressedDispatcher.onBackPressed()
}
}
private fun requestPermission() {
}
}
\ No newline at end of file
......@@ -79,9 +79,10 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
}
}
fileFolderAdapter = FileFolderAdapter(scanType) { folderBean ->
FileRecoveryActivity.folderBean = null
FileRecoveryActivity.folderBean = folderBean
startActivity(Intent(this, FileRecoveryActivity::class.java).apply {
putExtra("ScanType", scanType)
putExtra("Data", Gson().toJson(folderBean))
})
}
binding.rv.adapter = fileFolderAdapter
......@@ -204,4 +205,6 @@ class FileScanResultActivity : BaseActivity<ActivityFileScanResultBinding>() {
hashMap[folder]?.add(recoveryBean)
return isNewFolder
}
}
\ No newline at end of file
......@@ -59,7 +59,6 @@ class WhatsAppMessageCleanActivity : BaseActivity<ActivityWhatsAppMessageCleanBi
binding.rv.adapter = adapter
adapter.setData(pathList)
AdmobNativeUtils.showNativeAd(this, binding.flAd)
}
override fun initListener() {
......
......@@ -33,13 +33,6 @@ object AdmobMaxHelper {
}
}
fun isOpenAdLoaded(): Boolean {
return if (ConfigHelper.admobTrueMaxFlase) {
AdmobOpenUtils.isOpenAdLoaded()
} else {
AdMaxOpenUtils.isOpenAdLoaded()
}
}
fun admobMaxShowInterstitialAd(activity: Activity, onHidden: (() -> Unit)? = null) {
if (ConfigHelper.admobTrueMaxFlase) {
......
......@@ -17,7 +17,8 @@ object AdMaxInit {
fun Context.initAdMax() {
// If you want to test your own AppLovin SDK key, change the value here and update the package name in the build.gradle
val YOUR_SDK_KEY = "05TMDQ5tZabpXQ45_UTbmEGNUtVAzSTzT6KmWQc5_CuWdzccS4DCITZoL3yIWUG3bbq60QC_d4WF28tUC4gVTF"
// val YOUR_SDK_KEY = "05TMDQ5tZabpXQ45_UTbmEGNUtVAzSTzT6KmWQc5_CuWdzccS4DCITZoL3yIWUG3bbq60QC_d4WF28tUC4gVTF"
val YOUR_SDK_KEY="GGPreND6SRmCt1zJgn5faiLGD8c2PVGPLgPpSg7cHanVTud1DhtuI9MmteTqlEviaJ57WnxW68kQDaATJ5z3cW"
val executor = Executors.newSingleThreadExecutor();
executor.execute {
......@@ -26,10 +27,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)
......
......@@ -17,6 +17,7 @@ import com.base.filerecoveryrecyclebin.help.BaseApplication
import com.base.filerecoveryrecyclebin.help.ConfigHelper
import com.base.filerecoveryrecyclebin.utils.EventUtils
import com.base.filerecoveryrecyclebin.utils.LogEx
import com.ironsource.na
import org.json.JSONObject
object AdMaxNativeUtils {
......@@ -43,11 +44,16 @@ object AdMaxNativeUtils {
nativeAd = ad
nativeLoadTime = System.currentTimeMillis()
loadingListener?.invoke()
loadingListener = null
}
override fun onNativeAdLoadFailed(p0: String, p1: MaxError) {
super.onNativeAdLoadFailed(p0, p1)
loadingListener?.invoke()
loadingListener = null
LogEx.logDebug(TAG, "onNativeAdLoadFailed")
LogEx.logDebug(TAG, "code=${p1.code}")
LogEx.logDebug(TAG, "message=${p1.message}")
AdDisplayUtils.getInstance().incrementAdRequestFailCount()
val obj2 = JSONObject()
obj2.put("reason", "no_ad")
......@@ -100,7 +106,7 @@ object AdMaxNativeUtils {
.setBodyTextViewId(R.id.ad_body)
// .setAdvertiserTextViewId(R.id.advertiser_text_view)
.setIconImageViewId(R.id.ad_app_icon)
.setMediaContentViewGroupId(R.id.ad_media)
.setMediaContentViewGroupId(R.id.media_view_container)
// .setOptionsContentViewGroupId(R.id.options_view)
// .setStarRatingContentViewGroupId(R.id.star_rating_view)
.setCallToActionButtonId(R.id.ad_call_to_action)
......@@ -108,47 +114,52 @@ object AdMaxNativeUtils {
return MaxNativeAdView(binder, context)
}
fun loadNativeAd() {
setNativeAdListener()
if (!AdDisplayUtils.getInstance().shouldShowAd("nativeAd")) {
return
}
nativeAdLoader.loadAd()
}
fun showNativeAd(activity: Activity, parent: ViewGroup, layout: Int) {
activityString = activity::class.java.toString().split(".").last()
LogEx.logDebug(TAG, "activityString=$activityString")
setNativeAdListener()
if (!AdDisplayUtils.getInstance().shouldShowAd("nativeAd")) {
LogEx.logDebug(TAG, "!shouldShowAd")
return
}
loadingListener = {
if (System.currentTimeMillis() - nativeLoadTime <= 1000 * 60 * 60) {
//是否已经加载渲染
if (nativeAd?.nativeAd?.isExpired == true) {
nativeAdLoader.destroy(nativeAd)
nativeAdLoader.loadAd()
} else {
//展示广告
val adView = createNativeAdView(activity, layout)
parent.isVisible = true
nativeAdLoader.render(adView, nativeAd)
parent.removeAllViews()
parent.addView(adView)
nativeAd?.let { AdMaxEvent.showAd(it, "nativeAd", activityString) }
AdDisplayUtils.getInstance().incrementAdDisplayCount()
}
}
loadingListener = null
if (nativeAd?.nativeAd?.isExpired == true || nativeAd == null) {
LogEx.logDebug(TAG, "nativeAd?.nativeAd?.isExpired == true")
nativeAdLoader.destroy(nativeAd)
nativeAdLoader.loadAd()
LogEx.logDebug(TAG, "loadingListener finish")
}
if (nativeAd == null) {
nativeAdLoader.loadAd()
val obj2 = JSONObject()
obj2.put("reason", "no_ad")
obj2.put("ad_unit", "nativeAd")
EventUtils.event("ad_show_error", ext = obj2)
loadingListener = {
if (nativeAd != null) {
showReadNative(activity, parent, layout)
}
}
} else {
loadingListener?.invoke()
showReadNative(activity, parent, layout)
}
}
private fun showReadNative(activity: Activity, parent: ViewGroup, layout: Int) {
val adView = createNativeAdView(activity, layout)
LogEx.logDebug(TAG, "showReadNative adUnitId=${nativeAd?.adUnitId}")
parent.isVisible = true
parent.removeAllViews()
nativeAdLoader.render(adView, nativeAd)
parent.addView(adView)
nativeAd?.let { AdMaxEvent.showAd(it, "nativeAd", activityString) }
AdDisplayUtils.getInstance().incrementAdDisplayCount()
LogEx.logDebug(TAG, "loadingListener finish")
}
}
\ No newline at end of file
......@@ -19,8 +19,8 @@ object ConfigHelper {
const val openAdmobId = "/6499/example/app-open"
const val bannerAdmobId = "ca-app-pub-3940256099942544/9214589741"
const val interAdMaxId = "YOUR_AD_UNIT_ID"
const val nativeAdMaxId = "YOUR_AD_UNIT_ID"
const val interAdMaxId = "b31e7f6d11ee659e"
const val nativeAdMaxId = "96e8fe78b0efc5d1"
const val openAdMaxId = "YOUR_AD_UNIT_ID"
const val bannerMaxId = "ca-app-pub-3940256099942544/9214589741"
......
......@@ -8,6 +8,7 @@ object LogEx {
val filterTAG = arrayOf(
"FileScanActivity",
// "FileHexEx",
"FileScanResultActivity",
"FileGridAdapter"
)
......
......@@ -110,10 +110,7 @@
android:background="@color/white"
tools:listitem="@layout/item_media_select" />
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
......
......@@ -51,10 +51,10 @@
tools:ignore="HardcodedText" />
<TextView
android:layout_marginStart="8dp"
android:id="@+id/ad_headline"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:ellipsize="end"
android:maxLines="2"
android:textColor="@color/black"
......@@ -77,8 +77,8 @@
</LinearLayout>
<com.google.android.gms.ads.nativead.MediaView
android:id="@+id/ad_media"
<FrameLayout
android:id="@+id/media_view_container"
android:layout_width="match_parent"
android:layout_height="100dp"
android:layout_gravity="center_vertical"
......
......@@ -24,7 +24,7 @@
android:layout_gravity="center_vertical">
<FrameLayout
android:id="@+id/ad_media"
android:id="@+id/media_view_container"
android:layout_width="80dp"
android:layout_height="60dp"
android:layout_gravity="center" />
......
......@@ -24,7 +24,7 @@
android:layout_gravity="center_vertical">
<FrameLayout
android:id="@+id/ad_media"
android:id="@+id/media_view_container"
android:layout_width="80dp"
android:layout_height="60dp"
android:layout_gravity="center" />
......
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