From d90dce6d127239aaa8efad21026223baa017634d Mon Sep 17 00:00:00 2001 From: sigmabeta Date: Thu, 21 Jan 2016 17:36:48 -0500 Subject: [PATCH] Implement video settings + support for missing files / settings --- .../Android/app/src/main/AndroidManifest.xml | 2 +- .../model/settings/BooleanSetting.java | 2 +- .../model/settings/FloatSetting.java | 2 +- .../dolphinemu/model/settings/IntSetting.java | 2 +- .../dolphinemu/model/settings/Setting.java | 7 +- .../model/settings/StringSetting.java | 2 +- .../model/settings/view/CheckBoxSetting.java | 35 +- .../model/settings/view/HeaderSetting.java | 2 +- .../model/settings/view/SettingsItem.java | 15 +- .../settings/view/SingleChoiceSetting.java | 44 +- .../model/settings/view/SliderSetting.java | 57 +- .../model/settings/view/SubmenuSetting.java | 2 +- .../dolphinemu/ui/main/MainActivity.java | 5 +- .../dolphinemu/ui/main/MainPresenter.java | 9 +- .../dolphinemu/ui/main/MainView.java | 2 +- .../dolphinemu/ui/main/TvMainActivity.java | 12 +- .../settings/SettingsActivityPresenter.java | 27 +- .../ui/settings/SettingsAdapter.java | 36 +- .../ui/settings/SettingsFragment.java | 31 +- .../settings/SettingsFragmentPresenter.java | 226 +- .../ui/settings/SettingsFragmentView.java | 9 +- .../viewholder/CheckboxSettingViewHolder.java | 4 +- .../dolphinemu/utils/SettingsFile.java | 66 +- .../main/res/drawable-hdpi/ic_settings.png | Bin 561 -> 0 bytes .../res/drawable-hdpi/ic_settings_core.png | Bin 0 -> 259 bytes .../drawable-hdpi/ic_settings_graphics.png | Bin 0 -> 304 bytes .../main/res/drawable-xhdpi/ic_settings.png | Bin 737 -> 0 bytes .../res/drawable-xhdpi/ic_settings_core.png | Bin 0 -> 225 bytes .../drawable-xhdpi/ic_settings_graphics.png | Bin 0 -> 360 bytes .../main/res/drawable-xxhdpi/ic_settings.png | Bin 974 -> 0 bytes .../res/drawable-xxhdpi/ic_settings_core.png | Bin 0 -> 333 bytes .../drawable-xxhdpi/ic_settings_graphics.png | Bin 0 -> 570 bytes .../main/res/drawable-xxxhdpi/ic_settings.png | Bin 1273 -> 0 bytes .../res/drawable-xxxhdpi/ic_settings_core.png | Bin 0 -> 432 bytes .../drawable-xxxhdpi/ic_settings_graphics.png | Bin 0 -> 759 bytes .../main/res/drawable/ic_settings_core_tv.png | Bin 0 -> 432 bytes .../res/drawable/ic_settings_graphics_tv.png | Bin 0 -> 759 bytes .../src/main/res/drawable/ic_settings_tv.png | Bin 2248 -> 0 bytes .../app/src/main/res/menu/menu_game_grid.xml | 11 +- .../app/src/main/res/values/arrays.xml | 94 +- .../app/src/main/res/values/strings.xml | 3 +- .../app/src/main/res/xml/preferences.xml | 4834 ----------------- 42 files changed, 514 insertions(+), 5027 deletions(-) delete mode 100644 Source/Android/app/src/main/res/drawable-hdpi/ic_settings.png create mode 100644 Source/Android/app/src/main/res/drawable-hdpi/ic_settings_core.png create mode 100644 Source/Android/app/src/main/res/drawable-hdpi/ic_settings_graphics.png delete mode 100644 Source/Android/app/src/main/res/drawable-xhdpi/ic_settings.png create mode 100644 Source/Android/app/src/main/res/drawable-xhdpi/ic_settings_core.png create mode 100644 Source/Android/app/src/main/res/drawable-xhdpi/ic_settings_graphics.png delete mode 100644 Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings.png create mode 100644 Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings_core.png create mode 100644 Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings_graphics.png delete mode 100644 Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings.png create mode 100644 Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings_core.png create mode 100644 Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings_graphics.png create mode 100644 Source/Android/app/src/main/res/drawable/ic_settings_core_tv.png create mode 100644 Source/Android/app/src/main/res/drawable/ic_settings_graphics_tv.png delete mode 100644 Source/Android/app/src/main/res/drawable/ic_settings_tv.png delete mode 100644 Source/Android/app/src/main/res/xml/preferences.xml diff --git a/Source/Android/app/src/main/AndroidManifest.xml b/Source/Android/app/src/main/AndroidManifest.xml index be41d3f55b..57a0e62abd 100644 --- a/Source/Android/app/src/main/AndroidManifest.xml +++ b/Source/Android/app/src/main/AndroidManifest.xml @@ -58,7 +58,7 @@ + android:label="@string/grid_menu_core_settings"/> >() - { - @Override - public void call(HashMap settingsBySection) - { - mSettingsBySection = settingsBySection; - mView.onSettingsFileLoaded(settingsBySection); - } - }); + { + @Override + public void call(HashMap settingsBySection) + { + mSettingsBySection = settingsBySection; + mView.onSettingsFileLoaded(settingsBySection); + } + }, + new Action1() + { + @Override + public void call(Throwable throwable) + { + Log.error("[SettingsActivityPresenter] Error reading file " + filename + ".ini: "+ throwable.getMessage()); + mView.onSettingsFileLoaded(null); + } + }); mView.showSettingsFragment(mFileName, false); } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java index f386fc94df..bbb9a2ad1a 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsAdapter.java @@ -9,10 +9,12 @@ import android.view.View; import android.view.ViewGroup; import android.widget.SeekBar; import android.widget.TextView; -import android.widget.Toast; import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.model.settings.BooleanSetting; import org.dolphinemu.dolphinemu.model.settings.FloatSetting; +import org.dolphinemu.dolphinemu.model.settings.IntSetting; +import org.dolphinemu.dolphinemu.model.settings.view.CheckBoxSetting; import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; import org.dolphinemu.dolphinemu.model.settings.view.SingleChoiceSetting; import org.dolphinemu.dolphinemu.model.settings.view.SliderSetting; @@ -117,6 +119,17 @@ public class SettingsAdapter extends RecyclerView.Adapter notifyDataSetChanged(); } + public void onBooleanClick(CheckBoxSetting item, int position, boolean checked) + { + BooleanSetting setting = item.setChecked(checked); + notifyItemChanged(position); + + if (setting != null) + { + mView.addSetting(setting); + } + } + public void onSingleChoiceClick(SingleChoiceSetting item) { mClickedItem = item; @@ -162,7 +175,7 @@ public class SettingsAdapter extends RecyclerView.Adapter public void onSubmenuClick(SubmenuSetting item) { - Toast.makeText(mContext, "Submenu item clicked", Toast.LENGTH_SHORT).show(); + mView.loadSubMenu(item.getMenuKey()); } @Override @@ -174,7 +187,12 @@ public class SettingsAdapter extends RecyclerView.Adapter int value = getValueForSingleChoiceSelection(scSetting, which); - scSetting.setSelectedValue(value); + IntSetting setting = scSetting.setSelectedValue(value); + if (setting != null) + { + mView.addSetting(setting); + } + closeDialog(); } else if (mClickedItem instanceof SliderSetting) @@ -193,11 +211,19 @@ public class SettingsAdapter extends RecyclerView.Adapter value = (float) mSeekbarProgress; } - sliderSetting.setSelectedValue(value); + FloatSetting setting = sliderSetting.setSelectedValue(value); + if (setting != null) + { + mView.addSetting(setting); + } } else { - sliderSetting.setSelectedValue(mSeekbarProgress); + IntSetting setting = sliderSetting.setSelectedValue(mSeekbarProgress); + if (setting != null) + { + mView.addSetting(setting); + } } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragment.java index a612233789..50ef668b90 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragment.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragment.java @@ -12,6 +12,7 @@ import android.view.ViewGroup; import org.dolphinemu.dolphinemu.BuildConfig; import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.model.settings.Setting; import org.dolphinemu.dolphinemu.model.settings.SettingSection; import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; import org.dolphinemu.dolphinemu.ui.DividerItemDecoration; @@ -22,7 +23,7 @@ import java.util.HashMap; public final class SettingsFragment extends Fragment implements SettingsFragmentView { private SettingsFragmentPresenter mPresenter = new SettingsFragmentPresenter(this); - private SettingsActivityView mView; + private SettingsActivityView mActivity; private SettingsAdapter mAdapter; @@ -31,7 +32,7 @@ public final class SettingsFragment extends Fragment implements SettingsFragment { super.onAttach(context); - mView = (SettingsActivityView) context; + mActivity = (SettingsActivityView) context; mPresenter.onAttach(); } @@ -76,7 +77,7 @@ public final class SettingsFragment extends Fragment implements SettingsFragment public void onDetach() { super.onDetach(); - mView = null; + mActivity = null; if (mAdapter != null) { @@ -91,11 +92,11 @@ public final class SettingsFragment extends Fragment implements SettingsFragment } @Override - public void passOptionsToActivity(HashMap settings) + public void passSettingsToActivity(HashMap settings) { - if (mView != null) + if (mActivity != null) { - mView.setSettings(settings); + mActivity.setSettings(settings); } } @@ -105,6 +106,24 @@ public final class SettingsFragment extends Fragment implements SettingsFragment mAdapter.setSettings(settingsList); } + @Override + public void loadSubMenu(String menuKey) + { + mActivity.showSettingsFragment(menuKey, true); + } + + @Override + public void showToastMessage(String message) + { + mActivity.showToastMessage(message); + } + + @Override + public void addSetting(Setting setting) + { + mPresenter.addSetting(setting); + } + public static final String FRAGMENT_TAG = BuildConfig.APPLICATION_ID + ".fragment.settings"; public static final String ARGUMENT_MENU_TAG = FRAGMENT_TAG + ".menu_tag"; diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentPresenter.java index b53d7517f9..22bb24a38f 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentPresenter.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentPresenter.java @@ -1,12 +1,17 @@ package org.dolphinemu.dolphinemu.ui.settings; import org.dolphinemu.dolphinemu.R; +import org.dolphinemu.dolphinemu.model.settings.BooleanSetting; +import org.dolphinemu.dolphinemu.model.settings.IntSetting; import org.dolphinemu.dolphinemu.model.settings.Setting; import org.dolphinemu.dolphinemu.model.settings.SettingSection; import org.dolphinemu.dolphinemu.model.settings.view.CheckBoxSetting; +import org.dolphinemu.dolphinemu.model.settings.view.HeaderSetting; import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; import org.dolphinemu.dolphinemu.model.settings.view.SingleChoiceSetting; import org.dolphinemu.dolphinemu.model.settings.view.SliderSetting; +import org.dolphinemu.dolphinemu.model.settings.view.SubmenuSetting; +import org.dolphinemu.dolphinemu.utils.EGLHelper; import org.dolphinemu.dolphinemu.utils.SettingsFile; import java.util.ArrayList; @@ -45,23 +50,22 @@ public class SettingsFragmentPresenter { if (mSettings != null) { - mView.passOptionsToActivity(mSettings); + mView.passSettingsToActivity(mSettings); } } + public void addSetting(Setting setting) + { + mSettings.get(setting.getSection()).putSetting(setting.getKey(), setting); + } + public void setSettings(HashMap settings) { if (mSettingsList == null) { - if (settings != null) - { - mSettings = settings; - } + mSettings = settings; - if (mSettings != null) - { - loadSettingsList(); - } + loadSettingsList(); } else { @@ -77,8 +81,23 @@ public class SettingsFragmentPresenter { case SettingsFile.FILE_NAME_DOLPHIN: addCoreSettings(sl); - break; + + case SettingsFile.FILE_NAME_GFX: + addGraphicsSettings(sl); + break; + + case SettingsFile.SECTION_GFX_ENHANCEMENTS: + addEnhanceSettings(sl); + break; + + case SettingsFile.SECTION_GFX_HACKS: + addHackSettings(sl); + break; + + default: + mView.showToastMessage("Unimplemented menu."); + return; } mSettingsList = sl; @@ -87,16 +106,187 @@ public class SettingsFragmentPresenter private void addCoreSettings(ArrayList sl) { - Setting cpuCore = mSettings.get(SettingsFile.SECTION_CORE).getSetting(SettingsFile.KEY_CPU_CORE); - sl.add(new SingleChoiceSetting(cpuCore.getKey(), cpuCore, R.string.cpu_core, 0, R.array.string_emu_cores, R.array.int_emu_cores)); + Setting cpuCore = null; + Setting dualCore = null; + Setting overclockEnable = null; + Setting overclock = null; - Setting dualCore = mSettings.get(SettingsFile.SECTION_CORE).getSetting(SettingsFile.KEY_DUAL_CORE); - sl.add(new CheckBoxSetting(dualCore.getKey(), dualCore, R.string.dual_core, R.string.dual_core_descrip)); + if (mSettings != null) + { + cpuCore = mSettings.get(SettingsFile.SECTION_CORE).getSetting(SettingsFile.KEY_CPU_CORE); + dualCore = mSettings.get(SettingsFile.SECTION_CORE).getSetting(SettingsFile.KEY_DUAL_CORE); + overclockEnable = mSettings.get(SettingsFile.SECTION_CORE).getSetting(SettingsFile.KEY_OVERCLOCK_ENABLE); + overclock = mSettings.get(SettingsFile.SECTION_CORE).getSetting(SettingsFile.KEY_OVERCLOCK_PERCENT); + } + else + { + mSettings = new HashMap<>(); + mSettings.put(SettingsFile.SECTION_CORE, new SettingSection(SettingsFile.SECTION_CORE)); - Setting overclockEnable = mSettings.get(SettingsFile.SECTION_CORE).getSetting(SettingsFile.KEY_OVERCLOCK_ENABLE); - sl.add(new CheckBoxSetting(overclockEnable.getKey(), overclockEnable, R.string.overclock_enable, R.string.overclock_enable_description)); + mView.passSettingsToActivity(mSettings); + } - Setting overclock = mSettings.get(SettingsFile.SECTION_CORE).getSetting(SettingsFile.KEY_OVERCLOCK_PERCENT); - sl.add(new SliderSetting(overclock.getKey(), overclock, R.string.overclock_title, 0, 400, "%")); + // TODO Set default value for cpuCore based on arch. + sl.add(new SingleChoiceSetting(SettingsFile.KEY_CPU_CORE, SettingsFile.SECTION_CORE, R.string.cpu_core, 0, R.array.string_emu_cores, R.array.int_emu_cores, 4, cpuCore)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_DUAL_CORE, SettingsFile.SECTION_CORE, R.string.dual_core, R.string.dual_core_descrip, true, dualCore)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_OVERCLOCK_ENABLE, SettingsFile.SECTION_CORE, R.string.overclock_enable, R.string.overclock_enable_description, false, overclockEnable)); + sl.add(new SliderSetting(SettingsFile.KEY_OVERCLOCK_PERCENT, SettingsFile.SECTION_CORE, R.string.overclock_title, 0, 400, "%", 100, overclock)); + + } + + private void addGraphicsSettings(ArrayList sl) + { + Setting showFps = null; + + if (mSettings != null) + { + showFps = mSettings.get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_SHOW_FPS); + } + else + { + mSettings = new HashMap<>(); + + mSettings.put(SettingsFile.SECTION_GFX_SETTINGS, new SettingSection(SettingsFile.SECTION_GFX_SETTINGS)); + mSettings.put(SettingsFile.SECTION_GFX_ENHANCEMENTS, new SettingSection(SettingsFile.SECTION_GFX_ENHANCEMENTS)); + mSettings.put(SettingsFile.SECTION_GFX_HACKS, new SettingSection(SettingsFile.SECTION_GFX_HACKS)); + + mView.passSettingsToActivity(mSettings); + } + + sl.add(new CheckBoxSetting(SettingsFile.KEY_SHOW_FPS, SettingsFile.SECTION_GFX_SETTINGS, R.string.show_fps, 0, true, showFps)); + + sl.add(new SubmenuSetting(null, null, R.string.enhancements, 0, SettingsFile.SECTION_GFX_ENHANCEMENTS)); + sl.add(new SubmenuSetting(null, null, R.string.hacks, 0, SettingsFile.SECTION_GFX_HACKS)); + } + + private void addEnhanceSettings(ArrayList sl) + { + Setting resolution = mSettings.get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_INTERNAL_RES); + Setting fsaa = mSettings.get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_FSAA); + Setting anisotropic = mSettings.get(SettingsFile.SECTION_GFX_ENHANCEMENTS).getSetting(SettingsFile.KEY_ANISOTROPY); + Setting efbScaledCopy = mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_SCALED_EFB); + Setting perPixel = mSettings.get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_PER_PIXEL); + Setting forceFilter = mSettings.get(SettingsFile.SECTION_GFX_ENHANCEMENTS).getSetting(SettingsFile.KEY_FORCE_FILTERING); + Setting disableFog = mSettings.get(SettingsFile.SECTION_GFX_SETTINGS).getSetting(SettingsFile.KEY_DISABLE_FOG); + + sl.add(new SingleChoiceSetting(SettingsFile.KEY_INTERNAL_RES, SettingsFile.SECTION_GFX_SETTINGS, R.string.internal_resolution, R.string.internal_resolution_descrip, R.array.internalResolutionEntries, R.array.internalResolutionValues, 0, resolution)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_FSAA, SettingsFile.SECTION_GFX_SETTINGS, R.string.FSAA, R.string.FSAA_descrip, R.array.FSAAEntries, R.array.FSAAValues, 0, fsaa)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_ANISOTROPY, SettingsFile.SECTION_GFX_ENHANCEMENTS, R.string.anisotropic_filtering, R.string.anisotropic_filtering_descrip, R.array.anisotropicFilteringEntries, R.array.anisotropicFilteringValues, 0, anisotropic)); + + // TODO +// Setting shader = mSettings.get(SettingsFile.SECTION_GFX_ENHANCEMENTS).getSetting(SettingsFile.KEY_POST_SHADER) +// sl.add(new SingleChoiceSetting(.getKey(), , R.string., R.string._descrip, R.array., R.array.)); + + sl.add(new CheckBoxSetting(SettingsFile.KEY_SCALED_EFB, SettingsFile.SECTION_GFX_HACKS, R.string.scaled_efb_copy, R.string.scaled_efb_copy_descrip, true, efbScaledCopy)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_PER_PIXEL, SettingsFile.SECTION_GFX_SETTINGS, R.string.per_pixel_lighting, R.string.per_pixel_lighting_descrip, false, perPixel)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_FORCE_FILTERING, SettingsFile.SECTION_GFX_ENHANCEMENTS, R.string.force_texture_filtering, R.string.force_texture_filtering_descrip, false, forceFilter)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_DISABLE_FOG, SettingsFile.SECTION_GFX_SETTINGS, R.string.disable_fog, R.string.disable_fog_descrip, false, disableFog)); + + /* + Check if we support stereo + If we support desktop GL then we must support at least OpenGL 3.2 + If we only support OpenGLES then we need both OpenGLES 3.1 and AEP + */ + EGLHelper helper = new EGLHelper(EGLHelper.EGL_OPENGL_ES2_BIT); + + if ((helper.supportsOpenGL() && helper.GetVersion() >= 320) || + (helper.supportsGLES3() && helper.GetVersion() >= 310 && helper.SupportsExtension("GL_ANDROID_extension_pack_es31a"))) + { + sl.add(new SubmenuSetting(null, null, R.string.stereoscopy, 0, SettingsFile.SECTION_STEREOSCOPY)); + } + } + + private void addHackSettings(ArrayList sl) + { + int efbCopyMethodValue = getEfbCopyMethodValue(); + int xfbValue = getXfbValue(); + + Setting skipEFB = mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_SKIP_EFB); + Setting ignoreFormat = mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_IGNORE_FORMAT); + IntSetting efbCopyMethod = new IntSetting(SettingsFile.KEY_EFB_COPY_METHOD, null, efbCopyMethodValue); + Setting texCacheAccuracy = mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_TEXCACHE_ACCURACY); + IntSetting xfb = new IntSetting(SettingsFile.KEY_XFB, SettingsFile.SECTION_GFX_HACKS, xfbValue); + Setting fastDepth = mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_FAST_DEPTH); + Setting aspectRatio = mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_ASPECT_RATIO); + + sl.add(new HeaderSetting(null, null, R.string.embedded_frame_buffer, 0)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_SKIP_EFB, SettingsFile.SECTION_GFX_HACKS, R.string.skip_efb_access, R.string.skip_efb_access_descrip, false, skipEFB)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_IGNORE_FORMAT, SettingsFile.SECTION_GFX_HACKS, R.string.ignore_format_changes, R.string.ignore_format_changes_descrip, false, ignoreFormat)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_EFB_COPY_METHOD, SettingsFile.SECTION_GFX_HACKS, R.string.efb_copy_method, R.string.efb_copy_method_descrip, R.array.efbCopyMethodEntries, R.array.efbCopyMethodValues, 1, efbCopyMethod)); + + sl.add(new HeaderSetting(null, null, R.string.texture_cache, 0)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_TEXCACHE_ACCURACY, SettingsFile.SECTION_GFX_HACKS, R.string.texture_cache_accuracy, R.string.texture_cache_accuracy_descrip, R.array.textureCacheAccuracyEntries, R.array.textureCacheAccuracyValues, 128, texCacheAccuracy)); + + sl.add(new HeaderSetting(null, null, R.string.external_frame_buffer, 0)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_XFB, SettingsFile.SECTION_GFX_HACKS, R.string.external_frame_buffer, R.string.external_frame_buffer_descrip, R.array.externalFrameBufferEntries, R.array.externalFrameBufferValues, 0, xfb)); + + sl.add(new HeaderSetting(null, null, R.string.other, 0)); + sl.add(new CheckBoxSetting(SettingsFile.KEY_FAST_DEPTH, SettingsFile.SECTION_GFX_HACKS, R.string.fast_depth_calculation, R.string.fast_depth_calculation_descrip, true, fastDepth)); + sl.add(new SingleChoiceSetting(SettingsFile.KEY_ASPECT_RATIO, SettingsFile.SECTION_GFX_HACKS, R.string.aspect_ratio, R.string.aspect_ratio_descrip, R.array.aspectRatioEntries, R.array.aspectRatioValues, 0, aspectRatio)); + } + + private int getEfbCopyMethodValue() + { + int efbCopyMethodValue; + try + { + boolean efbCopyOn = ((BooleanSetting) mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_EFB_COPY)).getValue(); + boolean efbCopyTexture = ((BooleanSetting) mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_EFB_TEXTURE)).getValue(); + boolean efbCopyCache = ((BooleanSetting) mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_EFB_CACHE)).getValue(); + + + if (!efbCopyOn) + { + efbCopyMethodValue = 0; + } + else if (efbCopyTexture) + { + efbCopyMethodValue = 1; + } + else if (!efbCopyCache) + { + efbCopyMethodValue = 2; + } + else + { + efbCopyMethodValue = 3; + } + } + catch (NullPointerException ex) + { + efbCopyMethodValue = 1; + } + + return efbCopyMethodValue; + } + + private int getXfbValue() + { + int xfbValue; + + try + { + boolean usingXFB = ((BooleanSetting) mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_XFB)).getValue(); + boolean usingRealXFB = ((BooleanSetting) mSettings.get(SettingsFile.SECTION_GFX_HACKS).getSetting(SettingsFile.KEY_XFB_REAL)).getValue(); + + if (!usingXFB) + { + xfbValue = 0; + } + else if (!usingRealXFB) + { + xfbValue = 1; + } + else + { + xfbValue = 2; + } + } + catch (NullPointerException ex) + { + xfbValue = 0; + } + + return xfbValue; } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentView.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentView.java index cef3d73dff..f5a035eed3 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentView.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/SettingsFragmentView.java @@ -2,6 +2,7 @@ package org.dolphinemu.dolphinemu.ui.settings; import android.app.Activity; +import org.dolphinemu.dolphinemu.model.settings.Setting; import org.dolphinemu.dolphinemu.model.settings.SettingSection; import org.dolphinemu.dolphinemu.model.settings.view.SettingsItem; @@ -12,9 +13,15 @@ public interface SettingsFragmentView { void onSettingsFileLoaded(HashMap settings); - void passOptionsToActivity(HashMap settings); + void passSettingsToActivity(HashMap settings); void showSettingsList(ArrayList settingsList); Activity getActivity(); + + void loadSubMenu(String menuKey); + + void showToastMessage(String message); + + void addSetting(Setting setting); } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/CheckboxSettingViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/CheckboxSettingViewHolder.java index 0059446bdc..05985cc671 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/CheckboxSettingViewHolder.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/ui/settings/viewholder/CheckboxSettingViewHolder.java @@ -51,7 +51,7 @@ public class CheckBoxSettingViewHolder extends SettingViewHolder public void onClick(View clicked) { mCheckbox.toggle(); - mItem.setChecked(mCheckbox.isChecked()); - getAdapter().notifyItemChanged(getAdapterPosition()); + + getAdapter().onBooleanClick(mItem, getAdapterPosition(), mCheckbox.isChecked()); } } diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/SettingsFile.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/SettingsFile.java index 15ce0a7e36..5bfa678098 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/SettingsFile.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/utils/SettingsFile.java @@ -36,39 +36,43 @@ public final class SettingsFile public static final String SECTION_GFX_ENHANCEMENTS = "Enhancements"; public static final String SECTION_GFX_HACKS = "Hacks"; + public static final String SECTION_STEREOSCOPY = "Stereoscopy"; - public static final String KEY_CPU_CORE= "CPUCore"; - public static final String KEY_DUAL_CORE= "CPUThread"; - public static final String KEY_OVERCLOCK_ENABLE= "OverclockEnable"; - public static final String KEY_OVERCLOCK_PERCENT= "Overclock"; - public static final String KEY_VIDEO_BACKEND= "GFXBackend"; + public static final String KEY_CPU_CORE = "CPUCore"; + public static final String KEY_DUAL_CORE = "CPUThread"; + public static final String KEY_OVERCLOCK_ENABLE = "OverclockEnable"; + public static final String KEY_OVERCLOCK_PERCENT = "Overclock"; + public static final String KEY_VIDEO_BACKEND = "GFXBackend"; - public static final String KEY_SHOW_FPS= "ShowFPS"; - public static final String KEY_INTERNAL_RES= "EFBScale"; - public static final String KEY_FSAA= "MSAA"; - public static final String KEY_ANISOTROPY= "MaxAnisotropy"; - public static final String KEY_POST_SHADER= "PostProcessingShader"; - public static final String KEY_SCALED_EFB= "EFBScaledCopy"; - public static final String KEY_PER_PIXEL= "EnablePixelLighting"; - public static final String KEY_FORCE_FILTERING= "ForceFiltering"; - public static final String KEY_DISABLE_FOG= "DisableFog"; + public static final String KEY_SHOW_FPS = "ShowFPS"; + public static final String KEY_INTERNAL_RES = "EFBScale"; + public static final String KEY_FSAA = "MSAA"; + public static final String KEY_ANISOTROPY = "MaxAnisotropy"; + public static final String KEY_POST_SHADER = "PostProcessingShader"; + public static final String KEY_SCALED_EFB = "EFBScaledCopy"; + public static final String KEY_PER_PIXEL = "EnablePixelLighting"; + public static final String KEY_FORCE_FILTERING = "ForceFiltering"; + public static final String KEY_DISABLE_FOG = "DisableFog"; - public static final String KEY_STEREO_MODE= "StereoMode"; - public static final String KEY_STEREO_DEPTH= "StereoDepth"; - public static final String KEY_STEREO_CONV= "StereoConvergencePercentage"; - public static final String KEY_STEREO_SWAP= "StereoSwapEyes"; + public static final String KEY_STEREO_MODE = "StereoMode"; + public static final String KEY_STEREO_DEPTH = "StereoDepth"; + public static final String KEY_STEREO_CONV = "StereoConvergencePercentage"; + public static final String KEY_STEREO_SWAP = "StereoSwapEyes"; - public static final String KEY_SKIP_EFB= "EFBAccessEnable"; - public static final String KEY_IGNORE_FORMAT= "EFBEmulateFormatChanges"; - public static final String KEY_EFB_COPY= "EFBCopyEnable"; - public static final String KEY_EFB_TEXTURE= "EFBToTextureEnable"; - public static final String KEY_EFB_CACHE= "EFBCopyCacheEnable"; - public static final String KEY_TEXCACHE_ACCURACY= "SafeTextureCacheColorSamples"; - public static final String KEY_XFB= "UseXFB"; - public static final String KEY_XFB_REAL= "UseRealXFB"; + public static final String KEY_SKIP_EFB = "EFBAccessEnable"; + public static final String KEY_IGNORE_FORMAT = "EFBEmulateFormatChanges"; + public static final String KEY_EFB_COPY = "EFBCopyEnable"; + public static final String KEY_EFB_TEXTURE = "EFBToTextureEnable"; + public static final String KEY_EFB_CACHE = "EFBCopyCacheEnable"; + public static final String KEY_TEXCACHE_ACCURACY = "SafeTextureCacheColorSamples"; + public static final String KEY_XFB = "UseXFB"; + public static final String KEY_XFB_REAL = "UseRealXFB"; public static final String KEY_FAST_DEPTH= "FastDepthCalc"; public static final String KEY_ASPECT_RATIO= "AspectRatio"; + // Internal only, not actually found in settings file. + public static final String KEY_EFB_COPY_METHOD = "EFBCopyMethod"; + private SettingsFile() { } @@ -206,7 +210,7 @@ public final class SettingsFile { int valueAsInt = Integer.valueOf(value); - return new IntSetting(key, current, valueAsInt); + return new IntSetting(key, current.getName(), valueAsInt); } catch (NumberFormatException ex) { @@ -216,7 +220,7 @@ public final class SettingsFile { float valueAsFloat = Float.valueOf(value); - return new FloatSetting(key, current, valueAsFloat); + return new FloatSetting(key, current.getName(), valueAsFloat); } catch (NumberFormatException ex) { @@ -225,11 +229,11 @@ public final class SettingsFile switch (value) { case "True": - return new BooleanSetting(key, current, true); + return new BooleanSetting(key, current.getName(), true); case "False": - return new BooleanSetting(key, current, false); + return new BooleanSetting(key, current.getName(), false); default: - return new StringSetting(key, current, value); + return new StringSetting(key, current.getName(), value); } } diff --git a/Source/Android/app/src/main/res/drawable-hdpi/ic_settings.png b/Source/Android/app/src/main/res/drawable-hdpi/ic_settings.png deleted file mode 100644 index f9a8915fd2dc378d35756de89784556e6fdc7db9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 561 zcmeAS@N?(olHy`uVBq!ia0y~yU{C>J4i*Lm25-&)VFm^Ug=CK)Uj~LMH3o);76yi2 z3=9knFBlj~4Hy_+B``2p&0t^&?>%v5uH*%8fzq_%hkL#^7C*E79>d-@ z-?Go1ZI@HeoZ1WBELGdMKV6#U;A`{EA#si2HEoS!YK`YMcgM0$Ie7CV+fAh;rpgMY ztU1P~Wl~ED&+~ka31F8icPDv0ztbM=JzCm93$Tx=@b=NnmXZ{=EUV` zC(JlcFHl~)#!D#vcrd3{)Y*kRTm_2{9#JWFFXyX;0wUde8$U$_1P18LaLjI6(-wa4$C687Uli2Yr=53mVqChU zrn^>D#h#;&0k?+Cp)Izd!uE>rCi6Nz3$Ws_dzpamLV-Fny_Uz3}AOX^ng z)|-d-eDAGPU9$V1tm7rKeRnSLPvj{2%n@?Z$al^pvB~OgbByg8jr1lf9$sU7<7=qf z!6m!B?4^Ca?CMh!y|7~MUbBRkAJ4mJh`hKCF@W-u@?obq&W45_&FcE&~CRs|l{ zLSwc7^Ft-__A!lTe;G8k$S--4#I(NcF2Ad^4-5UR~o?r`{BKjkqeV4h9 z8`J;ojnfv`o=AQ9;pVZp2lh!ltgO43WA2<^Cl$h*@%-O5MTd10n!=v0Ea4FNGilqg znM^0d`et!udu?J>_#a}E?SHtb>hOW8SwbF@jD$qoUQIPx;(9m)ALcPI PFfe$!`njxgN@xNAe0^;y literal 0 HcmV?d00001 diff --git a/Source/Android/app/src/main/res/drawable-hdpi/ic_settings_graphics.png b/Source/Android/app/src/main/res/drawable-hdpi/ic_settings_graphics.png new file mode 100644 index 0000000000000000000000000000000000000000..8264acb8cdd026bdeb0ea99ec6d2936fdc3b6fe2 GIT binary patch literal 304 zcmeAS@N?(olHy`uVBq!ia0y~yU{C>J4mJh`hKCF@W-u@?eD`#545_%4{Nw+B`@;!` zcoy?X>G378B-tyhV|~P?_1J2~&7LDx97_uR*57LWdPAo5tYh8(m+Up2g#o&$umdK II;Vst0LC(Ze*gdg literal 0 HcmV?d00001 diff --git a/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings.png b/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings.png deleted file mode 100644 index 12e5d100dd80ca03315f8d15af6289c3db015327..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 737 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4i*LmhQHi~JPZsB3dtTpz6=aiY77hwEes65 z7#J8DUNA6}8Za=tN?>5Hn!&&zUNC1@pbY~915=W>y9>kr_Wm>b85kHi3p^r=85p>Q zL70(Y)*J~22Bt_)7srr@!%t_N&lV08IIh0cuu<)*o657iuK}6-{~DU?H+)gJ+PqZ! z;C@FI+b!3c12(wwSABSLG}vHCeM`iOD#1M+E7r!Dq&a&om6)*N>~U|7yW2mPnV)2v za?X11&G%=@@6R?j&NpxS687s!z50vy5HbWkzcb$n*W}IG|C~*7UC>c~vmJ*R z^FA%K{O@vT{)1_!|A;3Z>77+vUGm(~&(3Sr>01Glm4mjiR<6wcuA~{ch4rTj@1hB8 z>RTj^RJewG3R0fIY4Gcmjf# zaJum>d3?0OI%p&6k+`7{!wtSIO)V(lkBNY{6C4y5_CO+`#ju4vxNCQn_~>+2LmJ@^&28lHTp{ z-*O$jR_>4q*mvrTvDYM(C0oTY|Aj+RP;Bd|KP_CsdHw@+k!r-2sIu57Bq3H zsb~4jv(ZL6(%W2CpNPG_NAA>8>8%?s@BN;(efrmDPWOv?|DFl>c$cp|vu($@-PcNW z~)y?L6?!9bw( zplXOgLNT?j=8D5)tp*CX|vPMrjihY%>l(s3=9kmF*~Q1TQe}2GTfSBm$vcG z)}uYoEmazlAKd(6S}h>wkpDC*fMHrwLnz~fJuNFAGczc#*i0?|f8{YFg9h)3yK6jW z*)lN9U}s?XamL2Moa@2+hPB`Ne{ED)u(~oayDM{wclY7SZqa_<=Q}IHmNPOuP?u+5 cV7PaVk6j=vt7O%jqaY`Ey85}Sb4q9e0M8m#82|tP literal 0 HcmV?d00001 diff --git a/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings_graphics.png b/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings_graphics.png new file mode 100644 index 0000000000000000000000000000000000000000..de130a60fbf6d6ce114513a87cc109fe98828ada GIT binary patch literal 360 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?FxNG(T|b&zPyApKba^CYKI`sO^ADwy zbL>7%Yl-xCv6=o+!-0|O&vpmyo`Z2+>y>AyonN3T5WhqC^VVR`6)eY+{C!JUzKLP{ zEw;mb5zn)(eT_+TFHAX5tdf;5^^!TW>QSr6?}x)#<6IYUZsV`b4mfYH;M6AheOe2; zT*PAzNS4^m*!0ttb5FO6k35Ui;zJ*}F%Jd`bO=sPJqL&YQVtoDuIE)Y6b&?c)^@qfi?^b3`|Mh?k)`f+xyS#XJBC9EbxddW?ZL`Wq+Vtzc6D}qN$_xTxezU&;wh38 z5fKo0{vvBp_+pOD-7HN3T(bo3%5iV)&|9K8$wl1jvR+tP)U?k1^X}X_eP(84$)sEP z_s%8$`(t7Jx%U4|OS2r~)i;|Q92Y2DNQrjSU-Uxpu1$dCCW{og6@gqK>2fP#xk~Qa zT-YG;VshpJmNiPZbOQFNUf|m75Uty|Z3b&m6qD?{tOWtHBo@q)nQt!m=D}9g0RE*e zKfc7Cv%DAV-(eTf8U2e<)n(Uw@k`BFdy*FKju*LI`Jyg(3Aagqx!fh^If}Dc)-9F} z?^JHj+E-!oR^5yL#fJs&|$&T#`uM_1N0`YU8>@CB2nQYmbJk31j4XywPxh zUs@#d+k+`@wlH-iUeLI}E_R~vT$Z=r1vg&5Iae;6YbpCb*=WJhp6pKEV7E!_P0ZrT zQBwAuqRdA#m+qUb^2=9>FUlmuZHB(|CYxU(t*618?y#jL6O{AOHn zyO9|hu=Am1%%UR_YAaIe&&_r5PJg^%j`!1jksdKI<{rK^Gbi2Dny$gKG448l>IL1H z7oJ`YCl9GyaE($BE1T@F&iCeoG7b?grq5S?vlN-0a@fk$dbg2LR^Wu?)W#U5*1!Kb zF5H`Gma@q6?mC_;mQyENO;$gY`aa;0r=Z^NJfo6EuBDaNma>E>p8d-D%Arh4S9^=| z!`~5>?T`PxTDbm#Ql93NqhfD@<`m>8$$kCe%o&^zViDn}1o07~cN7r$PLb zfq&%lcjoO$@1o{^?rwBiv3R=Hraw0(=W?ZA)z|!%tiQ?9*Zw)PrN#WhaPCiGIhRj;hUU29CAExuqO3Oc9UvH7S#k29qk-i?!q fwJ}ZWg8q>|-(0OKURN_PFfe$!`njxgN@xNAc^9J@ diff --git a/Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings_core.png b/Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings_core.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5f2493a54a7de1d79b668a5d5b3391a16ffb48 GIT binary patch literal 333 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84mJh`hS0a0-5D4dMLb;`Ln>~)z3t1@Y#`8< z82*j#t>n_U%kmjtwVVpgdj+QJE!lYA<$hzn`Xrkb2MsjOtWmhl$f(f3z{CL}UfADU z6>^=KMZkf9k>$d_DT<*U!bUUKJ)2;+gl}ghV^zzZv+=!!IYA39X`YL6mRZcR!s!3k z5GGSehElHun#>FOg*^80$lJ<6%=2T|vOVbT^B2D%29~fYToqeY(=7(FiDQ8lY&=)o@T$g*GIe5GJ%mr;P@d%C5Um1C7Ws(Lra)^AI-};!oa}5 N;OXk;vd$@?2>>7~b(H`B literal 0 HcmV?d00001 diff --git a/Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings_graphics.png b/Source/Android/app/src/main/res/drawable-xxhdpi/ic_settings_graphics.png new file mode 100644 index 0000000000000000000000000000000000000000..7b7e2f7a1a130ef1371fb294263d488cbce09673 GIT binary patch literal 570 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84mJh`hS0a0-5D5|7(HDaLn>~)y>07#*g=B* zLzh%wLE-1rf-(`AyLVkncuM%h_BT9W7qD+|ezxm7bBFisj%^Bkevh7n#B;gI&3_>3 zJ$u6L(@Xct{Ad67xOKPuTjyDJD+K~sJ^2L~SQHo-IUE?61R9<^DrEATe0lMwkom%e zS#y>yYB00x5Bc}1YqJFFCz*qiVeWHIN(4B(ySmbI!LnwD+{q5M?2Y?;n07{ibR!vr z&h%LPs6LF(az2CCI^~Vx@(z^-<3|cP4%~C`!!M2 zf%lxv@^w4%4%|F{V|skq0`YURb{yOENd2WxQGQ}%<37vXCYCK@Q^ex)*Y{q8xl;EC&@Tgj)) zr%K)8`*QB)v^~#co~Na}6@4myJM^u4Fzc^}G8r;2<`o~0R59LsR_kxZDu?H@*l#_` znQ)V_;J(>{wjZZ%n5fF%Vlt^R&InHV75LD>)4bVCb+x=GU&vMo_hs@ACu-00WL_cT zP|IG}v#(3QlH-aIXGpPth5@I@f2;RaEuS6Q;#Wx9@xHNWQvQ3}|LZdCe=0}wUu`v> x$93z*gy=`vPgl;7Twliwi4#yzDt7*4HCg8o%jjua!oa}5;OXk;vd$@?2>@|r?zaE{ literal 0 HcmV?d00001 diff --git a/Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings.png b/Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings.png deleted file mode 100644 index 97e9ca945ce91be7ac959990171271a2dd1a961e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1273 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4i*Lm29JsRH#0CWC?tCX`7$t6sWC7#v@kII zVqjosc)`F>YQVtoDuIE)Y6b&?c)^@qfi?^b3`|Mh?k)`f+xyS#XJBC9EbxddW?d0Ic>3ElJD=OVJ8Sv*?p({_b2E)4Q^&5WqskSRO@nwMZ-mF@*S24B{q$6;Rm*c2cpaw%Q_jq?cn^dRN}#m*$nr)8TEE@ ze%LOtz}~`L>duGc7biZyW1N!3s8h(lAd36J-w-C92S)ZAyOZXZPy4)9%)wgJ?$)wR zlch^G8E`bD@A!A)g}~X6Ni#nj3%X@6(JapI!ch+P~`vC zj>k7n1ai&4uyyL}!*%O7vT8ip*M5`HFUWC<*1rQ`?>@%x{jU-dxKaaHigm z(Pn`Q{{xM6Cpl#srWXWG^I|l5Ss?Uale^3_&JE{oT@gr+IIr~Sq}psIubT&UGMF9Z zPi3%=l9Wu)zigwP###E&;1p|_HD|i9;=-@ef~h;>MV5(4GU|k7?3I%_u%9dVr~gu!Kj{Gs zflq@@n=zdTT-PYzVAaZXXP(n5*O)ApfMpk|bS)UBO5aUj*`R5fXX3TC=)6rf%Y{`j z%%ym`hbkBAwYlyKcwANmjWHf1S?So-tvKIBYNV@Jr6xhvzSIEdRao z68niq+-Ije*4p{#VgEw!;NQM*h_0Q$GK=YVbBs#s9{faFQmB|wjoriC~ z6LILR)0r~+LWN<`qsv<#ZGXAvDbIn|%hs|zpDR(9ccc5CFR%Xmy;yJC{r{?R|6r%VB`ixh1aei1Q@gUcn@zfCp?n{5Q9~)z2lg7$UuNK zplnOKqiA~W>Xd_#T34JK9;l=WU!QiVRQ!agajo*-RE0C$8+3cjmrm*J=~iQ4P+(x- zU|?WkXkcJa_%HKd`>R@81|;zA{JykxJFne2^*DU@aqqJspM@kJ?0goGbbXVZjsHc4 zsL%G^^Q^u(ytX~{7i91h1U~J^KGlHaxaj5U+Qz^Pyei3l?M41%OBS- zZnFD%JFfOucV(%x@GZ~a=cQ8OiK{B3*zd%?|7Wq|>dBoD`@keTj3B|KkiU=7J~Z-j S_OY!eLGqrielF{r5}E)TdXT&T literal 0 HcmV?d00001 diff --git a/Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings_graphics.png b/Source/Android/app/src/main/res/drawable-xxxhdpi/ic_settings_graphics.png new file mode 100644 index 0000000000000000000000000000000000000000..d7b1ac95ce6fce4239ff35ffbec5f4e1f2837a20 GIT binary patch literal 759 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^S>_IbKEhE&{od-tH9u%pcJ zk4YX5c|TYxF3m7u`6$ZsD%fP@!<35FN5%}1e5NmhS9CU-%=@a*Ql+8KP^IWKf$x7O zw_XPX;54S69a<)1A_tsg98IY0|NsCCr^U! zCjFP5dRN~}w>vKEsS>Fx{9xgdwX0&AfAr^HG;PTH7w&pD?7GN7kp;fz-L;BXH@K}A zj_(VLWq5P>^^se}j29N4?<{@8^k9;m`n7m*hL9>o29iNQ&P)9%B@7zN_pSaPFCR7O z55s}nxt?L~Y`>*X;%2yWW$Tl#GmhV9IN+PRe2z1FL(=QXPaIEKidgbDv0Mn(thQWx zb-K;0M>buv*bg$+OxE#urW&tv{nGu5QRfTvdRH;?#4pv+-kqPg&(vbRUnt|3&{L}o zU)xXoV-)ee`QT0wL;fbljHNPT4Doi+cv z%?G)JTdPIpW*mz8^^YgND5GxP=L6Xd_LH7V_AOoC!xwa|dVccf&$HO$m`!;5me1F< zKfdN`<)O6IYbqb;I^15Q>94x~{o2x54^z*4wfP|QployM`R$V(l`8!e8!mXIV}bp`kQ$U^hQrUeX=*&|3z_<>`sP`7sW|$cQ9Po zo*{qX^~6iID|a(I5c~Ex`}&gU%NTwsE5ugSg}0yjz^gtx_h-@{ABm7Zsp;X7du~rZ z{@?wJ&jtB4wtf1CR~4+R6yd+KEBF5oL(@7>eg-B61{MYe4rrnZQ8$0y{OQ<*>j%MZ N@O1TaS?83{1OPI5KS}@q literal 0 HcmV?d00001 diff --git a/Source/Android/app/src/main/res/drawable/ic_settings_core_tv.png b/Source/Android/app/src/main/res/drawable/ic_settings_core_tv.png new file mode 100644 index 0000000000000000000000000000000000000000..9c8fde1b4343098d22b297dee26d8fe7da149b40 GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW%ROBjLn>~)z2lg7$UuNK zplnOKqiA~W>Xd_#T34JK9;l=WU!QiVRQ!agajo*-RE0C$8+3cjmrm*J=~iQ4P+(x- zU|?WkXkcJa_%HKd`>R@81|;zA{JykxJFne2^*DU@aqqJspM@kJ?0goGbbXVZjsHc4 zsL%G^^Q^u(ytX~{7i91h1U~J^KGlHaxaj5U+Qz^Pyei3l?M41%OBS- zZnFD%JFfOucV(%x@GZ~a=cQ8OiK{B3*zd%?|7Wq|>dBoD`@keTj3B|KkiU=7J~Z-j S_OY!eLGqrielF{r5}E)TdXT&T literal 0 HcmV?d00001 diff --git a/Source/Android/app/src/main/res/drawable/ic_settings_graphics_tv.png b/Source/Android/app/src/main/res/drawable/ic_settings_graphics_tv.png new file mode 100644 index 0000000000000000000000000000000000000000..d7b1ac95ce6fce4239ff35ffbec5f4e1f2837a20 GIT binary patch literal 759 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^S>_IbKEhE&{od-tH9u%pcJ zk4YX5c|TYxF3m7u`6$ZsD%fP@!<35FN5%}1e5NmhS9CU-%=@a*Ql+8KP^IWKf$x7O zw_XPX;54S69a<)1A_tsg98IY0|NsCCr^U! zCjFP5dRN~}w>vKEsS>Fx{9xgdwX0&AfAr^HG;PTH7w&pD?7GN7kp;fz-L;BXH@K}A zj_(VLWq5P>^^se}j29N4?<{@8^k9;m`n7m*hL9>o29iNQ&P)9%B@7zN_pSaPFCR7O z55s}nxt?L~Y`>*X;%2yWW$Tl#GmhV9IN+PRe2z1FL(=QXPaIEKidgbDv0Mn(thQWx zb-K;0M>buv*bg$+OxE#urW&tv{nGu5QRfTvdRH;?#4pv+-kqPg&(vbRUnt|3&{L}o zU)xXoV-)ee`QT0wL;fbljHNPT4Doi+cv z%?G)JTdPIpW*mz8^^YgND5GxP=L6Xd_LH7V_AOoC!xwa|dVccf&$HO$m`!;5me1F< zKfdN`<)O6IYbqb;I^15Q>94x~{o2x54^z*4wfP|QployM`R$V(l`8!e8!mXIV}bp`kQ$U^hQrUeX=*&|3z_<>`sP`7sW|$cQ9Po zo*{qX^~6iID|a(I5c~Ex`}&gU%NTwsE5ugSg}0yjz^gtx_h-@{ABm7Zsp;X7du~rZ z{@?wJ&jtB4wtf1CR~4+R6yd+KEBF5oL(@7>eg-B61{MYe4rrnZQ8$0y{OQ<*>j%MZ N@O1TaS?83{1OPI5KS}@q literal 0 HcmV?d00001 diff --git a/Source/Android/app/src/main/res/drawable/ic_settings_tv.png b/Source/Android/app/src/main/res/drawable/ic_settings_tv.png deleted file mode 100644 index 9e242e7748071f029d35d43492b9619b7c2104fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2248 zcmeAS@N?(olHy`uVBq!ia0y~yU^oE694rhB3_q?e>0w~t==XGS45?szbFh(tfq|i6 z!QYkQE15t{h8=r%|6jXl&tr?atseYaY<2`KTD)Z{Yv3}Tl8!>73ukqG(%E=?%$gO; zF7PSZ=^W-wJkol0q3k(!6^*7h;;ECLH+EV~-RPwo!lrGKa>if+D|f8-?c!f2D&L#W z_NuPB`+T2V-kI-TfAaroyL|cgo$IxK5_POQgu~{%jp^@tB@%cyd}o6uZ_iW)$L-vc z?@eMjc&$Io=aqsQW78Y$8D?QjEH}#y-^OtYq;MO&4dfI^S#6NJm4#!|+!^1tv2bjX z^7$RX^g@4fn9u7a`≪3YzsyWZ1QvTl(EZhF#i6+uBtd-ksX;kd<@6?%W$6rmWWSD#Q_%v4`hjjns)5Ss#>Cqcfr?XtR zDVSsV?G88-=+1|+daqj|4`SK5LwE=ymHBDL%E0EnS1~L zSCmh>?U**XlWWgHokg?sy!!f6C3Ae-^V2Kh%7wEt zm8QN8S?AX?}aw3zu37WWKw4y)1K}ZH}A)?%;{QQXlW-JX*~!xSjVWhI{v+OKMzx79FJ|N@JFxv0tXg%#L_UGf>At@Y`-z7%wam;}$ov1+ zj%zUuSAT?^p2Sct&-0k`+{4>Z#f*Fpf`z+Jy0OOa?O!4}pKmtz2fKfJJnK3>PmBJT zzJDh}{{#1?q>vL+FEq*THxO6o{$B82#P^oEjziFOLQ9Taq@e7NK@_RABQxF{N(7SLJe+d zf9`F6r#{?fFMRIFc9q=t6PvaKz4;~k_s$)0leyeCJ}vv}?ig9vI8!g*SH{`Y%w%G| zse@u+j>W0cb?^JmB?gzg+wi3(`k-3TpE(mMd-!}-sot(?kU5te#NPkQW{LUK%`-N$ zJWV)l@LVUjX1?&b=gem^l&^a>ByLG|vs7MG5M>>+TC zC!H}(Fl^56#orDr6K%PCFd?0>?UJX(>A*nl4SfY#0es~R1#w+*4R>3D%OY!CPknpA zxl7E!BJ!dFZCtUWWBI zem}lVRr#_^uNPk!@#(9JS@&Z*8gE%{vJvR^zOEauKA>64lAly?!|WUC)D z=QA|l%=sTPwN>}%9$%g!*#sTa8y9>SPd!?v*vRWH`Pk@y&a4fotFJOxZ+yyh`7XKA}-=KLi_#1x)&-2)v>_nzhhw_$*-u^Zr-T1)TImcT4HMV?s^*=u52fuJG ztHx5^@T?Qgl6MOF9(!pYea6g_z?^qg;!k|Qk-|GwtuszC7@jJ8Z}OOT@3;8}_kMqo zuXiBnPsTzK(IW25qy4SVnEvqAZwr)oB>vv-&&^~#2UWYHkxqV6*K4LtI1QV1zUGD1{ z9rR;3%I0!E&g~{wfobm&H7SWa{f0+{LBjnv|4FSD?zktreE(gBu9qG6?mm9BuEVxt z-dnew90kgAJG@H^_HJd6ihrT-uc1g(VY-z|`STr@Vi}Gqxs)$mxBtq1sf$nLQ+Dw# z_`$d6wCsv6X^$54-{|=ym|&9IkdZiLK10`X#*fld)-yC)dRv{_+^Z5eDMh<<$zvYN ze@q%(oLTbUg`Eq{x4O9MUJl?%;CssQmElx+gAd=L)$^Y3TzGpq_wJ6SxiPK3avoQJ zO27#Z%^Mz-m4p~fZ(QMRHr=Xb)$5P(1!hM>E^SxY?)GrWpVvz+otQPH+>-yf>7*YM zQk+i(bC_?OrWW*5S&NI2%j3dkt!J6C59S=Pi@AMTH!9!Q%fjXSEXjw84bN_VPP@ix zz3T8@nL|^x-np^fP`M_2-R}B(MTZ{#7ey`YmukM8`F^uK_x&V*mMpfI2 zQG_}26l32+?H@!jdQ`~ zsW&z`F}=u<+jeFuxav~#W|%9QaQdo{L%O8OhJ}Kvj917@acSREqb8s%$?Gt6F+c$~fmvviayQ;&4w;!s1FJOsi&D2(P zn4o)LOQq0(_h;Xido(CWw`MA + \ No newline at end of file diff --git a/Source/Android/app/src/main/res/values/arrays.xml b/Source/Android/app/src/main/res/values/arrays.xml index 5017b8e3ec..d8320239bd 100644 --- a/Source/Android/app/src/main/res/values/arrays.xml +++ b/Source/Android/app/src/main/res/values/arrays.xml @@ -20,66 +20,38 @@ @string/interpreter @string/jit_arm_recompiler - + 0 3 - + @string/interpreter @string/jit_arm64_recompiler - + 0 4 - + @string/interpreter - + 0 - + @string/interpreter @string/cached_interpreter - + 0 5 - - - - - @string/software_renderer - @string/opengl_es3 - - - Software Renderer - OGL - - - - - @string/software_renderer - @string/opengl - - - Software Renderer - OGL - - - - - @string/software_renderer - - - Software Renderer - + @@ -119,37 +91,11 @@ @string/texture_cache_accuracy_medium @string/texture_cache_accuracy_high - + 128 512 0 - - - - - 100 - 90 - 80 - 70 - 60 - 50 - 40 - 30 - 20 - 10 - - - 100,000000 - 90,000000 - 80,000000 - 70,000000 - 60,000000 - 50,000000 - 40,000000 - 30,000000 - 20,000000 - 10,000000 - + @@ -174,7 +120,7 @@ 5x Native (3200x2640) 6x Native (3840x3168) for 4K - + 2 3 4 @@ -183,7 +129,7 @@ 7 8 9 - + @@ -191,11 +137,11 @@ 2x 4x - + 0 1 2 - + @@ -205,13 +151,13 @@ 8x 16x - + 0 1 2 3 4 - + @@ -220,12 +166,12 @@ Top-and-Bottom Anaglyph - + 0 1 2 3 - + @@ -234,12 +180,12 @@ Force 4:3 Stretch To Window - + 0 1 2 3 - + Europe diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index e4fae28f1f..ba3982396f 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -320,7 +320,8 @@ - Settings + Settings + Video Settings Refresh Library diff --git a/Source/Android/app/src/main/res/xml/preferences.xml b/Source/Android/app/src/main/res/xml/preferences.xml deleted file mode 100644 index 3a5bc32422..0000000000 --- a/Source/Android/app/src/main/res/xml/preferences.xml +++ /dev/null @@ -1,4834 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -