Newer
Older
Endoscope / app / src / main / java / com / casic / endoscope / adapter / MediaDirAdapter.kt
package com.casic.endoscope.adapter

import android.annotation.SuppressLint
import android.content.Context
import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.casic.endoscope.R
import com.casic.endoscope.utils.FileManager
import com.casic.endoscope.view.BigImageActivity
import com.pengxh.kt.lite.adapter.ViewHolder
import com.pengxh.kt.lite.extensions.navigatePageTo
import java.io.File

abstract class MediaDirAdapter(
    private val context: Context, private val dataRows: MutableList<String>
) : RecyclerView.Adapter<ViewHolder>() {

    private val kTag = "MediaDirAdapter"
    private lateinit var fileAdapter: MediaFileAdapter

    @SuppressLint("NotifyDataSetChanged")
    fun setRefreshData(dataRows: MutableList<String>) {
        this.dataRows.clear()
        this.dataRows.addAll(dataRows)
        notifyDataSetChanged()
    }

    override fun getItemCount(): Int = dataRows.size

    override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
        return ViewHolder(
            LayoutInflater.from(context).inflate(R.layout.item_dir_list_rv, parent, false)
        )
    }

    override fun onBindViewHolder(holder: ViewHolder, @SuppressLint("RecyclerView") position: Int) {
        val date = dataRows[position]
        holder.setText(R.id.dateView, date)

        //根据不同的日期显示不同的改日期下的九宫格形式子文件
        val fileBeans = ArrayList<File>()
        val videoDir = File(File(FileManager.getRootDirectory(), "Video"), date)
        videoDir.listFiles()?.forEach {
            fileBeans.add(it)
        }

        val imageDir = File(File(FileManager.getRootDirectory(), "Picture"), date)
        imageDir.listFiles()?.forEach {
            fileBeans.add(it)
        }

        val realPaths = ArrayList<String>()
        fileBeans.forEach {
            val absolutePath = it.absolutePath
            if (!absolutePath.endsWith(".mp4")) {
                realPaths.add(absolutePath)
            }
        }

        fileAdapter = object : MediaFileAdapter(context, fileBeans) {
            override fun bindVideoRes(child: ViewHolder, childPos: Int, item: File) {
                bindChildVideoRes(child, childPos, item)
            }

            override fun bindImageRes(child: ViewHolder, item: File) {
                child.setImageResource(R.id.imageView, item.absolutePath)
            }
        }
        val recyclerView = holder.getView<RecyclerView>(R.id.recyclerView)
        recyclerView.adapter = fileAdapter
        fileAdapter.setOnItemClickedListener(object : MediaFileAdapter.OnItemClickedListener {
            override fun onItemClicked(childPos: Int, item: File) {
                if (!item.name.endsWith(".mp4")) {
                    context.navigatePageTo<BigImageActivity>(childPos, realPaths)
                }
            }
        })
    }

    abstract fun bindChildVideoRes(child: ViewHolder, childPos: Int, item: File)
}