diff options
| author | Mai <mai.iam2048@gmail.com> | 2023-03-02 15:06:47 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-03-02 15:06:47 -0500 |
| commit | 6fcec80eb0067e720a665644e89ccd741ff365c5 (patch) | |
| tree | 596a86ec490a7fcec99ff1414ec80d9d3844cc5c /Source/Android/app/src/main/java | |
| parent | cbbc518bc45ab2f9a9f97b14be89d944c6f2bdf0 (diff) | |
| parent | 96deb2d8971fd5c9d0644bc0fae9155334c76153 (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')
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); } |
