use new path guesser also in normal filebrowser
This commit is contained in:
parent
1cb700c3c2
commit
cf0aaf1a57
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (C) 2010, 2011 Christopher Eby <kreed@kreed.org>
|
* Copyright (C) 2010, 2011 Christopher Eby <kreed@kreed.org>
|
||||||
* Copyright (C) 2015-2016 Adrian Ulrich <adrian@blinkenlights.ch>
|
* Copyright (C) 2015-2021 Adrian Ulrich <adrian@blinkenlights.ch>
|
||||||
*
|
*
|
||||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
* of this software and associated documentation files (the "Software"), to deal
|
* of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -191,11 +191,14 @@ public class FileSystemAdapter
|
|||||||
mFileObserver = new Observer(file.getPath());
|
mFileObserver = new Observer(file.getPath());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ArrayList<File> files;
|
||||||
File[] readdir = file.listFiles(mFileFilter);
|
File[] readdir = file.listFiles(mFileFilter);
|
||||||
if (readdir == null)
|
if (readdir != null) {
|
||||||
readdir = new File[]{};
|
files = new ArrayList<File>(Arrays.asList(readdir));
|
||||||
|
} else {
|
||||||
|
files = FileUtils.getFallbackDirectories((Context)mActivity, file);
|
||||||
|
}
|
||||||
|
|
||||||
ArrayList<File> files = new ArrayList<File>(Arrays.asList(readdir));
|
|
||||||
Collections.sort(files, mFileComparator);
|
Collections.sort(files, mFileComparator);
|
||||||
if (!mFsRoot.equals(file))
|
if (!mFsRoot.equals(file))
|
||||||
files.add(0, new File(file, FileUtils.NAME_PARENT_FOLDER));
|
files.add(0, new File(file, FileUtils.NAME_PARENT_FOLDER));
|
||||||
|
@ -24,8 +24,11 @@ import java.net.URI;
|
|||||||
import java.net.URLConnection;
|
import java.net.URLConnection;
|
||||||
import java.net.URISyntaxException;
|
import java.net.URISyntaxException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
|
import java.nio.file.Path;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
@ -247,6 +250,27 @@ public class FileUtils {
|
|||||||
return index > 0 ? filename.substring(index) : "";
|
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<File> getFallbackDirectories(Context context, File dir) {
|
||||||
|
HashSet<File> 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<File>(result);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the ID which the media library uses for a file.
|
* Returns the ID which the media library uses for a file.
|
||||||
*
|
*
|
||||||
|
@ -33,10 +33,8 @@ import java.io.File;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import java.nio.file.Path;
|
|
||||||
|
|
||||||
public class FolderPickerAdapter
|
public class FolderPickerAdapter
|
||||||
extends ArrayAdapter<FolderPickerAdapter.Item>
|
extends ArrayAdapter<FolderPickerAdapter.Item>
|
||||||
@ -192,7 +190,7 @@ public class FolderPickerAdapter
|
|||||||
if (l != null) {
|
if (l != null) {
|
||||||
dirs = Arrays.asList(l);
|
dirs = Arrays.asList(l);
|
||||||
} else {
|
} else {
|
||||||
dirs = getFallbackDirectories(path);
|
dirs = FileUtils.getFallbackDirectories(mContext, path);
|
||||||
}
|
}
|
||||||
|
|
||||||
Collections.sort(dirs);
|
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<File> getFallbackDirectories(File dir) {
|
|
||||||
HashSet<File> 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<File>(result);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user