/** * 屏保展示页 */ class ScreensaverActivity :

42 阅读1分钟
package com.alibaba.genie.panel.setting.ui.activity.screensaver

import android.content.Context
import android.content.Intent
import android.os.Bundle
import android.view.MotionEvent
import android.view.ViewGroup
import com.alibaba.genie.panel.basic.base.BaseLayout
import com.alibaba.genie.panel.basic.base.BaseViewActivity
import com.alibaba.genie.panel.basic.component.bus.LiveBus
import com.alibaba.genie.panel.setting.BR
import com.alibaba.genie.panel.setting.R
import com.alibaba.genie.panel.setting.databinding.ActivityScreensaverBinding
import com.alibaba.genie.panel.setting.ui.component.event.ScreensaverEvent
import com.alibaba.genie.panel.setting.ui.utils.ScreenUtils
import com.alibaba.genie.panel.setting.ui.utils.SettingSPManager
import com.alibaba.genie.panel.setting.ui.viewmodel.SettingViewModel
import com.alibaba.genie.panel.setting.ui.widget.screensaver.FlipClockWrapView
import com.alibaba.genie.panel.setting.ui.widget.screensaver.RefreshAction

/**
 * 屏保展示页
 */
class ScreensaverActivity :
    BaseViewActivity<ActivityScreensaverBinding, SettingViewModel>() {

    companion object {
        const val SCREENSAVER_DURATION_MILLISECOND = 1800_000L
//        const val SCREENSAVER_DURATION_MILLISECOND = 10_000L
        /**
         * 启动 ScreensaverActivity
         *
         * @param context Context
         */
        @JvmStatic
        fun open(context: Context) {
            val intent = Intent(context, ScreensaverActivity::class.java)
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_NO_ANIMATION)
            context.startActivity(intent)
        }

    }

    private val screensaverId by lazy {
        SettingSPManager.getInstance().screensaverId
    }

    override fun initVariableId() = BR._all
    override fun initContentView(savedInstanceState: Bundle?) = R.layout.activity_screensaver

    override fun initView() {
        val cls = ScreensaverPagerAdapter.getScreensaverClsById(screensaverId)
        if (cls == null) {
            finish()
            return
        }
        val baseLayout = when {
            cls === FlipClockWrapView::class.java -> cls.getConstructor(
                Context::class.java,
                Boolean::class.java
            ).newInstance(this, false)

            else -> cls.getConstructor(
                Context::class.java
            ).newInstance(this)
        } as BaseLayout<*, *>
        if (baseLayout is RefreshAction) {
            baseLayout.setCorner(0f)
        }

        //replace
        val vContainer = binding.vContainer
        val parent = vContainer.parent
        val lpContainer = vContainer.layoutParams
        if (parent is ViewGroup) {
            parent.removeView(vContainer)
            parent.addView(baseLayout, lpContainer)
        }
    }

    override fun onResume() {
        super.onResume()

//        // 屏幕熄灭时间(秒)
//        val closeTime: Int = SystemPropertiesUtils.getScreensaverDuration()
//        // 保持开启
//        if (closeTime == -1) {
//            return
//        }

        // 定时熄灭屏幕
        mHandler.postDelayed({
            if (isDestroyed || isFinishing) {
                return@postDelayed
            }
            if (mHandler != null) {
                mHandler.removeCallbacksAndMessages(null)
            }
            ScreenUtils.releaseScreen()
            onBackPressed()
        }, SCREENSAVER_DURATION_MILLISECOND)
    }

    override fun initViewObservable() {
        super.initViewObservable()
        LiveBus.getInstance()
            .with(ScreensaverEvent.EVENT_CLOSE_SCREENSAVER, ScreensaverEvent::class.java)
            .observe(this) { _ ->
                ScreenUtils.saveScreenTouchTime()
                ScreenUtils.acquireScreen()
                finish()
            }
    }

    override fun onTouchEvent(event: MotionEvent?): Boolean {
        mHandler.removeCallbacksAndMessages(null)
        onBackPressed()
        return super.onTouchEvent(event)
    }

    override fun onDestroy() {
        super.onDestroy()
        mHandler.removeCallbacksAndMessages(null)
    }

    override fun finish() {
        super.finish()
        overridePendingTransition(0, 0)
    }

}