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 zcmV-10?z%3P)004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00002VoOIv0RM-N%)bBt010qN zS#tmY3ljhU3ljkVnw%H_00F5aMxdglhe=rd5VQ00000NkvXXu0mjf7RTZX diff --git a/Source/Android/app/src/main/res/drawable-hdpi/ic_settings_core.png b/Source/Android/app/src/main/res/drawable-hdpi/ic_settings_core.png new file mode 100644 index 0000000000000000000000000000000000000000..27985eba15b08194314e7698c1bd4ac1bdec47b8 GIT binary patch literal 259 zcmV+e0sQ`nP)22eM`bRR!lfzA3bfrKBV$Yts9*~VVrKVpmp1-b)V+|RBWR1Ik7{OApcZ6Yfr<1dc(kani5EoG7=O<>XkC2MZhg(3ZUUqreE1~g;9H1 z3(zsz`0>VowvIHyp6Cdhpf+&GckyK4Az$xhpSeow-wy>!`T4M{zZ=9YvU004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00002VoOIv0RM-N%)bBt010qN zS#tmY3ljhU3ljkVnw%H_00LP_L_t(o!{wOIYZFlr$0xNhfhN^PB<61QP-zeTfPz1; z^dQxPr5C}!K?FUt)`L*6MGt!LRCWH-_|9`s9Bn=AF69nLToD#$tcrfQw2R&clt z?Jgx4ZbNGd=9r>Nk%`tk!#!$fQe%ms7H)zf-3#A zMO5-qBbW&=`pPULBuH?KIZ6TOX)nQf>OKZ}23)5jMZpJM=bUy-$F1*`C+11Wn3duS zr)+tUWkubb0Yn*T$_n}!2mKPQp9db3S=GHD%zLo++2fzdg0N{AjaUgr4W#46csp93 zY#W-S)GbMsl%GbQj`#LfL70Bfkj>C_|EMvq1{1{Pkz@?rB`bmXuj#Dh2rdWEd*6rEAeH9$d4v}Fsr#JEN<>Dyikq>Z;<_H98*skj_azRJuqN|GdF z+*UVdr(D#wXf?8O{ala1@rWAEHe z8?~_0z4vCfm-XgC-*S!p%uw;&4u@%mxX!!QbuAuLt}jp_&*|2D9}E0Yoo{i6!4~c; zPjQ$Gx;pBkXlbM&Y{Ql7^)|E}^@E-hthJ&2H&@^&AFVI6{?+Mc?5_S-(Q|^oR4iHa T4YrnW00000NkvXXu0mjftyfGA diff --git a/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings_core.png b/Source/Android/app/src/main/res/drawable-xhdpi/ic_settings_core.png new file mode 100644 index 0000000000000000000000000000000000000000..c6fae135879c2dfde3b5b1124773377b9039ba80 GIT binary patch literal 225 zcmeAS@N?(olHy`uVBq!ia0vp^1|ZDA1|-9oezpUt6`n4RAr-gY-aO6cU?9-?(5|F>@0GFsD+JJu(h!A1d8~Bg~<2<5k%q|H=5m* zH}G|nY(Daqgjr8SJeTn(KmiK;w?GSw!Cs25BbX-7pd}DrxD)fWQ%R@<#$r!RbOiPm z2^@3;Y%2;-fC3bt00k&O0SZtce~m!ss=xwNKou-q6WD;p!~NUfWP?B)iQ$``E9j-H z;hPq?N1_boioStjozRrPb0lhDmC`o@CB-^f_rq5OUPYn_whw)4P|q-+%CaB6Dxiu) z7hJ#@bUv7}`9%r5i$qKx1RA5l@Ye!aBcY3GKjaqpG!nYJ+7Gz}0x53l?DJ>t9|VrB z4|k^)2}I)X0mnA^!fPKfO_En=A~uog;f1G^6rcbFjB^83q&%Aoj)~&{0000004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00002VoOIv0RM-N%)bBt010qN zS#tmY3ljhU3ljkVnw%H_00TxzL_t(&-tC%ONK`=>$5(Te(xUPj>1rX0iHP)INJ2!= zTM#5k6k=FdP*Km(1#(xT2(ya>f=~*Y5ZxXNwTLdHDUw7NO4BY@W?GhsznTShOU=po%aP#Ll~WFDwd3RGtvs9g$l z-#pN;6zG#_paiTU+AL7MCD019KwB+=wwMKSS^^!OYM@Y>7@(RQpEnWg;I$=C52Zx- z^j*$5-cwJAK2V8U`T-?Gx}O))gKE5Dqq|=e+j;1IQ=|(tk9Qu@L!2R-1g@hSSBWEs zYQA_p?I%hP=$K#eZv+zld%1Lg(img9<2y^$fv#a9E~x^o#Z;_T0Se=>F`!OnSp)6C zWbCv8iebIoCpK|2kKD!t@dt+IHUmA+1x)JE88RZzL%Ib5Q| z7$&G>f6kpmOK0P-oJ-}tSx8)5H%Lu0)^dy0UZ#?IhBE20)_qm2+-b{He{kn-L4GOIhB(- zlPAJu?@+=?5ia{~GIW6orFqt+1XLl-^#$rcb}B6^v_s+hSUHE|{_3Hx&?0Url*Jb8 zQk-yZE2uORZv~Xk8%5*LAVCV}qM}M4c`~3_Mm4Net6<<#l)lbneD!qI-ovG5VMiz@ z*$bvZbHhDGjBLnG1z_?!sKtegS~>$T`6uLaXdxesZi5Cq9kstzw#z6`smfNm%NWih zLRAvu8e>4KR7=NYBREa!wJen%(~dLB5}o3DRFHQ9iD8|ciwI~gZ#}vXQb{JUT+zm9 zB$_O$`0Q0OB6a=H@3ZXmKwAn1sN=u;J|NH{a=5=@R*RMEjv`K;PnFo>|+FdXY wbVLet&^%B&&lwlAXQT#yMhOB1fo3YuFU0)zMLKxvdjJ3c07*qoM6N<$f_WFC82|tP 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!ia0vp^9w5xY1|&n@Zgyv2U=;CmaSW-r_4c+eSF?dYTVnV( zzPFM~<1Wi*eARL)H18FduD4|4eV6-<`RbEwRva|YJhMjOHY1}#0|OHWh(itB#!Kt zsJ;ZW5NPX9##v|UJ#WYV;%SId4VcRqu#_b#D%btEg}$(P;kw)d&B1eium9}5wMxhT z(k0(pNBb9jYQA&q`YIno^FAd8h`R-jA7WI37{^$$sfIDMgvs~OysRU@U}Ere^>bP0 Hl+XkKAS-p1 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!ia0vp^9w5xY1|&n@Zgyv2U}E%iaSW-r_4c-{_hAPK_77cB zfdz%1Qwz#OWbWQ|E#WEQ6WibLfL*}8!TH&)@5~+Ew>!2e^!Yt{5)#klDmVXusQ2s% zyH79OEAyZI-{aQZ@^77I*{u`^WcB11U|>;TVB~OMU=nC}@~Du>Z}R2EpF-vf7iP^_ zx~Rd-vOnbCtFFxwte<2KN`|@5IVlm~@b2nL&jrhx9dai-*s?e7^I_T<1=5XV5IWOi z@uT`MKFj$GUh9-Mipx7pF16e?U%=si>FG#`+vmBSpHyAoQG8cA-8R+Vn(fy_Q3u|0 zHp|!T$UAWJ{Eg}HWedd5&DwEn(q1 zuisj{|76#es%L8^-O5;yXFp5wLg}%uenHo2I}X3%iTRbv*!8>T%z`Jbhi)aGGM_4S zi|@<1o746@lX;$&@>cYz{O!=U?!m0T9?E3MyqH&fJW|DY^I5IG8LJ$g&tkvzC}+Y= z#)A813)+61x?!R!e~Zba$~Yr9004R> z004l5008;`004mK004C`008P>0026e000+ooVrmw00002VoOIv0RM-N%)bBt010qN zS#tmY3ljhU3ljkVnw%H_00ePKL_t(|+U=WNY*a-QfV*4TDlG(JXqQ@kO2Zo@2nYd6 zi4|ffAvBn%sYmMXSn{@=n&0Rl9}+vQra+)HeOE9l}RN{3_gD22G809d@{`JO}0@K|FwwY*vL@| zpU}0Ho5Oyuu>~mPzK7WXPEtXXD*nJ$?(rH?Dmcl2r^79>132ho`Zt0SKTY*E0P`7Q z1#}8 zB;n&U8)$Epr)1dQDR=6W>`BK02AJnEPE8+AqieY$`V}$Udeg zah&@t3tK>P5wc@wwyyXnQ>!z&+=badSi+Miqq65ty zgZ^hes?h6zkLuuB5pJ2MN-BVfp534iIl?j`tQI!h`^gN{=cjw~_j4|`-~S~Z{#`fk z56JVli|Kv^r9Ry+0oA$*@U9r(Z8rhR!~hG@{VL)FS1*I!5!N`Jz0F!FXvx3Litt8v j2oM5<03kpK5Y+PsBjmQgU@Z4^aSW-r_4bZq-XQ}4)_}4t z?T(`9xvNtSMrvJgZg`-QDtvv~rBd+|rpC3(e^V9CbZ^k@F<&~Rx2Ic;fkAR@8pwV#f?)<*Abvv)!IrTVv_i^vDA)kdLAMAV z-t(-!IlW*l(D<3v#k4`+GW(^W+82fy-uJ5d847%P3i=odym>x|GAdkg%J}k^8E!Iz z0Lz1Wum1j8d|w_R*3iSyzi(sKm#+vRh7^_!0-J?E9)^Gi-x;Jgzv)3T>45xJcIFr% z<~d3XKAntl$_!hSW2d#8&7Yqs&ZzKuqG`Tu)m82VvhPcMuKekrm8;Sq-(vaW`o&Fl zKX1p?{_3tQl@`9`8T`CdN<48@Wfc3J*!TY|c3eHV6J{fjhKCV^sgS>q(LOZta`v&U QCqb$_UHx3vIVCg!02_LcyZ`_I 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!ia0vp^2_VeD1|%QND7Ro>VA|*D;uunK>+Rixe!`A2$3G@{ zIOP3cskk)5gyo|s&#PdQl@C)YS|1rRMDm%w3|`UMXfp4sMoX23K0}qF*95-*o!pAK z<+tbFoICer-T#yCt#1FV&-ib>t6sO-Ja-gekXJ1h?)#i~YU?@Ge%)E~zuSC} zOSrXKWNyZxs9*nh@{2O+=6ybp-C#fIxn$qc^*ww+*Q)0yfBrm+J&xIgw{Q7;UHju} zzE&PeTfL_8fv&^tMVkJq``@oEo%JyF%vYNaLJ!I|r(T}Idvbrp=C6wmJiC34`8`9M zd9>NhNjX*-`_9^Y;8MukEb8U+tTCKnZNuz*EB-xfN#F1@@)={k=d>7b*l*@J&>KDZ^vT|6{};tcvO5_%fYjR^3>UU%$X|Fp z@sjPz-3$-JzCF&qzGV6`hF{7Gu~l{9?WaEQs?W~-ne@j;BIHkMdU)iX+tZK#cmLvZ zL4J*GpZ?)h1uH8>`0wn>{r|(zw9b>C0hpXv7#KL9i7G_h{CV@IV;8O;1iQi0)z4*} HQ$iB}GI>8r 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!ia0vp^2_VeD1|%QND7Ro>U@Z4^aSW-r_4bZq-XQ}4)_}4t z?T(`9xvNtSMrvJgZg`-QDtvv~rBd+|rpC3(e^V9CbZ^k@F<&~Rx2Ic;fkAR@8pwV#f?)<*Abvv)!IrTVv_i^vDA)kdLAMAV z-t(-!IlW*l(D<3v#k4`+GW(^W+82fy-uJ5d847%P3i=odym>x|GAdkg%J}k^8E!Iz z0Lz1Wum1j8d|w_R*3iSyzi(sKm#+vRh7^_!0-J?E9)^Gi-x;Jgzv)3T>45xJcIFr% z<~d3XKAntl$_!hSW2d#8&7Yqs&ZzKuqG`Tu)m82VvhPcMuKekrm8;Sq-(vaW`o&Fl zKX1p?{_3tQl@`9`8T`CdN<48@Wfc3J*!TY|c3eHV6J{fjhKCV^sgS>q(LOZta`v&U QCqb$_UHx3vIVCg!02_LcyZ`_I 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!ia0vp^2_VeD1|%QND7Ro>VA|*D;uunK>+Rixe!`A2$3G@{ zIOP3cskk)5gyo|s&#PdQl@C)YS|1rRMDm%w3|`UMXfp4sMoX23K0}qF*95-*o!pAK z<+tbFoICer-T#yCt#1FV&-ib>t6sO-Ja-gekXJ1h?)#i~YU?@Ge%)E~zuSC} zOSrXKWNyZxs9*nh@{2O+=6ybp-C#fIxn$qc^*ww+*Q)0yfBrm+J&xIgw{Q7;UHju} zzE&PeTfL_8fv&^tMVkJq``@oEo%JyF%vYNaLJ!I|r(T}Idvbrp=C6wmJiC34`8`9M zd9>NhNjX*-`_9^Y;8MukEb8U+tTCKnZNuz*EB-xfN#F1@@)={k=d>7b*l*@J&>KDZ^vT|6{};tcvO5_%fYjR^3>UU%$X|Fp z@sjPz-3$-JzCF&qzGV6`hF{7Gu~l{9?WaEQs?W~-ne@j;BIHkMdU)iX+tZK#cmLvZ zL4J*GpZ?)h1uH8>`0wn>{r|(zw9b>C0hpXv7#KL9i7G_h{CV@IV;8O;1iQi0)z4*} HQ$iB}GI>8r 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 zcmV;(2sihMP)G0000P&NklrVMn5aWc@&Elg(y z3`{nIA$HIXAwDd_4PnHE&7mF62P7zh>=$K|=Yfehm9a`KR0b!iN~&|MKWjFAAky9*ockpQ|Y#fFC^fbPn$;ROkxyKUI;mITnoz2IVMG`<~Ph-n-59^p%Az5o9qA7a}xuJuE29#ihy*=5%mRj>`rH%_ z;98~D%h6y;IYiIe7#)oOe+*R6UtZ_Ss9tvyYiS~t?NJCY1szq)XHX9> zJU^uopBgCX;l(JMVk*&bm+t_Xe1xt>)-b-?HJ^8gf_ErDeYP8Ukp^^C)6Z{!c?4C# zTn3_;!T*SgdS;;*z#Pg6YN5{nL-~|+)U%7I*-ahks3X^3fHFY5;48ow+5yqQ4SoXr z1pp9xd<2+==<);C0j{71(d7hLZUa1w=x(vg0D06Sx@+VrcLCNQF16lOfUnVsxKxsf zZUVfE=-J<01el5F-H&Vsi19JK6Q{_w8(;~ki6?Ca7(o-Mi3ElA0&Jvj;tg8?CXqzw zm~10J2Ky0us>n1SU=BjxPfQ2M;S56GrwlP0UWqe2{ zQSpq)0N2ohe{F1L27^&4HiVgMp$-4qxYk^N)%aG+k^pxf4C4vT;oDks0S@3(6N|}4 z1zZllq#2(Mn+xzh{=7+ki1U_P@n^re0FU5Df?`z2mC%A8zc3ddi}!Hv6ys0^Hi1uY zubctq0w`jvCUX3oka>&_OsXZ@dVn0x zV^Rl?`aGmJm9v<$1m$4MFy|~&e4i7}=L5`WBiBiQVYFjLIU}NQQa+2-n6Me;XxlO2 zdHP4^aW!*D5Y`N50cH_aocp8pz@`<1)4^b80fy2^ILlE{3$TuGDo_r0fN)-lUVz<% zQ+8Q>MauT*1*jsN;>+sMm>)(jz)1`DQ`*~9!ufaf0yGd#k<$R92tCjpjY&RM4V4DdLem~@UDl;sVg4wE|gnV$fI z*=+w@m4z+EyiE*p9bhaq*w9P?%Hpmefel9)<1)Z3ny_W7)c`xOz*j0kE zw1==M$y4?ZXbk6FY-?cx%EE4@72EcZXEVU9oW_MuD75hE|6g4A4-;(#D5VWoYRE$w z+;EQLN-M?Y0}NmTZq*q4Ur@wx++VdH)5pdJ63$u}23@oS=@lLM?`K2sS*9x-C%F^Z|o=UEPNk*HXP zG8rJ7(+GVh%|Ec|#|VA1ZCr{dN9fs$vJqe+Nkrc+GQmy&#Rf#*UPjppa5asjCK?!S zFM#54QWKBa{u-+jh~6Eizuf?e>4@Il<>B1CtkuD{g38qwt+WV#KY_zt4W9jNqX;-HV%jPem+G;M%rVU(W$ zil+hb8n&&a;gqQIcdUb)@4AIsO7DiV12T_Y*^LH?>4XEz?j8U=HO3^#ICe zfJ_detDfh%q1&emyNH6FT!s2<<9Lw+xT3HpNuZ zwh-$j*B`Z1s6a!hx0gmx1x1mDq7UI~_#Lc1Ka=gl6%K152C_4fC?+CV3 zq5LoU0k&YvCJCUkmDsXE0_bcWw#=0PI=d5FCQAUF6=2KN5{9-f(;K!0Ns5X8>UDA-4$WO2nnFOOjDo5JxCIKXXOae#%nFNpkvi}1j W#h1@&<)CH&0000 + \ 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 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -