SettingsActivity.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209
  1. package io.github.sdlpal;
  2. import android.content.DialogInterface;
  3. import android.os.Bundle;
  4. import android.support.v7.app.AppCompatActivity;
  5. import android.support.v7.widget.AppCompatSpinner;
  6. import android.support.v7.widget.SwitchCompat;
  7. import android.support.v7.widget.Toolbar;
  8. import android.support.v7.app.AlertDialog;
  9. import android.view.View;
  10. import android.widget.AdapterView;
  11. import android.widget.CompoundButton;
  12. import android.widget.EditText;
  13. import android.widget.SeekBar;
  14. import android.widget.Spinner;
  15. public class SettingsActivity extends AppCompatActivity {
  16. public static native boolean loadConfigFile();
  17. public static native boolean saveConfigFile();
  18. public static native boolean getConfigBoolean(String item);
  19. public static native int getConfigInt(String item);
  20. public static native String getConfigString(String item);
  21. public static native boolean setConfigBoolean(String item, boolean value);
  22. public static native boolean setConfigInt(String item, int value);
  23. public static native boolean setConfigString(String item, String value);
  24. private static final String FullScreen = "FullScreen";
  25. private static final String KeepAspectRatio = "KeepAspectRatio";
  26. private static final String LaunchSetting = "LaunchSetting";
  27. private static final String Stereo = "Stereo";
  28. private static final String UseEmbeddedFonts = "UseEmbeddedFonts";
  29. private static final String UseSurroundOPL = "UseSurroundOPL";
  30. private static final String UseTouchOverlay = "UseTouchOverlay";
  31. private static final String AudioBufferSize = "AudioBufferSize";
  32. private static final String CodePage = "CodePage";
  33. private static final String OPLSampleRate = "OPLSampleRate";
  34. private static final String ResampleQuality = "ResampleQuality";
  35. private static final String SampleRate = "SampleRate";
  36. private static final String MusicVolume = "MusicVolume";
  37. private static final String SoundVolume = "SoundVolume";
  38. private static final String CDFormat = "CD";
  39. private static final String GamePath = "GamePath";
  40. private static final String SavePath = "SavePath";
  41. private static final String MessageFileName = "MessageFileName";
  42. private static final String MusicFormat = "Music";
  43. private static final String OPLFormat = "OPL";
  44. private static final int AudioSampleRates[] = { 11025, 22050, 44100 };
  45. private static final int AudioBufferSizes[] = { 512, 1024, 2048, 4096, 8192 };
  46. private static final int OPLSampleRates[] = { 12429, 24858, 49716 };
  47. private static final String CDFormats[] = { "MP3", "OGG" };
  48. private static final String MusicFormats[] = { "MIDI", "RIX", "MP3", "OGG" };
  49. private static final String OPLFormats[] = { "DOSBOX", "MAME", "DOSBOXNEW" };
  50. private SettingsActivity mInstance = this;
  51. @Override
  52. protected void onCreate(Bundle savedInstanceState) {
  53. super.onCreate(savedInstanceState);
  54. setContentView(R.layout.activity_settings);
  55. Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
  56. setSupportActionBar(toolbar);
  57. ((SwitchCompat)findViewById(R.id.swCustomLang)).setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
  58. @Override
  59. public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
  60. findViewById(R.id.swGameLang).setVisibility(isChecked ? View.GONE : View.VISIBLE);
  61. findViewById(R.id.edLangFile).setVisibility(isChecked ? View.VISIBLE : View.GONE);
  62. }
  63. });
  64. ((AppCompatSpinner)findViewById(R.id.spMusFmt)).setOnItemSelectedListener(new Spinner.OnItemSelectedListener() {
  65. @Override
  66. public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
  67. findViewById(R.id.layoutOPL).setVisibility(position == 1 ? View.VISIBLE : View.GONE);
  68. }
  69. @Override
  70. public void onNothingSelected(AdapterView<?> parent) {
  71. findViewById(R.id.layoutOPL).setVisibility(View.VISIBLE);
  72. }
  73. });
  74. findViewById(R.id.btnDefault).setOnClickListener(new View.OnClickListener() {
  75. @Override
  76. public void onClick(View v) {
  77. setDefaults();
  78. }
  79. });
  80. findViewById(R.id.btnFinish).setOnClickListener(new View.OnClickListener() {
  81. @Override
  82. public void onClick(View v) {
  83. if (!setConfigs()) return;
  84. setConfigBoolean(LaunchSetting, false);
  85. saveConfigFile();
  86. AlertDialog.Builder builder = new AlertDialog.Builder(mInstance);
  87. builder.setMessage(R.string.msg_exit);
  88. builder.setCancelable(false);
  89. builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
  90. @Override
  91. public void onClick(DialogInterface dialogInterface, int i) {
  92. System.exit(0);
  93. }
  94. });
  95. builder.create().show();
  96. }
  97. });
  98. setDefaults();
  99. if (PalActivity.crashed) {
  100. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  101. builder.setMessage(R.string.msg_crash);
  102. builder.setCancelable(false);
  103. builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
  104. @Override
  105. public void onClick(DialogInterface dialogInterface, int i) {
  106. dialogInterface.dismiss();
  107. }
  108. });
  109. builder.create().show();
  110. }
  111. }
  112. protected int findMatchedIntIndex(int value, int[] values, int defaultIndex) {
  113. for(int i = 0; i < values.length; i++) {
  114. if (values[i] == value)
  115. return i;
  116. }
  117. return defaultIndex;
  118. }
  119. protected int findMatchedStringIndex(String value, String[] values, int defaultIndex) {
  120. for(int i = 0; i < values.length; i++) {
  121. if (values[i].equals(value))
  122. return i;
  123. }
  124. return defaultIndex;
  125. }
  126. protected void setDefaults() {
  127. findViewById(R.id.edLangFile).setVisibility(View.GONE);
  128. findViewById(R.id.layoutOPL).setVisibility(View.VISIBLE);
  129. ((SeekBar)findViewById(R.id.sbMusVol)).setProgress(getConfigInt(MusicVolume));
  130. ((SeekBar)findViewById(R.id.sbSFXVol)).setProgress(getConfigInt(SoundVolume));
  131. ((SeekBar)findViewById(R.id.sbQuality)).setProgress(getConfigInt(ResampleQuality)); // Best quality
  132. String langFile = getConfigString(MessageFileName);
  133. ((EditText)findViewById(R.id.edFolder)).setText(getConfigString(GamePath));
  134. ((EditText)findViewById(R.id.edLangFile)).setText(langFile);
  135. ((SwitchCompat)findViewById(R.id.swEmbedFont)).setChecked(getConfigBoolean(UseEmbeddedFonts));
  136. ((SwitchCompat)findViewById(R.id.swCustomLang)).setChecked(langFile != null && !langFile.isEmpty());
  137. ((SwitchCompat)findViewById(R.id.swGameLang)).setChecked(getConfigInt(CodePage) != 0);
  138. ((SwitchCompat)findViewById(R.id.swTouch)).setChecked(getConfigBoolean(UseTouchOverlay));
  139. ((SwitchCompat)findViewById(R.id.swAspect)).setChecked(getConfigBoolean(KeepAspectRatio));
  140. ((SwitchCompat)findViewById(R.id.swSurround)).setChecked(getConfigBoolean(UseSurroundOPL));
  141. ((AppCompatSpinner)findViewById(R.id.spSample)).setSelection(findMatchedIntIndex(getConfigInt(SampleRate), AudioSampleRates, 2)); // 44100Hz
  142. ((AppCompatSpinner)findViewById(R.id.spBuffer)).setSelection(findMatchedIntIndex(getConfigInt(AudioBufferSize), AudioBufferSizes, 1)); // 1024
  143. ((AppCompatSpinner)findViewById(R.id.spCDFmt)).setSelection(findMatchedStringIndex(getConfigString(CDFormat), CDFormats, 1)); // OGG
  144. ((AppCompatSpinner)findViewById(R.id.spMusFmt)).setSelection(findMatchedStringIndex(getConfigString(MusicFormat), MusicFormats, 1)); // RIX
  145. ((AppCompatSpinner)findViewById(R.id.spOPL)).setSelection(findMatchedStringIndex(getConfigString(OPLFormat), OPLFormats, 1)); // MAME
  146. ((AppCompatSpinner)findViewById(R.id.spOPLRate)).setSelection(findMatchedIntIndex(getConfigInt(OPLSampleRate), OPLSampleRates, 2)); // 49716Hz
  147. }
  148. protected boolean setConfigs() {
  149. if (((EditText)findViewById(R.id.edFolder)).getText().toString().isEmpty()) {
  150. AlertDialog.Builder builder = new AlertDialog.Builder(this);
  151. builder.setMessage(R.string.msg_empty);
  152. builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
  153. @Override
  154. public void onClick(DialogInterface dialogInterface, int i) {
  155. dialogInterface.dismiss();
  156. }
  157. });
  158. builder.create().show();
  159. return false;
  160. }
  161. setConfigInt(MusicVolume, ((SeekBar)findViewById(R.id.sbMusVol)).getProgress());
  162. setConfigInt(SoundVolume, ((SeekBar)findViewById(R.id.sbSFXVol)).getProgress());
  163. setConfigInt(ResampleQuality, ((SeekBar)findViewById(R.id.sbQuality)).getProgress());
  164. setConfigString(GamePath, ((EditText)findViewById(R.id.edFolder)).getText().toString());
  165. setConfigString(SavePath, ((EditText)findViewById(R.id.edFolder)).getText().toString());
  166. setConfigString(MessageFileName, ((EditText)findViewById(R.id.edLangFile)).getText().toString());
  167. setConfigBoolean(UseEmbeddedFonts, ((SwitchCompat)findViewById(R.id.swEmbedFont)).isChecked());
  168. setConfigInt(CodePage, ((SwitchCompat)findViewById(R.id.swGameLang)).isChecked() ? 1 : 0);
  169. setConfigBoolean(UseTouchOverlay, ((SwitchCompat)findViewById(R.id.swTouch)).isChecked());
  170. setConfigBoolean(KeepAspectRatio, ((SwitchCompat)findViewById(R.id.swAspect)).isChecked());
  171. setConfigBoolean(UseSurroundOPL, ((SwitchCompat)findViewById(R.id.swSurround)).isChecked());
  172. setConfigInt(SampleRate, Integer.parseInt((String)((AppCompatSpinner)findViewById(R.id.spSample)).getSelectedItem()));
  173. setConfigInt(AudioBufferSize, Integer.parseInt((String)((AppCompatSpinner)findViewById(R.id.spBuffer)).getSelectedItem()));
  174. setConfigString(CDFormat, (String)((AppCompatSpinner)findViewById(R.id.spCDFmt)).getSelectedItem());
  175. setConfigString(MusicFormat, (String)((AppCompatSpinner)findViewById(R.id.spMusFmt)).getSelectedItem());
  176. setConfigString(OPLFormat, (String)((AppCompatSpinner)findViewById(R.id.spOPL)).getSelectedItem());
  177. setConfigInt(OPLSampleRate, Integer.parseInt((String)((AppCompatSpinner)findViewById(R.id.spOPLRate)).getSelectedItem()));
  178. return true;
  179. }
  180. }