diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
index 6574d22199..585506f419 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/NativeLibrary.java
@@ -397,6 +397,8 @@ public final class NativeLibrary
*/
public static native void RefreshWiimotes();
+ public static native void ReloadWiimoteConfig();
+
private static boolean alertResult = false;
public static boolean displayAlertMsg(final String caption, final String text,
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java
index f5309869d5..012b11de7c 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/activities/EmulationActivity.java
@@ -74,12 +74,14 @@ public final class EmulationActivity extends AppCompatActivity
private boolean activityRecreated;
private String mSelectedTitle;
+ private String mSelectedGameId;
private int mPlatform;
private String[] mPaths;
private boolean backPressedOnce = false;
public static final String EXTRA_SELECTED_GAMES = "SelectedGames";
public static final String EXTRA_SELECTED_TITLE = "SelectedTitle";
+ public static final String EXTRA_SELECTED_GAMEID = "SelectedGameId";
public static final String EXTRA_PLATFORM = "Platform";
@Retention(SOURCE)
@@ -91,7 +93,7 @@ public final class EmulationActivity extends AppCompatActivity
MENU_ACTION_SAVE_SLOT6, MENU_ACTION_LOAD_SLOT1, MENU_ACTION_LOAD_SLOT2,
MENU_ACTION_LOAD_SLOT3, MENU_ACTION_LOAD_SLOT4, MENU_ACTION_LOAD_SLOT5,
MENU_ACTION_LOAD_SLOT6, MENU_ACTION_EXIT, MENU_ACTION_CHANGE_DISC,
- MENU_ACTION_RESET_OVERLAY})
+ MENU_ACTION_RESET_OVERLAY, MENU_SET_IR_SENSITIVITY})
public @interface MenuAction
{
}
@@ -123,6 +125,7 @@ public final class EmulationActivity extends AppCompatActivity
public static final int MENU_ACTION_JOYSTICK_REL_CENTER = 24;
public static final int MENU_ACTION_RUMBLE = 25;
public static final int MENU_ACTION_RESET_OVERLAY = 26;
+ public static final int MENU_SET_IR_SENSITIVITY = 27;
private static SparseIntArray buttonsActionsMap = new SparseIntArray();
@@ -165,6 +168,8 @@ public final class EmulationActivity extends AppCompatActivity
buttonsActionsMap.append(R.id.menu_emulation_rumble, EmulationActivity.MENU_ACTION_RUMBLE);
buttonsActionsMap
.append(R.id.menu_emulation_reset_overlay, EmulationActivity.MENU_ACTION_RESET_OVERLAY);
+ buttonsActionsMap.append(R.id.menu_emulation_set_ir_sensitivity,
+ EmulationActivity.MENU_SET_IR_SENSITIVITY);
}
private static String[] scanForSecondDisc(GameFile gameFile)
@@ -182,6 +187,7 @@ public final class EmulationActivity extends AppCompatActivity
launcher.putExtra(EXTRA_SELECTED_GAMES, scanForSecondDisc(gameFile));
launcher.putExtra(EXTRA_SELECTED_TITLE, gameFile.getTitle());
+ launcher.putExtra(EXTRA_SELECTED_GAMEID, gameFile.getGameId());
launcher.putExtra(EXTRA_PLATFORM, gameFile.getPlatform());
activity.startActivityForResult(launcher, MainPresenter.REQUEST_EMULATE_GAME);
}
@@ -201,6 +207,7 @@ public final class EmulationActivity extends AppCompatActivity
Intent gameToEmulate = getIntent();
mPaths = gameToEmulate.getStringArrayExtra(EXTRA_SELECTED_GAMES);
mSelectedTitle = gameToEmulate.getStringExtra(EXTRA_SELECTED_TITLE);
+ mSelectedGameId = gameToEmulate.getStringExtra(EXTRA_SELECTED_GAMEID);
mPlatform = gameToEmulate.getIntExtra(EXTRA_PLATFORM, 0);
activityRecreated = false;
}
@@ -294,6 +301,7 @@ public final class EmulationActivity extends AppCompatActivity
}
outState.putStringArray(EXTRA_SELECTED_GAMES, mPaths);
outState.putString(EXTRA_SELECTED_TITLE, mSelectedTitle);
+ outState.putString(EXTRA_SELECTED_GAMEID, mSelectedGameId);
outState.putInt(EXTRA_PLATFORM, mPlatform);
super.onSaveInstanceState(outState);
}
@@ -302,6 +310,7 @@ public final class EmulationActivity extends AppCompatActivity
{
mPaths = savedInstanceState.getStringArray(EXTRA_SELECTED_GAMES);
mSelectedTitle = savedInstanceState.getString(EXTRA_SELECTED_TITLE);
+ mSelectedGameId = savedInstanceState.getString(EXTRA_SELECTED_GAMEID);
mPlatform = savedInstanceState.getInt(EXTRA_PLATFORM);
}
@@ -578,6 +587,10 @@ public final class EmulationActivity extends AppCompatActivity
FileBrowserHelper.openFilePicker(this, REQUEST_CHANGE_DISC);
return;
+ case MENU_SET_IR_SENSITIVITY:
+ setIRSensitivity();
+ return;
+
case MENU_ACTION_EXIT:
// ATV menu is built using a fragment, this will pop that fragment before emulation ends.
if (TvUtil.isLeanback(getApplicationContext()))
@@ -785,6 +798,132 @@ public final class EmulationActivity extends AppCompatActivity
}
+ private void setIRSensitivity()
+ {
+ int irHeight = Integer.valueOf(
+ mPreferences.getString(SettingsFile.KEY_WIIBIND_IR_HEIGHT + mSelectedGameId, "50"));
+
+ LayoutInflater inflater = LayoutInflater.from(this);
+ View view = inflater.inflate(R.layout.dialog_ir_sensitivity, null);
+
+ TextView mTextSliderValueHeight = (TextView) view.findViewById(R.id.text_ir_height);
+ TextView units = (TextView) view.findViewById(R.id.text_ir_height_units);
+ SeekBar seekbarHeight = view.findViewById(R.id.seekbar_height);
+
+ mTextSliderValueHeight.setText(String.valueOf(irHeight));
+ units.setText(getString(R.string.height));
+ seekbarHeight.setMax(100);
+ seekbarHeight.setProgress(irHeight);
+ seekbarHeight.setKeyProgressIncrement(5);
+ seekbarHeight.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
+ {
+ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
+ {
+ mTextSliderValueHeight.setText(String.valueOf(progress));
+ }
+
+ @Override public void onStartTrackingTouch(SeekBar seekBar)
+ {
+ // Do nothing
+ }
+
+ @Override public void onStopTrackingTouch(SeekBar seekBar)
+ {
+ // Do nothing
+ }
+ });
+
+ int irWidth = Integer.valueOf(
+ mPreferences.getString(SettingsFile.KEY_WIIBIND_IR_WIDTH + mSelectedGameId, "50"));
+
+ TextView mTextSliderValueWidth = (TextView) view.findViewById(R.id.text_ir_width);
+ TextView unitsWidth = (TextView) view.findViewById(R.id.text_ir_width_units);
+ SeekBar seekbarWidth = view.findViewById(R.id.seekbar_width);
+
+ mTextSliderValueWidth.setText(String.valueOf(irWidth));
+ unitsWidth.setText(getString(R.string.width));
+ seekbarWidth.setMax(100);
+ seekbarWidth.setProgress(irWidth);
+ seekbarWidth.setKeyProgressIncrement(5);
+ seekbarWidth.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
+ {
+ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
+ {
+ mTextSliderValueWidth.setText(String.valueOf(progress));
+ }
+
+ @Override public void onStartTrackingTouch(SeekBar seekBar)
+ {
+ // Do nothing
+ }
+
+ @Override public void onStopTrackingTouch(SeekBar seekBar)
+ {
+ // Do nothing
+ }
+ });
+
+
+ int irCenter = Integer.valueOf(
+ mPreferences.getString(SettingsFile.KEY_WIIBIND_IR_CENTER + mSelectedGameId, "50"));
+
+ TextView mTextSliderValueCenter = (TextView) view.findViewById(R.id.text_ir_center);
+ TextView unitsCenter = (TextView) view.findViewById(R.id.text_ir_center_units);
+ SeekBar seekbarCenter = view.findViewById(R.id.seekbar_center);
+
+ mTextSliderValueCenter.setText(String.valueOf(irCenter));
+ unitsCenter.setText(getString(R.string.center));
+ seekbarCenter.setMax(100);
+ seekbarCenter.setProgress(irCenter);
+ seekbarCenter.setKeyProgressIncrement(5);
+ seekbarCenter.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener()
+ {
+ @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
+ {
+ mTextSliderValueCenter.setText(String.valueOf(progress));
+ }
+
+ @Override public void onStartTrackingTouch(SeekBar seekBar)
+ {
+ // Do nothing
+ }
+
+ @Override public void onStopTrackingTouch(SeekBar seekBar)
+ {
+ // Do nothing
+ }
+ });
+
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setTitle(getString(R.string.emulation_ir_sensitivity));
+ builder.setView(view);
+ builder.setPositiveButton(R.string.ok, (dialogInterface, i) ->
+ {
+ SettingsFile.saveSingleCustomSetting(mSelectedGameId, Settings.SECTION_CONTROLS,
+ SettingsFile.KEY_WIIBIND_IR_HEIGHT, mTextSliderValueHeight.getText().toString());
+ SettingsFile.saveSingleCustomSetting(mSelectedGameId, Settings.SECTION_CONTROLS,
+ SettingsFile.KEY_WIIBIND_IR_WIDTH, mTextSliderValueWidth.getText().toString());
+ SettingsFile.saveSingleCustomSetting(mSelectedGameId, Settings.SECTION_CONTROLS,
+ SettingsFile.KEY_WIIBIND_IR_CENTER, mTextSliderValueCenter.getText().toString());
+
+ NativeLibrary.ReloadWiimoteConfig();
+
+ SharedPreferences.Editor editor = mPreferences.edit();
+ editor.putString(SettingsFile.KEY_WIIBIND_IR_HEIGHT + mSelectedGameId,
+ mTextSliderValueHeight.getText().toString());
+ editor.putString(SettingsFile.KEY_WIIBIND_IR_WIDTH + mSelectedGameId,
+ mTextSliderValueWidth.getText().toString());
+ editor.putString(SettingsFile.KEY_WIIBIND_IR_CENTER + mSelectedGameId,
+ mTextSliderValueCenter.getText().toString());
+ editor.apply();
+ });
+ builder.setNegativeButton(R.string.cancel, (dialogInterface, i) ->
+ {
+ // Do nothing
+ });
+ builder.show();
+ }
+
private void resetOverlay()
{
new AlertDialog.Builder(this)
diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java
index 0dd027cd80..df51a38e04 100644
--- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java
+++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/features/settings/utils/SettingsFile.java
@@ -151,6 +151,9 @@ public final class SettingsFile
public static final String KEY_WIIBIND_IR_FORWARD = "IRForward_";
public static final String KEY_WIIBIND_IR_BACKWARD = "IRBackward_";
public static final String KEY_WIIBIND_IR_HIDE = "IRHide_";
+ public static final String KEY_WIIBIND_IR_HEIGHT = "IRHeight";
+ public static final String KEY_WIIBIND_IR_WIDTH = "IRWidth";
+ public static final String KEY_WIIBIND_IR_CENTER = "IRCenter";
public static final String KEY_WIIBIND_SWING_UP = "SwingUp_";
public static final String KEY_WIIBIND_SWING_DOWN = "SwingDown_";
public static final String KEY_WIIBIND_SWING_LEFT = "SwingLeft_";
diff --git a/Source/Android/app/src/main/res/layout/dialog_ir_sensitivity.xml b/Source/Android/app/src/main/res/layout/dialog_ir_sensitivity.xml
new file mode 100644
index 0000000000..8f60d318e2
--- /dev/null
+++ b/Source/Android/app/src/main/res/layout/dialog_ir_sensitivity.xml
@@ -0,0 +1,115 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Source/Android/app/src/main/res/menu/menu_emulation_wii.xml b/Source/Android/app/src/main/res/menu/menu_emulation_wii.xml
index 5a26d61814..8a5a729783 100644
--- a/Source/Android/app/src/main/res/menu/menu_emulation_wii.xml
+++ b/Source/Android/app/src/main/res/menu/menu_emulation_wii.xml
@@ -113,6 +113,11 @@
android:id="@+id/menu_emulation_choose_controller"
android:title="@string/emulation_choose_controller"/>
+
+
diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml
index 8c2c821aaf..a33db04ac8 100644
--- a/Source/Android/app/src/main/res/values/strings.xml
+++ b/Source/Android/app/src/main/res/values/strings.xml
@@ -298,6 +298,7 @@
You may have to reload the game after changing extensions.
Swipe down from the top of the screen to access the menu.
Reset Overlay
+ IR Sensitivity
Enable Vibration
@@ -322,4 +323,10 @@
Favorites
Select This Directory
+
+
+ Height
+ Width
+ Center
+
diff --git a/Source/Android/jni/MainAndroid.cpp b/Source/Android/jni/MainAndroid.cpp
index c606345abe..8fe7c4942f 100644
--- a/Source/Android/jni/MainAndroid.cpp
+++ b/Source/Android/jni/MainAndroid.cpp
@@ -571,6 +571,12 @@ JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_RefreshWiimo
WiimoteReal::Refresh();
}
+JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_NativeLibrary_ReloadWiimoteConfig(JNIEnv* env,
+ jobject obj)
+{
+ Wiimote::LoadConfig();
+}
+
static void Run(const std::vector& paths, bool first_open,
std::optional savestate_path = {}, bool delete_savestate = false)
{