From e5ad02e8a96826bfe99a3fe5b2f1a70938af9aa7 Mon Sep 17 00:00:00 2001 From: Karim Abou Zeid Date: Sat, 19 Mar 2016 13:57:43 +0100 Subject: [PATCH] Fixed an issue caused by symlinks not handled correctly. --- .../gramophone/adapter/SongFileAdapter.java | 11 +++- .../ui/fragments/FolderFragment.java | 56 ++++++++++++------- .../res/drawable/ic_file_music_white_24dp.xml | 10 ++++ .../drawable/ic_folder_special_white_24dp.xml | 10 ---- app/src/main/res/menu/menu_folders.xml | 6 +- app/src/main/res/values/strings.xml | 2 +- 6 files changed, 58 insertions(+), 37 deletions(-) create mode 100644 app/src/main/res/drawable/ic_file_music_white_24dp.xml delete mode 100644 app/src/main/res/drawable/ic_folder_special_white_24dp.xml diff --git a/app/src/main/java/com/kabouzeid/gramophone/adapter/SongFileAdapter.java b/app/src/main/java/com/kabouzeid/gramophone/adapter/SongFileAdapter.java index 0a6840f2..4d7a93da 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/adapter/SongFileAdapter.java +++ b/app/src/main/java/com/kabouzeid/gramophone/adapter/SongFileAdapter.java @@ -21,13 +21,14 @@ import com.kabouzeid.gramophone.adapter.base.MediaEntryViewHolder; import com.kabouzeid.gramophone.glide.audiocover.AudioFileCover; import com.kabouzeid.gramophone.interfaces.CabHolder; import com.kabouzeid.gramophone.util.Util; +import com.simplecityapps.recyclerview_fastscroll.views.FastScrollRecyclerView; import java.io.File; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; -public class SongFileAdapter extends AbsMultiSelectAdapter { +public class SongFileAdapter extends AbsMultiSelectAdapter implements FastScrollRecyclerView.SectionedAdapter { private static final int FILE = 0; private static final int FOLDER = 1; @@ -114,7 +115,7 @@ public class SongFileAdapter extends AbsMultiSelectAdapter 0 && files.size() < 999) { // 999 is the max amount Androids SQL implementation can handle. @@ -402,15 +407,28 @@ public class FolderFragment extends AbsMainActivityFragment implements MainActiv } } + Comparator fileComparator = new Comparator() { + @Override + public int compare(File lhs, File rhs) { + if (lhs.isDirectory() && !rhs.isDirectory()) { + return -1; + } else if (!lhs.isDirectory() && rhs.isDirectory()) { + return 1; + } else { + return lhs.getName().compareToIgnoreCase(rhs.getName()); + } + } + }; + private List sort(List files) { - Collections.sort(files, new FileSorter()); + Collections.sort(files, fileComparator); return files; } FileFilter audioFileFilter = new FileFilter() { @Override - public boolean accept(File pathname) { - return pathname.isDirectory() || fileIsMimeType(pathname, "audio/*", MimeTypeMap.getSingleton()); + public boolean accept(File file) { + return !file.isHidden() && (file.isDirectory() || fileIsMimeType(file, "audio/*", MimeTypeMap.getSingleton())); } }; @@ -418,7 +436,7 @@ public class FolderFragment extends AbsMainActivityFragment implements MainActiv return audioFileFilter; } - static boolean fileIsMimeType(File file, String mimeType, MimeTypeMap mimeTypeMap) { + private static boolean fileIsMimeType(File file, String mimeType, MimeTypeMap mimeTypeMap) { if (mimeType == null || mimeType.equals("*/*")) { return true; } else { @@ -459,16 +477,12 @@ public class FolderFragment extends AbsMainActivityFragment implements MainActiv return false; } - private static class FileSorter implements Comparator { - @Override - public int compare(File lhs, File rhs) { - if (lhs.isDirectory() && !rhs.isDirectory()) { - return -1; - } else if (!lhs.isDirectory() && rhs.isDirectory()) { - return 1; - } else { - return lhs.getName().compareToIgnoreCase(rhs.getName()); - } + private static File tryGetCanonicalFile(File file) { + try { + return file.getCanonicalFile(); + } catch (IOException e) { + e.printStackTrace(); + return file; } } } \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_file_music_white_24dp.xml b/app/src/main/res/drawable/ic_file_music_white_24dp.xml new file mode 100644 index 00000000..96594671 --- /dev/null +++ b/app/src/main/res/drawable/ic_file_music_white_24dp.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_folder_special_white_24dp.xml b/app/src/main/res/drawable/ic_folder_special_white_24dp.xml deleted file mode 100644 index 2c6f7961..00000000 --- a/app/src/main/res/drawable/ic_folder_special_white_24dp.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - diff --git a/app/src/main/res/menu/menu_folders.xml b/app/src/main/res/menu/menu_folders.xml index 2859c54a..066fc537 100644 --- a/app/src/main/res/menu/menu_folders.xml +++ b/app/src/main/res/menu/menu_folders.xml @@ -3,9 +3,9 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cf41ffc6..37c215d1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -96,7 +96,7 @@ Shuffle artist Shuffle playlist Clear playing queue - Go to standard folder + Go to music folder Last opened Light Dark