summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorJosJuice <josjuice@gmail.com>2020-03-23 00:53:22 -0400
committerRyan Meredith <rwm@udel.edu>2020-03-23 00:53:22 -0400
commitde5430b2225df7e41d466e4511e49d82f06ae83b (patch)
tree5e8c0411130e6d61015b5deccf4b8d36e440adf6 /Source/Android/app/src/main/java
parentccda75f33fc2ff698b73cdec2d41476f00f781ff (diff)
Android: Don't use SettingsAdapter's static state in file picker
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/CustomFilePickerActivity.java23
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java3
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java3
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java51
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/fragments/CustomFilePickerFragment.java21
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/MainActivity.java5
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/main/TvMainActivity.java5
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/FileBrowserHelper.java16
8 files changed, 81 insertions, 46 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/CustomFilePickerActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/CustomFilePickerActivity.java
index f715766bff..0edf7aea17 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/CustomFilePickerActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/CustomFilePickerActivity.java
@@ -1,5 +1,7 @@
package org.dolphinemu.dolphinemu.activities;
+import android.content.Intent;
+import android.os.Bundle;
import android.os.Environment;
import androidx.annotation.Nullable;
@@ -10,21 +12,38 @@ import com.nononsenseapps.filepicker.FilePickerActivity;
import org.dolphinemu.dolphinemu.fragments.CustomFilePickerFragment;
import java.io.File;
+import java.util.HashSet;
public class CustomFilePickerActivity extends FilePickerActivity
-
{
+ public static final String EXTRA_EXTENSIONS = "dolphinemu.org.filepicker.extensions";
+
+ private HashSet<String> mExtensions;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+
+ Intent intent = getIntent();
+ if (intent != null)
+ {
+ mExtensions = (HashSet<String>) intent.getSerializableExtra(EXTRA_EXTENSIONS);
+ }
+ }
+
@Override
protected AbstractFilePickerFragment<File> getFragment(
@Nullable final String startPath, final int mode, final boolean allowMultiple,
final boolean allowCreateDir, final boolean allowExistingFile,
final boolean singleClick)
{
- AbstractFilePickerFragment<File> fragment = new CustomFilePickerFragment();
+ CustomFilePickerFragment fragment = new CustomFilePickerFragment();
// startPath is allowed to be null. In that case, default folder should be SD-card and not "/"
fragment.setArgs(
startPath != null ? startPath : Environment.getExternalStorageDirectory().getPath(),
mode, allowMultiple, allowCreateDir, allowExistingFile, singleClick);
+ fragment.setExtensions(mExtensions);
return fragment;
}
}
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 c3e47651fc..0d44829687 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
@@ -633,7 +633,8 @@ public final class EmulationActivity extends AppCompatActivity
return;
case MENU_ACTION_CHANGE_DISC:
- FileBrowserHelper.openFilePicker(this, REQUEST_CHANGE_DISC, false);
+ FileBrowserHelper.openFilePicker(this, REQUEST_CHANGE_DISC, false,
+ FileBrowserHelper.GAME_EXTENSIONS);
return;
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 c76dea4be5..d5f6754225 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
@@ -176,9 +176,6 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
Toast.makeText(this, "Saved settings to INI files", Toast.LENGTH_SHORT).show();
}
}
- // Clear static variables for File Picker activities that don't set extensions.
- SettingsAdapter.sFilePicker = null;
- SettingsAdapter.sItem = null;
// TODO: After result of FilePicker, duplicate SettingsActivity appears.
// Finish to avoid this. Is there a better method?
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 400f3e41ea..04d68d17fc 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
@@ -47,11 +47,9 @@ import org.dolphinemu.dolphinemu.ui.main.MainPresenter;
import org.dolphinemu.dolphinemu.utils.FileBrowserHelper;
import org.dolphinemu.dolphinemu.utils.Log;
+import java.security.InvalidParameterException;
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.HashSet;
-import java.util.Set;
public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolder>
implements DialogInterface.OnClickListener, SeekBar.OnSeekBarChangeListener
@@ -67,13 +65,9 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
private AlertDialog mDialog;
private TextView mTextSliderValue;
- public static FilePicker sFilePicker;
- public static SettingsItem sItem;
-
- private static final Set<String> gameExtensions = new HashSet<>(Arrays.asList(
- "gcm", "tgc", "iso", "ciso", "gcz", "wbfs", "wad", "dol", "elf", "dff"));
-
- private static final Set<String> SDExtensions = new HashSet<>(Collections.singletonList("raw"));
+ // TODO: Properly restore these two on activity recreation
+ private static FilePicker sFilePicker;
+ private static SettingsItem sItem;
public SettingsAdapter(SettingsFragmentView view, Context context)
{
@@ -305,7 +299,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
sFilePicker = (FilePicker) item;
sItem = item;
- FileBrowserHelper.openDirectoryPicker(mView.getActivity());
+ FileBrowserHelper.openDirectoryPicker(mView.getActivity(), FileBrowserHelper.GAME_EXTENSIONS);
}
public void onFilePickerFileClick(SettingsItem item)
@@ -313,7 +307,21 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
sFilePicker = (FilePicker) item;
sItem = item;
- FileBrowserHelper.openFilePicker(mView.getActivity(), sFilePicker.getRequestType(), false);
+ HashSet<String> extensions;
+ switch (sFilePicker.getRequestType())
+ {
+ case MainPresenter.REQUEST_SD_FILE:
+ extensions = FileBrowserHelper.RAW_EXTENSION;
+ break;
+ case MainPresenter.REQUEST_GAME_FILE:
+ extensions = FileBrowserHelper.GAME_EXTENSIONS;
+ break;
+ default:
+ throw new InvalidParameterException("Unhandled request code");
+ }
+
+ FileBrowserHelper.openFilePicker(mView.getActivity(), sFilePicker.getRequestType(), false,
+ extensions);
}
public static void onFilePickerConfirmation(String file)
@@ -340,25 +348,6 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
NativeLibrary.ReloadConfig();
}
- public static Set<String> getExtensions()
- {
- try
- {
- if (sFilePicker.getRequestType() == MainPresenter.REQUEST_SD_FILE)
- {
- return SDExtensions;
- }
- else
- {
- return gameExtensions;
- }
- }
- catch (NullPointerException ex)
- {
- return gameExtensions;
- }
- }
-
@Override
public void onClick(DialogInterface dialog, int which)
{
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 bbccacaee4..5e0e06582c 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
@@ -10,14 +10,28 @@ import android.view.View;
import android.widget.TextView;
import org.dolphinemu.dolphinemu.R;
-import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter;
import com.nononsenseapps.filepicker.FilePickerFragment;
import java.io.File;
+import java.util.HashSet;
public class CustomFilePickerFragment extends FilePickerFragment
{
+ public static final String KEY_EXTENSIONS = "KEY_EXTENSIONS";
+
+ private HashSet<String> mExtensions;
+
+ public void setExtensions(HashSet<String> extensions)
+ {
+ Bundle b = getArguments();
+ if (b == null)
+ b = new Bundle();
+
+ b.putSerializable(KEY_EXTENSIONS, extensions);
+ setArguments(b);
+ }
+
@NonNull
@Override
public Uri toUri(@NonNull final File file)
@@ -32,6 +46,8 @@ public class CustomFilePickerFragment extends FilePickerFragment
{
super.onActivityCreated(savedInstanceState);
+ mExtensions = (HashSet<String>) getArguments().getSerializable(KEY_EXTENSIONS);
+
if (mode == MODE_DIR)
{
TextView ok = getActivity().findViewById(R.id.nnf_button_ok);
@@ -51,8 +67,7 @@ public class CustomFilePickerFragment extends FilePickerFragment
return (showHiddenItems || !file.isHidden()) &&
(file.isDirectory() ||
- SettingsAdapter.getExtensions()
- .contains(fileExtension(file.getName()).toLowerCase()));
+ mExtensions.contains(fileExtension(file.getName()).toLowerCase()));
}
@Override
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 3607e58ee2..be1a8a74a2 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
@@ -145,13 +145,14 @@ public final class MainActivity extends AppCompatActivity implements MainView
@Override
public void launchFileListActivity()
{
- FileBrowserHelper.openDirectoryPicker(this);
+ FileBrowserHelper.openDirectoryPicker(this, FileBrowserHelper.GAME_EXTENSIONS);
}
@Override
public void launchOpenFileActivity()
{
- FileBrowserHelper.openFilePicker(this, MainPresenter.REQUEST_GAME_FILE, false);
+ FileBrowserHelper.openFilePicker(this, MainPresenter.REQUEST_GAME_FILE, false,
+ FileBrowserHelper.GAME_EXTENSIONS);
}
/**
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 d69ab4ece0..ed0c188532 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
@@ -142,13 +142,14 @@ public final class TvMainActivity extends FragmentActivity implements MainView
@Override
public void launchFileListActivity()
{
- FileBrowserHelper.openDirectoryPicker(this);
+ FileBrowserHelper.openDirectoryPicker(this, FileBrowserHelper.GAME_EXTENSIONS);
}
@Override
public void launchOpenFileActivity()
{
- FileBrowserHelper.openFilePicker(this, MainPresenter.REQUEST_GAME_FILE, false);
+ FileBrowserHelper.openFilePicker(this, MainPresenter.REQUEST_GAME_FILE, false,
+ FileBrowserHelper.GAME_EXTENSIONS);
}
@Override
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 03e36479f2..ae4a45b8e9 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
@@ -14,11 +14,20 @@ import org.dolphinemu.dolphinemu.activities.CustomFilePickerActivity;
import org.dolphinemu.dolphinemu.ui.main.MainPresenter;
import java.io.File;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
public final class FileBrowserHelper
{
- public static void openDirectoryPicker(FragmentActivity activity)
+ public static final HashSet<String> GAME_EXTENSIONS = new HashSet<>(Arrays.asList(
+ "gcm", "tgc", "iso", "ciso", "gcz", "wbfs", "wad", "dol", "elf", "dff"));
+
+ public static final HashSet<String> RAW_EXTENSION = new HashSet<>(Collections.singletonList(
+ "raw"));
+
+ public static void openDirectoryPicker(FragmentActivity activity, HashSet<String> extensions)
{
Intent i = new Intent(activity, CustomFilePickerActivity.class);
@@ -27,11 +36,13 @@ public final class FileBrowserHelper
i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_DIR);
i.putExtra(FilePickerActivity.EXTRA_START_PATH,
Environment.getExternalStorageDirectory().getPath());
+ i.putExtra(CustomFilePickerActivity.EXTRA_EXTENSIONS, extensions);
activity.startActivityForResult(i, MainPresenter.REQUEST_DIRECTORY);
}
- public static void openFilePicker(FragmentActivity activity, int requestCode, boolean allowMulti)
+ public static void openFilePicker(FragmentActivity activity, int requestCode, boolean allowMulti,
+ HashSet<String> extensions)
{
Intent i = new Intent(activity, CustomFilePickerActivity.class);
@@ -40,6 +51,7 @@ public final class FileBrowserHelper
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);
}