diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/CustomFilePickerFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/CustomFilePickerFragment.java index 372d9854ca..8197dfc955 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/CustomFilePickerFragment.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/CustomFilePickerFragment.java @@ -4,10 +4,7 @@ import android.net.Uri; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.content.FileProvider; -import android.util.TypedValue; -import android.view.LayoutInflater; import android.view.View; -import android.view.ViewGroup; import android.widget.TextView; import org.dolphinemu.dolphinemu.R; @@ -15,9 +12,15 @@ import org.dolphinemu.dolphinemu.R; import com.nononsenseapps.filepicker.FilePickerFragment; import java.io.File; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; public class CustomFilePickerFragment extends FilePickerFragment { + private static final Set extensions = new HashSet<>(Arrays.asList( + "gcm", "tgc", "iso", "ciso", "gcz", "wbfs", "wad", "dol", "elf")); + @NonNull @Override public Uri toUri(@NonNull final File file) @@ -41,4 +44,33 @@ public class CustomFilePickerFragment extends FilePickerFragment cancel.setVisibility(View.GONE); } } + + @Override + protected boolean isItemVisible(@NonNull final File file) + { + // Some users jump to the conclusion that Dolphin isn't able to detect their + // files if the files don't show up in the file picker when mode == MODE_DIR. + // To avoid this, show files even when the user needs to select a directory. + + return (showHiddenItems || !file.isHidden()) && + (file.isDirectory() || + extensions.contains(fileExtension(file.getName()).toLowerCase())); + } + + @Override + public boolean isCheckable(@NonNull final File file) + { + // We need to make a small correction to the isCheckable logic due to + // overriding isItemVisible to show files when mode == MODE_DIR. + // AbstractFilePickerFragment always treats files as checkable when + // allowExistingFile == true, but we don't want files to be checkable when mode == MODE_DIR. + + return super.isCheckable(file) && !(mode == MODE_DIR && file.isFile()); + } + + private static String fileExtension(@NonNull String filename) + { + int i = filename.lastIndexOf('.'); + return i < 0 ? "" : filename.substring(i + 1); + } }