diff --git a/FilePicker/src/main/java/com/github/gzuliyujiang/filepicker/ExplorerConfig.java b/FilePicker/src/main/java/com/github/gzuliyujiang/filepicker/ExplorerConfig.java index e0a432c7..7bf6469d 100644 --- a/FilePicker/src/main/java/com/github/gzuliyujiang/filepicker/ExplorerConfig.java +++ b/FilePicker/src/main/java/com/github/gzuliyujiang/filepicker/ExplorerConfig.java @@ -41,7 +41,7 @@ public class ExplorerConfig implements Serializable { private File rootDir; private boolean loadAsync; private String[] allowExtensions = null; - private int explorerMode = ExplorerMode.DIRECTORY; + private int explorerMode = ExplorerMode.FILE; private boolean showHomeDir = true; private boolean showUpDir = true; private boolean showHideDir = true; diff --git a/FilePicker/src/main/java/com/github/gzuliyujiang/filepicker/adapter/FileAdapter.java b/FilePicker/src/main/java/com/github/gzuliyujiang/filepicker/adapter/FileAdapter.java index 2f51039b..e0986ef7 100644 --- a/FilePicker/src/main/java/com/github/gzuliyujiang/filepicker/adapter/FileAdapter.java +++ b/FilePicker/src/main/java/com/github/gzuliyujiang/filepicker/adapter/FileAdapter.java @@ -268,7 +268,7 @@ private List loadDataSync(File dir) { * 列出指定目录下的所有子目录 */ private List listFiles(File startDir, FileFilter fileFilter) { - DialogLog.print(String.format("list dir %s", startDir)); + DialogLog.print(String.format("list dir %s by filter %s", startDir, fileFilter.getClass().getName())); if (!startDir.isDirectory()) { return new ArrayList<>(); } diff --git a/FilePicker/src/main/java/com/github/gzuliyujiang/filepicker/filter/SimpleFilter.java b/FilePicker/src/main/java/com/github/gzuliyujiang/filepicker/filter/SimpleFilter.java index 72da6e3b..de6aefb1 100644 --- a/FilePicker/src/main/java/com/github/gzuliyujiang/filepicker/filter/SimpleFilter.java +++ b/FilePicker/src/main/java/com/github/gzuliyujiang/filepicker/filter/SimpleFilter.java @@ -13,8 +13,12 @@ package com.github.gzuliyujiang.filepicker.filter; +import android.text.TextUtils; + import androidx.annotation.Nullable; +import com.github.gzuliyujiang.dialog.DialogLog; + import java.io.File; import java.io.FileFilter; import java.util.Arrays; @@ -35,33 +39,51 @@ public SimpleFilter(boolean isOnlyDir, @Nullable String[] allowExtensions) { @Override public boolean accept(File pathname) { if (pathname == null) { + DialogLog.print("Filter>>>pathname is null"); return false; } + if (pathname.isDirectory()) { + DialogLog.print("Filter>>>pathname is directory: " + pathname); + return true; + } if (isOnlyDir && pathname.isFile()) { + DialogLog.print("Filter>>>except directory but is file: " + pathname); return false; } if (allowExtensions == null || allowExtensions.length == 0) { + DialogLog.print("Filter>>>allow extensions is empty: " + pathname); return true; } //返回当前目录所有以某些扩展名结尾的文件 String extension = getExtension(pathname.getPath()); - return Arrays.toString(allowExtensions).contains(extension); + DialogLog.print("Filter>>>extension of " + pathname + ": " + extension); + boolean contains = false; + for (String allowExtension : allowExtensions) { + if (TextUtils.isEmpty(allowExtension) || allowExtension.contains(extension)) { + contains = true; + break; + } + } + DialogLog.print("Filter>>>allow extensions is " + Arrays.toString(allowExtensions) + ", contains: " + contains); + return contains; } private String getExtension(String path) { if (path == null) { return ""; } + String ext = ""; int slashPos = path.lastIndexOf(File.separator); if (slashPos != -1) { path = path.substring(slashPos); } int dotPos = path.lastIndexOf('.'); - if (0 <= dotPos) { - return path.substring(dotPos + 1); + if (dotPos != -1) { + ext = path.substring(dotPos + 1); } else { - return ""; + ext = path; } + return ext; } } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0b50c2b9..5c60f93c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,6 +15,11 @@ xmlns:tools="http://schemas.android.com/tools" package="com.github.gzuliyujiang.fallback"> + + + = Build.VERSION_CODES.R) { + if (Environment.isExternalStorageManager()) { + Toast.makeText(getApplicationContext(), "isExternalStorageManager==true", Toast.LENGTH_SHORT).show(); + } else { + Intent intent = new Intent(Settings.ACTION_MANAGE_APP_ALL_FILES_ACCESS_PERMISSION); + intent.setData(Uri.parse("package:" + getApplicationContext().getPackageName())); + startActivity(intent); + } + } + Toast.makeText(getApplicationContext(), "当前系统版本不支持", Toast.LENGTH_SHORT).show(); + } + public void onFilePick(View view) { ExplorerConfig config = new ExplorerConfig(this); config.setRootDir(getExternalFilesDir(null)); diff --git a/app/src/main/res/layout/activity_picker_file.xml b/app/src/main/res/layout/activity_picker_file.xml index 6c2ff76b..43279897 100644 --- a/app/src/main/res/layout/activity_picker_file.xml +++ b/app/src/main/res/layout/activity_picker_file.xml @@ -24,6 +24,12 @@ +