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
@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)
}
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()
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)
}
}