mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-09 06:03:32 +01:00
Android: Don't use SettingsAdapter's static state in file picker
This commit is contained in:
parent
ccda75f33f
commit
de5430b222
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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:
|
||||
|
@ -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?
|
||||
|
@ -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)
|
||||
{
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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
|
||||
|
@ -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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user