Commit d5231a14 authored by wanglei's avatar wanglei

...

parent f3c7066a
......@@ -49,6 +49,7 @@ dependencies {
//第三方UI
implementation("com.airbnb.android:lottie:6.4.0")
implementation("com.github.bumptech.glide:glide:4.16.0")
implementation("com.github.angcyo.DslTablayout:TabLayout:3.5.5")
//相机
......
package com.base.browserwhite.ui.adapter
import android.annotation.SuppressLint
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import androidx.recyclerview.widget.RecyclerView.ViewHolder
import com.base.browserwhite.R
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_APK
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_DOC
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_DOCX
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_PDF
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_PPT
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_PPTX
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_XLS
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_XLSX
import com.base.browserwhite.bean.MediaBean
import com.base.browserwhite.databinding.ItemMediaRecentBinding
import com.base.browserwhite.utils.KotlinExt.toFormatSize
import com.base.browserwhite.utils.XmlEx.inflate
import com.bumptech.glide.Glide
import java.io.File
import java.util.ArrayList
class MediaAdapter : RecyclerView.Adapter<MediaAdapter.MediaViewHolder>() {
......@@ -25,5 +38,54 @@ class MediaAdapter : RecyclerView.Adapter<MediaAdapter.MediaViewHolder>() {
override fun onBindViewHolder(holder: MediaViewHolder, position: Int) {
val binding = ItemMediaRecentBinding.bind(holder.itemView)
val context = holder.itemView.context
val bean = beanList[position]
binding.ivShipin.visibility = View.GONE
when {
bean.mimeType.contains("image") -> {
Glide.with(context).load(bean.path).into(binding.iv)
}
bean.mimeType.contains("video") -> {
Glide.with(context).load(bean.path).into(binding.iv)
binding.ivShipin.visibility = View.VISIBLE
}
bean.mimeType.contains("audio") -> {
}
bean.mimeType == MIME_TYPE_PDF -> {
binding.iv.setImageResource(R.mipmap.f_pdf)
}
bean.mimeType == MIME_TYPE_DOC || bean.mimeType == MIME_TYPE_DOCX -> {
binding.iv.setImageResource(R.mipmap.h_word)
}
bean.mimeType == MIME_TYPE_XLS || bean.mimeType == MIME_TYPE_XLSX -> {
binding.iv.setImageResource(R.mipmap.h_xls)
}
bean.mimeType == MIME_TYPE_PPT || bean.mimeType == MIME_TYPE_PPTX -> {
binding.iv.setImageResource(R.mipmap.h_ppt)
}
bean.mimeType == MIME_TYPE_APK -> {
binding.iv.setImageResource(R.mipmap.h_apk)
}
}
val file = File(bean.path)
binding.tvName.text = file.name
binding.tvSize.text = file.length().toFormatSize()
}
@SuppressLint("NotifyDataSetChanged")
fun setData(mediaList: List<MediaBean>) {
beanList.clear()
beanList.addAll(mediaList)
notifyDataSetChanged()
}
}
\ No newline at end of file
......@@ -6,32 +6,47 @@ import android.os.Build
import android.os.Environment
import android.os.StatFs
import android.os.storage.StorageManager
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.lifecycleScope
import com.base.browserwhite.databinding.FragmentFileBinding
import com.base.browserwhite.ui.activity.MainActivity
import com.base.browserwhite.ui.adapter.MediaAdapter
import com.base.browserwhite.utils.KotlinExt.toFormatSize
import com.base.browserwhite.utils.LogEx
import com.base.browserwhite.utils.MediaStoreUtils.getRecentMedia
import com.base.browserwhite.utils.PermissionHelp.checkStorePermission
import com.base.browserwhite.utils.PermissionHelp.requestStorePermission
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.File
class FileFragment : BaseFragment<FragmentFileBinding>() {
private val TAG = "FileFragment"
private lateinit var adapter: MediaAdapter
override val binding: FragmentFileBinding by lazy {
FragmentFileBinding.inflate(layoutInflater)
}
override fun setView() {
showStorage()
adapter = MediaAdapter()
binding.rvRecent.adapter = adapter
if (requireContext().checkStorePermission()) {
initData()
}
}
override fun setListener() {
super.setListener()
if (!requireContext().checkStorePermission()) {
binding.llPermission.setOnClickListener {
val launcher = (requireActivity() as MainActivity).launcher
requireContext().requestStorePermission(launcher) {
if (it) {
......@@ -73,12 +88,21 @@ class FileFragment : BaseFragment<FragmentFileBinding>() {
super.onResume()
if (requireContext().checkStorePermission()) {
initData()
binding.llPermission.visibility = View.GONE
} else {
binding.llPermission.visibility = View.VISIBLE
}
}
private fun initData() = lifecycleScope.launch {
val mediaList = requireContext().getRecentMedia()
private fun initData() = lifecycleScope.launch(Dispatchers.IO) {
val mediaList = requireContext().getRecentMedia().filter {
val file = File(it.path)
System.currentTimeMillis() - file.lastModified() <= 15L * 24 * 60 * 60 * 1000
}
LogEx.logDebug(TAG, "size=${mediaList.size}")
launch(Dispatchers.Main) {
adapter.setData(mediaList)
}
}
......
package com.base.browserwhite.utils
import android.annotation.SuppressLint
import android.content.Context
import android.database.Cursor
import android.provider.MediaStore
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_APK
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_DOC
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_DOCX
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_IMAGE
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_PDF
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_PPT
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_PPTX
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_VIDEO
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_XLS
import com.base.browserwhite.bean.ConstObject.MIME_TYPE_XLSX
import com.base.browserwhite.bean.MediaBean
......@@ -20,20 +29,32 @@ object MediaStoreUtils {
// MediaStore.Files.FileColumns.TITLE,
MediaStore.Files.FileColumns.MIME_TYPE,
// MediaStore.Files.FileColumns.SIZE,
// MediaStore.Files.FileColumns.DATE_MODIFIED
MediaStore.Files.FileColumns.DATE_ADDED
)
// 构建查询条件,这里以查询图片和视频为例
val selection = (
"${MediaStore.Files.FileColumns.MIME_TYPE} = ?" +
" or ${MediaStore.Files.FileColumns.MIME_TYPE} = ?"
)
//构建查询条件参数
val selectionArgs = arrayOf(
"image/*",
"video/*",
val mimeTypeSelectionArgs = arrayOf(
MIME_TYPE_IMAGE,
MIME_TYPE_VIDEO,
// MIME_TYPE_AUDIO,
MIME_TYPE_PDF,
MIME_TYPE_DOC,
MIME_TYPE_DOCX,
MIME_TYPE_XLS,
MIME_TYPE_XLSX,
MIME_TYPE_PPT,
MIME_TYPE_PPTX,
MIME_TYPE_APK
)
val mimeTypeSelection =
"${MediaStore.Files.FileColumns.MIME_TYPE} IN (" + mimeTypeSelectionArgs.joinToString(",") { "?" } + ")"
// val selection = "$timeSelection AND $mimeTypeSelection"
val selection = mimeTypeSelection
LogEx.logDebug(TAG, "selection=$selection")
var cursor: Cursor? = null
try {
// 进行查询,并设置排序方式,按照文件添加时间降序排序
......@@ -41,18 +62,16 @@ object MediaStoreUtils {
MediaStore.Files.getContentUri("external"),
projection,
selection,
selectionArgs,
mimeTypeSelectionArgs,
MediaStore.Files.FileColumns.DATE_ADDED + " DESC"
)
if (cursor != null) {
while (cursor.moveToNext()) {
runCatching {
// val id = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns._ID))
val path = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATA))
// val title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.TITLE))
val mimeType = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.MIME_TYPE))
// val size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.SIZE))
// val dateModified = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Files.FileColumns.DATE_MODIFIED))
LogEx.logDebug(TAG, "path=$path mimeType=$mimeType")
list.add(
......@@ -60,10 +79,9 @@ object MediaStoreUtils {
)
}
}
}
} catch (e: Exception) {
LogEx.logDebug(TAG, "Exception $e")
} finally {
cursor?.close()
}
......
......@@ -514,6 +514,44 @@
android:textStyle="bold"
tools:ignore="HardcodedText" />
<LinearLayout
android:background="@drawable/bg_storke_dee9f4"
android:id="@+id/ll_permission"
android:layout_width="match_parent"
android:layout_height="75dp"
android:layout_marginHorizontal="15dp"
android:layout_marginTop="18dp"
android:orientation="horizontal">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="12dp"
android:src="@mipmap/tishitu"
tools:ignore="ContentDescription" />
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginStart="8dp"
android:layout_weight="1"
android:text="Enable storage permissions"
android:textColor="#010101"
android:textSize="14sp"
tools:ignore="HardcodedText" />
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_marginEnd="10dp"
android:src="@mipmap/jiantou_f"
tools:ignore="ContentDescription" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/rv_recent"
android:layout_width="match_parent"
......
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
......@@ -10,7 +11,8 @@
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_marginVertical="4dp"
android:layout_marginStart="8dp">
android:layout_marginStart="8dp"
app:cardElevation="0dp">
<ImageView
android:id="@+id/iv"
......@@ -18,6 +20,15 @@
android:layout_height="match_parent"
tools:ignore="ContentDescription" />
<ImageView
android:visibility="gone"
android:id="@+id/iv_shipin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:src="@mipmap/h_shipin"
tools:ignore="ContentDescription" />
</androidx.cardview.widget.CardView>
<LinearLayout
......@@ -29,6 +40,7 @@
android:orientation="vertical">
<TextView
android:id="@+id/tv_name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
......@@ -39,6 +51,7 @@
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/tv_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="5dp"
......
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