Android: Optimize per-game config workflow

This commit is contained in:
Ender's Games 2018-08-23 07:34:59 -04:00
parent df2d4fadee
commit 3e7dea537a
6 changed files with 45 additions and 121 deletions

View File

@ -2,9 +2,7 @@ package com.reicast.emulator;
import android.app.Activity; import android.app.Activity;
import android.app.Application; import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.support.v7.app.AppCompatDelegate; import android.support.v7.app.AppCompatDelegate;
import com.android.util.DreamTime; import com.android.util.DreamTime;
@ -110,27 +108,16 @@ public class Emulator extends Application {
JNIdc.dreamtime(DreamTime.getDreamtime()); JNIdc.dreamtime(DreamTime.getDreamtime());
} }
public void getGameConfiguration(String gameId) { public void loadGameConfiguration(String gameId) {
SharedPreferences mPrefs = getSharedPreferences(gameId, Activity.MODE_PRIVATE); SharedPreferences mPrefs = getSharedPreferences(gameId, Activity.MODE_PRIVATE);
Emulator.unstableopt = mPrefs.getBoolean(pref_unstable, unstableopt); JNIdc.unstable(mPrefs.getBoolean(pref_unstable, unstableopt) ? 1 : 0);
Emulator.dynsafemode = mPrefs.getBoolean(pref_dynsafemode, dynsafemode); JNIdc.safemode(mPrefs.getBoolean(pref_dynsafemode, dynsafemode) ? 1 : 0);
Emulator.interrupt = mPrefs.getBoolean(pref_interrupt, interrupt); JNIdc.interrupthack(mPrefs.getBoolean(pref_interrupt, interrupt) ? 1 : 0);
Emulator.frameskip = mPrefs.getInt(pref_frameskip, frameskip); JNIdc.frameskip(mPrefs.getInt(pref_frameskip, frameskip));
Emulator.pvrrender = mPrefs.getBoolean(pref_pvrrender, pvrrender); JNIdc.pvrrender(mPrefs.getBoolean(pref_pvrrender, pvrrender) ? 1 : 0);
Emulator.syncedrender = mPrefs.getBoolean(pref_syncedrender, syncedrender); JNIdc.syncedrender(mPrefs.getBoolean(pref_syncedrender, syncedrender) ? 1 : 0);
Emulator.queuerender = mPrefs.getBoolean(pref_queuerender, queuerender); JNIdc.queuerender(mPrefs.getBoolean(pref_queuerender, queuerender) ? 1 : 0);
Emulator.modvols = mPrefs.getBoolean(pref_modvols, modvols); JNIdc.modvols(mPrefs.getBoolean(pref_modvols, modvols) ? 1 : 0);
}
public void loadGameConfiguration() {
JNIdc.unstable(Emulator.unstableopt ? 1 : 0);
JNIdc.safemode(Emulator.dynsafemode ? 1 : 0);
JNIdc.interrupthack(Emulator.interrupt ? 1 : 0);
JNIdc.frameskip(Emulator.frameskip);
JNIdc.pvrrender(Emulator.pvrrender ? 1 : 0);
JNIdc.syncedrender(Emulator.syncedrender ? 1 : 0);
JNIdc.queuerender(Emulator.queuerender ? 1 : 0);
JNIdc.modvols(Emulator.modvols ? 1 : 0);
} }
static { static {

View File

@ -17,6 +17,8 @@ public class Config {
public static final String pref_touchvibe = "touch_vibration_enabled"; public static final String pref_touchvibe = "touch_vibration_enabled";
public static final String pref_vibrationDuration = "vibration_duration"; public static final String pref_vibrationDuration = "vibration_duration";
public static final String game_title = "game_title";
public static int vibrationDuration = 20; public static int vibrationDuration = 20;
public static final String pref_vmu = "vmu_floating"; public static final String pref_vmu = "vmu_floating";

View File

@ -60,6 +60,8 @@ public class InputModFragment extends Fragment {
private TextView dpad_right_text; private TextView dpad_right_text;
private TextView start_button_text; private TextView start_button_text;
private TextView select_button_text; private TextView select_button_text;
private TextView vert_axis_text;
private TextView horz_axis_text;
private String player = "_A"; private String player = "_A";
private int sS = 2; private int sS = 2;
@ -518,43 +520,22 @@ public class InputModFragment extends Fragment {
return keyCode; return keyCode;
} }
public boolean dispatchTouchEvent(MotionEvent ev) { private void mapAxis(View view, final int axis) {
if (isMapping) { if (isMapping) {
if ((ev.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) { view.setOnGenericMotionListener(new View.OnGenericMotionListener() {
if (ev.getAxisValue(MotionEvent.AXIS_HAT_X) != 0) { @Override
public boolean onGenericMotion(View view, MotionEvent event) {
if ((event.getSource() & InputDevice.SOURCE_JOYSTICK) ==
InputDevice.SOURCE_JOYSTICK &&
event.getAction() == MotionEvent.ACTION_MOVE) {
mPrefs.edit().putInt(axis + player, event.getActionIndex ()).apply();
isMapping = false;
return true;
}
return false;
} }
if (ev.getAxisValue(MotionEvent.AXIS_HAT_Y) != 0) { });
}
if (ev.getAxisValue(MotionEvent.AXIS_Z) != 0) {
}
if (ev.getAxisValue(MotionEvent.AXIS_RZ) != 0) {
}
if (ev.getAxisValue(MotionEvent.AXIS_RTRIGGER) != 0) {
}
if (ev.getAxisValue(MotionEvent.AXIS_LTRIGGER) != 0) {
}
if (ev.getAxisValue(MotionEvent.AXIS_THROTTLE) != 0) {
}
if (ev.getAxisValue(MotionEvent.AXIS_BRAKE) != 0) {
}
String label = output.getText().toString();
if (label.contains(":")) {
label = label.substring(0, label.indexOf(":"));
}
output.setText(label + ": " + ev.getAction());
}
} }
return dispatchTouchEvent(ev);
} }
} }

View File

@ -1,9 +1,7 @@
package com.reicast.emulator.config; package com.reicast.emulator.config;
import android.app.Activity; import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.AsyncTask; import android.os.AsyncTask;
@ -16,6 +14,7 @@ import android.support.graphics.drawable.VectorDrawableCompat;
import android.support.v4.app.Fragment; import android.support.v4.app.Fragment;
import android.text.Editable; import android.text.Editable;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
@ -24,7 +23,6 @@ import android.widget.AdapterView;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.Button; import android.widget.Button;
import android.widget.CompoundButton; import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText; import android.widget.EditText;
import android.widget.SeekBar; import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener; import android.widget.SeekBar.OnSeekBarChangeListener;
@ -35,15 +33,8 @@ import com.android.util.FileUtils;
import com.reicast.emulator.Emulator; import com.reicast.emulator.Emulator;
import com.reicast.emulator.R; import com.reicast.emulator.R;
import org.apache.commons.lang3.StringUtils;
import java.io.BufferedReader;
import java.io.File; import java.io.File;
import java.io.FileNotFoundException;
import java.io.FilenameFilter; import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.ref.WeakReference; import java.lang.ref.WeakReference;
import java.util.Collection; import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
@ -88,8 +79,8 @@ public class PGConfigFragment extends Fragment {
app.getConfigurationPrefs(PreferenceManager.getDefaultSharedPreferences(getActivity())); app.getConfigurationPrefs(PreferenceManager.getDefaultSharedPreferences(getActivity()));
mSpnrConfigs = (Spinner) getView().findViewById(R.id.config_spinner); mSpnrConfigs = (Spinner) getView().findViewById(R.id.config_spinner);
new LocateConfigs(PGConfigFragment.this).execute( new LocateConfigs(PGConfigFragment.this).execute("/data/data/"
getActivity().getFilesDir().getAbsolutePath()); + getActivity().getPackageName() + "/shared_prefs/");
unstable_opt = (CompoundButton) getView().findViewById(R.id.unstable_option); unstable_opt = (CompoundButton) getView().findViewById(R.id.unstable_option);
safemode_opt = (CompoundButton) getView().findViewById(R.id.dynarec_safemode); safemode_opt = (CompoundButton) getView().findViewById(R.id.dynarec_safemode);
@ -179,21 +170,13 @@ public class PGConfigFragment extends Fragment {
@Override @Override
protected List<File> doInBackground(String... paths) { protected List<File> doInBackground(String... paths) {
File storage = new File(paths[0]); File storage = new File(paths[0]);
String[] mediaTypes = options.get().getResources().getStringArray(R.array.configs); Log.d("Files", storage.getAbsolutePath());
FilenameFilter[] filter = new FilenameFilter[mediaTypes.length]; FilenameFilter[] filter = new FilenameFilter[1];
int i = 0; filter[0] = new FilenameFilter() {
for (final String type : mediaTypes) { public boolean accept(File dir, String name) {
filter[i] = new FilenameFilter() { return !name.endsWith("_preferences.xml");
public boolean accept(File dir, String name) { }
if (dir.getName().startsWith(".") || name.startsWith(".")) { };
return false;
} else {
return StringUtils.endsWithIgnoreCase(name, "." + type);
}
}
};
i++;
}
FileUtils fileUtils = new FileUtils(); FileUtils fileUtils = new FileUtils();
Collection<File> files = fileUtils.listFiles(storage, filter, 0); Collection<File> files = fileUtils.listFiles(storage, filter, 0);
return (List<File>) files; return (List<File>) files;
@ -206,26 +189,11 @@ public class PGConfigFragment extends Fragment {
String[] titles = new String[items.size()]; String[] titles = new String[items.size()];
for (int i = 0; i < items.size(); i ++) { for (int i = 0; i < items.size(); i ++) {
String filename = items.get(i).getName(); String filename = items.get(i).getName();
try { String gameFile = filename.substring(0, filename.length() - 4);
InputStream iS = options.get().getActivity().openFileInput(filename); SharedPreferences mPrefs = options.get().getActivity()
.getSharedPreferences(gameFile, Activity.MODE_PRIVATE);
if (iS != null) { titles[i] = mPrefs.getString(Config.game_title, "Title Unavailable");
InputStreamReader iSR = new InputStreamReader(iS); gameMap.put(titles[i], gameFile);
BufferedReader bR = new BufferedReader(iSR);
String readString = "";
StringBuilder stringBuilder = new StringBuilder();
while ( (readString = bR.readLine()) != null ) {
stringBuilder.append(readString);
}
iS.close();
titles[i] = stringBuilder.toString();
gameMap.put(titles[i], filename.substring(0, filename.length() - 4));
}
} catch (IOException e) {
// TODO: Appropriate error message
}
} }
ArrayAdapter<String> configAdapter = new ArrayAdapter<String>( ArrayAdapter<String> configAdapter = new ArrayAdapter<String>(
options.get().getActivity(), android.R.layout.simple_spinner_item, titles); options.get().getActivity(), android.R.layout.simple_spinner_item, titles);

View File

@ -32,8 +32,6 @@ import com.reicast.emulator.config.Config;
import com.reicast.emulator.emu.OnScreenMenu.FpsPopup; import com.reicast.emulator.emu.OnScreenMenu.FpsPopup;
import com.reicast.emulator.periph.VJoy; import com.reicast.emulator.periph.VJoy;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.egl.EGLConfig;
@ -678,18 +676,10 @@ public class GL2JNIView extends GLSurfaceView
void reiosInfo(String reiosId, String reiosSoftware) { void reiosInfo(String reiosId, String reiosSoftware) {
String gameId = reiosId.replaceAll("[^a-zA-Z0-9]+", "").toLowerCase(); String gameId = reiosId.replaceAll("[^a-zA-Z0-9]+", "").toLowerCase();
try { SharedPreferences mPrefs = context.getSharedPreferences(gameId, Activity.MODE_PRIVATE);
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(
context.openFileOutput(gameId + ".pgc", Context.MODE_PRIVATE));
outputStreamWriter.write(reiosSoftware);
outputStreamWriter.close();
}
catch (IOException e) {
Log.e("Exception", "File write failed: " + e.toString());
}
Emulator app = (Emulator) context.getApplicationContext(); Emulator app = (Emulator) context.getApplicationContext();
app.getGameConfiguration(gameId); app.loadGameConfiguration(gameId);
app.loadGameConfiguration(); mPrefs.edit().putString(Config.game_title, reiosSoftware.trim()).apply();
} }
} }

View File

@ -9,7 +9,7 @@
<item>24</item> <item>24</item>
<item>32</item> <item>32</item>
</string-array> </string-array>
<string-array name="flash"> <string-array name="flash">
<item>bin</item> <item>bin</item>
</string-array> </string-array>
@ -63,10 +63,6 @@
<item>K</item> <item>K</item>
</string-array> </string-array>
<string-array name="configs">
<item>pgc</item>
</string-array>
<string-array name="peripherals"> <string-array name="peripherals">
<item>None</item> <item>None</item>
<item>VMU</item> <item>VMU</item>