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

View File

@ -17,6 +17,8 @@ public class Config {
public static final String pref_touchvibe = "touch_vibration_enabled";
public static final String pref_vibrationDuration = "vibration_duration";
public static final String game_title = "game_title";
public static int vibrationDuration = 20;
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 start_button_text;
private TextView select_button_text;
private TextView vert_axis_text;
private TextView horz_axis_text;
private String player = "_A";
private int sS = 2;
@ -518,43 +520,22 @@ public class InputModFragment extends Fragment {
return keyCode;
}
public boolean dispatchTouchEvent(MotionEvent ev) {
private void mapAxis(View view, final int axis) {
if (isMapping) {
if ((ev.getSource() & InputDevice.SOURCE_CLASS_JOYSTICK) != 0) {
if (ev.getAxisValue(MotionEvent.AXIS_HAT_X) != 0) {
view.setOnGenericMotionListener(new View.OnGenericMotionListener() {
@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;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
@ -16,6 +14,7 @@ import android.support.graphics.drawable.VectorDrawableCompat;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
@ -24,7 +23,6 @@ import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
@ -35,15 +33,8 @@ import com.android.util.FileUtils;
import com.reicast.emulator.Emulator;
import com.reicast.emulator.R;
import org.apache.commons.lang3.StringUtils;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.lang.ref.WeakReference;
import java.util.Collection;
import java.util.HashMap;
@ -88,8 +79,8 @@ public class PGConfigFragment extends Fragment {
app.getConfigurationPrefs(PreferenceManager.getDefaultSharedPreferences(getActivity()));
mSpnrConfigs = (Spinner) getView().findViewById(R.id.config_spinner);
new LocateConfigs(PGConfigFragment.this).execute(
getActivity().getFilesDir().getAbsolutePath());
new LocateConfigs(PGConfigFragment.this).execute("/data/data/"
+ getActivity().getPackageName() + "/shared_prefs/");
unstable_opt = (CompoundButton) getView().findViewById(R.id.unstable_option);
safemode_opt = (CompoundButton) getView().findViewById(R.id.dynarec_safemode);
@ -179,21 +170,13 @@ public class PGConfigFragment extends Fragment {
@Override
protected List<File> doInBackground(String... paths) {
File storage = new File(paths[0]);
String[] mediaTypes = options.get().getResources().getStringArray(R.array.configs);
FilenameFilter[] filter = new FilenameFilter[mediaTypes.length];
int i = 0;
for (final String type : mediaTypes) {
filter[i] = new FilenameFilter() {
public boolean accept(File dir, String name) {
if (dir.getName().startsWith(".") || name.startsWith(".")) {
return false;
} else {
return StringUtils.endsWithIgnoreCase(name, "." + type);
}
}
};
i++;
}
Log.d("Files", storage.getAbsolutePath());
FilenameFilter[] filter = new FilenameFilter[1];
filter[0] = new FilenameFilter() {
public boolean accept(File dir, String name) {
return !name.endsWith("_preferences.xml");
}
};
FileUtils fileUtils = new FileUtils();
Collection<File> files = fileUtils.listFiles(storage, filter, 0);
return (List<File>) files;
@ -206,26 +189,11 @@ public class PGConfigFragment extends Fragment {
String[] titles = new String[items.size()];
for (int i = 0; i < items.size(); i ++) {
String filename = items.get(i).getName();
try {
InputStream iS = options.get().getActivity().openFileInput(filename);
if (iS != null) {
InputStreamReader iSR = new InputStreamReader(iS);
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
}
String gameFile = filename.substring(0, filename.length() - 4);
SharedPreferences mPrefs = options.get().getActivity()
.getSharedPreferences(gameFile, Activity.MODE_PRIVATE);
titles[i] = mPrefs.getString(Config.game_title, "Title Unavailable");
gameMap.put(titles[i], gameFile);
}
ArrayAdapter<String> configAdapter = new ArrayAdapter<String>(
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.periph.VJoy;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import javax.microedition.khronos.egl.EGLConfig;
@ -678,18 +676,10 @@ public class GL2JNIView extends GLSurfaceView
void reiosInfo(String reiosId, String reiosSoftware) {
String gameId = reiosId.replaceAll("[^a-zA-Z0-9]+", "").toLowerCase();
try {
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());
}
SharedPreferences mPrefs = context.getSharedPreferences(gameId, Activity.MODE_PRIVATE);
Emulator app = (Emulator) context.getApplicationContext();
app.getGameConfiguration(gameId);
app.loadGameConfiguration();
app.loadGameConfiguration(gameId);
mPrefs.edit().putString(Config.game_title, reiosSoftware.trim()).apply();
}
}

View File

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