mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-13 15:59:23 +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;
|
package org.dolphinemu.dolphinemu.activities;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
import android.os.Environment;
|
import android.os.Environment;
|
||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
@ -10,21 +12,38 @@ import com.nononsenseapps.filepicker.FilePickerActivity;
|
|||||||
import org.dolphinemu.dolphinemu.fragments.CustomFilePickerFragment;
|
import org.dolphinemu.dolphinemu.fragments.CustomFilePickerFragment;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
public class CustomFilePickerActivity extends FilePickerActivity
|
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
|
@Override
|
||||||
protected AbstractFilePickerFragment<File> getFragment(
|
protected AbstractFilePickerFragment<File> getFragment(
|
||||||
@Nullable final String startPath, final int mode, final boolean allowMultiple,
|
@Nullable final String startPath, final int mode, final boolean allowMultiple,
|
||||||
final boolean allowCreateDir, final boolean allowExistingFile,
|
final boolean allowCreateDir, final boolean allowExistingFile,
|
||||||
final boolean singleClick)
|
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 "/"
|
// startPath is allowed to be null. In that case, default folder should be SD-card and not "/"
|
||||||
fragment.setArgs(
|
fragment.setArgs(
|
||||||
startPath != null ? startPath : Environment.getExternalStorageDirectory().getPath(),
|
startPath != null ? startPath : Environment.getExternalStorageDirectory().getPath(),
|
||||||
mode, allowMultiple, allowCreateDir, allowExistingFile, singleClick);
|
mode, allowMultiple, allowCreateDir, allowExistingFile, singleClick);
|
||||||
|
fragment.setExtensions(mExtensions);
|
||||||
return fragment;
|
return fragment;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -633,7 +633,8 @@ public final class EmulationActivity extends AppCompatActivity
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
case MENU_ACTION_CHANGE_DISC:
|
case MENU_ACTION_CHANGE_DISC:
|
||||||
FileBrowserHelper.openFilePicker(this, REQUEST_CHANGE_DISC, false);
|
FileBrowserHelper.openFilePicker(this, REQUEST_CHANGE_DISC, false,
|
||||||
|
FileBrowserHelper.GAME_EXTENSIONS);
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case MENU_SET_IR_SENSITIVITY:
|
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();
|
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.
|
// TODO: After result of FilePicker, duplicate SettingsActivity appears.
|
||||||
// Finish to avoid this. Is there a better method?
|
// 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.FileBrowserHelper;
|
||||||
import org.dolphinemu.dolphinemu.utils.Log;
|
import org.dolphinemu.dolphinemu.utils.Log;
|
||||||
|
|
||||||
|
import java.security.InvalidParameterException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolder>
|
public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolder>
|
||||||
implements DialogInterface.OnClickListener, SeekBar.OnSeekBarChangeListener
|
implements DialogInterface.OnClickListener, SeekBar.OnSeekBarChangeListener
|
||||||
@ -67,13 +65,9 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
|
|||||||
private AlertDialog mDialog;
|
private AlertDialog mDialog;
|
||||||
private TextView mTextSliderValue;
|
private TextView mTextSliderValue;
|
||||||
|
|
||||||
public static FilePicker sFilePicker;
|
// TODO: Properly restore these two on activity recreation
|
||||||
public static SettingsItem sItem;
|
private static FilePicker sFilePicker;
|
||||||
|
private 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"));
|
|
||||||
|
|
||||||
public SettingsAdapter(SettingsFragmentView view, Context context)
|
public SettingsAdapter(SettingsFragmentView view, Context context)
|
||||||
{
|
{
|
||||||
@ -305,7 +299,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
|
|||||||
sFilePicker = (FilePicker) item;
|
sFilePicker = (FilePicker) item;
|
||||||
sItem = item;
|
sItem = item;
|
||||||
|
|
||||||
FileBrowserHelper.openDirectoryPicker(mView.getActivity());
|
FileBrowserHelper.openDirectoryPicker(mView.getActivity(), FileBrowserHelper.GAME_EXTENSIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void onFilePickerFileClick(SettingsItem item)
|
public void onFilePickerFileClick(SettingsItem item)
|
||||||
@ -313,7 +307,21 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
|
|||||||
sFilePicker = (FilePicker) item;
|
sFilePicker = (FilePicker) item;
|
||||||
sItem = 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)
|
public static void onFilePickerConfirmation(String file)
|
||||||
@ -340,25 +348,6 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
|
|||||||
NativeLibrary.ReloadConfig();
|
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
|
@Override
|
||||||
public void onClick(DialogInterface dialog, int which)
|
public void onClick(DialogInterface dialog, int which)
|
||||||
{
|
{
|
||||||
|
@ -10,14 +10,28 @@ import android.view.View;
|
|||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
import org.dolphinemu.dolphinemu.R;
|
import org.dolphinemu.dolphinemu.R;
|
||||||
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter;
|
|
||||||
|
|
||||||
import com.nononsenseapps.filepicker.FilePickerFragment;
|
import com.nononsenseapps.filepicker.FilePickerFragment;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.HashSet;
|
||||||
|
|
||||||
public class CustomFilePickerFragment extends FilePickerFragment
|
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
|
@NonNull
|
||||||
@Override
|
@Override
|
||||||
public Uri toUri(@NonNull final File file)
|
public Uri toUri(@NonNull final File file)
|
||||||
@ -32,6 +46,8 @@ public class CustomFilePickerFragment extends FilePickerFragment
|
|||||||
{
|
{
|
||||||
super.onActivityCreated(savedInstanceState);
|
super.onActivityCreated(savedInstanceState);
|
||||||
|
|
||||||
|
mExtensions = (HashSet<String>) getArguments().getSerializable(KEY_EXTENSIONS);
|
||||||
|
|
||||||
if (mode == MODE_DIR)
|
if (mode == MODE_DIR)
|
||||||
{
|
{
|
||||||
TextView ok = getActivity().findViewById(R.id.nnf_button_ok);
|
TextView ok = getActivity().findViewById(R.id.nnf_button_ok);
|
||||||
@ -51,8 +67,7 @@ public class CustomFilePickerFragment extends FilePickerFragment
|
|||||||
|
|
||||||
return (showHiddenItems || !file.isHidden()) &&
|
return (showHiddenItems || !file.isHidden()) &&
|
||||||
(file.isDirectory() ||
|
(file.isDirectory() ||
|
||||||
SettingsAdapter.getExtensions()
|
mExtensions.contains(fileExtension(file.getName()).toLowerCase()));
|
||||||
.contains(fileExtension(file.getName()).toLowerCase()));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -145,13 +145,14 @@ public final class MainActivity extends AppCompatActivity implements MainView
|
|||||||
@Override
|
@Override
|
||||||
public void launchFileListActivity()
|
public void launchFileListActivity()
|
||||||
{
|
{
|
||||||
FileBrowserHelper.openDirectoryPicker(this);
|
FileBrowserHelper.openDirectoryPicker(this, FileBrowserHelper.GAME_EXTENSIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void launchOpenFileActivity()
|
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
|
@Override
|
||||||
public void launchFileListActivity()
|
public void launchFileListActivity()
|
||||||
{
|
{
|
||||||
FileBrowserHelper.openDirectoryPicker(this);
|
FileBrowserHelper.openDirectoryPicker(this, FileBrowserHelper.GAME_EXTENSIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void launchOpenFileActivity()
|
public void launchOpenFileActivity()
|
||||||
{
|
{
|
||||||
FileBrowserHelper.openFilePicker(this, MainPresenter.REQUEST_GAME_FILE, false);
|
FileBrowserHelper.openFilePicker(this, MainPresenter.REQUEST_GAME_FILE, false,
|
||||||
|
FileBrowserHelper.GAME_EXTENSIONS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -14,11 +14,20 @@ import org.dolphinemu.dolphinemu.activities.CustomFilePickerActivity;
|
|||||||
import org.dolphinemu.dolphinemu.ui.main.MainPresenter;
|
import org.dolphinemu.dolphinemu.ui.main.MainPresenter;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public final class FileBrowserHelper
|
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);
|
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_MODE, FilePickerActivity.MODE_DIR);
|
||||||
i.putExtra(FilePickerActivity.EXTRA_START_PATH,
|
i.putExtra(FilePickerActivity.EXTRA_START_PATH,
|
||||||
Environment.getExternalStorageDirectory().getPath());
|
Environment.getExternalStorageDirectory().getPath());
|
||||||
|
i.putExtra(CustomFilePickerActivity.EXTRA_EXTENSIONS, extensions);
|
||||||
|
|
||||||
activity.startActivityForResult(i, MainPresenter.REQUEST_DIRECTORY);
|
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);
|
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_MODE, FilePickerActivity.MODE_FILE);
|
||||||
i.putExtra(FilePickerActivity.EXTRA_START_PATH,
|
i.putExtra(FilePickerActivity.EXTRA_START_PATH,
|
||||||
Environment.getExternalStorageDirectory().getPath());
|
Environment.getExternalStorageDirectory().getPath());
|
||||||
|
i.putExtra(CustomFilePickerActivity.EXTRA_EXTENSIONS, extensions);
|
||||||
|
|
||||||
activity.startActivityForResult(i, requestCode);
|
activity.startActivityForResult(i, requestCode);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user