diff options
| author | JosJuice <josjuice@gmail.com> | 2020-11-08 23:01:59 +0100 |
|---|---|---|
| committer | JosJuice <josjuice@gmail.com> | 2020-12-28 18:53:18 +0100 |
| commit | 73855168f3f57f8a3037223235740eb7d9dd76e4 (patch) | |
| tree | 809d9a0a2829fe91b79863e717b715272ad71d03 /Source/Android/app/src/main/java/org | |
| parent | 399ede37a66a161e2379df34501e2b9a172d3457 (diff) | |
Android: Show a message when adding a folder with no games
To catch people who try to use unsupported formats.
Diffstat (limited to 'Source/Android/app/src/main/java/org')
3 files changed, 63 insertions, 18 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java index 92a4096bfb..ff34ea2f1b 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java @@ -15,12 +15,15 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager; import org.dolphinemu.dolphinemu.BuildConfig; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.features.settings.model.BooleanSetting; import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag; import org.dolphinemu.dolphinemu.model.GameFileCache; import org.dolphinemu.dolphinemu.services.GameFileCacheService; import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner; +import org.dolphinemu.dolphinemu.utils.ContentHandler; import org.dolphinemu.dolphinemu.utils.FileBrowserHelper; +import java.util.Arrays; import java.util.Set; public final class MainPresenter @@ -123,9 +126,21 @@ public final class MainPresenter public void onDirectorySelected(Intent result) { - ContentResolver contentResolver = mContext.getContentResolver(); Uri uri = result.getData(); + boolean recursive = BooleanSetting.MAIN_RECURSIVE_ISO_PATHS.getBooleanGlobal(); + String[] childNames = ContentHandler.getChildNames(uri, recursive); + if (Arrays.stream(childNames).noneMatch((name) -> + FileBrowserHelper.GAME_EXTENSIONS.contains(FileBrowserHelper.getExtension(name)))) + { + AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.DolphinDialogBase); + builder.setMessage(mContext.getString(R.string.wrong_file_extension_in_directory, + FileBrowserHelper.setToSortedDelimitedString(FileBrowserHelper.GAME_EXTENSIONS))); + builder.setPositiveButton(R.string.ok, null); + builder.show(); + } + + ContentResolver contentResolver = mContext.getContentResolver(); Uri canonicalizedUri = contentResolver.canonicalize(uri); if (canonicalizedUri != null) uri = canonicalizedUri; diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ContentHandler.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ContentHandler.java index 1ae3a805d3..ebedef4b60 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ContentHandler.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ContentHandler.java @@ -14,6 +14,7 @@ import androidx.annotation.Keep; import org.dolphinemu.dolphinemu.DolphinApplication; import java.io.FileNotFoundException; +import java.util.ArrayList; import java.util.List; /* @@ -166,26 +167,52 @@ public class ContentHandler } @NonNull @Keep - public static String[] getChildNames(@NonNull String uri) + public static String[] getChildNames(@NonNull String uri, boolean recursive) { try { - Uri unmangledUri = unmangle(uri); - String documentId = DocumentsContract.getDocumentId(treeToDocument(unmangledUri)); - Uri childrenUri = DocumentsContract.buildChildDocumentsUriUsingTree(unmangledUri, documentId); + return getChildNames(unmangle(uri), recursive); + } + catch (Exception ignored) + { + } - final String[] projection = new String[]{Document.COLUMN_DISPLAY_NAME}; + return new String[0]; + } + + @NonNull + public static String[] getChildNames(@NonNull Uri uri, boolean recursive) + { + ArrayList<String> result = new ArrayList<>(); + getChildNames(uri, DocumentsContract.getDocumentId(treeToDocument(uri)), recursive, result); + return result.toArray(new String[0]); + } + + private static void getChildNames(@NonNull Uri uri, @NonNull String documentId, boolean recursive, + List<String> resultOut) + { + try + { + Uri childrenUri = DocumentsContract.buildChildDocumentsUriUsingTree(uri, documentId); + + final String[] projection = recursive ? new String[]{Document.COLUMN_DISPLAY_NAME, + Document.COLUMN_MIME_TYPE, Document.COLUMN_DOCUMENT_ID} : + new String[]{Document.COLUMN_DISPLAY_NAME}; try (Cursor cursor = getContentResolver().query(childrenUri, projection, null, null, null)) { if (cursor != null) { - String[] result = new String[cursor.getCount()]; - for (int i = 0; i < result.length; i++) + while (cursor.moveToNext()) { - cursor.moveToNext(); - result[i] = cursor.getString(0); + if (recursive && Document.MIME_TYPE_DIR.equals(cursor.getString(1))) + { + getChildNames(uri, cursor.getString(2), recursive, resultOut); + } + else + { + resultOut.add(cursor.getString(0)); + } } - return result; } } } @@ -196,8 +223,6 @@ public class ContentHandler catch (Exception ignored) { } - - return new String[0]; } @NonNull diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/FileBrowserHelper.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/FileBrowserHelper.java index dc3098df9f..f3735eabea 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/FileBrowserHelper.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/FileBrowserHelper.java @@ -102,10 +102,8 @@ public final class FileBrowserHelper int messageId = validExtensions.size() == 1 ? R.string.wrong_file_extension_single : R.string.wrong_file_extension_multiple; - ArrayList<String> extensionsList = new ArrayList<>(validExtensions); - Collections.sort(extensionsList); - - message = context.getString(messageId, extension, join(", ", extensionsList)); + message = context.getString(messageId, extension, + setToSortedDelimitedString(validExtensions)); } new AlertDialog.Builder(context, R.style.DolphinDialogBase) @@ -117,7 +115,7 @@ public final class FileBrowserHelper } @Nullable - private static String getExtension(@Nullable String fileName) + public static String getExtension(@Nullable String fileName) { if (fileName == null) return null; @@ -126,6 +124,13 @@ public final class FileBrowserHelper return dotIndex != -1 ? fileName.substring(dotIndex + 1) : null; } + public static String setToSortedDelimitedString(Set<String> set) + { + ArrayList<String> list = new ArrayList<>(set); + Collections.sort(list); + return join(", ", list); + } + // TODO: Replace this with String.join once we can use Java 8 private static String join(CharSequence delimiter, Iterable<? extends CharSequence> elements) { |
