summaryrefslogtreecommitdiff
path: root/Source/Android/app/src/main/java/org
diff options
context:
space:
mode:
authorMai <mai.iam2048@gmail.com>2023-03-02 15:06:47 -0500
committerGitHub <noreply@github.com>2023-03-02 15:06:47 -0500
commit6fcec80eb0067e720a665644e89ccd741ff365c5 (patch)
tree596a86ec490a7fcec99ff1414ec80d9d3844cc5c /Source/Android/app/src/main/java/org
parentcbbc518bc45ab2f9a9f97b14be89d944c6f2bdf0 (diff)
parent96deb2d8971fd5c9d0644bc0fae9155334c76153 (diff)
Merge pull request #11605 from JosJuice/android-mappings-button
Android: Add a button for accessing controller mappings
Diffstat (limited to 'Source/Android/app/src/main/java/org')
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java20
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityPresenter.java75
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java40
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsAdapter.java32
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java21
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java36
-rw-r--r--Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/viewholder/SingleChoiceViewHolder.java43
7 files changed, 126 insertions, 141 deletions
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java
index 17e53da132..2af17e2d2f 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivity.java
@@ -305,27 +305,15 @@ public final class SettingsActivity extends AppCompatActivity implements Setting
}
@Override
- public void onSerialPort1SettingChanged(MenuTag menuTag, int value)
+ public void onMenuTagAction(@NonNull MenuTag menuTag, int value)
{
- mPresenter.onSerialPort1SettingChanged(menuTag, value);
+ mPresenter.onMenuTagAction(menuTag, value);
}
@Override
- public void onGcPadSettingChanged(MenuTag key, int value)
+ public boolean hasMenuTagActionForValue(@NonNull MenuTag menuTag, int value)
{
- mPresenter.onGcPadSettingChanged(key, value);
- }
-
- @Override
- public void onWiimoteSettingChanged(MenuTag section, int value)
- {
- mPresenter.onWiimoteSettingChanged(section, value);
- }
-
- @Override
- public void onExtensionSettingChanged(MenuTag menuTag, int value)
- {
- mPresenter.onExtensionSettingChanged(menuTag, value);
+ return mPresenter.hasMenuTagActionForValue(menuTag, value);
}
@Override
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityPresenter.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityPresenter.java
index 710342a64e..cc235b9863 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityPresenter.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityPresenter.java
@@ -5,6 +5,7 @@ package org.dolphinemu.dolphinemu.features.settings.ui;
import android.os.Bundle;
import android.text.TextUtils;
+import androidx.annotation.NonNull;
import androidx.core.app.ComponentActivity;
import org.dolphinemu.dolphinemu.R;
@@ -128,47 +129,69 @@ public final class SettingsActivityPresenter
return mShouldSave;
}
- public void onSerialPort1SettingChanged(MenuTag key, int value)
+ public void onMenuTagAction(@NonNull MenuTag menuTag, int value)
{
- if (value != 0 && value != 255) // Not disabled or dummy
+ if (menuTag.isSerialPort1Menu())
{
- Bundle bundle = new Bundle();
- bundle.putInt(SettingsFragmentPresenter.ARG_SERIALPORT1_TYPE, value);
- mView.showSettingsFragment(key, bundle, true, mGameId);
+ if (value != 0 && value != 255) // Not disabled or dummy
+ {
+ Bundle bundle = new Bundle();
+ bundle.putInt(SettingsFragmentPresenter.ARG_SERIALPORT1_TYPE, value);
+ mView.showSettingsFragment(menuTag, bundle, true, mGameId);
+ }
}
- }
- public void onGcPadSettingChanged(MenuTag key, int value)
- {
- if (value != 0) // Not disabled
+ if (menuTag.isGCPadMenu())
{
- Bundle bundle = new Bundle();
- bundle.putInt(SettingsFragmentPresenter.ARG_CONTROLLER_TYPE, value);
- mView.showSettingsFragment(key, bundle, true, mGameId);
+ if (value != 0) // Not disabled
+ {
+ Bundle bundle = new Bundle();
+ bundle.putInt(SettingsFragmentPresenter.ARG_CONTROLLER_TYPE, value);
+ mView.showSettingsFragment(menuTag, bundle, true, mGameId);
+ }
}
- }
- public void onWiimoteSettingChanged(MenuTag menuTag, int value)
- {
- switch (value)
+ if (menuTag.isWiimoteMenu())
{
- case 1:
+ if (value == 1) // Emulated Wii Remote
+ {
mView.showSettingsFragment(menuTag, null, true, mGameId);
- break;
+ }
+ }
- case 2:
- mView.showToastMessage(mActivity.getString(R.string.make_sure_continuous_scan_enabled));
- break;
+ if (menuTag.isWiimoteExtensionMenu())
+ {
+ if (value != 0) // Not disabled
+ {
+ Bundle bundle = new Bundle();
+ bundle.putInt(SettingsFragmentPresenter.ARG_CONTROLLER_TYPE, value);
+ mView.showSettingsFragment(menuTag, bundle, true, mGameId);
+ }
}
}
- public void onExtensionSettingChanged(MenuTag menuTag, int value)
+ public boolean hasMenuTagActionForValue(@NonNull MenuTag menuTag, int value)
{
- if (value != 0) // None
+ if (menuTag.isSerialPort1Menu())
+ {
+ return (value != 0 && value != 255); // Not disabled or dummy
+ }
+
+ if (menuTag.isGCPadMenu())
+ {
+ return (value != 0); // Not disabled
+ }
+
+ if (menuTag.isWiimoteMenu())
+ {
+ return (value == 1); // Emulated Wii Remote
+ }
+
+ if (menuTag.isWiimoteExtensionMenu())
{
- Bundle bundle = new Bundle();
- bundle.putInt(SettingsFragmentPresenter.ARG_CONTROLLER_TYPE, value);
- mView.showSettingsFragment(menuTag, bundle, true, mGameId);
+ return (value != 0); // Not disabled
}
+
+ return false;
}
}
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java
index da14f5c5cb..c835aa4399 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsActivityView.java
@@ -4,6 +4,8 @@ package org.dolphinemu.dolphinemu.features.settings.ui;
import android.os.Bundle;
+import androidx.annotation.NonNull;
+
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
/**
@@ -59,40 +61,22 @@ public interface SettingsActivityView
void onSettingChanged();
/**
- * Called by a containing Fragment to tell the containing Activity that the Serial Port 1 setting
- * was modified.
- *
- * @param menuTag Identifier for the SerialPort that was modified.
- * @param value New setting for the SerialPort.
- */
- void onSerialPort1SettingChanged(MenuTag menuTag, int value);
-
- /**
- * Called by a containing Fragment to tell the containing Activity that a GCPad's setting
- * was modified.
- *
- * @param menuTag Identifier for the GCPad that was modified.
- * @param value New setting for the GCPad.
- */
- void onGcPadSettingChanged(MenuTag menuTag, int value);
-
- /**
- * Called by a containing Fragment to tell the containing Activity that a Wiimote's setting
- * was modified.
+ * Called by a containing Fragment to tell the containing Activity that the user wants to open the
+ * MenuTag associated with a setting.
*
- * @param menuTag Identifier for Wiimote that was modified.
- * @param value New setting for the Wiimote.
+ * @param menuTag The MenuTag of the setting.
+ * @param value The current value of the setting.
*/
- void onWiimoteSettingChanged(MenuTag menuTag, int value);
+ void onMenuTagAction(@NonNull MenuTag menuTag, int value);
/**
- * Called by a containing Fragment to tell the containing Activity that an extension setting
- * was modified.
+ * Returns whether anything will happen when the user wants to open the MenuTag associated with a
+ * setting, given the current value of the setting.
*
- * @param menuTag Identifier for the extension that was modified.
- * @param value New setting for the extension.
+ * @param menuTag The MenuTag of the setting.
+ * @param value The current value of the setting.
*/
- void onExtensionSettingChanged(MenuTag menuTag, int value);
+ boolean hasMenuTagActionForValue(@NonNull MenuTag menuTag, int value);
/**
* Show loading dialog while loading the settings
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 a042e7aaaf..a7f028afe3 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
@@ -467,30 +467,14 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
}
}
- private void handleMenuTag(MenuTag menuTag, int value)
+ public void onMenuTagAction(@NonNull MenuTag menuTag, int value)
{
- if (menuTag != null)
- {
- if (menuTag.isSerialPort1Menu())
- {
- mView.onSerialPort1SettingChanged(menuTag, value);
- }
-
- if (menuTag.isGCPadMenu())
- {
- mView.onGcPadSettingChanged(menuTag, value);
- }
-
- if (menuTag.isWiimoteMenu())
- {
- mView.onWiimoteSettingChanged(menuTag, value);
- }
+ mView.onMenuTagAction(menuTag, value);
+ }
- if (menuTag.isWiimoteExtensionMenu())
- {
- mView.onExtensionSettingChanged(menuTag, value);
- }
- }
+ public boolean hasMenuTagActionForValue(@NonNull MenuTag menuTag, int value)
+ {
+ return mView.hasMenuTagActionForValue(menuTag, value);
}
@Override
@@ -504,8 +488,6 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
if (scSetting.getSelectedValue(getSettings()) != value)
mView.onSettingChanged();
- handleMenuTag(scSetting.getMenuTag(), value);
-
scSetting.setSelectedValue(getSettings(), value);
closeDialog();
@@ -530,8 +512,6 @@ public final class SettingsAdapter extends RecyclerView.Adapter<SettingViewHolde
if (!scSetting.getSelectedValue(getSettings()).equals(value))
mView.onSettingChanged();
- handleMenuTag(scSetting.getMenuTag(), which);
-
scSetting.setSelectedValue(getSettings(), value);
closeDialog();
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java
index b1eef00d7d..00699e3a0c 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragment.java
@@ -226,27 +226,14 @@ public final class SettingsFragment extends Fragment implements SettingsFragment
}
@Override
- public void onSerialPort1SettingChanged(MenuTag menuTag, int value)
+ public void onMenuTagAction(@NonNull MenuTag menuTag, int value)
{
- mActivity.onSerialPort1SettingChanged(menuTag, value);
+ mActivity.onMenuTagAction(menuTag, value);
}
- @Override
- public void onGcPadSettingChanged(MenuTag menuTag, int value)
- {
- mActivity.onGcPadSettingChanged(menuTag, value);
- }
-
- @Override
- public void onWiimoteSettingChanged(MenuTag menuTag, int value)
- {
- mActivity.onWiimoteSettingChanged(menuTag, value);
- }
-
- @Override
- public void onExtensionSettingChanged(MenuTag menuTag, int value)
+ public boolean hasMenuTagActionForValue(@NonNull MenuTag menuTag, int value)
{
- mActivity.onExtensionSettingChanged(menuTag, value);
+ return mActivity.hasMenuTagActionForValue(menuTag, value);
}
private void setInsets()
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java
index e79ef6a859..295ff95abd 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/ui/SettingsFragmentView.java
@@ -2,6 +2,7 @@
package org.dolphinemu.dolphinemu.features.settings.ui;
+import androidx.annotation.NonNull;
import androidx.fragment.app.FragmentActivity;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
@@ -72,35 +73,20 @@ public interface SettingsFragmentView
void onSettingChanged();
/**
- * Called by a containing Fragment to tell the containing Activity that the Serial Port 1 setting
- * was modified.
+ * Have the fragment tell the containing Activity that the user wants to open the MenuTag
+ * associated with a setting.
*
- * @param menuTag Identifier for the SerialPort that was modified.
- * @param value New setting for the SerialPort.
+ * @param menuTag The MenuTag of the setting.
+ * @param value The current value of the setting.
*/
- void onSerialPort1SettingChanged(MenuTag menuTag, int value);
+ void onMenuTagAction(@NonNull MenuTag menuTag, int value);
/**
- * Have the fragment tell the containing Activity that a GCPad's setting was modified.
+ * Returns whether anything will happen when the user wants to open the MenuTag associated with a
+ * setting, given the current value of the setting.
*
- * @param menuTag Identifier for the GCPad that was modified.
- * @param value New setting for the GCPad.
+ * @param menuTag The MenuTag of the setting.
+ * @param value The current value of the setting.
*/
- void onGcPadSettingChanged(MenuTag menuTag, int value);
-
- /**
- * Have the fragment tell the containing Activity that a Wiimote's setting was modified.
- *
- * @param menuTag Identifier for Wiimote that was modified.
- * @param value New setting for the Wiimote.
- */
- void onWiimoteSettingChanged(MenuTag menuTag, int value);
-
- /**
- * Have the fragment tell the containing Activity that an extension setting was modified.
- *
- * @param menuTag Identifier for the extension that was modified.
- * @param value New setting for the extension.
- */
- void onExtensionSettingChanged(MenuTag menuTag, int value);
+ boolean hasMenuTagActionForValue(@NonNull MenuTag menuTag, int value);
}
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 19b174e9b8..db56ebea40 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
@@ -10,12 +10,16 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.dolphinemu.dolphinemu.databinding.ListItemSettingBinding;
+import org.dolphinemu.dolphinemu.features.settings.model.Settings;
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.MenuTag;
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter;
+import java.util.function.Function;
+
public final class SingleChoiceViewHolder extends SettingViewHolder
{
private SettingsItem mItem;
@@ -35,6 +39,9 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
mBinding.textSettingName.setText(item.getName());
+ SettingsAdapter adapter = getAdapter();
+ Settings settings = adapter.getSettings();
+
if (!TextUtils.isEmpty(item.getDescription()))
{
mBinding.textSettingDescription.setText(item.getDescription());
@@ -42,7 +49,7 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
else if (item instanceof SingleChoiceSetting)
{
SingleChoiceSetting setting = (SingleChoiceSetting) item;
- int selected = setting.getSelectedValue(getAdapter().getSettings());
+ int selected = setting.getSelectedValue(settings);
Resources resMgr = mBinding.textSettingDescription.getContext().getResources();
String[] choices = resMgr.getStringArray(setting.getChoicesId());
int[] values = resMgr.getIntArray(setting.getValuesId());
@@ -58,7 +65,7 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
{
StringSingleChoiceSetting setting = (StringSingleChoiceSetting) item;
String[] choices = setting.getChoices();
- int valueIndex = setting.getSelectedValueIndex(getAdapter().getSettings());
+ int valueIndex = setting.getSelectedValueIndex(settings);
if (valueIndex != -1)
mBinding.textSettingDescription.setText(choices[valueIndex]);
}
@@ -66,7 +73,7 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
{
SingleChoiceSettingDynamicDescriptions setting =
(SingleChoiceSettingDynamicDescriptions) item;
- int selected = setting.getSelectedValue(getAdapter().getSettings());
+ int selected = setting.getSelectedValue(settings);
Resources resMgr = mBinding.textSettingDescription.getContext().getResources();
String[] choices = resMgr.getStringArray(setting.getDescriptionChoicesId());
int[] values = resMgr.getIntArray(setting.getDescriptionValuesId());
@@ -79,6 +86,36 @@ public final class SingleChoiceViewHolder extends SettingViewHolder
}
}
+ MenuTag menuTag = null;
+ Function<Settings, Integer> getSelectedValue = null;
+ if (item instanceof SingleChoiceSetting)
+ {
+ SingleChoiceSetting setting = (SingleChoiceSetting) item;
+ menuTag = setting.getMenuTag();
+ getSelectedValue = setting::getSelectedValue;
+ }
+ else if (item instanceof StringSingleChoiceSetting)
+ {
+ StringSingleChoiceSetting setting = (StringSingleChoiceSetting) item;
+ menuTag = setting.getMenuTag();
+ getSelectedValue = setting::getSelectedValueIndex;
+ }
+
+ if (menuTag != null &&
+ adapter.hasMenuTagActionForValue(menuTag, getSelectedValue.apply(settings)))
+ {
+ mBinding.buttonMoreSettings.setVisibility(View.VISIBLE);
+
+ final MenuTag finalMenuTag = menuTag;
+ final Function<Settings, Integer> finalGetSelectedValue = getSelectedValue;
+ mBinding.buttonMoreSettings.setOnClickListener((view) ->
+ adapter.onMenuTagAction(finalMenuTag, finalGetSelectedValue.apply(settings)));
+ }
+ else
+ {
+ mBinding.buttonMoreSettings.setVisibility(View.GONE);
+ }
+
setStyle(mBinding.textSettingName, mItem);
}