summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java
diff options
context:
space:
mode:
authorAnthony <Helios747@users.noreply.github.com>2019-09-01 12:16:38 -0700
committerGitHub <noreply@github.com>2019-09-01 12:16:38 -0700
commitecef374cd881759b2c2fbd0ef912e130e10e3b97 (patch)
treee17d53e194fcdb5b750449706a328afd8f1da320 /Source/Android/app/src/main/java
parentb0a5a9f7c5a9117c80a3cb987d2b53687fbd3e37 (diff)
parent7d98c4f3a48c455e0072937729ef6c570a59c6c5 (diff)
Merge pull request #7810 from Ebola16/GFXUI
Android: Graphic setting description improvements
Diffstat (limited to 'Source/Android/app/src/main/java')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java1
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSettingDynamicDescriptions.java106
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java78
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java14
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SingleChoiceViewHolder.java22
5 files changed, 215 insertions, 6 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java
index 48df22fc45..944d7f1491 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SettingsItem.java
@@ -20,6 +20,7 @@ public abstract class SettingsItem
public static final int TYPE_INPUT_BINDING = 5;
public static final int TYPE_STRING_SINGLE_CHOICE = 6;
public static final int TYPE_RUMBLE_BINDING = 7;
+ public static final int TYPE_SINGLE_CHOICE_DYNAMIC_DESCRIPTIONS = 8;
private String mKey;
private String mSection;
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSettingDynamicDescriptions.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSettingDynamicDescriptions.java
new file mode 100644
index 0000000000..b5d6e605b6
--- /dev/null
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/model/view/SingleChoiceSettingDynamicDescriptions.java
@@ -0,0 +1,106 @@
+package org.dolphinemu.dolphinemu.features.settings.model.view;
+
+import org.dolphinemu.dolphinemu.features.settings.model.IntSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.Setting;
+import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag;
+
+public final class SingleChoiceSettingDynamicDescriptions extends SettingsItem
+{
+ private int mDefaultValue;
+
+ private int mChoicesId;
+ private int mValuesId;
+ private int mDescriptionChoicesId;
+ private int mDescriptionValuesId;
+ private MenuTag menuTag;
+
+ public SingleChoiceSettingDynamicDescriptions(String key, String section, int titleId,
+ int descriptionId,
+ int choicesId, int valuesId, int descriptionChoicesId, int descriptionValuesId,
+ int defaultValue, Setting setting, MenuTag menuTag)
+ {
+ super(key, section, setting, titleId, descriptionId);
+ mValuesId = valuesId;
+ mChoicesId = choicesId;
+ mDescriptionChoicesId = descriptionChoicesId;
+ mDescriptionValuesId = descriptionValuesId;
+ mDefaultValue = defaultValue;
+ this.menuTag = menuTag;
+ }
+
+ public SingleChoiceSettingDynamicDescriptions(String key, String section, int titleId,
+ int descriptionId,
+ int choicesId, int valuesId, int descriptionChoicesId, int descriptionValuesId,
+ int defaultValue, Setting setting)
+ {
+ this(key, section, titleId, descriptionId, choicesId, valuesId, descriptionChoicesId,
+ descriptionValuesId, defaultValue, setting, null);
+ }
+
+ public int getChoicesId()
+ {
+ return mChoicesId;
+ }
+
+ public int getValuesId()
+ {
+ return mValuesId;
+ }
+
+ public int getDescriptionChoicesId()
+ {
+ return mDescriptionChoicesId;
+ }
+
+ public int getDescriptionValuesId()
+ {
+ return mDescriptionValuesId;
+ }
+
+ public int getSelectedValue()
+ {
+ if (getSetting() != null)
+ {
+ IntSetting setting = (IntSetting) getSetting();
+ return setting.getValue();
+ }
+ else
+ {
+ return mDefaultValue;
+ }
+ }
+
+ public MenuTag getMenuTag()
+ {
+ return menuTag;
+ }
+
+ /**
+ * Write a value to the backing int. If that int was previously null,
+ * initializes a new one and returns it, so it can be added to the Hashmap.
+ *
+ * @param selection New value of the int.
+ * @return null if overwritten successfully otherwise; a newly created IntSetting.
+ */
+ public IntSetting setSelectedValue(int selection)
+ {
+ if (getSetting() == null)
+ {
+ IntSetting setting = new IntSetting(getKey(), getSection(), selection);
+ setSetting(setting);
+ return setting;
+ }
+ else
+ {
+ IntSetting setting = (IntSetting) getSetting();
+ setting.setValue(selection);
+ return null;
+ }
+ }
+
+ @Override
+ public int getType()
+ {
+ return TYPE_SINGLE_CHOICE_DYNAMIC_DESCRIPTIONS;
+ }
+}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java
index 4e128ece86..a4ce9ce7a8 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java
@@ -24,6 +24,7 @@ import org.dolphinemu.dolphinemu.features.settings.model.view.InputBindingSettin
import org.dolphinemu.dolphinemu.features.settings.model.view.RumbleBindingSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem;
import org.dolphinemu.dolphinemu.features.settings.model.view.SingleChoiceSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.view.SingleChoiceSettingDynamicDescriptions;
import org.dolphinemu.dolphinemu.features.settings.model.view.SliderSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.StringSingleChoiceSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.SubmenuSetting;
@@ -78,6 +79,7 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
return new CheckBoxSettingViewHolder(view, this);
case SettingsItem.TYPE_STRING_SINGLE_CHOICE:
+ case SettingsItem.TYPE_SINGLE_CHOICE_DYNAMIC_DESCRIPTIONS:
case SettingsItem.TYPE_SINGLE_CHOICE:
view = inflater.inflate(R.layout.list_item_setting, parent, false);
return new SingleChoiceViewHolder(view, this);
@@ -187,6 +189,22 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
mDialog = builder.show();
}
+ public void onSingleChoiceDynamicDescriptionsClick(SingleChoiceSettingDynamicDescriptions item,
+ int position)
+ {
+ mClickedItem = item;
+ mClickedPosition = position;
+
+ int value = getSelectionForSingleChoiceDynamicDescriptionsValue(item);
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(mView.getActivity());
+
+ builder.setTitle(item.getNameId());
+ builder.setSingleChoiceItems(item.getChoicesId(), value, this);
+
+ mDialog = builder.show();
+ }
+
public void onSliderClick(SliderSetting item, int position)
{
mClickedItem = item;
@@ -312,6 +330,24 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
closeDialog();
}
+ else if (mClickedItem instanceof SingleChoiceSettingDynamicDescriptions)
+ {
+ SingleChoiceSettingDynamicDescriptions scSetting =
+ (SingleChoiceSettingDynamicDescriptions) mClickedItem;
+
+ int value = getValueForSingleChoiceDynamicDescriptionsSelection(scSetting, which);
+ if (scSetting.getSelectedValue() != value)
+ mView.onSettingChanged();
+
+ // Get the backing Setting, which may be null (if for example it was missing from the file)
+ IntSetting setting = scSetting.setSelectedValue(value);
+ if (setting != null)
+ {
+ mView.putSetting(setting);
+ }
+
+ closeDialog();
+ }
else if (mClickedItem instanceof StringSingleChoiceSetting)
{
StringSingleChoiceSetting scSetting = (StringSingleChoiceSetting) mClickedItem;
@@ -439,6 +475,48 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
return -1;
}
+ private int getValueForSingleChoiceDynamicDescriptionsSelection(
+ SingleChoiceSettingDynamicDescriptions item, int which)
+ {
+ int valuesId = item.getValuesId();
+
+ if (valuesId > 0)
+ {
+ int[] valuesArray = mContext.getResources().getIntArray(valuesId);
+ return valuesArray[which];
+ }
+ else
+ {
+ return which;
+ }
+ }
+
+ private int getSelectionForSingleChoiceDynamicDescriptionsValue(
+ SingleChoiceSettingDynamicDescriptions item)
+ {
+ int value = item.getSelectedValue();
+ int valuesId = item.getValuesId();
+
+ if (valuesId > 0)
+ {
+ int[] valuesArray = mContext.getResources().getIntArray(valuesId);
+ for (int index = 0; index < valuesArray.length; index++)
+ {
+ int current = valuesArray[index];
+ if (current == value)
+ {
+ return index;
+ }
+ }
+ }
+ else
+ {
+ return value;
+ }
+
+ return -1;
+ }
+
private void putVideoBackendSetting(int which)
{
StringSetting gfxBackend = null;
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java
index a9d0868e81..83817cae95 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentPresenter.java
@@ -18,6 +18,7 @@ import org.dolphinemu.dolphinemu.features.settings.model.view.InputBindingSettin
import org.dolphinemu.dolphinemu.features.settings.model.view.RumbleBindingSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem;
import org.dolphinemu.dolphinemu.features.settings.model.view.SingleChoiceSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.view.SingleChoiceSettingDynamicDescriptions;
import org.dolphinemu.dolphinemu.features.settings.model.view.SliderSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.StringSingleChoiceSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.SubmenuSetting;
@@ -418,15 +419,16 @@ public final class SettingsFragmentPresenter
R.array.videoBackendValues, 0, videoBackend));
sl.add(new CheckBoxSetting(SettingsFile.KEY_SHOW_FPS, Settings.SECTION_GFX_SETTINGS,
R.string.show_fps, R.string.show_fps_description, false, showFps));
- sl.add(new SingleChoiceSetting(SettingsFile.KEY_SHADER_COMPILATION_MODE,
- Settings.SECTION_GFX_SETTINGS, R.string.shader_compilation_mode,
- R.string.shader_compilation_mode_description, R.array.shaderCompilationModeEntries,
- R.array.shaderCompilationModeValues, 0, shaderCompilationMode));
+ sl.add(new SingleChoiceSettingDynamicDescriptions(SettingsFile.KEY_SHADER_COMPILATION_MODE,
+ Settings.SECTION_GFX_SETTINGS, R.string.shader_compilation_mode, 0,
+ R.array.shaderCompilationModeEntries,
+ R.array.shaderCompilationModeValues, R.array.shaderCompilationDescriptionEntries,
+ R.array.shaderCompilationDescriptionValues, 0, shaderCompilationMode));
sl.add(new CheckBoxSetting(SettingsFile.KEY_WAIT_FOR_SHADERS, Settings.SECTION_GFX_SETTINGS,
R.string.wait_for_shaders, R.string.wait_for_shaders_description, false,
waitForShaders));
sl.add(new SingleChoiceSetting(SettingsFile.KEY_ASPECT_RATIO, Settings.SECTION_GFX_SETTINGS,
- R.string.aspect_ratio, R.string.aspect_ratio_description, R.array.aspectRatioEntries,
+ R.string.aspect_ratio, 0, R.array.aspectRatioEntries,
R.array.aspectRatioValues, 0, aspectRatio));
sl.add(new HeaderSetting(null, null, R.string.graphics_enhancements_and_hacks, 0));
@@ -682,7 +684,7 @@ public final class SettingsFragmentPresenter
Setting swapEyes = stereoScopySection.getSetting(SettingsFile.KEY_STEREO_SWAP);
sl.add(new SingleChoiceSetting(SettingsFile.KEY_STEREO_MODE, Settings.SECTION_STEREOSCOPY,
- R.string.stereoscopy_mode, R.string.stereoscopy_mode_description,
+ R.string.stereoscopy_mode, 0,
R.array.stereoscopyEntries, R.array.stereoscopyValues, 0, stereoModeValue));
sl.add(new SliderSetting(SettingsFile.KEY_STEREO_DEPTH, Settings.SECTION_STEREOSCOPY,
R.string.stereoscopy_depth, R.string.stereoscopy_depth_description, 100, "%", 20,
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SingleChoiceViewHolder.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SingleChoiceViewHolder.java
index 6de38a4b1f..78db2c09ff 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SingleChoiceViewHolder.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SingleChoiceViewHolder.java
@@ -7,6 +7,7 @@ import android.widget.TextView;
import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem;
import org.dolphinemu.dolphinemu.features.settings.model.view.SingleChoiceSetting;
+import org.dolphinemu.dolphinemu.features.settings.model.view.SingleChoiceSettingDynamicDescriptions;
import org.dolphinemu.dolphinemu.features.settings.model.view.StringSingleChoiceSetting;
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter;
@@ -63,6 +64,22 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
if (valueIndex != -1)
mTextSettingDescription.setText(choices[valueIndex]);
}
+ else if (item instanceof SingleChoiceSettingDynamicDescriptions)
+ {
+ SingleChoiceSettingDynamicDescriptions setting =
+ (SingleChoiceSettingDynamicDescriptions) item;
+ int selected = setting.getSelectedValue();
+ Resources resMgr = mTextSettingDescription.getContext().getResources();
+ String[] choices = resMgr.getStringArray(setting.getDescriptionChoicesId());
+ int[] values = resMgr.getIntArray(setting.getDescriptionValuesId());
+ for (int i = 0; i < values.length; ++i)
+ {
+ if (values[i] == selected)
+ {
+ mTextSettingDescription.setText(choices[i]);
+ }
+ }
+ }
}
@Override
@@ -77,5 +94,10 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
{
getAdapter().onStringSingleChoiceClick((StringSingleChoiceSetting) mItem, position);
}
+ else if (mItem instanceof SingleChoiceSettingDynamicDescriptions)
+ {
+ getAdapter().onSingleChoiceDynamicDescriptionsClick(
+ (SingleChoiceSettingDynamicDescriptions) mItem, position);
+ }
}
}