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 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= Build.VERSION_CODES.O) { - 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())); - } - - 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"); + 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 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 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());