123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402 |
- package com.sdlpal.sdlpal;
- import android.app.Activity;
- import android.content.DialogInterface;
- import android.content.Intent;
- import android.net.Uri;
- import android.os.Bundle;
- import android.os.Environment;
- import android.support.v7.app.AppCompatActivity;
- import android.support.v7.widget.AppCompatSpinner;
- import android.support.v7.widget.SwitchCompat;
- import android.support.v7.widget.Toolbar;
- import android.support.v7.app.AlertDialog;
- import android.view.View;
- import android.widget.AdapterView;
- import android.widget.CompoundButton;
- import android.widget.EditText;
- import android.widget.SeekBar;
- import android.widget.Spinner;
- import com.nononsenseapps.filepicker.*;
- import java.io.File;
- import java.util.List;
- public class SettingsActivity extends AppCompatActivity {
- static {
- System.loadLibrary("SDL2");
- System.loadLibrary("main");
- }
- public static native boolean loadConfigFile();
- public static native boolean saveConfigFile();
- public static native boolean getConfigBoolean(String item, boolean defval);
- public static native int getConfigInt(String item, boolean defval);
- public static native String getConfigString(String item, boolean defval);
- public static native boolean setConfigBoolean(String item, boolean value);
- public static native boolean setConfigInt(String item, int value);
- public static native boolean setConfigString(String item, String value);
- public static native boolean checkResourceFiles(String path, String msgfile);
- public static native String getGitRevision();
- public static native boolean isDirWritable(String path);
- private static final String KeepAspectRatio = "KeepAspectRatio";
- private static final String AspectRatio = "AspectRatio";
- private static final String LaunchSetting = "LaunchSetting";
- private static final String Stereo = "Stereo";
- private static final String UseSurroundOPL = "UseSurroundOPL";
- private static final String UseTouchOverlay = "UseTouchOverlay";
- private static final String EnableAviPlay = "EnableAviPlay";
- private static final String AudioBufferSize = "AudioBufferSize";
- private static final String LogLevel = "LogLevel";
- private static final String OPLSampleRate = "OPLSampleRate";
- private static final String ResampleQuality = "ResampleQuality";
- private static final String SampleRate = "SampleRate";
- private static final String MusicVolume = "MusicVolume";
- private static final String SoundVolume = "SoundVolume";
- private static final String CDFormat = "CD";
- private static final String GamePath = "GamePath";
- private static final String SavePath = "SavePath";
- private static final String MessageFileName = "MessageFileName";
- private static final String LogFileName = "LogFileName";
- private static final String FontFileName = "FontFileName";
- private static final String MusicFormat = "Music";
- private static final String OPLFormat = "OPL";
- private static final int AudioSampleRates[] = { 11025, 22050, 44100 };
- private static final int AudioBufferSizes[] = { 512, 1024, 2048, 4096, 8192 };
- private static final int OPLSampleRates[] = { 11025, 12429, 22050, 24858, 44100, 49716 };
- private static final String CDFormats[] = { "MP3", "OGG" };
- private static final String MusicFormats[] = { "MIDI", "RIX", "MP3", "OGG" };
- private static final String OPLFormats[] = { "DOSBOX", "MAME", "DOSBOXNEW" };
- private static final String AspectRatios[] = { "16:10", "4:3" };
- private SettingsActivity mInstance = this;
- private static final int BROWSE_GAMEDIR_CODE = 30001;
- private static final int BROWSE_MSGFILE_CODE = 30002;
- private static final int BROWSE_FONTFILE_CODE = 30003;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_settings);
- Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
- setSupportActionBar(toolbar);
- toolbar.setSubtitle(getResources().getString(R.string.title_settings) + " (" + getGitRevision() + ")");
- ((SwitchCompat)findViewById(R.id.swMsgFile)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- findViewById(R.id.edMsgFile).setVisibility(isChecked ? View.VISIBLE : View.GONE);
- findViewById(R.id.btnBrowseMsgFile).setVisibility(isChecked ? View.VISIBLE : View.GONE);
- }
- });
- ((SwitchCompat)findViewById(R.id.swFontFile)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- findViewById(R.id.edFontFile).setVisibility(isChecked ? View.VISIBLE : View.GONE);
- findViewById(R.id.btnBrowseFontFile).setVisibility(isChecked ? View.VISIBLE : View.GONE);
- }
- });
- ((SwitchCompat)findViewById(R.id.swLogFile)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
- @Override
- public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
- findViewById(R.id.edLogFile).setVisibility(isChecked ? View.VISIBLE : View.GONE);
- }
- });
- ((AppCompatSpinner)findViewById(R.id.spMusFmt)).setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
- @Override
- public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
- findViewById(R.id.layoutOPL).setVisibility(position == 1 ? View.VISIBLE : View.GONE);
- }
- @Override
- public void onNothingSelected(AdapterView<?> parent) {
- findViewById(R.id.layoutOPL).setVisibility(View.VISIBLE);
- }
- });
- findViewById(R.id.btnDefault).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- setDefaults();
- }
- });
- findViewById(R.id.btnReset).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- resetConfigs();
- }
- });
- findViewById(R.id.btnFinish).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- String gamePath = ((EditText)findViewById(R.id.edFolder)).getText().toString();
- String msgFile = ((EditText)findViewById(R.id.edMsgFile)).getText().toString();
- if (!checkResourceFiles(gamePath, msgFile)) {
- AlertDialog.Builder builder = new AlertDialog.Builder(mInstance);
- builder.setMessage(getString(R.string.msg_data_not_found_header) + "\n" +
- gamePath + "\n\n" +
- getString(R.string.msg_data_not_found_footer));
- builder.setCancelable(true);
- builder.setPositiveButton(android.R.string.ok, null);
- builder.create().show();
- return;
- }
- if (!setConfigs()) return;
- setConfigBoolean(LaunchSetting, false);
- saveConfigFile();
- AlertDialog.Builder builder = new AlertDialog.Builder(mInstance);
- builder.setMessage(R.string.msg_exit);
- builder.setCancelable(false);
- builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface, int i) {
- Intent intent = new Intent(mInstance, PalActivity.class);
- intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(intent);
- finish();
- }
- });
- builder.create().show();
- }
- });
- findViewById(R.id.btnBrowseFolder).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent i = new Intent(mInstance, FilePickerActivity.class);
- i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false);
- i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true);
- i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_DIR);
- i.putExtra(FilePickerActivity.EXTRA_START_PATH, ((EditText)findViewById(R.id.edFolder)).getText().toString());
- startActivityForResult(i, BROWSE_GAMEDIR_CODE);
- }
- });
- findViewById(R.id.btnBrowseMsgFile).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent i = new Intent(mInstance, FilePickerActivity.class);
- i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false);
- i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true);
- i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_FILE);
- i.putExtra(FilePickerActivity.EXTRA_START_PATH, ((EditText)findViewById(R.id.edFolder)).getText().toString());
- startActivityForResult(i, BROWSE_MSGFILE_CODE);
- }
- });
- findViewById(R.id.btnBrowseFontFile).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- Intent i = new Intent(mInstance, FilePickerActivity.class);
- i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false);
- i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true);
- i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_FILE);
- i.putExtra(FilePickerActivity.EXTRA_START_PATH, ((EditText)findViewById(R.id.edFolder)).getText().toString());
- startActivityForResult(i, BROWSE_FONTFILE_CODE);
- }
- });
- resetConfigs();
- if (PalActivity.crashed) {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setMessage(R.string.msg_crash);
- builder.setCancelable(false);
- builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface, int i) {
- dialogInterface.dismiss();
- }
- });
- builder.create().show();
- }
- }
- @Override
- protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
- if (resultCode == Activity.RESULT_OK) {
- String filePath = null;
- try {
- List<Uri> files = Utils.getSelectedFilesFromResult(intent);
- for (Uri uri : files) {
- File file = Utils.getFileForUri(uri);
- filePath = file.getAbsolutePath();
- break;
- }
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- if (filePath != null) {
- if (requestCode == BROWSE_GAMEDIR_CODE) {
- ((EditText) findViewById(R.id.edFolder)).setText(filePath);
- } else if (requestCode == BROWSE_MSGFILE_CODE) {
- ((EditText) findViewById(R.id.edMsgFile)).setText(filePath);
- } else if (requestCode == BROWSE_FONTFILE_CODE) {
- ((EditText) findViewById(R.id.edFontFile)).setText(filePath);
- }
- }
- }
- }
- protected int findMatchedIntIndex(int value, int[] values, int defaultIndex) {
- for(int i = 0; i < values.length; i++) {
- if (values[i] == value)
- return i;
- }
- return defaultIndex;
- }
- protected int findMatchedStringIndex(String value, String[] values, int defaultIndex) {
- for(int i = 0; i < values.length; i++) {
- if (values[i].equals(value))
- return i;
- }
- return defaultIndex;
- }
- protected void setDefaults() {
- String sdcardState = Environment.getExternalStorageState();
- findViewById(R.id.edMsgFile).setVisibility(View.GONE);
- findViewById(R.id.btnBrowseMsgFile).setVisibility(View.GONE);
- findViewById(R.id.edFontFile).setVisibility(View.GONE);
- findViewById(R.id.btnBrowseFontFile).setVisibility(View.GONE);
- findViewById(R.id.edLogFile).setVisibility(View.GONE);
- findViewById(R.id.layoutOPL).setVisibility(View.VISIBLE);
- ((SeekBar)findViewById(R.id.sbMusVol)).setProgress(getConfigInt(MusicVolume, true));
- ((SeekBar)findViewById(R.id.sbSFXVol)).setProgress(getConfigInt(SoundVolume, true));
- ((SeekBar)findViewById(R.id.sbQuality)).setProgress(getConfigInt(ResampleQuality, true));
- if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
- ((EditText)findViewById(R.id.edFolder)).setText(Environment.getExternalStorageDirectory().getPath() + "/sdlpal/");
- } else {
- ((EditText)findViewById(R.id.edFolder)).setText("/sdcard/sdlpal/");
- }
- ((EditText)findViewById(R.id.edMsgFile)).setText("");
- ((EditText)findViewById(R.id.edFontFile)).setText("");
- ((EditText)findViewById(R.id.edLogFile)).setText("");
- ((SwitchCompat)findViewById(R.id.swMsgFile)).setChecked(false);
- ((SwitchCompat)findViewById(R.id.swFontFile)).setChecked(false);
- ((SwitchCompat)findViewById(R.id.swLogFile)).setChecked(false);
- ((SwitchCompat)findViewById(R.id.swAVI)).setChecked(getConfigBoolean(EnableAviPlay, true));
- ((SwitchCompat)findViewById(R.id.swTouch)).setChecked(getConfigBoolean(UseTouchOverlay, true));
- ((SwitchCompat)findViewById(R.id.swAspect)).setChecked(getConfigBoolean(KeepAspectRatio, true));
- ((SwitchCompat)findViewById(R.id.swSurround)).setChecked(getConfigBoolean(UseSurroundOPL, true));
- ((SwitchCompat)findViewById(R.id.swStereo)).setChecked(getConfigBoolean(Stereo, true));
- ((AppCompatSpinner)findViewById(R.id.spLogLevel)).setSelection(getConfigInt(LogLevel, true));
- ((AppCompatSpinner)findViewById(R.id.spSample)).setSelection(findMatchedIntIndex(getConfigInt(SampleRate, true), AudioSampleRates, 2)); // 44100Hz
- ((AppCompatSpinner)findViewById(R.id.spBuffer)).setSelection(findMatchedIntIndex(getConfigInt(AudioBufferSize, true), AudioBufferSizes, 1)); // 1024
- ((AppCompatSpinner)findViewById(R.id.spCDFmt)).setSelection(findMatchedStringIndex(getConfigString(CDFormat, true), CDFormats, 1)); // OGG
- ((AppCompatSpinner)findViewById(R.id.spMusFmt)).setSelection(findMatchedStringIndex(getConfigString(MusicFormat, true), MusicFormats, 1)); // RIX
- ((AppCompatSpinner)findViewById(R.id.spOPL)).setSelection(findMatchedStringIndex(getConfigString(OPLFormat, true), OPLFormats, 1)); // MAME
- ((AppCompatSpinner)findViewById(R.id.spOPLRate)).setSelection(findMatchedIntIndex(getConfigInt(OPLSampleRate, true), OPLSampleRates, 5)); // 49716Hz
- ((AppCompatSpinner)findViewById(R.id.spAspectRatio)).setSelection(findMatchedStringIndex(getConfigString(AspectRatio, true), AspectRatios, 0)); // 16:10
- }
- protected void resetConfigs() {
- findViewById(R.id.edMsgFile).setVisibility(View.GONE);
- findViewById(R.id.btnBrowseMsgFile).setVisibility(View.GONE);
- findViewById(R.id.edFontFile).setVisibility(View.GONE);
- findViewById(R.id.btnBrowseFontFile).setVisibility(View.GONE);
- findViewById(R.id.edLogFile).setVisibility(View.GONE);
- findViewById(R.id.layoutOPL).setVisibility(View.VISIBLE);
- ((SeekBar)findViewById(R.id.sbMusVol)).setProgress(getConfigInt(MusicVolume, false));
- ((SeekBar)findViewById(R.id.sbSFXVol)).setProgress(getConfigInt(SoundVolume, false));
- ((SeekBar)findViewById(R.id.sbQuality)).setProgress(getConfigInt(ResampleQuality, false)); // Best quality
- String msgFile, fontFile, logFile;
- ((EditText)findViewById(R.id.edFolder)).setText(getConfigString(GamePath, false));
- ((EditText)findViewById(R.id.edMsgFile)).setText(msgFile = getConfigString(MessageFileName, false));
- ((EditText)findViewById(R.id.edFontFile)).setText(fontFile = getConfigString(FontFileName, false));
- ((EditText)findViewById(R.id.edLogFile)).setText(logFile = getConfigString(LogFileName, false));
- ((SwitchCompat)findViewById(R.id.swMsgFile)).setChecked(msgFile != null && !msgFile.isEmpty());
- ((SwitchCompat)findViewById(R.id.swFontFile)).setChecked(fontFile != null && !fontFile.isEmpty());
- ((SwitchCompat)findViewById(R.id.swLogFile)).setChecked(logFile != null && !logFile.isEmpty());
- ((SwitchCompat)findViewById(R.id.swAVI)).setChecked(getConfigBoolean(EnableAviPlay, false));
- ((SwitchCompat)findViewById(R.id.swTouch)).setChecked(getConfigBoolean(UseTouchOverlay, false));
- ((SwitchCompat)findViewById(R.id.swAspect)).setChecked(getConfigBoolean(KeepAspectRatio, false));
- ((SwitchCompat)findViewById(R.id.swSurround)).setChecked(getConfigBoolean(UseSurroundOPL, false));
- ((SwitchCompat)findViewById(R.id.swStereo)).setChecked(getConfigBoolean(Stereo, false));
- ((AppCompatSpinner)findViewById(R.id.spLogLevel)).setSelection(getConfigInt(LogLevel, false));
- ((AppCompatSpinner)findViewById(R.id.spSample)).setSelection(findMatchedIntIndex(getConfigInt(SampleRate, false), AudioSampleRates, 2)); // 44100Hz
- ((AppCompatSpinner)findViewById(R.id.spBuffer)).setSelection(findMatchedIntIndex(getConfigInt(AudioBufferSize, false), AudioBufferSizes, 1)); // 1024
- ((AppCompatSpinner)findViewById(R.id.spCDFmt)).setSelection(findMatchedStringIndex(getConfigString(CDFormat, false), CDFormats, 1)); // OGG
- ((AppCompatSpinner)findViewById(R.id.spMusFmt)).setSelection(findMatchedStringIndex(getConfigString(MusicFormat, false), MusicFormats, 1)); // RIX
- ((AppCompatSpinner)findViewById(R.id.spOPL)).setSelection(findMatchedStringIndex(getConfigString(OPLFormat, false), OPLFormats, 1)); // MAME
- ((AppCompatSpinner)findViewById(R.id.spOPLRate)).setSelection(findMatchedIntIndex(getConfigInt(OPLSampleRate, false), OPLSampleRates, 5)); // 49716Hz
- ((AppCompatSpinner)findViewById(R.id.spAspectRatio)).setSelection(findMatchedStringIndex(getConfigString(AspectRatio, false), AspectRatios, 0)); // 16:10
- }
- protected boolean setConfigs() {
- if (((EditText)findViewById(R.id.edFolder)).getText().toString().isEmpty()) {
- AlertDialog.Builder builder = new AlertDialog.Builder(this);
- builder.setMessage(R.string.msg_empty);
- builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialogInterface, int i) {
- dialogInterface.dismiss();
- }
- });
- builder.create().show();
- return false;
- }
- setConfigInt(MusicVolume, ((SeekBar)findViewById(R.id.sbMusVol)).getProgress());
- setConfigInt(SoundVolume, ((SeekBar)findViewById(R.id.sbSFXVol)).getProgress());
- setConfigInt(ResampleQuality, ((SeekBar)findViewById(R.id.sbQuality)).getProgress());
- setConfigString(GamePath, ((EditText)findViewById(R.id.edFolder)).getText().toString());
- if (isDirWritable(((EditText)findViewById(R.id.edFolder)).getText().toString())) {
- setConfigString(SavePath, ((EditText)findViewById(R.id.edFolder)).getText().toString());
- } else {
- String savePath = Environment.getExternalStorageDirectory().getPath() + "/sdlpal/";
- if (isDirWritable(savePath)) {
- setConfigString(SavePath, savePath);
- } else {
- savePath = getApplicationContext().getFilesDir().getPath();
- setConfigString(SavePath, savePath);
- }
- }
- setConfigString(MessageFileName, ((SwitchCompat)findViewById(R.id.swMsgFile)).isChecked() ? ((EditText)findViewById(R.id.edMsgFile)).getText().toString() : null);
- setConfigString(FontFileName, ((SwitchCompat)findViewById(R.id.swFontFile)).isChecked() ? ((EditText)findViewById(R.id.edFontFile)).getText().toString() : null);
- setConfigString(LogFileName, ((SwitchCompat)findViewById(R.id.swLogFile)).isChecked() ? ((EditText)findViewById(R.id.edLogFile)).getText().toString() : null);
- setConfigBoolean(UseTouchOverlay, ((SwitchCompat)findViewById(R.id.swTouch)).isChecked());
- setConfigBoolean(KeepAspectRatio, ((SwitchCompat)findViewById(R.id.swAspect)).isChecked());
- setConfigBoolean(UseSurroundOPL, ((SwitchCompat)findViewById(R.id.swSurround)).isChecked());
- setConfigBoolean(Stereo, ((SwitchCompat)findViewById(R.id.swStereo)).isChecked());
- setConfigInt(LogLevel, ((AppCompatSpinner)findViewById(R.id.spLogLevel)).getSelectedItemPosition());
- setConfigInt(SampleRate, Integer.parseInt((String)((AppCompatSpinner)findViewById(R.id.spSample)).getSelectedItem()));
- setConfigInt(AudioBufferSize, Integer.parseInt((String)((AppCompatSpinner)findViewById(R.id.spBuffer)).getSelectedItem()));
- setConfigString(CDFormat, (String)((AppCompatSpinner)findViewById(R.id.spCDFmt)).getSelectedItem());
- setConfigString(MusicFormat, (String)((AppCompatSpinner)findViewById(R.id.spMusFmt)).getSelectedItem());
- setConfigString(OPLFormat, (String)((AppCompatSpinner)findViewById(R.id.spOPL)).getSelectedItem());
- setConfigInt(OPLSampleRate, Integer.parseInt((String)((AppCompatSpinner)findViewById(R.id.spOPLRate)).getSelectedItem()));
- setConfigString(AspectRatio, (String)((AppCompatSpinner)findViewById(R.id.spAspectRatio)).getSelectedItem());
- return true;
- }
- }
|