Commit cad27b05 authored by wanglei's avatar wanglei

...

parent 360af580
......@@ -39,7 +39,7 @@
tools:targetApi="34">
<activity
android:name=".activity.SplashActivity"
android:name=".activity.splash.Splash2Activity"
android:exported="true"
android:launchMode="singleTask"
android:theme="@style/splash.theme">
......@@ -242,8 +242,10 @@
android:launchMode="singleTop"
android:screenOrientation="portrait"
tools:ignore="DiscouragedApi,LockedOrientationActivity" />
<activity android:name=".activity.junkclean.ScanJunk2Activity"
android:screenOrientation="portrait"/>
<activity
android:name=".activity.junkclean.ScanJunk2Activity"
android:screenOrientation="portrait" />
<meta-data
android:name="com.google.android.gms.ads.flag.OPTIMIZE_INITIALIZATION"
android:value="true" />
......
......@@ -5,7 +5,7 @@ import android.app.Activity
import android.content.Intent
import android.os.Bundle
import android.text.TextUtils
import com.base.datarecovery.activity.SplashActivity
import com.base.datarecovery.activity.splash.Splash2Activity
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.bean.ConstObject.ifAgreePrivacy
import com.base.datarecovery.fcm.FCMManager
......@@ -138,7 +138,7 @@ class MyApplication : BaseApplication() {
topActivity?.startActivity(
Intent(
topActivity,
SplashActivity::class.java
Splash2Activity::class.java
).apply {
putExtra("isHotLaunch", true)
putExtra("type", -1)
......@@ -147,7 +147,7 @@ class MyApplication : BaseApplication() {
topActivity?.startActivity(
Intent(
topActivity,
SplashActivity::class.java
Splash2Activity::class.java
).apply {
putExtra("isHotLaunch", true)
putExtra("type", -1)
......
......@@ -22,7 +22,6 @@ import com.base.datarecovery.view.PermissionDialog.showPermissionBottomSheet
import com.base.datarecovery.view.RateStarPop.showRateStarPopDialog
import com.facebook.appevents.AppEventsLogger
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
......
package com.base.datarecovery.activity
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.net.Uri
import android.text.SpannableString
import android.text.Spanned
import android.text.style.UnderlineSpan
import android.view.View
import androidx.lifecycle.lifecycleScope
import com.base.datarecovery.MyApplication
import com.base.datarecovery.activity.appmanager.AppManagerAnimationActivity
import com.base.datarecovery.activity.appprocess.AppProcessAnimationActivity
import com.base.datarecovery.activity.battery.BatteryInfoAnimationActivity
import com.base.datarecovery.activity.guide.GuideActivity
import com.base.datarecovery.activity.junkclean.ScanJunkActivity
import com.base.datarecovery.activity.largefile.LargeFileActivity
import com.base.datarecovery.activity.largefile.LargeFileAnimationActivity
import com.base.datarecovery.activity.photomanager.PhotoManagerAnimationActivity
import com.base.datarecovery.activity.privacyspace.PrivacyPinOneActivity
import com.base.datarecovery.activity.privacyspace.PrivacySpaceActivity
import com.base.datarecovery.activity.recovery.FileScanResultActivity
import com.base.datarecovery.activity.whatsapp.WhatsAppCleanerAnimationActivity
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.bean.ConstObject
import com.base.datarecovery.bean.ConstObject.ID_APP_MANAGER
import com.base.datarecovery.bean.ConstObject.ID_APP_PROCESS
import com.base.datarecovery.bean.ConstObject.ID_BATTERY_INFO
import com.base.datarecovery.bean.ConstObject.ID_JUNK_CLEAN_PUSH
import com.base.datarecovery.bean.ConstObject.ID_LARGE_FILE
import com.base.datarecovery.bean.ConstObject.ID_PRIVACY_SPACE
import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_DOCUMENTS
import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_PHOTOS
import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_VIDEOS
import com.base.datarecovery.bean.ConstObject.ID_SCREENSHOT_CLEAN
import com.base.datarecovery.bean.ConstObject.ID_SIMILAR_IMAGE
import com.base.datarecovery.bean.ConstObject.ID_WHATSAPP_CLEANER
import com.base.datarecovery.bean.ConstObject.ifAgreePrivacy
import com.base.datarecovery.bean.ConstObject.isGuide
import com.base.datarecovery.bean.ConstObject.privacyPinPassword
import com.base.datarecovery.databinding.ActivitySplashBinding
import com.base.datarecovery.fcm.CloseNotificationReceiver
import com.base.datarecovery.fcm.CloseNotificationReceiver.Companion.NotificationId
import com.base.datarecovery.fcm.NotificationUtil
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.help.ConfigHelper
import com.base.datarecovery.service.StayNotificationService.Companion.startStayNotification
import com.base.datarecovery.utils.AppPreferences
import com.base.datarecovery.utils.BarUtils
import com.base.datarecovery.utils.LogEx
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.cancel
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
import kotlin.random.Random
@SuppressLint("CustomSplashScreen")
class SplashActivity : BaseActivity<ActivitySplashBinding>() {
private val TAG = "SplashActivity"
private var job: Job? = null
private val progress = MutableSharedFlow<Int>()
private val progressFlow: SharedFlow<Int> = progress
private var oneClickStart: Boolean = false
private var actionId = -1
override val binding: ActivitySplashBinding by lazy {
ActivitySplashBinding.inflate(layoutInflater)
}
override fun initView() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
// if (MyApplication.isInterOpenShowing) {
// finish()
//package com.base.datarecovery.activity
//
//import android.annotation.SuppressLint
//import android.content.Intent
//import android.graphics.Color
//import android.net.Uri
//import android.text.SpannableString
//import android.text.Spanned
//import android.text.style.UnderlineSpan
//import android.view.View
//import androidx.lifecycle.lifecycleScope
//import com.base.datarecovery.MyApplication
//import com.base.datarecovery.activity.appmanager.AppManagerAnimationActivity
//import com.base.datarecovery.activity.appprocess.AppProcessAnimationActivity
//import com.base.datarecovery.activity.battery.BatteryInfoAnimationActivity
//import com.base.datarecovery.activity.guide.GuideActivity
//import com.base.datarecovery.activity.junkclean.ScanJunkActivity
//import com.base.datarecovery.activity.largefile.LargeFileActivity
//import com.base.datarecovery.activity.largefile.LargeFileAnimationActivity
//import com.base.datarecovery.activity.photomanager.PhotoManagerAnimationActivity
//import com.base.datarecovery.activity.privacyspace.PrivacyPinOneActivity
//import com.base.datarecovery.activity.privacyspace.PrivacySpaceActivity
//import com.base.datarecovery.activity.recovery.FileScanResultActivity
//import com.base.datarecovery.activity.whatsapp.WhatsAppCleanerAnimationActivity
//import com.base.datarecovery.ads.AdmobMaxHelper
//import com.base.datarecovery.bean.ConstObject
//import com.base.datarecovery.bean.ConstObject.ID_APP_MANAGER
//import com.base.datarecovery.bean.ConstObject.ID_APP_PROCESS
//import com.base.datarecovery.bean.ConstObject.ID_BATTERY_INFO
//import com.base.datarecovery.bean.ConstObject.ID_JUNK_CLEAN_PUSH
//import com.base.datarecovery.bean.ConstObject.ID_LARGE_FILE
//import com.base.datarecovery.bean.ConstObject.ID_PRIVACY_SPACE
//import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_DOCUMENTS
//import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_PHOTOS
//import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_VIDEOS
//import com.base.datarecovery.bean.ConstObject.ID_SCREENSHOT_CLEAN
//import com.base.datarecovery.bean.ConstObject.ID_SIMILAR_IMAGE
//import com.base.datarecovery.bean.ConstObject.ID_WHATSAPP_CLEANER
//import com.base.datarecovery.bean.ConstObject.ifAgreePrivacy
//import com.base.datarecovery.bean.ConstObject.isGuide
//import com.base.datarecovery.bean.ConstObject.privacyPinPassword
//import com.base.datarecovery.databinding.ActivitySplashBinding
//import com.base.datarecovery.fcm.CloseNotificationReceiver
//import com.base.datarecovery.fcm.CloseNotificationReceiver.Companion.NotificationId
//import com.base.datarecovery.fcm.NotificationUtil
//import com.base.datarecovery.help.BaseActivity
//import com.base.datarecovery.help.ConfigHelper
//import com.base.datarecovery.service.StayNotificationService.Companion.startStayNotification
//import com.base.datarecovery.utils.AppPreferences
//import com.base.datarecovery.utils.BarUtils
//import com.base.datarecovery.utils.LogEx
//import kotlinx.coroutines.Dispatchers
//import kotlinx.coroutines.Job
//import kotlinx.coroutines.cancel
//import kotlinx.coroutines.delay
//import kotlinx.coroutines.flow.MutableSharedFlow
//import kotlinx.coroutines.flow.SharedFlow
//import kotlinx.coroutines.flow.collectLatest
//import kotlinx.coroutines.isActive
//import kotlinx.coroutines.launch
//import kotlin.random.Random
//
//@SuppressLint("CustomSplashScreen")
//class SplashActivity : BaseActivity<ActivitySplashBinding>() {
//
// private val TAG = "SplashActivity"
// private var job: Job? = null
// private val progress = MutableSharedFlow<Int>()
// private val progressFlow: SharedFlow<Int> = progress
// private var oneClickStart: Boolean = false
// private var actionId = -1
//
//
// override val binding: ActivitySplashBinding by lazy {
// ActivitySplashBinding.inflate(layoutInflater)
// }
//
// override fun initView() {
// BarUtils.setStatusBarLightMode(this, true)
// BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
//
//// if (MyApplication.isInterOpenShowing) {
//// finish()
//// return
//// }
//
// startStayNotification()
// NotificationUtil.stopNotificationHandler()
//
// actionId = intent?.extras?.getInt("actionId") ?: -1
// closeNotification()
//
// progressCollect()
//
// if (ifAgreePrivacy) {
// LogEx.logDebug(TAG, "ifAgreePrivacy=$ifAgreePrivacy")
//
// AdmobMaxHelper.preloadAd(this)
//
// job = startProgress()
// binding.llStart.visibility = View.GONE
// binding.llProgress.visibility = View.VISIBLE
// } else {
// binding.llStart.visibility = View.VISIBLE
// binding.llProgress.visibility = View.GONE
// }
//
// val spannableString = SpannableString("Privacy Policy")
// spannableString.setSpan(
// UnderlineSpan(),
// 0,
// spannableString.length,
// Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
// )
// binding.idTvPrivacyPolicy.text = spannableString
//
// binding.idTvPrivacyPolicy.setOnClickListener {
// val intent = Intent(
// Intent.ACTION_VIEW,
// Uri.parse(ConfigHelper.privacyPolicy)
// )
// startActivity(intent)
// }
//
//
// }
//
// private fun progressCollect() {
// lifecycleScope.launch {
// progressFlow.collectLatest {
// if (it >= 100) {
// job?.cancel()
// LogEx.logDebug(TAG, "jumpNext")
// jumpNext()
// this.cancel()
// }
// }
// }
// }
//
// var jumped: Boolean = false
// private fun jumpNext() {
// if (jumped) {
// return
// }
startStayNotification()
NotificationUtil.stopNotificationHandler()
actionId = intent?.extras?.getInt("actionId") ?: -1
closeNotification()
progressCollect()
if (ifAgreePrivacy) {
LogEx.logDebug(TAG, "ifAgreePrivacy=$ifAgreePrivacy")
AdmobMaxHelper.preloadAd(this)
job = startProgress()
binding.llStart.visibility = View.GONE
binding.llProgress.visibility = View.VISIBLE
} else {
binding.llStart.visibility = View.VISIBLE
binding.llProgress.visibility = View.GONE
}
val spannableString = SpannableString("Privacy Policy")
spannableString.setSpan(
UnderlineSpan(),
0,
spannableString.length,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.idTvPrivacyPolicy.text = spannableString
binding.idTvPrivacyPolicy.setOnClickListener {
val intent = Intent(
Intent.ACTION_VIEW,
Uri.parse(ConfigHelper.privacyPolicy)
)
startActivity(intent)
}
}
private fun progressCollect() {
lifecycleScope.launch {
progressFlow.collectLatest {
if (it >= 100) {
job?.cancel()
LogEx.logDebug(TAG, "jumpNext")
jumpNext()
this.cancel()
}
}
}
}
var jumped: Boolean = false
private fun jumpNext() {
if (jumped) {
return
}
jumped = true
LogEx.logDebug(TAG, "jumpNext actionId=$actionId")
when (actionId) {
ID_JUNK_CLEAN_PUSH -> {
startActivity(Intent(this, ScanJunkActivity::class.java))
}
ID_SIMILAR_IMAGE -> {
startActivity(Intent(this, PhotoManagerAnimationActivity::class.java))
}
ID_SCREENSHOT_CLEAN -> {
startActivity(Intent(this, PhotoManagerAnimationActivity::class.java))
}
ID_RECOVERY_PHOTOS -> {
startActivity(Intent(this, FileScanResultActivity::class.java).apply {
putExtra("ScanType", ConstObject.SCAN_PHOTOS)
})
}
ID_RECOVERY_VIDEOS -> {
startActivity(Intent(this, FileScanResultActivity::class.java).apply {
putExtra("ScanType", ConstObject.SCAN_VIDEOS)
})
}
ID_RECOVERY_DOCUMENTS -> {
startActivity(Intent(this, FileScanResultActivity::class.java).apply {
putExtra("ScanType", ConstObject.SCAN_DOCUMENTS)
})
}
ID_PRIVACY_SPACE -> {
if (privacyPinPassword.isNotEmpty()) {
startActivity(Intent(this, PrivacyPinOneActivity::class.java))
} else {
startActivity(Intent(this, PrivacySpaceActivity::class.java).apply {
})
}
}
ID_WHATSAPP_CLEANER -> {
startActivity(Intent(this, WhatsAppCleanerAnimationActivity::class.java))
}
ID_LARGE_FILE -> {
startActivity(Intent(this, LargeFileAnimationActivity::class.java))
}
ID_APP_PROCESS -> {
startActivity(Intent(this, AppProcessAnimationActivity::class.java))
}
ID_APP_MANAGER -> {
startActivity(Intent(this, AppManagerAnimationActivity::class.java))
}
ID_BATTERY_INFO -> {
startActivity(Intent(this, BatteryInfoAnimationActivity::class.java))
}
else -> {
val isHotLaunch = intent?.extras?.getBoolean("isHotLaunch", false) ?: false
if (!isHotLaunch) {
if (!isGuide) {
startActivity(Intent(this@SplashActivity, GuideActivity::class.java))
} else {
startActivity(Intent(this@SplashActivity, MainActivity::class.java))
}
}
}
}
finish()
intent.extras?.clear()
}
private fun closeNotification() {
sendBroadcast(Intent(this, CloseNotificationReceiver::class.java).apply {
this.action = CloseNotificationReceiver.Action
this.putExtra(NotificationId, actionId)
})
}
override fun initListener() {
binding.idTvStart.setOnClickListener {
if (oneClickStart) {
return@setOnClickListener
}
oneClickStart = true
ifAgreePrivacy = true
(application as MyApplication).initApp(true)
AdmobMaxHelper.preloadAd(this)
binding.llStart.visibility = View.GONE
binding.llProgress.visibility = View.VISIBLE
job = startProgress()
}
}
private var processTime = 0L
private var outTimeAdStart = false
private fun startProgress() = lifecycleScope.launch(Dispatchers.Main) {
LogEx.logDebug(TAG, "startProgress")
while (isActive) {
val value = binding.pb.progress + 2
binding.pb.setProgress(value, true)
progress.emit(value)
val delayTime = 450L
delay(delayTime)
processTime += delayTime
if (processTime >= 900L) {
if (!outTimeAdStart) {
outTimeAdStart = true
outTimeAd()
}
}
}
}
private fun outTimeAd() {
LogEx.logDebug(TAG, "outTimeAd")
var loaded: Boolean = true
AdmobMaxHelper.admobMaxShowOpenAd(this, showBeforeAction = { flag ->
loaded = flag
job?.cancel()
}) {
val sp = AppPreferences.getInstance().getString("splashShowInter", "0").toInt()
if (sp == 1 && !loaded) {
AdmobMaxHelper.admobMaxShowInterstitialAd(this, false) {
binding.pb.progress = 100
jumpNext()
}
} else {
binding.pb.progress = 100
jumpNext()
}
}
}
override fun onResume() {
super.onResume()
LogEx.logDebug(TAG, "onResume")
if (ifAgreePrivacy && job?.isActive == false) {
job = startProgress()
}
}
override fun onPause() {
super.onPause()
job?.cancel()
LogEx.logDebug(TAG, "onPause")
}
}
\ No newline at end of file
// jumped = true
// LogEx.logDebug(TAG, "jumpNext actionId=$actionId")
//
// when (actionId) {
// ID_JUNK_CLEAN_PUSH -> {
// startActivity(Intent(this, ScanJunkActivity::class.java))
// }
//
// ID_SIMILAR_IMAGE -> {
// startActivity(Intent(this, PhotoManagerAnimationActivity::class.java))
// }
//
// ID_SCREENSHOT_CLEAN -> {
// startActivity(Intent(this, PhotoManagerAnimationActivity::class.java))
// }
//
// ID_RECOVERY_PHOTOS -> {
// startActivity(Intent(this, FileScanResultActivity::class.java).apply {
// putExtra("ScanType", ConstObject.SCAN_PHOTOS)
// })
// }
//
// ID_RECOVERY_VIDEOS -> {
// startActivity(Intent(this, FileScanResultActivity::class.java).apply {
// putExtra("ScanType", ConstObject.SCAN_VIDEOS)
// })
// }
//
// ID_RECOVERY_DOCUMENTS -> {
// startActivity(Intent(this, FileScanResultActivity::class.java).apply {
// putExtra("ScanType", ConstObject.SCAN_DOCUMENTS)
// })
// }
//
// ID_PRIVACY_SPACE -> {
// if (privacyPinPassword.isNotEmpty()) {
// startActivity(Intent(this, PrivacyPinOneActivity::class.java))
// } else {
// startActivity(Intent(this, PrivacySpaceActivity::class.java).apply {
//
// })
// }
// }
//
// ID_WHATSAPP_CLEANER -> {
// startActivity(Intent(this, WhatsAppCleanerAnimationActivity::class.java))
// }
//
// ID_LARGE_FILE -> {
// startActivity(Intent(this, LargeFileAnimationActivity::class.java))
// }
//
// ID_APP_PROCESS -> {
// startActivity(Intent(this, AppProcessAnimationActivity::class.java))
// }
//
// ID_APP_MANAGER -> {
// startActivity(Intent(this, AppManagerAnimationActivity::class.java))
// }
//
// ID_BATTERY_INFO -> {
// startActivity(Intent(this, BatteryInfoAnimationActivity::class.java))
// }
//
// else -> {
// val isHotLaunch = intent?.extras?.getBoolean("isHotLaunch", false) ?: false
// if (!isHotLaunch) {
// if (!isGuide) {
// startActivity(Intent(this@SplashActivity, GuideActivity::class.java))
// } else {
// startActivity(Intent(this@SplashActivity, MainActivity::class.java))
// }
// }
// }
// }
// finish()
// intent.extras?.clear()
// }
//
// private fun closeNotification() {
// sendBroadcast(Intent(this, CloseNotificationReceiver::class.java).apply {
// this.action = CloseNotificationReceiver.Action
// this.putExtra(NotificationId, actionId)
// })
// }
//
// override fun initListener() {
//
// binding.idTvStart.setOnClickListener {
// if (oneClickStart) {
// return@setOnClickListener
// }
// oneClickStart = true
// ifAgreePrivacy = true
// (application as MyApplication).initApp(true)
// AdmobMaxHelper.preloadAd(this)
// binding.llStart.visibility = View.GONE
// binding.llProgress.visibility = View.VISIBLE
// job = startProgress()
// }
// }
//
// private var processTime = 0L
// private var outTimeAdStart = false
// private fun startProgress() = lifecycleScope.launch(Dispatchers.Main) {
// LogEx.logDebug(TAG, "startProgress")
// while (isActive) {
// val value = binding.pb.progress + 2
// binding.pb.setProgress(value, true)
// progress.emit(value)
// val delayTime = 450L
// delay(delayTime)
// processTime += delayTime
// if (processTime >= 900L) {
// if (!outTimeAdStart) {
// outTimeAdStart = true
// outTimeAd()
// }
// }
// }
// }
//
//
// private fun outTimeAd() {
// LogEx.logDebug(TAG, "outTimeAd")
// var loaded: Boolean = true
// AdmobMaxHelper.admobMaxShowOpenAd(this, showBeforeAction = { flag ->
// loaded = flag
// job?.cancel()
// }) {
// val sp = AppPreferences.getInstance().getString("splashShowInter", "0").toInt()
// if (sp == 1 && !loaded) {
// AdmobMaxHelper.admobMaxShowInterstitialAd(this, false) {
// binding.pb.progress = 100
// jumpNext()
// }
// } else {
// binding.pb.progress = 100
// jumpNext()
// }
// }
// }
//
// override fun onResume() {
// super.onResume()
// LogEx.logDebug(TAG, "onResume")
// if (ifAgreePrivacy && job?.isActive == false) {
// job = startProgress()
// }
// }
//
// override fun onPause() {
// super.onPause()
// job?.cancel()
// LogEx.logDebug(TAG, "onPause")
// }
//
//
//}
\ No newline at end of file
package com.base.datarecovery.activity.splash
import android.app.Activity
import android.content.Intent
import android.net.Uri
import android.text.SpannableString
import android.text.Spanned
import android.text.style.UnderlineSpan
import com.base.datarecovery.MyApplication
import com.base.datarecovery.bean.ConstObject.ifAgreePrivacy
import com.base.datarecovery.databinding.ActivitySplashBinding
import com.base.datarecovery.help.ConfigHelper
class PrivacyManager(
private val binding: ActivitySplashBinding,
private val context: Activity,
private val listener: OnUserPrivacyAgreementListener
) {
init {
initView()
}
private fun initView() {
val spannableString = SpannableString("Privacy Policy")
spannableString.setSpan(
UnderlineSpan(),
0,
spannableString.length,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
)
binding.idTvPrivacyPolicy.text = spannableString
binding.idTvPrivacyPolicy.setOnClickListener {
val intent = Intent(
Intent.ACTION_VIEW,
Uri.parse(ConfigHelper.privacyPolicy)
)
context.startActivity(intent)
}
var clicked = false
binding.idTvStart.setOnClickListener {
if (clicked) {
return@setOnClickListener
}
clicked = true
ifAgreePrivacy = true
(context.application as MyApplication).initApp()
listener.onAgreePrivacy()
}
}
interface OnUserPrivacyAgreementListener {
fun onAgreePrivacy()
}
}
\ No newline at end of file
package com.base.datarecovery.activity.splash
import android.Manifest
import android.annotation.SuppressLint
import android.content.Intent
import android.graphics.Color
import android.os.Build
import android.os.Handler
import android.view.KeyEvent
import androidx.activity.result.contract.ActivityResultContracts
import com.base.datarecovery.MyApplication
import com.base.datarecovery.ads.AdmobMaxHelper
import com.base.datarecovery.bean.ConstObject.ifAgreePrivacy
import com.base.datarecovery.databinding.ActivitySplashBinding
import com.base.datarecovery.fcm.CloseNotificationReceiver
import com.base.datarecovery.fcm.NotificationUtil
import com.base.datarecovery.help.BaseActivity
import com.base.datarecovery.service.StayNotificationService.Companion.startStayNotification
import com.base.datarecovery.utils.BarUtils
import com.base.datarecovery.utils.EventUtils
@SuppressLint("CustomSplashScreen")
class Splash2Activity : BaseActivity<ActivitySplashBinding>(),
PrivacyManager.OnUserPrivacyAgreementListener, TaskManager.ProgressListener {
private val TAG = "NewStartActivity"
private fun initStatusBar() {
BarUtils.setStatusBarLightMode(this, true)
BarUtils.setStatusBarColor(this, Color.TRANSPARENT)
if (Build.VERSION.SDK_INT >= 33) {
registerForActivityResult(ActivityResultContracts.RequestPermission()) {}.launch(
Manifest.permission.POST_NOTIFICATIONS
)
}
}
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
if (keyCode == KeyEvent.KEYCODE_BACK) {
EventUtils.event("back")
}
return super.onKeyDown(keyCode, event)
}
override val binding: ActivitySplashBinding by lazy {
ActivitySplashBinding.inflate(layoutInflater)
}
private var mTaskManager: TaskManager? = null
var jumpType = 0
override fun initView() {
initStatusBar()
if (isDestroyed) {
return
}
if (MyApplication.isInterOpenShowing) {
finish()
return
}
NotificationUtil.stopNotificationHandler()
jumpType = intent.getIntExtra("actionId", 0)
closeNotification()
mTaskManager = TaskManager(binding, this)
if (ifAgreePrivacy) {
onAgreePrivacy()
} else {
PrivacyManager(binding, this, this)
}
}
private fun closeNotification() {
sendBroadcast(Intent(this, CloseNotificationReceiver::class.java).apply {
this.action = CloseNotificationReceiver.Action
this.putExtra(CloseNotificationReceiver.NotificationId, jumpType)
})
}
override fun onAgreePrivacy() {
EventUtils.event("app_start")
if (jumpType == 0) {
startStayNotification()
}
mTaskManager?.startProgress()
loadAd()
}
override fun onProgressMax() {
Handler().postDelayed({
StartUtils.jumpNextPage(this)
}, 500)
}
private fun loadAd() {
AdmobMaxHelper.admobMaxShowOpenAd(this, {
mTaskManager?.pauseProgress()
}, {
mTaskManager?.pauseProgress()
runOnUiThread {
mTaskManager?.maxProgress()
}
})
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
setIntent(intent)
}
private var isPause = false
override fun onStart() {
super.onStart()
isPause = false
}
override fun onPause() {
super.onPause()
isPause = true
EventUtils.event("onPause")
}
override fun onResume() {
super.onResume()
isPause = false
EventUtils.event("onResume")
}
override fun onStop() {
super.onStop()
isPause = true
}
}
\ No newline at end of file
package com.base.datarecovery.activity.splash
import android.app.Activity
import android.content.Intent
import android.util.Log
import com.base.datarecovery.activity.MainActivity
import com.base.datarecovery.activity.appmanager.AppManagerAnimationActivity
import com.base.datarecovery.activity.appprocess.AppProcessAnimationActivity
import com.base.datarecovery.activity.battery.BatteryInfoAnimationActivity
import com.base.datarecovery.activity.guide.GuideActivity
import com.base.datarecovery.activity.junkclean.ScanJunkActivity
import com.base.datarecovery.activity.photomanager.PhotoManagerAnimationActivity
import com.base.datarecovery.activity.recovery.FileScanResultActivity
import com.base.datarecovery.activity.whatsapp.WhatsAppCleanerAnimationActivity
import com.base.datarecovery.bean.ConstObject
import com.base.datarecovery.bean.ConstObject.ID_APP_MANAGER
import com.base.datarecovery.bean.ConstObject.ID_APP_PROCESS
import com.base.datarecovery.bean.ConstObject.ID_BATTERY_INFO
import com.base.datarecovery.bean.ConstObject.ID_JUNK_CLEAN_PUSH
import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_DOCUMENTS
import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_PHOTOS
import com.base.datarecovery.bean.ConstObject.ID_RECOVERY_VIDEOS
import com.base.datarecovery.bean.ConstObject.ID_SCREENSHOT_CLEAN
import com.base.datarecovery.bean.ConstObject.ID_SIMILAR_IMAGE
import com.base.datarecovery.bean.ConstObject.ID_WHATSAPP_CLEANER
import com.base.datarecovery.bean.ConstObject.isGuide
object StartUtils {
private val TAG = "SplashJumpUtils"
fun jumpNextPage(context: Activity) {
var jumpType = context.intent.getIntExtra("actionId", 0)
Log.e(TAG, "actionId: $jumpType")
if (jumpType == 0) {
val uri = context.intent.data
val str = (uri?.getQueryParameter("type") ?: "0")
jumpType = str.toIntOrNull() ?: 0
if (jumpType != 0) {
}
}
when (jumpType) {
//=================================主动广播=======================================
ID_JUNK_CLEAN_PUSH -> {
context.startActivity(Intent(context, ScanJunkActivity::class.java))
}
ID_SIMILAR_IMAGE -> {
context.startActivity(Intent(context, PhotoManagerAnimationActivity::class.java))
}
ID_SCREENSHOT_CLEAN -> {
context.startActivity(Intent(context, PhotoManagerAnimationActivity::class.java))
}
ID_RECOVERY_PHOTOS -> {
context.startActivity(
Intent(context, FileScanResultActivity::class.java).putExtra(
"ScanType", ConstObject.SCAN_PHOTOS
)
)
}
ID_RECOVERY_VIDEOS -> {
context.startActivity(
Intent(context, FileScanResultActivity::class.java).putExtra(
"ScanType",
ConstObject.SCAN_VIDEOS
)
)
}
ID_RECOVERY_DOCUMENTS -> {
context.startActivity(
Intent(context, FileScanResultActivity::class.java).putExtra(
"ScanType",
ConstObject.SCAN_DOCUMENTS
)
)
}
ID_WHATSAPP_CLEANER -> {
context.startActivity(Intent(context, WhatsAppCleanerAnimationActivity::class.java))
}
ID_APP_PROCESS -> {
context.startActivity(Intent(context, AppProcessAnimationActivity::class.java))
}
ID_APP_MANAGER -> {
context.startActivity(Intent(context, AppManagerAnimationActivity::class.java))
}
ID_BATTERY_INFO -> {
context.startActivity(Intent(context, BatteryInfoAnimationActivity::class.java))
}
//================================被动广播=========================================
else -> {
val isHotLaunch = context.intent?.extras?.getBoolean("isHotLaunch", false) ?: false
if (!isHotLaunch) {
if (!isGuide) {
context.startActivity(Intent(context, GuideActivity::class.java))
isGuide = true
} else {
context.startActivity(Intent(context, MainActivity::class.java))
}
}
}
}
context.finish()
}
}
\ No newline at end of file
package com.base.datarecovery.activity.splash
import android.os.Handler
import android.view.View
import androidx.core.view.isVisible
import com.base.datarecovery.databinding.ActivitySplashBinding
class TaskManager {
private val binding: ActivitySplashBinding
private var mHandler: Handler
private var mIsPaused = false
private var mProgress = 0
private val listener: ProgressListener
constructor(binding: ActivitySplashBinding, listener: ProgressListener) {
this.binding = binding
this.listener = listener
mHandler = Handler()
initView()
}
var loadTime: Int = 15
private fun initView() {
//loadTime = SPUtils.getInstance().getInt("loading_page_time", 15)
binding.pb.max = loadTime
binding.pb.progress = 0
}
fun startProgress() {
binding.idTvStart.isVisible = false
binding.llStart.visibility = View.GONE
binding.llProgress.visibility = View.VISIBLE
val mRunnable: Runnable = object : Runnable {
override fun run() {
if (!mIsPaused) {
mProgress++ // 计算进度
binding.pb.progress = mProgress
if (mProgress < loadTime) {
mHandler.postDelayed(this, 1000) // 每秒钟更新一次进度
} else {
listener.onProgressMax()
pauseProgress()
}
}
}
}
mHandler.postDelayed(mRunnable, 1000)
}
fun pauseProgress() {
if (!mIsPaused) {
mIsPaused = true
mHandler.removeCallbacksAndMessages(null)
}
}
fun maxProgress() {
binding.pb.progress = binding.pb.max
listener.onProgressMax()
}
interface ProgressListener {
fun onProgressMax()
}
}
\ No newline at end of file
......@@ -14,7 +14,7 @@ import androidx.core.app.NotificationCompat
import androidx.core.graphics.drawable.IconCompat
import com.base.datarecovery.MyApplication
import com.base.datarecovery.R
import com.base.datarecovery.activity.SplashActivity
import com.base.datarecovery.activity.splash.Splash2Activity
import com.base.datarecovery.ads.AdDisplayUtils
import com.base.datarecovery.bean.ConstObject.ID_APP_MANAGER
import com.base.datarecovery.bean.ConstObject.ID_APP_PROCESS
......@@ -149,7 +149,7 @@ object NotificationUtil {
)
//跳转
val intent = Intent(context, SplashActivity::class.java)
val intent = Intent(context, Splash2Activity::class.java)
intent.putExtra("actionId", actionId)
val btnRequestCode = Random().nextInt(1000)
val btnPendingIntent =
......@@ -299,13 +299,13 @@ object NotificationUtil {
for (i in 1..num) {
val time = i * delay
handler?.postDelayed(Runnable {
if (MyApplication.PAUSED_VALUE === 1) {
if (MyApplication.PAUSED_VALUE == 1) {
if (handler != null) {
handler?.removeCallbacksAndMessages(null)
}
return@Runnable
}
if (MyApplication.PAUSED_VALUE !== 1 && ScreenStatusReceiver.isDeviceInteractive() && !ScreenStatusReceiver.isSecureLockActive()) {
if (MyApplication.PAUSED_VALUE != 1 && ScreenStatusReceiver.isDeviceInteractive() && !ScreenStatusReceiver.isSecureLockActive()) {
sendNotification(context, actionId)
}
}, time)
......
package com.base.datarecovery.help
import com.base.datarecovery.activity.SplashActivity
import com.base.datarecovery.activity.splash.Splash2Activity
object ConfigHelper {
......@@ -39,7 +40,7 @@ object ConfigHelper {
"full", // 过滤全屏广告
"adActivity",
"AppLovinFullscreenActivity",
SplashActivity::class.java.simpleName
Splash2Activity::class.java.simpleName
// 返回前台时不跳转启动页的 activity
)
......
......@@ -15,10 +15,9 @@ import android.os.Build
import android.os.IBinder
import android.widget.RemoteViews
import androidx.core.app.NotificationCompat
import androidx.core.graphics.drawable.IconCompat
import com.base.datarecovery.R
import com.base.datarecovery.activity.MainActivity
import com.base.datarecovery.activity.SplashActivity
import com.base.datarecovery.activity.splash.Splash2Activity
import com.base.datarecovery.bean.ConstObject
import com.base.datarecovery.bean.ConstObject.SCAN_DOCUMENTS
import com.base.datarecovery.bean.ConstObject.SCAN_PHOTOS
......@@ -59,7 +58,7 @@ class StayNotificationService : Service() {
val expendView = RemoteViews(context.packageName, R.layout.stay_notification_big)
val requestCode1 = Random.nextInt(1800)
val intent0 = Intent(context, SplashActivity::class.java).apply {
val intent0 = Intent(context, Splash2Activity::class.java).apply {
putExtra("actionId", ConstObject.ID_JUNK_CLEAN_PUSH)
}
val pendingIntent0 =
......@@ -68,7 +67,7 @@ class StayNotificationService : Service() {
expendView.setOnClickPendingIntent(R.id.id_ll_clean, pendingIntent0)
val requestCode2 = Random.nextInt(1800)
val intent2 = Intent(context, SplashActivity::class.java).apply {
val intent2 = Intent(context, Splash2Activity::class.java).apply {
putExtra("actionId", ConstObject.ID_RECOVERY_PHOTOS)
putExtra("ScanType", SCAN_PHOTOS)
}
......@@ -78,7 +77,7 @@ class StayNotificationService : Service() {
expendView.setOnClickPendingIntent(R.id.id_recovery_photos, pendingIntent2)
val requestCode3 = Random.nextInt(1800)
val intent3 = Intent(context, SplashActivity::class.java).apply {
val intent3 = Intent(context, Splash2Activity::class.java).apply {
putExtra("actionId", ConstObject.ID_RECOVERY_VIDEOS)
putExtra("ScanType", SCAN_VIDEOS)
}
......@@ -96,7 +95,7 @@ class StayNotificationService : Service() {
// expendView.setOnClickPendingIntent(R.id.id_screenshot, pendingIntent4)
val requestCode4 = Random.nextInt(1800)
val intent4 = Intent(context, SplashActivity::class.java).apply {
val intent4 = Intent(context, Splash2Activity::class.java).apply {
putExtra("actionId", ConstObject.ID_RECOVERY_DOCUMENTS)
putExtra("ScanType", SCAN_DOCUMENTS)
}
......
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