Commit 8ad6118d authored by wanglei's avatar wanglei

文件遍历方式获取文件

parent d34ac4e8
......@@ -2,7 +2,6 @@ package com.base.superpdfreader
import android.annotation.SuppressLint
import android.graphics.Color
import android.util.Log
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentActivity
......@@ -11,7 +10,7 @@ import androidx.viewpager2.widget.ViewPager2.OnPageChangeCallback
import com.base.superpdfreader.databinding.ActivityMainBinding
import com.base.superpdfreader.databinding.ItemTabBinding
import com.base.superpdfreader.fragment.DocumentListFragment
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_DPF
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_PDF
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_EXCEL
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_PPT
import com.base.superpdfreader.fragment.DocumentListFragment.Companion.MODE_WORD
......@@ -30,7 +29,7 @@ class MainActivity : BaseActivity<ActivityMainBinding>() {
private val pages = arrayListOf<DocumentListFragment>()
private val pdfFragment by lazy {
DocumentListFragment().apply { UI_MODE = MODE_DPF }
DocumentListFragment().apply { UI_MODE = MODE_PDF }
}
private val wordFragment by lazy {
DocumentListFragment().apply { UI_MODE = MODE_WORD }
......
......@@ -10,12 +10,10 @@ import com.base.superpdfreader.bean.DocumentBean
import com.base.superpdfreader.databinding.ItemDocumentBinding
import com.base.superpdfreader.view.XmlEx.inflate
import java.io.File
import java.nio.file.Files
import java.nio.file.attribute.FileTime
class DocumentAdapter(val itemClick: (bean: DocumentBean) -> Unit) : RecyclerView.Adapter<DocumentAdapter.DDD>() {
class DocumentAdapter(val itemClick: (bean: DocumentBean) -> Unit) :
RecyclerView.Adapter<DocumentAdapter.DDD>() {
private val hasData = HashSet<File>()
private val docList = ArrayList<DocumentBean>()
class DDD(view: View) : ViewHolder(view)
......@@ -43,19 +41,17 @@ class DocumentAdapter(val itemClick: (bean: DocumentBean) -> Unit) : RecyclerVie
@SuppressLint("NotifyDataSetChanged")
fun addData(type: String, drawable: Int, list: List<File>) {
list.forEach { file ->
val flag = hasData.add(file)
if (flag) {
val bean = DocumentBean(
drawable,
file.name,
file.lastModified(),
file.length(),
file.absolutePath, type
)
docList.add(bean)
}
val beans = list.map { file ->
val bean = DocumentBean(
drawable,
file.name,
file.lastModified(),
file.length(),
file.absolutePath, type
)
bean
}
docList.addAll(beans)
notifyDataSetChanged()
}
......
......@@ -9,16 +9,18 @@ import com.base.superpdfreader.adapter.DocumentAdapter
import com.base.superpdfreader.databinding.FragmentDocumentListBinding
import com.base.superpdfreader.helps.BaseFragment
import com.base.superpdfreader.helps.FileHelp.loadDocument
import com.base.superpdfreader.helps.LogEx
import com.base.superpdfreader.helps.PermissionHelp.checkStorePermission
import com.base.superpdfreader.helps.PermissionHelp.requestStorePermission
import com.base.superpdfreader.view.DocumentDetailDialog.showDocumentDetailDialog
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.async
import kotlinx.coroutines.launch
class DocumentListFragment() : BaseFragment<FragmentDocumentListBinding>() {
var UI_MODE: String = MODE_DPF
private val TAG = "DocumentListFragment"
var UI_MODE: String = MODE_PDF
private lateinit var adapter: DocumentAdapter
public override val binding: FragmentDocumentListBinding by lazy {
......@@ -28,20 +30,24 @@ class DocumentListFragment() : BaseFragment<FragmentDocumentListBinding>() {
override fun setView() {
when (UI_MODE) {
MODE_DPF -> {
binding.tvAllow.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_allow_pdf)
MODE_PDF -> {
binding.tvAllow.background =
ContextCompat.getDrawable(requireContext(), R.drawable.bg_allow_pdf)
}
MODE_WORD -> {
binding.tvAllow.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_allow_word)
binding.tvAllow.background =
ContextCompat.getDrawable(requireContext(), R.drawable.bg_allow_word)
}
MODE_PPT -> {
binding.tvAllow.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_allow_ppt)
binding.tvAllow.background =
ContextCompat.getDrawable(requireContext(), R.drawable.bg_allow_ppt)
}
MODE_EXCEL -> {
binding.tvAllow.background = ContextCompat.getDrawable(requireContext(), R.drawable.bg_allow_excel)
binding.tvAllow.background =
ContextCompat.getDrawable(requireContext(), R.drawable.bg_allow_excel)
}
}
adapter = DocumentAdapter { bean ->
......@@ -72,13 +78,15 @@ class DocumentListFragment() : BaseFragment<FragmentDocumentListBinding>() {
private fun initData() = lifecycleScope.launch(Dispatchers.IO) {
when (UI_MODE) {
MODE_DPF -> {
MODE_PDF -> {
loadDocument(filter = {
it.path.contains(".pdf")
val fileType = it.path.substring(it.path.length - 4, it.path.length)
val flag = fileType == ".pdf"
LogEx.logDebug(TAG, "fileType=$fileType flag=$flag")
flag
}) { files ->
launch(Dispatchers.Main) {
adapter.addData(MODE_DPF, R.mipmap.pdf, files)
adapter.addData(MODE_PDF, R.mipmap.pdf, files)
}
}
}
......@@ -95,6 +103,7 @@ class DocumentListFragment() : BaseFragment<FragmentDocumentListBinding>() {
MODE_PPT -> {
loadDocument(filter = {
it.path.contains(".ppt")
}) { files ->
launch(Dispatchers.Main) {
......@@ -121,7 +130,7 @@ class DocumentListFragment() : BaseFragment<FragmentDocumentListBinding>() {
}
companion object {
const val MODE_DPF = "PDF"
const val MODE_PDF = "PDF"
const val MODE_WORD = "WORD"
const val MODE_PPT = "PPT"
const val MODE_EXCEL = "EXCEL"
......
package com.base.superpdfreader.helps
import android.os.Environment
import android.provider.MediaStore
import android.util.Log
import androidx.lifecycle.LifecycleCoroutineScope
import kotlinx.coroutines.Dispatchers
......@@ -15,33 +16,28 @@ object FileHelp {
filter: (file: File) -> Boolean,
eachFile: (eachFiles: List<File>) -> Unit
) {
var firstSend = true
val resultList = arrayListOf<File>()
val root = Environment.getExternalStorageDirectory()
loadFileByFilter(root, filter = filter, onDo = {
Log.e(TAG, "file=$it")
if (firstSend) {
//第一次发送
firstSend = false
eachFile.invoke(listOf(it))
if (resultList.size == 5) {
val mainList = arrayListOf<File>()
mainList.addAll(resultList)
resultList.clear()
Log.e(TAG, "size=${mainList.size}")
//这里onDo切换到main主协程,避免IO协程里的数据和main协程里的数据共用同一对象
eachFile.invoke(mainList)
} else {
//间隔发送
resultList.add(it)
if (resultList.size == 5) {
val mainList = arrayListOf<File>()
mainList.addAll(mainList)
//这里onDo切换到main主协程,避免IO协程里的数据和main协程里的数据共用同一对象
eachFile.invoke(mainList)
resultList.clear()
}
}
})
eachFile.invoke(resultList)
}
fun loadFileByFilter(
private fun loadFileByFilter(
folder: File,
filter: (file: File) -> Boolean,
onDo: ((file: File) -> Unit)?
......@@ -54,7 +50,11 @@ object FileHelp {
if (it.isDirectory) {
linkList.add(it)
} else {
onDo?.invoke(it)
val flag = filter(it)
LogEx.logDebug(TAG, "$it flag=$flag")
if (flag) {
onDo?.invoke(it)
}
}
}
......@@ -67,7 +67,9 @@ object FileHelp {
if (it.isDirectory) {
linkList.add(it)
} else {
if (filter(it)) {
val flag = filter(it)
LogEx.logDebug(TAG, "$it flag=$flag")
if (flag) {
onDo?.invoke(it)
}
}
......
package com.base.superpdfreader.helps
object MediaStoreHelp {
}
\ No newline at end of file
......@@ -27,7 +27,7 @@ object DocumentDetailDialog {
binding.tvName.text = bean.name
binding.tvInfo.text = "Last modified: ${bean.info(true)}"
when (UI_MODE) {
DocumentListFragment.MODE_DPF -> {
DocumentListFragment.MODE_PDF -> {
binding.ivDocument.setImageResource(R.mipmap.pdf)
binding.ivOpen.setImageResource(R.mipmap.openfileh)
binding.ivEmail.setImageResource(R.mipmap.emailh)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment