Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Android: XLink Kai Android UI option #10625

Merged
merged 1 commit into from Jul 21, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Expand Up @@ -18,6 +18,8 @@ public enum BooleanSetting implements AbstractBooleanSetting
MAIN_OVERRIDE_REGION_SETTINGS(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE,
"OverrideRegionSettings", false),
MAIN_AUDIO_STRETCH(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "AudioStretch", false),
MAIN_BBA_XLINK_CHAT_OSD(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "BBA_XLINK_CHAT_OSD",
false),
MAIN_ADAPTER_RUMBLE_0(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "AdapterRumble0", true),
MAIN_ADAPTER_RUMBLE_1(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "AdapterRumble1", true),
MAIN_ADAPTER_RUMBLE_2(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "AdapterRumble2", true),
Expand Down
Expand Up @@ -20,6 +20,7 @@ public enum IntSetting implements AbstractIntSetting
MAIN_GC_LANGUAGE(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SelectedLanguage", 0),
MAIN_SLOT_A(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SlotA", 8),
MAIN_SLOT_B(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SlotB", 255),
MAIN_SERIAL_PORT_1(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SerialPort1", 255),
MAIN_FALLBACK_REGION(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "FallbackRegion", 2),
MAIN_SI_DEVICE_0(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SIDevice0", 6),
MAIN_SI_DEVICE_1(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "SIDevice1", 0),
Expand Down Expand Up @@ -77,6 +78,7 @@ public enum IntSetting implements AbstractIntSetting
MAIN_GC_LANGUAGE,
MAIN_SLOT_A, // Can actually be changed, but specific code is required
MAIN_SLOT_B, // Can actually be changed, but specific code is required
MAIN_SERIAL_PORT_1,
MAIN_FALLBACK_REGION,
MAIN_SI_DEVICE_0, // Can actually be changed, but specific code is required
MAIN_SI_DEVICE_1, // Can actually be changed, but specific code is required
Expand Down
Expand Up @@ -13,6 +13,10 @@ public enum StringSetting implements AbstractStringSetting
// These entries have the same names and order as in C++, just for consistency.

MAIN_DEFAULT_ISO(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "DefaultISO", ""),

MAIN_BBA_MAC(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "BBA_MAC", ""),
MAIN_BBA_XLINK_IP(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "BBA_XLINK_IP", ""),

MAIN_GFX_BACKEND(Settings.FILE_DOLPHIN, Settings.SECTION_INI_CORE, "GFXBackend",
NativeLibrary.GetDefaultGraphicsBackendName()),

Expand Down
Expand Up @@ -6,7 +6,7 @@

import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;

public final class HeaderSetting extends SettingsItem
public class HeaderSetting extends SettingsItem
{
public HeaderSetting(Context context, int titleId, int descriptionId)
{
Expand Down
@@ -0,0 +1,19 @@
// SPDX-License-Identifier: GPL-2.0-or-later

package org.dolphinemu.dolphinemu.features.settings.model.view;

import android.content.Context;

public final class HyperLinkHeaderSetting extends HeaderSetting
{
public HyperLinkHeaderSetting(Context context, int titleId, int descriptionId)
{
super(context, titleId, descriptionId);
}

@Override
public int getType()
{
return SettingsItem.TYPE_HYPERLINK_HEADER;
}
}
@@ -0,0 +1,72 @@
// SPDX-License-Identifier: GPL-2.0-or-later

package org.dolphinemu.dolphinemu.features.settings.model.view;

import android.content.Context;

import org.dolphinemu.dolphinemu.features.settings.model.AbstractSetting;
import org.dolphinemu.dolphinemu.features.settings.model.AbstractStringSetting;
import org.dolphinemu.dolphinemu.features.settings.model.Settings;
import org.dolphinemu.dolphinemu.features.settings.ui.MenuTag;

public class InputStringSetting extends SettingsItem
{
private AbstractStringSetting mSetting;

private MenuTag mMenuTag;

public InputStringSetting(Context context, AbstractStringSetting setting, int titleId,
int descriptionId, MenuTag menuTag)
{
super(context, titleId, descriptionId);
mSetting = setting;
mMenuTag = menuTag;
}

public InputStringSetting(Context context, AbstractStringSetting setting, int titleId,
int descriptionId)
{
this(context, setting, titleId, descriptionId, null);
}

public InputStringSetting(Context context, AbstractStringSetting setting, int titleId,
int descriptionId, int choicesId, int valuesId, MenuTag menuTag)
{
super(context, titleId, descriptionId);
mSetting = setting;
mMenuTag = menuTag;
}

public InputStringSetting(Context context, AbstractStringSetting setting, int titleId,
int descriptionId, int choicesId, int valuesId)
{
this(context, setting, titleId, descriptionId, choicesId, valuesId, null);
}

public String getSelectedValue(Settings settings)
{
return mSetting.getString(settings);
}

public MenuTag getMenuTag()
{
return mMenuTag;
}

public void setSelectedValue(Settings settings, String selection)
{
mSetting.setString(settings, selection);
}

@Override
public int getType()
{
return TYPE_STRING;
}

@Override
public AbstractSetting getSetting()
{
return mSetting;
}
}
Expand Up @@ -27,6 +27,8 @@ public abstract class SettingsItem
public static final int TYPE_SINGLE_CHOICE_DYNAMIC_DESCRIPTIONS = 8;
public static final int TYPE_FILE_PICKER = 9;
public static final int TYPE_RUN_RUNNABLE = 10;
public static final int TYPE_STRING = 11;
public static final int TYPE_HYPERLINK_HEADER = 12;

private final CharSequence mName;
private final CharSequence mDescription;
Expand Down
Expand Up @@ -13,6 +13,7 @@ public enum MenuTag
CONFIG_AUDIO("config_audio"),
CONFIG_PATHS("config_paths"),
CONFIG_GAME_CUBE("config_gamecube"),
CONFIG_SERIALPORT1("config_serialport1"),
CONFIG_WII("config_wii"),
CONFIG_ADVANCED("config_advanced"),
CONFIG_LOG("config_log"),
Expand Down Expand Up @@ -74,6 +75,11 @@ public int getSubType()
return subType;
}

public boolean isSerialPort1Menu()
{
return this == CONFIG_SERIALPORT1;
}

public boolean isGCPadMenu()
{
return this == GCPAD_1 || this == GCPAD_2 || this == GCPAD_3 || this == GCPAD_4;
Expand Down
Expand Up @@ -277,6 +277,12 @@ public void onSettingChanged()
mPresenter.onSettingChanged();
}

@Override
public void onSerialPort1SettingChanged(MenuTag menuTag, int value)
{
mPresenter.onSerialPort1SettingChanged(menuTag, value);
}

@Override
public void onGcPadSettingChanged(MenuTag key, int value)
{
Expand Down
Expand Up @@ -135,6 +135,16 @@ public boolean shouldSave()
return mShouldSave;
}

public void onSerialPort1SettingChanged(MenuTag key, int value)
{
if (value != 0 && value != 255) // Not disabled or dummy
{
Bundle bundle = new Bundle();
bundle.putInt(SettingsFragmentPresenter.ARG_SERIALPORT1_TYPE, value);
mView.showSettingsFragment(key, bundle, true, mGameId);
}
}

public void onGcPadSettingChanged(MenuTag key, int value)
{
if (value != 0) // Not disabled
Expand Down
Expand Up @@ -58,6 +58,15 @@ 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.
Expand Down
Expand Up @@ -10,6 +10,7 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.EditText;
import android.widget.SeekBar;
import android.widget.TextView;

Expand All @@ -29,12 +30,15 @@
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.InputStringSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.StringSingleChoiceSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.SubmenuSetting;
import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.CheckBoxSettingViewHolder;
import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.FilePickerViewHolder;
import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.HeaderHyperLinkViewHolder;
import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.HeaderViewHolder;
import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.InputBindingSettingViewHolder;
import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.InputStringSettingViewHolder;
import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.RumbleBindingViewHolder;
import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.RunRunnableViewHolder;
import org.dolphinemu.dolphinemu.features.settings.ui.viewholder.SettingViewHolder;
Expand Down Expand Up @@ -119,6 +123,14 @@ public SettingViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
view = inflater.inflate(R.layout.list_item_setting, parent, false);
return new RunRunnableViewHolder(view, this, mContext);

case SettingsItem.TYPE_STRING:
view = inflater.inflate(R.layout.list_item_setting, parent, false);
return new InputStringSettingViewHolder(view, this);

case SettingsItem.TYPE_HYPERLINK_HEADER:
view = inflater.inflate(R.layout.list_item_header, parent, false);
return new HeaderHyperLinkViewHolder(view, this, mContext);

default:
throw new IllegalArgumentException("Invalid view type: " + viewType);
}
Expand Down Expand Up @@ -188,6 +200,34 @@ public void onBooleanClick(CheckBoxSetting item, int position, boolean checked)
mView.onSettingChanged();
}

public void onInputStringClick(InputStringSetting item, int position)
{
LayoutInflater inflater = LayoutInflater.from(mContext);

AlertDialog.Builder builder = new AlertDialog.Builder(mContext, R.style.DolphinDialogBase);
View dialogView = inflater.inflate(R.layout.dialog_input_string, null);
EditText input = (EditText) dialogView.findViewById(R.id.input);
input.setText(item.getSelectedValue(getSettings()));

builder.setView(dialogView);
builder.setMessage(item.getDescription());
builder.setPositiveButton(R.string.ok, (dialogInterface, i) ->
{
String editTextInput = input.getText().toString();

if (!item.getSelectedValue(mView.getSettings()).equals(editTextInput))
{
notifyItemChanged(position);
mView.onSettingChanged();
}

item.setSelectedValue(mView.getSettings(), editTextInput);
});
builder.setNegativeButton(R.string.cancel, null);

mDialog = builder.show();
}

public void onSingleChoiceClick(SingleChoiceSetting item, int position)
{
mClickedItem = item;
Expand Down Expand Up @@ -364,6 +404,11 @@ private void handleMenuTag(MenuTag menuTag, int value)
{
if (menuTag != null)
{
if (menuTag.isSerialPort1Menu())
{
mView.onSerialPort1SettingChanged(menuTag, value);
}

if (menuTag.isGCPadMenu())
{
mView.onGcPadSettingChanged(menuTag, value);
Expand Down
Expand Up @@ -44,6 +44,7 @@ public final class SettingsFragment extends Fragment implements SettingsFragment
titles.put(MenuTag.CONFIG_AUDIO, R.string.audio_submenu);
titles.put(MenuTag.CONFIG_PATHS, R.string.paths_submenu);
titles.put(MenuTag.CONFIG_GAME_CUBE, R.string.gamecube_submenu);
titles.put(MenuTag.CONFIG_SERIALPORT1, R.string.serialport1_submenu);
titles.put(MenuTag.CONFIG_WII, R.string.wii_submenu);
titles.put(MenuTag.CONFIG_ADVANCED, R.string.advanced_submenu);
titles.put(MenuTag.DEBUG, R.string.debug_submenu);
Expand Down Expand Up @@ -202,6 +203,12 @@ public void onSettingChanged()
mActivity.onSettingChanged();
}

@Override
public void onSerialPort1SettingChanged(MenuTag menuTag, int value)
{
mActivity.onSerialPort1SettingChanged(menuTag, value);
}

@Override
public void onGcPadSettingChanged(MenuTag menuTag, int value)
{
Expand Down
Expand Up @@ -25,7 +25,9 @@
import org.dolphinemu.dolphinemu.features.settings.model.view.CheckBoxSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.FilePicker;
import org.dolphinemu.dolphinemu.features.settings.model.view.HeaderSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.HyperLinkHeaderSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.InputBindingSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.InputStringSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.IntSliderSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.InvertedCheckBoxSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.LogCheckBoxSetting;
Expand Down Expand Up @@ -54,12 +56,14 @@ public final class SettingsFragmentPresenter
NativeLibrary.GetLogTypeNames();

public static final String ARG_CONTROLLER_TYPE = "controller_type";
public static final String ARG_SERIALPORT1_TYPE = "serialport1_type";
private MenuTag mMenuTag;
private String mGameID;

private Settings mSettings;
private ArrayList<SettingsItem> mSettingsList;

private int mSerialPort1Type;
private int mControllerNumber;
private int mControllerType;

Expand All @@ -83,6 +87,10 @@ else if (menuTag.isWiimoteMenu())
{
mControllerNumber = menuTag.getSubType();
}
else if (menuTag.isSerialPort1Menu())
{
mSerialPort1Type = extras.getInt(ARG_SERIALPORT1_TYPE);
}
}

public void onViewCreated(MenuTag menuTag, Settings settings)
Expand Down Expand Up @@ -167,6 +175,10 @@ private void loadSettingsList()
addGraphicsSettings(sl);
break;

case CONFIG_SERIALPORT1:
addSerialPortSubSettings(sl, mSerialPort1Type);
break;

case GCPAD_TYPE:
addGcPadSettings(sl);
break;
Expand Down Expand Up @@ -425,6 +437,10 @@ private void addGameCubeSettings(ArrayList<SettingsItem> sl)
R.array.slotDeviceEntries, R.array.slotDeviceValues));
sl.add(new SingleChoiceSetting(mContext, IntSetting.MAIN_SLOT_B, R.string.slot_b_device, 0,
R.array.slotDeviceEntries, R.array.slotDeviceValues));
sl.add(new SingleChoiceSetting(mContext, IntSetting.MAIN_SERIAL_PORT_1,
R.string.serial_port_1_device, 0,
R.array.serialPort1DeviceEntries, R.array.serialPort1DeviceValues,
MenuTag.CONFIG_SERIALPORT1));
}

private void addWiiSettings(ArrayList<SettingsItem> sl)
Expand Down Expand Up @@ -559,6 +575,16 @@ else if (defaultCpuCore == 4) // AArch64
R.array.synchronizeGpuThreadValues));
}

private void addSerialPortSubSettings(ArrayList<SettingsItem> sl, int serialPort1Type)
{
if (serialPort1Type == 10) // XLink Kai
{
sl.add(new HyperLinkHeaderSetting(mContext, R.string.xlink_kai_guide_header, 0));
sl.add(new InputStringSetting(mContext, StringSetting.MAIN_BBA_XLINK_IP,
R.string.xlink_kai_bba_ip, R.string.xlink_kai_bba_ip_description));
}
}

private void addGcPadSettings(ArrayList<SettingsItem> sl)
{
sl.add(new SingleChoiceSetting(mContext, IntSetting.MAIN_SI_DEVICE_0, R.string.controller_0, 0,
Expand Down