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.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