android: frontend: settings: Add performance warnings for relevant settings.

This commit is contained in:
bunnei 2019-07-23 18:31:44 -04:00
parent 56fb1e0549
commit a60c447d31
8 changed files with 33 additions and 15 deletions

View File

@ -2,14 +2,26 @@ package org.citra.citra_android.model.settings.view;
import org.citra.citra_android.model.settings.IntSetting; import org.citra.citra_android.model.settings.IntSetting;
import org.citra.citra_android.model.settings.Setting; import org.citra.citra_android.model.settings.Setting;
import org.citra.citra_android.ui.settings.SettingsFragmentView;
public final class CheckBoxSetting extends SettingsItem { public final class CheckBoxSetting extends SettingsItem {
private boolean mDefaultValue; private boolean mDefaultValue;
private boolean mShowPerformanceWarning;
private SettingsFragmentView mView;
public CheckBoxSetting(String key, String section, int file, int titleId, int descriptionId, public CheckBoxSetting(String key, String section, int file, int titleId, int descriptionId,
boolean defaultValue, Setting setting) { boolean defaultValue, Setting setting) {
super(key, section, file, setting, titleId, descriptionId); super(key, section, file, setting, titleId, descriptionId);
mDefaultValue = defaultValue; mDefaultValue = defaultValue;
mShowPerformanceWarning = false;
}
public CheckBoxSetting(String key, String section, int file, int titleId, int descriptionId,
boolean defaultValue, Setting setting, boolean show_performance_warning, SettingsFragmentView view) {
super(key, section, file, setting, titleId, descriptionId);
mDefaultValue = defaultValue;
mView = view;
mShowPerformanceWarning = show_performance_warning;
} }
public boolean isChecked() { public boolean isChecked() {
@ -29,6 +41,11 @@ public final class CheckBoxSetting extends SettingsItem {
* @return null if overwritten successfully; otherwise, a newly created BooleanSetting. * @return null if overwritten successfully; otherwise, a newly created BooleanSetting.
*/ */
public IntSetting setChecked(boolean checked) { public IntSetting setChecked(boolean checked) {
// Show a performance warning if the setting has been disabled
if (mShowPerformanceWarning && !checked) {
mView.showToastMessage("Turning off this setting will significantly reduce emulation performance! For the best experience, it is recommended that you leave this setting enabled.", true);
}
if (getSetting() == null) { if (getSetting() == null) {
IntSetting setting = new IntSetting(getKey(), getSection(), getFile(), checked ? 1 : 0); IntSetting setting = new IntSetting(getKey(), getSection(), getFile(), checked ? 1 : 0);
setSetting(setting); setSetting(setting);

View File

@ -197,8 +197,8 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
} }
@Override @Override
public void showToastMessage(String message) { public void showToastMessage(String message, boolean is_long) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); Toast.makeText(this, message, is_long ? Toast.LENGTH_LONG : Toast.LENGTH_SHORT).show();
} }
@Override @Override

View File

@ -114,11 +114,11 @@ public final class SettingsActivityPresenter {
if (menuTag.equals("Dolphin")) { if (menuTag.equals("Dolphin")) {
SettingsFile.saveFile("../GameSettings/" + gameId, mSettings.get(SettingsFile.SETTINGS_DOLPHIN), mView); SettingsFile.saveFile("../GameSettings/" + gameId, mSettings.get(SettingsFile.SETTINGS_DOLPHIN), mView);
} }
mView.showToastMessage("Saved settings for " + gameId); mView.showToastMessage("Saved settings for " + gameId, false);
} else { } else {
Log.debug("[SettingsActivity] Settings activity stopping. Saving settings to INI..."); Log.debug("[SettingsActivity] Settings activity stopping. Saving settings to INI...");
SettingsFile.saveFile(SettingsFile.FILE_NAME_CONFIG, mSettings.get(SettingsFile.SETTINGS_DOLPHIN), mView); SettingsFile.saveFile(SettingsFile.FILE_NAME_CONFIG, mSettings.get(SettingsFile.SETTINGS_DOLPHIN), mView);
mView.showToastMessage("Saved settings to INI files"); mView.showToastMessage("Saved settings to INI files", false);
} }
} }
} }
@ -168,7 +168,7 @@ public final class SettingsActivityPresenter {
break; break;
case 2: case 2:
mView.showToastMessage("Please make sure Continuous Scanning is enabled in Core Settings."); mView.showToastMessage("Please make sure Continuous Scanning is enabled in Core Settings.", false);
break; break;
} }
} }

View File

@ -55,8 +55,9 @@ public interface SettingsActivityView {
* Display a popup text message on screen. * Display a popup text message on screen.
* *
* @param message The contents of the onscreen message. * @param message The contents of the onscreen message.
* @param is_long Whether this should be a long Toast or short one.
*/ */
void showToastMessage(String message); void showToastMessage(String message, boolean is_long);
/** /**
* Show the previous fragment. * Show the previous fragment.

View File

@ -136,8 +136,8 @@ public final class SettingsFragment extends Fragment implements SettingsFragment
} }
@Override @Override
public void showToastMessage(String message) { public void showToastMessage(String message, boolean is_long) {
mActivity.showToastMessage(message); mActivity.showToastMessage(message, is_long);
} }
@Override @Override

View File

@ -32,7 +32,6 @@ public final class SettingsFragmentPresenter {
public void onCreate(String menuTag, String gameId) { public void onCreate(String menuTag, String gameId) {
mGameID = gameId; mGameID = gameId;
mMenuTag = menuTag; mMenuTag = menuTag;
} }
public void onViewCreated(ArrayList<HashMap<String, SettingSection>> settings) { public void onViewCreated(ArrayList<HashMap<String, SettingSection>> settings) {
@ -92,7 +91,7 @@ public final class SettingsFragmentPresenter {
addAudioSettings(sl); addAudioSettings(sl);
break; break;
default: default:
mView.showToastMessage("Unimplemented menu"); mView.showToastMessage("Unimplemented menu", false);
return; return;
} }
@ -120,7 +119,7 @@ public final class SettingsFragmentPresenter {
mView.passSettingsToActivity(mSettings); mView.passSettingsToActivity(mSettings);
} }
sl.add(new CheckBoxSetting(SettingsFile.KEY_CPU_JIT, SettingsFile.SECTION_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.cpu_jit, 0, true, useCpuJit)); sl.add(new CheckBoxSetting(SettingsFile.KEY_CPU_JIT, SettingsFile.SECTION_CORE, SettingsFile.SETTINGS_DOLPHIN, R.string.cpu_jit, 0, true, useCpuJit, true, mView));
} }
private void addSystemSettings(ArrayList<SettingsItem> sl) { private void addSystemSettings(ArrayList<SettingsItem> sl) {
@ -172,8 +171,8 @@ public final class SettingsFragmentPresenter {
mView.passSettingsToActivity(mSettings); mView.passSettingsToActivity(mSettings);
} }
sl.add(new CheckBoxSetting(SettingsFile.KEY_HW_RENDERER, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.hw_renderer, 0, true, hardwareRenderer)); sl.add(new CheckBoxSetting(SettingsFile.KEY_HW_RENDERER, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.hw_renderer, 0, true, hardwareRenderer, true, mView));
sl.add(new CheckBoxSetting(SettingsFile.KEY_HW_SHADER, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.hw_shaders, R.string.hw_shaders_descrip, true, hardwareShader)); sl.add(new CheckBoxSetting(SettingsFile.KEY_HW_SHADER, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.hw_shaders, R.string.hw_shaders_descrip, true, hardwareShader, true, mView));
sl.add(new CheckBoxSetting(SettingsFile.KEY_SHADERS_ACCURATE_MUL, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.shaders_accurate_mul, 0, false, shadersAccurateMul)); sl.add(new CheckBoxSetting(SettingsFile.KEY_SHADERS_ACCURATE_MUL, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.shaders_accurate_mul, 0, false, shadersAccurateMul));
sl.add(new CheckBoxSetting(SettingsFile.KEY_SHADERS_ACCURATE_GS, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.shaders_accurate_gs, 0, false, shadersAccurateGs)); sl.add(new CheckBoxSetting(SettingsFile.KEY_SHADERS_ACCURATE_GS, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.shaders_accurate_gs, 0, false, shadersAccurateGs));
sl.add(new SliderSetting(SettingsFile.KEY_RESOLUTION_FACTOR, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.internal_resolution, R.string.internal_resolution_descrip, 10, "x", 1, resolutionFactor)); sl.add(new SliderSetting(SettingsFile.KEY_RESOLUTION_FACTOR, SettingsFile.SECTION_RENDERER, SettingsFile.SETTINGS_DOLPHIN, R.string.internal_resolution, R.string.internal_resolution_descrip, 10, "x", 1, resolutionFactor));

View File

@ -61,8 +61,9 @@ public interface SettingsFragmentView {
* Tell the Fragment to tell the containing activity to display a toast message. * Tell the Fragment to tell the containing activity to display a toast message.
* *
* @param message Text to be shown in the Toast * @param message Text to be shown in the Toast
* @param is_long Whether this should be a long Toast or short one.
*/ */
void showToastMessage(String message); void showToastMessage(String message, boolean is_long);
/** /**
* Have the fragment add a setting to the HashMap. * Have the fragment add a setting to the HashMap.

View File

@ -174,7 +174,7 @@ public final class SettingsFile {
writer.store(); writer.store();
} catch (IOException e) { } catch (IOException e) {
Log.error("[SettingsFile] File not found: " + fileName + ".ini: " + e.getMessage()); Log.error("[SettingsFile] File not found: " + fileName + ".ini: " + e.getMessage());
view.showToastMessage("Error saving " + fileName + ".ini: " + e.getMessage()); view.showToastMessage("Error saving " + fileName + ".ini: " + e.getMessage(), false);
} }
} }