summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2020-11-05 19:29:13 +0100
committerJosJuice <josjuice@gmail.com>2020-12-20 13:24:54 +0100
commite60665da94917812313f1ca4b96b7a03fd5b4a1c (patch)
treec5c9d8a9acbb0cc9d5d54709a7f291ea253742d9 /Source/Android/app/src/main/java
parenta7c05d7e84df5949e8edf42fa6332d6aa58282f6 (diff)
Android: Use storage access framework for picking single games
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java18
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java16
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java29
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java14
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java14
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/FileBrowserHelper.java31
6 files changed, 50 insertions, 72 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java
index 9bb3be3878..8173d13ff0 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java
@@ -45,6 +45,7 @@ import org.dolphinemu.dolphinemu.fragments.SaveLoadStateFragment;
import org.dolphinemu.dolphinemu.overlay.InputOverlay;
import org.dolphinemu.dolphinemu.overlay.InputOverlayPointer;
import org.dolphinemu.dolphinemu.ui.main.MainActivity;
+import org.dolphinemu.dolphinemu.ui.main.MainPresenter;
import org.dolphinemu.dolphinemu.ui.main.TvMainActivity;
import org.dolphinemu.dolphinemu.utils.AfterDirectoryInitializationRunner;
import org.dolphinemu.dolphinemu.utils.ControllerMappingHelper;
@@ -165,6 +166,11 @@ public final class EmulationActivity extends AppCompatActivity
EmulationActivity.MENU_ACTION_MOTION_CONTROLS);
}
+ public static void launch(FragmentActivity activity, String filePath)
+ {
+ launch(activity, new String[]{filePath});
+ }
+
public static void launch(FragmentActivity activity, String[] filePaths)
{
if (sIgnoreLaunchRequests)
@@ -411,11 +417,7 @@ public final class EmulationActivity extends AppCompatActivity
// If the user picked a file, as opposed to just backing out.
if (resultCode == MainActivity.RESULT_OK)
{
- String newDiscPath = FileBrowserHelper.getSelectedPath(result);
- if (!TextUtils.isEmpty(newDiscPath))
- {
- NativeLibrary.ChangeDisc(newDiscPath);
- }
+ NativeLibrary.ChangeDisc(result.getData().toString());
}
}
}
@@ -640,8 +642,10 @@ public final class EmulationActivity extends AppCompatActivity
break;
case MENU_ACTION_CHANGE_DISC:
- FileBrowserHelper.openFilePicker(this, REQUEST_CHANGE_DISC, false,
- FileBrowserHelper.GAME_EXTENSIONS);
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ intent.setType("*/*");
+ startActivityForResult(intent, REQUEST_CHANGE_DISC);
break;
case MENU_SET_IR_SENSITIVITY:
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java
index 29d992a156..75538275e4 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java
@@ -24,6 +24,8 @@ import org.dolphinemu.dolphinemu.ui.main.TvMainActivity;
import org.dolphinemu.dolphinemu.utils.FileBrowserHelper;
import org.dolphinemu.dolphinemu.utils.TvUtil;
+import java.util.Set;
+
public final class SettingsActivity extends AppCompatActivity implements SettingsActivityView
{
private static final String ARG_MENU_TAG = "menu_tag";
@@ -172,13 +174,19 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
// If the user picked a file, as opposed to just backing out.
if (resultCode == MainActivity.RESULT_OK)
{
- if (requestCode == MainPresenter.REQUEST_SD_FILE)
+ if (requestCode != MainPresenter.REQUEST_DIRECTORY)
{
Uri uri = canonicalizeIfPossible(result.getData());
- int takeFlags = result.getFlags() &
- (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
- FileBrowserHelper.runAfterExtensionCheck(this, uri, FileBrowserHelper.RAW_EXTENSION, () ->
+ Set<String> validExtensions = requestCode == MainPresenter.REQUEST_GAME_FILE ?
+ FileBrowserHelper.GAME_EXTENSIONS : FileBrowserHelper.RAW_EXTENSION;
+
+ int flags = Intent.FLAG_GRANT_READ_URI_PERMISSION;
+ if (requestCode != MainPresenter.REQUEST_GAME_FILE)
+ flags |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
+ int takeFlags = flags & result.getFlags();
+
+ FileBrowserHelper.runAfterExtensionCheck(this, uri, validExtensions, () ->
{
getContentResolver().takePersistableUriPermission(uri, takeFlags);
getFragment().getAdapter().onFilePickerConfirmation(uri.toString());
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java
index 3442c72fa5..c82a13e2cc 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java
@@ -306,28 +306,17 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
mClickedPosition = position;
FilePicker filePicker = (FilePicker) item;
- switch (filePicker.getRequestType())
- {
- case MainPresenter.REQUEST_SD_FILE:
- Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
- intent.addCategory(Intent.CATEGORY_OPENABLE);
- intent.setType("*/*");
-
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
- {
- intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI,
- filePicker.getSelectedValue(mView.getSettings()));
- }
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ intent.setType("*/*");
- mView.getActivity().startActivityForResult(intent, filePicker.getRequestType());
- break;
- case MainPresenter.REQUEST_GAME_FILE:
- FileBrowserHelper.openFilePicker(mView.getActivity(), filePicker.getRequestType(), false,
- FileBrowserHelper.GAME_EXTENSIONS);
- break;
- default:
- throw new InvalidParameterException("Unhandled request code");
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)
+ {
+ intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI,
+ filePicker.getSelectedValue(mView.getSettings()));
}
+
+ mView.getActivity().startActivityForResult(intent, filePicker.getRequestType());
}
public void onFilePickerConfirmation(String selectedFile)
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java
index d5525bcf61..c7515cc511 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java
@@ -2,6 +2,7 @@ package org.dolphinemu.dolphinemu.ui.main;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.net.Uri;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
@@ -168,8 +169,10 @@ public final class MainActivity extends AppCompatActivity implements MainView
@Override
public void launchOpenFileActivity()
{
- FileBrowserHelper.openFilePicker(this, MainPresenter.REQUEST_GAME_FILE, false,
- FileBrowserHelper.GAME_EXTENSIONS);
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ intent.setType("*/*");
+ startActivityForResult(intent, MainPresenter.REQUEST_GAME_FILE);
}
@Override
@@ -194,6 +197,7 @@ public final class MainActivity extends AppCompatActivity implements MainView
// If the user picked a file, as opposed to just backing out.
if (resultCode == MainActivity.RESULT_OK)
{
+ Uri uri = result.getData();
switch (requestCode)
{
case MainPresenter.REQUEST_DIRECTORY:
@@ -201,12 +205,12 @@ public final class MainActivity extends AppCompatActivity implements MainView
break;
case MainPresenter.REQUEST_GAME_FILE:
- EmulationActivity.launch(this, FileBrowserHelper.getSelectedFiles(result));
+ FileBrowserHelper.runAfterExtensionCheck(this, uri, FileBrowserHelper.GAME_EXTENSIONS,
+ () -> EmulationActivity.launch(this, result.getData().toString()));
break;
case MainPresenter.REQUEST_WAD_FILE:
- FileBrowserHelper.runAfterExtensionCheck(this, result.getData(),
- FileBrowserHelper.WAD_EXTENSION,
+ FileBrowserHelper.runAfterExtensionCheck(this, uri, FileBrowserHelper.WAD_EXTENSION,
() -> mPresenter.installWAD(result.getData().toString()));
break;
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java
index 8d9ab73cd9..8d3d6f2aec 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java
@@ -2,6 +2,7 @@ package org.dolphinemu.dolphinemu.ui.main;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.net.Uri;
import android.os.Bundle;
import android.widget.Toast;
@@ -173,8 +174,10 @@ public final class TvMainActivity extends FragmentActivity implements MainView
@Override
public void launchOpenFileActivity()
{
- FileBrowserHelper.openFilePicker(this, MainPresenter.REQUEST_GAME_FILE, false,
- FileBrowserHelper.GAME_EXTENSIONS);
+ Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
+ intent.addCategory(Intent.CATEGORY_OPENABLE);
+ intent.setType("*/*");
+ startActivityForResult(intent, MainPresenter.REQUEST_GAME_FILE);
}
@Override
@@ -218,6 +221,7 @@ public final class TvMainActivity extends FragmentActivity implements MainView
// If the user picked a file, as opposed to just backing out.
if (resultCode == MainActivity.RESULT_OK)
{
+ Uri uri = result.getData();
switch (requestCode)
{
case MainPresenter.REQUEST_DIRECTORY:
@@ -225,12 +229,12 @@ public final class TvMainActivity extends FragmentActivity implements MainView
break;
case MainPresenter.REQUEST_GAME_FILE:
- EmulationActivity.launch(this, FileBrowserHelper.getSelectedFiles(result));
+ FileBrowserHelper.runAfterExtensionCheck(this, uri, FileBrowserHelper.GAME_EXTENSIONS,
+ () -> EmulationActivity.launch(this, result.getData().toString()));
break;
case MainPresenter.REQUEST_WAD_FILE:
- FileBrowserHelper.runAfterExtensionCheck(this, result.getData(),
- FileBrowserHelper.WAD_EXTENSION,
+ FileBrowserHelper.runAfterExtensionCheck(this, uri, FileBrowserHelper.WAD_EXTENSION,
() -> mPresenter.installWAD(result.getData().toString()));
break;
}
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 79ec49deae..dc3098df9f 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
@@ -50,21 +50,6 @@ public final class FileBrowserHelper
activity.startActivityForResult(i, MainPresenter.REQUEST_DIRECTORY);
}
- public static void openFilePicker(FragmentActivity activity, int requestCode, boolean allowMulti,
- HashSet<String> extensions)
- {
- Intent i = new Intent(activity, CustomFilePickerActivity.class);
-
- i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, allowMulti);
- i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, false);
- i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_FILE);
- i.putExtra(FilePickerActivity.EXTRA_START_PATH,
- Environment.getExternalStorageDirectory().getPath());
- i.putExtra(CustomFilePickerActivity.EXTRA_EXTENSIONS, extensions);
-
- activity.startActivityForResult(i, requestCode);
- }
-
@Nullable
public static String getSelectedPath(Intent result)
{
@@ -79,22 +64,6 @@ public final class FileBrowserHelper
return null;
}
- @Nullable
- public static String[] getSelectedFiles(Intent result)
- {
- // Use the provided utility method to parse the result
- List<Uri> files = Utils.getSelectedFilesFromResult(result);
- if (!files.isEmpty())
- {
- String[] paths = new String[files.size()];
- for (int i = 0; i < files.size(); i++)
- paths[i] = Utils.getFileForUri(files.get(i)).getAbsolutePath();
- return paths;
- }
-
- return null;
- }
-
public static boolean isPathEmptyOrValid(StringSetting path)
{
return isPathEmptyOrValid(path.getStringGlobal());