Musicoo/app/src/main/java/melody/offline/music/activity/LaunchActivity.kt
2024-06-27 17:09:51 +08:00

144 lines
5.1 KiB
Kotlin
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package melody.offline.music.activity
import android.content.Intent
import android.os.CountDownTimer
import android.os.Handler
import android.os.Looper
import android.os.Message
import com.gyf.immersionbar.ktx.immersionBar
import com.lol.apex.ok.google.adlibrary.LoLAds
import com.lol.apex.ok.google.adlibrary.base.listener.LolLoadError
import com.lol.apex.ok.google.adlibrary.base.listener.LolShowError
import melody.offline.music.ads.AdPlacement
import melody.offline.music.ads.AnalysisAdState
import melody.offline.music.ads.LolAdWrapper
import melody.offline.music.databinding.ActivityLaunchBinding
import melody.offline.music.util.AnalysisUtil
import melody.offline.music.util.LogTag
class LaunchActivity : MoBaseActivity() {
companion object {
private const val MSG_PROGRESS = 0
private const val MSG_LOAD_AD_LOADED = 1
private const val MSG_LOAD_AD_FAIL = 2
const val FROM_TYPE = "STARTED_FROM_ON_ACTIVITY_STARTED_TYPE"
}
private lateinit var binding: ActivityLaunchBinding
private val mMaxLoading = 10000L//最大超时
private var progress = 0f
private val delayMillis = mMaxLoading / 100
private var type = -1
private val handler = object : Handler(Looper.getMainLooper()) {
override fun handleMessage(msg: Message) {
val progressBar = binding.customProgressBar
if (!isFinishing && !isDestroyed) {
when (msg.what) {
MSG_PROGRESS -> {
if (progress >= 100f) {//超时
//超时就是没有广告就是广告show失败了
val map =
mutableMapOf(Pair(AnalysisUtil.PARAM_VALUE, "No cache for ads"))
AnalysisUtil.placeToLogEvent(
AdPlacement.INST_SPLASH, AnalysisAdState.AD_SHOW_FAILED, map
)
toMainActivity()
return
}
if (adCanShow()) {
sendEmptyMessageDelayed(MSG_LOAD_AD_LOADED, delayMillis)
removeMessages(MSG_PROGRESS)
return
}
progress += 1
progressBar.setProgress(progress)
sendEmptyMessageDelayed(MSG_PROGRESS, delayMillis)
}
MSG_LOAD_AD_LOADED -> {
if (progress >= 100f) {
showAd()
removeMessages(MSG_LOAD_AD_LOADED)
return
}
progress += 3
progressBar.setProgress(progress)
sendEmptyMessageDelayed(MSG_LOAD_AD_LOADED, delayMillis)
}
MSG_LOAD_AD_FAIL -> {
sendEmptyMessageDelayed(MSG_LOAD_AD_LOADED, delayMillis)
removeMessages(MSG_LOAD_AD_FAIL)
removeMessages(MSG_PROGRESS)
}
}
}
}
}
override suspend fun main() {
binding = ActivityLaunchBinding.inflate(layoutInflater)
setContentView(binding.root)
AnalysisUtil.logEvent(AnalysisUtil.LAUNCH_PV)
type = intent.getIntExtra(FROM_TYPE, -1)
loadAd()
handler.sendEmptyMessageDelayed(MSG_PROGRESS, delayMillis)
immersionBar {
fullScreen(true)
statusBarDarkFont(false)
}
}
private fun toMainActivity() {
if (!withPermission()) {
if (type == 1) {//如果type等于1则是从后台进入的应用不进行跳转直接关闭启动页
finish()
} else {
startActivity(Intent(this, MainActivity::class.java))
finish()
}
} else {
if (type == 1) {
finish()
} else {
startActivity(Intent(this, PrimaryActivity::class.java))
finish()
}
}
}
private fun loadAd() {
LolAdWrapper.shared.loadAd(
this,
AdPlacement.INST_SPLASH,
object : LolAdWrapper.LoLLoadListener {
override fun loadFailed(error: LolLoadError?) {
handler.sendEmptyMessage(MSG_LOAD_AD_FAIL)
}
})
LolAdWrapper.shared.loadAdIfNotCached(this, AdPlacement.INST_BACKUP_ADS)
LolAdWrapper.shared.loadAdIfNotCached(this, AdPlacement.INST_INTO_PLAY)
}
private fun adCanShow(): Boolean {
return LolAdWrapper.shared.hasCache(AdPlacement.INST_SPLASH)
}
private fun showAd() {
LolAdWrapper.shared.showAdIfCached(
this,
AdPlacement.INST_SPLASH,
object : LolAdWrapper.LolShowListener {
override fun closed() {
toMainActivity()
}
override fun showFailed(error: LolShowError?) {
toMainActivity()
}
})
}
}