Commit 8ad6118d authored by wanglei's avatar wanglei

文件遍历方式获取文件

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