package com.casic.endoscope.view
import android.annotation.SuppressLint
import android.os.Bundle
import android.os.Environment
import android.view.View
import android.widget.ImageView
import androidx.lifecycle.lifecycleScope
import com.bumptech.glide.Glide
import com.casic.endoscope.R
import com.casic.endoscope.adapter.MediaDirAdapter
import com.casic.endoscope.databinding.ActivityAlbumBinding
import com.gyf.immersionbar.ImmersionBar
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.base.KotlinBaseActivity
import com.pengxh.kt.lite.divider.RecyclerViewItemOffsets
import com.pengxh.kt.lite.extensions.dp2px
import com.pengxh.kt.lite.extensions.getStatusBarHeight
import com.pengxh.kt.lite.extensions.navigatePageTo
import com.shuyu.gsyvideoplayer.GSYVideoManager
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import java.io.File
class AlbumActivity : KotlinBaseActivity<ActivityAlbumBinding>() {
private val kTag = "AlbumActivity"
private val context = this@AlbumActivity
//子文件夹集合
private lateinit var tempSet: HashSet<String>
private lateinit var dirBeans: MutableList<String>
private lateinit var directoryAdapter: MediaDirAdapter
@SuppressLint("NotifyDataSetChanged")
override fun initEvent() {
binding.ascButton.setOnClickListener {
//按时间排序,降序
dirBeans = tempSet.sortedWith { d1, d2 ->
d2.compareTo(d1)
}.toMutableList()
directoryAdapter.setRefreshData(dirBeans)
}
binding.decButton.setOnClickListener {
//升序
dirBeans = tempSet.sortedWith { d1, d2 ->
d1.compareTo(d2)
}.toMutableList()
directoryAdapter.setRefreshData(dirBeans)
}
}
override fun initOnCreate(savedInstanceState: Bundle?) {
val temp = ArrayList<String>()
val videoDir = File(getExternalFilesDir(Environment.DIRECTORY_MOVIES), "")
videoDir.list()?.forEach {
temp.add(it)
}
val imageDir = File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "")
imageDir.list()?.forEach {
temp.add(it)
}
//去重
tempSet = HashSet(temp)
//排序,降序
dirBeans = tempSet.sortedWith { d1, d2 ->
d2.compareTo(d1)
}.toMutableList()
//绑定数据
directoryAdapter = object : MediaDirAdapter(this, dirBeans) {
override fun bindChildVideoRes(child: ViewHolder, childPos: Int, item: File) {
val videoPlayer = child.getView<StandardGSYVideoPlayer>(R.id.videoPlayer)
videoPlayer.titleTextView.visibility = View.GONE
videoPlayer.backButton.visibility = View.GONE
lifecycleScope.launch(Dispatchers.Main) {
try {
val drawable = withContext(Dispatchers.IO) {
Glide.with(context).load(item).submit().get()
}
val coverImg = ImageView(context)
coverImg.setImageDrawable(drawable)
videoPlayer.thumbImageView = coverImg
} catch (e: Exception) {
e.printStackTrace()
}
}
videoPlayer.setUp(item.absolutePath, true, "")
videoPlayer.fullscreenButton.setOnClickListener {
navigatePageTo<FullScreenVideoActivity>(item.absolutePath)
}
videoPlayer.playTag = System.currentTimeMillis().toString()
videoPlayer.playPosition = childPos
videoPlayer.isReleaseWhenLossAudio = false
videoPlayer.setIsTouchWiget(false)
}
}
val offset = 10.dp2px(this)
binding.recyclerView.addItemDecoration(
RecyclerViewItemOffsets(offset, offset, offset, offset)
)
binding.recyclerView.adapter = directoryAdapter
}
override fun initViewBinding(): ActivityAlbumBinding {
return ActivityAlbumBinding.inflate(layoutInflater)
}
override fun observeRequestState() {
}
override fun setupTopBarLayout() {
ImmersionBar.with(this).statusBarDarkFont(false).init()
//根据不同设备状态栏高度设置statusBarView高度
val statusBarHeight = getStatusBarHeight()
binding.rootView.setPadding(0, statusBarHeight, 0, 0)
binding.rootView.requestLayout()
}
override fun onPause() {
super.onPause()
GSYVideoManager.onPause()
}
override fun onResume() {
super.onResume()
GSYVideoManager.onResume()
}
override fun onDestroy() {
super.onDestroy()
GSYVideoManager.releaseAllVideos()
}
@Deprecated("Deprecated in Java")
override fun onBackPressed() {
if (GSYVideoManager.backFromWindowFull(this)) {
return
}
super.onBackPressed()
}
}