package com.casic.endoscope.view import android.annotation.SuppressLint import android.content.pm.ActivityInfo import android.os.Bundle import android.os.Environment import android.view.View import android.widget.ImageView import androidx.activity.OnBackPressedCallback 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.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 var dirBeans = ArrayList<File>() private lateinit var directoryAdapter: MediaDirAdapter @SuppressLint("NotifyDataSetChanged") override fun initEvent() { binding.ascButton.setOnClickListener { //按时间排序,降序 dirBeans.sortByDescending { dir -> dir.name } directoryAdapter.notifyDataSetChanged() } binding.decButton.setOnClickListener { //升序 dirBeans.sortBy { dir -> dir.name } directoryAdapter.notifyDataSetChanged() } //替换onBackPressed onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { override fun handleOnBackPressed() { GSYVideoManager.backFromWindowFull(context) //解决退出全屏后会被强制竖屏的问题 requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE finish() } }) } 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) } //去重 val directoryNameSet = HashSet<String>(temp) //全部转为File类型,方便是用自带的排序函数 directoryNameSet.forEach { dirBeans.add(File(it)) } //按时间排序,降序 dirBeans.sortByDescending { dir -> dir.name } //绑定数据 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 { videoPlayer.startWindowFullscreen(context, false, true) } //防止错位设置 videoPlayer.playTag = System.currentTimeMillis().toString() videoPlayer.playPosition = childPos //是否根据视频尺寸,自动选择竖屏全屏或者横屏全屏 videoPlayer.isAutoFullWithSize = true //音频焦点冲突时是否释放 videoPlayer.isReleaseWhenLossAudio = false //全屏动画 videoPlayer.isShowFullAnimation = true } } 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() } }