From 21c91384645b762ab2c41844234147b29b1f6d42 Mon Sep 17 00:00:00 2001 From: rosuH Date: Sun, 13 Feb 2022 20:36:39 +0800 Subject: [PATCH 1/3] :bug: [Fix] - item file name overlay in single choice mode. --- .../filepicker/adapter/FileListAdapter.kt | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/filepicker/src/main/java/me/rosuh/filepicker/adapter/FileListAdapter.kt b/filepicker/src/main/java/me/rosuh/filepicker/adapter/FileListAdapter.kt index 874c4e9..d849a4a 100644 --- a/filepicker/src/main/java/me/rosuh/filepicker/adapter/FileListAdapter.kt +++ b/filepicker/src/main/java/me/rosuh/filepicker/adapter/FileListAdapter.kt @@ -1,11 +1,12 @@ package me.rosuh.filepicker.adapter -import androidx.collection.ArraySet -import androidx.recyclerview.widget.RecyclerView +import android.os.Build import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.* +import androidx.collection.ArraySet +import androidx.recyclerview.widget.RecyclerView import me.rosuh.filepicker.FilePickerActivity import me.rosuh.filepicker.R import me.rosuh.filepicker.bean.FileBean @@ -111,6 +112,20 @@ class FileListAdapter( private val ivIcon = itemView.findViewById(R.id.iv_icon_list_file_picker)!! private val radioButton = itemView.findViewById(R.id.rb_list_file_picker)!! + init { + val rightId = if (config.singleChoice) { + R.id.rb_list_file_picker + } else { + R.id.cb_list_file_picker + } + val params = tvFileName.layoutParams as RelativeLayout.LayoutParams + params.addRule(RelativeLayout.LEFT_OF, rightId) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + params.addRule(RelativeLayout.START_OF, rightId) + } + tvFileName.layoutParams = params + } + fun check(isCheck: Boolean) { if (config.singleChoice) { radioButton.isChecked = isCheck From 5ae0cad3955f6a8092d6b039457da225173fd64a Mon Sep 17 00:00:00 2001 From: rosuH Date: Sun, 13 Feb 2022 20:43:37 +0800 Subject: [PATCH 2/3] :pencil2: update doc. --- README.md | 7 ++++++- README_CN.md | 8 +++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 654bb34..d3b3b32 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,14 @@ Well, it doesn't have a name like Rocky, Cosmos or Fish. Android File Picker, li | ![](https://raw.githubusercontent.com/rosuH/AndroidFilePicker/master/images/default_theme.png) | ![](https://raw.githubusercontent.com/rosuH/AndroidFilePicker/master/images/reply_theme.png) | ![](https://raw.githubusercontent.com/rosuH/AndroidFilePicker/master/images/crane_theme.png) | ![](https://raw.githubusercontent.com/rosuH/AndroidFilePicker/master/images/shrine_theme.png) | ## Version Compatibility +It depends on your targetAPI. -Support Android 11 and all versions below. +- `targetAPI <= 28`, no problem at all ;) +- `targetAPI == 29`, please enable `requestLegacyExternalStorage` feature for your project : D +- `targetAPI == 29` + - When running on Android 11 and above, only media files (images, audio and video) can be read, but nothing else can be accessed (e.g. PDF documents, apk binary files, etc.) +Please check out this issue: [All About Scope Storage. ](https://github.com/rosuH/AndroidFilePicker/issues/146) ## Download Gradle: diff --git a/README_CN.md b/README_CN.md index 7688f40..dd19785 100644 --- a/README_CN.md +++ b/README_CN.md @@ -28,8 +28,14 @@ | ![](https://raw.githubusercontent.com/rosuH/AndroidFilePicker/master/images/default_theme.png) | ![](https://raw.githubusercontent.com/rosuH/AndroidFilePicker/master/images/reply_theme.png) | ![](https://raw.githubusercontent.com/rosuH/AndroidFilePicker/master/images/crane_theme.png) | ![](https://raw.githubusercontent.com/rosuH/AndroidFilePicker/master/images/shrine_theme.png) | ## 版本兼容性 -支持 Android 11 及其以下所有版本。 +这取决于您的 targetAPI : +- `targetAPI <= 28`,完全没有问题 ;) +- `targetAPI == 29`,请为您的项目启用 `requestLegacyExternalStorage` 特性:D +- `targetAPI == 29` + - 当运行于 Android 11以及以上的平台时,仅可以读取媒体文件(图片、音视频),除此均无法访问(比如PDF文档、apk 二进制文件等) + +请参看 issue: [All About Scope Storage. ](https://github.com/rosuH/AndroidFilePicker/issues/146) ## 下载使用 1. 在你的项目中添加依赖 From bf9d1aa5134b14f5b29a7fc5b5949400bdb62b30 Mon Sep 17 00:00:00 2001 From: rosuh Date: Thu, 3 Mar 2022 09:27:22 +0800 Subject: [PATCH 3/3] :bug: [Fix] - fixed #164 --- .../me/rosuh/filepicker/adapter/FileListAdapter.kt | 5 +++-- .../java/me/rosuh/filepicker/utils/FileUtils.kt | 7 ++++--- gradle.properties | 2 ++ .../src/main/java/me/rosuh/sample/SampleActivity.kt | 13 ++++++++----- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/filepicker/src/main/java/me/rosuh/filepicker/adapter/FileListAdapter.kt b/filepicker/src/main/java/me/rosuh/filepicker/adapter/FileListAdapter.kt index d849a4a..bd39e27 100644 --- a/filepicker/src/main/java/me/rosuh/filepicker/adapter/FileListAdapter.kt +++ b/filepicker/src/main/java/me/rosuh/filepicker/adapter/FileListAdapter.kt @@ -71,7 +71,8 @@ class FileListAdapter( } override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) { - (holder as BaseViewHolder).bind(dataList[position], position) + val item = getItem(position) ?: return + (holder as BaseViewHolder).bind(item, position) } override fun onBindViewHolder( @@ -81,7 +82,7 @@ class FileListAdapter( ) { // Using payload to refresh partly // 使用 payload 进行局部刷新 - if (payloads.isNullOrEmpty()) { + if (payloads.isEmpty()) { onBindViewHolder(holder, position) return } diff --git a/filepicker/src/main/java/me/rosuh/filepicker/utils/FileUtils.kt b/filepicker/src/main/java/me/rosuh/filepicker/utils/FileUtils.kt index c6f6d1f..ab2628d 100644 --- a/filepicker/src/main/java/me/rosuh/filepicker/utils/FileUtils.kt +++ b/filepicker/src/main/java/me/rosuh/filepicker/utils/FileUtils.kt @@ -47,7 +47,7 @@ class FileUtils { val realRoot = getRootFile() val isInRootParent = rootFile.list() == null && !config.isSkipDir - && rootFile.path == realRoot.parentFile.path + && rootFile.path == realRoot.parentFile?.path if (isInRootParent) { // 如果是文件夹作为可选项时,需要让根目录也作为 item 被点击 listData.add( @@ -62,10 +62,11 @@ class FileUtils { ) return config.selfFilter?.doFilter(listData) ?: listData } - if (rootFile.listFiles().isNullOrEmpty()) { + val listFiles = rootFile.listFiles() + if (listFiles.isNullOrEmpty()) { return listData } - for (file in rootFile.listFiles()) { + for (file in listFiles) { //以符号 . 开头的视为隐藏文件或隐藏文件夹,后面进行过滤 val isHiddenFile = file.name.startsWith(".") if (!config.isShowHiddenFiles && isHiddenFile) { diff --git a/gradle.properties b/gradle.properties index 3d8ce0c..ab9f75a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -15,3 +15,5 @@ org.gradle.jvmargs=-Xmx1536m kotlin.code.style=official android.useAndroidX=true android.enableJetifier=true +android.injected.testOnly=false + diff --git a/sample/src/main/java/me/rosuh/sample/SampleActivity.kt b/sample/src/main/java/me/rosuh/sample/SampleActivity.kt index f656f37..3c13044 100644 --- a/sample/src/main/java/me/rosuh/sample/SampleActivity.kt +++ b/sample/src/main/java/me/rosuh/sample/SampleActivity.kt @@ -4,11 +4,11 @@ package me.rosuh.sample import android.app.Activity import android.content.Context import android.content.Intent +import android.net.Uri +import android.os.Build import android.os.Bundle -import androidx.fragment.app.DialogFragment -import androidx.fragment.app.FragmentManager -import androidx.appcompat.app.AppCompatActivity -import androidx.recyclerview.widget.LinearLayoutManager +import android.os.Environment +import android.provider.Settings import android.util.Log import android.view.LayoutInflater import android.view.View @@ -16,6 +16,10 @@ import android.view.ViewGroup import android.widget.Button import android.widget.ImageView import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import androidx.fragment.app.DialogFragment +import androidx.fragment.app.FragmentManager +import androidx.recyclerview.widget.LinearLayoutManager import com.bumptech.glide.Glide import kotlinx.android.synthetic.main.demo_activity_main.* import me.rosuh.filepicker.adapter.FileListAdapter @@ -26,7 +30,6 @@ import me.rosuh.filepicker.filetype.AudioFileType import me.rosuh.filepicker.filetype.FileType import me.rosuh.filepicker.filetype.RasterImageFileType import java.util.concurrent.Executors -import java.util.concurrent.ThreadPoolExecutor class SampleActivity : AppCompatActivity() {