From cf0aaf1a573dcedf833beb96222952731a264bdd Mon Sep 17 00:00:00 2001 From: Adrian Ulrich Date: Sun, 28 Mar 2021 17:21:36 +0200 Subject: [PATCH] use new path guesser also in normal filebrowser --- .../android/vanilla/FileSystemAdapter.java | 11 +++++---- .../android/vanilla/FileUtils.java | 24 +++++++++++++++++++ .../android/vanilla/FolderPickerAdapter.java | 24 +------------------ 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/FileSystemAdapter.java b/app/src/main/java/ch/blinkenlights/android/vanilla/FileSystemAdapter.java index 99579dab..8bab6d8b 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/FileSystemAdapter.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/FileSystemAdapter.java @@ -1,6 +1,6 @@ /* * Copyright (C) 2010, 2011 Christopher Eby - * Copyright (C) 2015-2016 Adrian Ulrich + * Copyright (C) 2015-2021 Adrian Ulrich * * Permission is hereby granted, free of charge, to any person obtaining a copy * of this software and associated documentation files (the "Software"), to deal @@ -191,11 +191,14 @@ public class FileSystemAdapter mFileObserver = new Observer(file.getPath()); } + ArrayList files; File[] readdir = file.listFiles(mFileFilter); - if (readdir == null) - readdir = new File[]{}; + if (readdir != null) { + files = new ArrayList(Arrays.asList(readdir)); + } else { + files = FileUtils.getFallbackDirectories((Context)mActivity, file); + } - ArrayList files = new ArrayList(Arrays.asList(readdir)); Collections.sort(files, mFileComparator); if (!mFsRoot.equals(file)) files.add(0, new File(file, FileUtils.NAME_PARENT_FOLDER)); diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/FileUtils.java b/app/src/main/java/ch/blinkenlights/android/vanilla/FileUtils.java index abee12c2..cb03a36d 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/FileUtils.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/FileUtils.java @@ -24,8 +24,11 @@ import java.net.URI; import java.net.URLConnection; import java.net.URISyntaxException; import java.util.ArrayList; +import java.util.HashSet; import java.util.StringTokenizer; +import java.nio.file.Path; + import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; @@ -247,6 +250,27 @@ public class FileUtils { return index > 0 ? filename.substring(index) : ""; } + /** + * Returns a list of directores contained in 'dir' which are very likely to exist, based + * on what Android told us about the existence of external media dirs. + * This is required as users otherwise may end up in folders they can not navigate out of. + */ + public static ArrayList getFallbackDirectories(Context context, File dir) { + HashSet result = new HashSet<>(); + + Path prefix = dir.toPath(); + for (File f : context.getExternalMediaDirs()) { + Path p = f.toPath(); + if (p.getNameCount() <= prefix.getNameCount()) + continue; + if (!p.startsWith(prefix)) + continue; + Path sp = p.subpath(prefix.getNameCount(), prefix.getNameCount()+1); + result.add(new File(dir, sp.toString())); + } + return new ArrayList(result); + } + /** * Returns the ID which the media library uses for a file. * diff --git a/app/src/main/java/ch/blinkenlights/android/vanilla/FolderPickerAdapter.java b/app/src/main/java/ch/blinkenlights/android/vanilla/FolderPickerAdapter.java index 2b946149..02671a35 100644 --- a/app/src/main/java/ch/blinkenlights/android/vanilla/FolderPickerAdapter.java +++ b/app/src/main/java/ch/blinkenlights/android/vanilla/FolderPickerAdapter.java @@ -33,10 +33,8 @@ import java.io.File; import java.util.Arrays; import java.util.ArrayList; import java.util.Collections; -import java.util.HashSet; import java.util.List; -import java.nio.file.Path; public class FolderPickerAdapter extends ArrayAdapter @@ -192,7 +190,7 @@ public class FolderPickerAdapter if (l != null) { dirs = Arrays.asList(l); } else { - dirs = getFallbackDirectories(path); + dirs = FileUtils.getFallbackDirectories(mContext, path); } Collections.sort(dirs); @@ -209,24 +207,4 @@ public class FolderPickerAdapter } } - /** - * Returns a list of directores contained in 'dir' which are very likely to exist, based - * on what Android told us about the existence of external media dirs. - * This is required as users otherwise may end up in folders they can not navigate out of. - */ - private List getFallbackDirectories(File dir) { - HashSet result = new HashSet<>(); - - Path prefix = dir.toPath(); - for (File f : mContext.getExternalMediaDirs()) { - Path p = f.toPath(); - if (p.getNameCount() <= prefix.getNameCount()) - continue; - if (!p.startsWith(prefix)) - continue; - Path sp = p.subpath(prefix.getNameCount(), prefix.getNameCount()+1); - result.add(new File(dir, sp.toString())); - } - return new ArrayList(result); - } }