summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java/org
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2020-11-08 23:01:59 +0100
committerJosJuice <josjuice@gmail.com>2020-12-28 18:53:18 +0100
commit73855168f3f57f8a3037223235740eb7d9dd76e4 (patch)
tree809d9a0a2829fe91b79863e717b715272ad71d03 /Source/Android/app/src/main/java/org
parent399ede37a66a161e2379df34501e2b9a172d3457 (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')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainPresenter.java17
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/ContentHandler.java49
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/FileBrowserHelper.java15
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)
{