@@ -71,6 +71,15 @@
*/
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);

/**
* Have the fragment tell the containing Activity that a GCPad's setting was modified.
*
@@ -0,0 +1,33 @@
// SPDX-License-Identifier: GPL-2.0-or-later

package org.dolphinemu.dolphinemu.features.settings.ui.viewholder;

import android.content.Context;
import android.text.method.LinkMovementMethod;
import android.view.View;

import androidx.core.content.ContextCompat;

import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem;
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter;

public final class HeaderHyperLinkViewHolder extends HeaderViewHolder
{
private Context mContext;

public HeaderHyperLinkViewHolder(View itemView, SettingsAdapter adapter, Context context)
{
super(itemView, adapter);
mContext = context;
itemView.setOnClickListener(null);
}

@Override
public void bind(SettingsItem item)
{
super.bind(item);
mHeaderName.setMovementMethod(LinkMovementMethod.getInstance());
mHeaderName.setLinkTextColor(ContextCompat.getColor(mContext, R.color.dolphin_blue_secondary));
}
}
@@ -11,9 +11,9 @@
import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem;
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter;

public final class HeaderViewHolder extends SettingViewHolder
public class HeaderViewHolder extends SettingViewHolder
{
private TextView mHeaderName;
protected TextView mHeaderName;

public HeaderViewHolder(View itemView, SettingsAdapter adapter)
{
@@ -0,0 +1,77 @@
// SPDX-License-Identifier: GPL-2.0-or-later

package org.dolphinemu.dolphinemu.features.settings.ui.viewholder;

import android.text.TextUtils;
import android.view.View;
import android.widget.TextView;

import androidx.annotation.Nullable;

import org.dolphinemu.dolphinemu.R;
import org.dolphinemu.dolphinemu.features.settings.model.view.InputStringSetting;
import org.dolphinemu.dolphinemu.features.settings.model.view.SettingsItem;
import org.dolphinemu.dolphinemu.features.settings.ui.SettingsAdapter;

public final class InputStringSettingViewHolder extends SettingViewHolder
{
private InputStringSetting mInputString;

private TextView mTextSettingName;
private TextView mTextSettingDescription;

public InputStringSettingViewHolder(View itemView, SettingsAdapter adapter)
{
super(itemView, adapter);
}

@Override
protected void findViews(View root)
{
mTextSettingName = root.findViewById(R.id.text_setting_name);
mTextSettingDescription = root.findViewById(R.id.text_setting_description);
}

@Override
public void bind(SettingsItem item)
{
mInputString = (InputStringSetting) item;

String inputString = mInputString.getSelectedValue(getAdapter().getSettings());

mTextSettingName.setText(item.getName());

if (!TextUtils.isEmpty(inputString))
{
mTextSettingDescription.setText(inputString);
}
else
{
mTextSettingDescription.setText(item.getDescription());
}

setStyle(mTextSettingName, mInputString);
}

@Override
public void onClick(View clicked)
{
if (!mInputString.isEditable())
{
showNotRuntimeEditableError();
return;
}

int position = getAdapterPosition();

getAdapter().onInputStringClick(mInputString, position);

setStyle(mTextSettingName, mInputString);
}

@Nullable @Override
protected SettingsItem getItem()
{
return mInputString;
}
}
@@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">

<EditText
android:id="@+id/input"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginStart="20dp"
android:layout_marginEnd="20dp"
android:ems="10"
android:inputType="text"
android:importantForAutofill="no" />

</LinearLayout>
@@ -97,6 +97,18 @@
<item>8</item>
</integer-array>

<!-- Slot SP1 Device selection -->
<string-array name="serialPort1DeviceEntries" translatable="false">
<item>Nothing</item>
<item>Dummy</item>
<item>Broadband Adapter (XLink Kai)</item>
</string-array>
<integer-array name="serialPort1DeviceValues" translatable="false">
<item>255</item>
<item>0</item>
<item>10</item>
</integer-array>

<!-- GameCube System Languages -->
<string-array name="wiiSystemLanguageEntries">
<item>Japanese</item>
@@ -131,6 +131,7 @@
<string name="system_language">System Language</string>
<string name="slot_a_device">GameCube Slot A Device</string>
<string name="slot_b_device">GameCube Slot B Device</string>
<string name="serial_port_1_device">GameCube Serial Port 1 Device</string>
<string name="wii_submenu">Wii</string>
<string name="wii_widescreen">Widescreen</string>
<string name="wii_widescreen_description">Changes aspect ratio from 4:3 to 16:9 in games that support it.</string>
@@ -160,6 +161,12 @@
<string name="analytics_new_id">Generate a New Statistics Identity</string>
<string name="analytics_new_id_confirmation">Are you sure you want to generate a new statistics identity?</string>

<!-- SerialPort1 Subsetting Fragment -->
<string name="serialport1_submenu">Serial Port 1</string>
<string name="xlink_kai_guide_header">For setup instructions, <a href="https://www.teamxlink.co.uk/wiki/Dolphin">refer to this page.</a></string>
<string name="xlink_kai_bba_ip">XLink Kai IP Address/hostname</string>
<string name="xlink_kai_bba_ip_description">IP address or hostname of device running the XLink Kai client</string>

<!-- Interface Preference Fragment -->
<string name="interface_submenu">Interface</string>
<string name="emulation_screen_orientation">Screen Orientation During Emulation</string>