Newer
Older
Endoscope / app / src / main / java / com / casic / endoscope / view / AlbumActivity.kt
package com.casic.endoscope.view

import android.os.Bundle
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.casic.endoscope.utils.FileManager
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

    //子文件夹集合
    private lateinit var tempSet: HashSet<String>
    private lateinit var dirBeans: MutableList<String>
    private lateinit var directoryAdapter: MediaDirAdapter

    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(FileManager.getRootDirectory(), "Video")
        videoDir.list()?.forEach {
            temp.add(it)
        }

        val imageDir = File(FileManager.getRootDirectory(), "Picture")
        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()
    }
}