码桶

发现社区成员的开源项目

SplashActivity.kt1.8 KB
package com.dalao.forum

import android.content.Intent
import android.os.Bundle
import android.os.CountDownTimer
import androidx.appcompat.app.AppCompatActivity
import com.dalao.forum.databinding.ActivitySplashBinding

/**
 * 开屏广告位:SPLASH_AD_ENABLED 为 false 时直接跳过,不额外等待。
 * 需要接入广告 SDK 时,在 showAd() 里加载真实广告素材即可。
 */
class SplashActivity : AppCompatActivity() {

    companion object {
        private const val SPLASH_AD_ENABLED = false
        private const val SPLASH_AD_SECONDS = 3
    }

    private lateinit var binding: ActivitySplashBinding
    private var countDownTimer: CountDownTimer? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivitySplashBinding.inflate(layoutInflater)
        setContentView(binding.root)

        if (SPLASH_AD_ENABLED) {
            showAdWithCountdown()
        } else {
            goToMain()
        }
    }

    private fun showAdWithCountdown() {
        binding.adBadge.visibility = android.view.View.VISIBLE
        binding.adBadge.setOnClickListener { goToMain() }
        countDownTimer = object : CountDownTimer(SPLASH_AD_SECONDS * 1000L, 1000L) {
            override fun onTick(millisUntilFinished: Long) {
                val secondsLeft = (millisUntilFinished / 1000L).toInt() + 1
                binding.adBadge.text = getString(R.string.skip_ad, secondsLeft)
            }

            override fun onFinish() {
                goToMain()
            }
        }.start()
    }

    private fun goToMain() {
        startActivity(Intent(this, MainActivity::class.java))
        finish()
    }

    override fun onDestroy() {
        countDownTimer?.cancel()
        super.onDestroy()
    }
}