From ea3c3fd952239702736f7ac1bc4e025707aa556c Mon Sep 17 00:00:00 2001 From: Ryan Meredith Date: Tue, 16 Jun 2020 13:27:13 -0400 Subject: [PATCH] Android: Separate GameCube overlay refresh logic --- .../activities/EmulationActivity.java | 2 +- .../features/settings/utils/SettingsFile.java | 1 + .../dolphinemu/overlay/InputOverlay.java | 65 +++++++++++++++---- .../app/src/main/res/menu/menu_emulation.xml | 4 +- .../src/main/res/menu/menu_emulation_wii.xml | 4 +- .../app/src/main/res/values/arrays.xml | 2 + .../app/src/main/res/values/strings.xml | 3 +- 7 files changed, 63 insertions(+), 18 deletions(-) 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 79afa4f81f..18903d3324 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 @@ -798,7 +798,7 @@ public final class EmulationActivity extends AppCompatActivity AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.DolphinDialogBase); int currentController = - mPreferences.getInt("wiiController", InputOverlay.OVERLAY_WIIMOTE_NUNCHUCK); + mPreferences.getInt("wiiController", InputOverlay.OVERLAY_WIIMOTE_NUNCHUK); int currentValue = mPreferences.getInt("doubleTapButton", InputOverlayPointer.DOUBLE_TAP_OPTIONS.get(InputOverlayPointer.DOUBLE_TAP_A)); 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 8e2f33fdd1..47f8aa4ec2 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 @@ -119,6 +119,7 @@ public final class SettingsFile public static final String KEY_DEBUG_JITREGISTERCACHEOFF = "JitRegisterCacheOff"; public static final String KEY_GCPAD_TYPE = "SIDevice"; + public static final String KEY_GCPAD_PLAYER_1 = "SIDevice0"; public static final String KEY_GCPAD_G_TYPE = "PadType"; public static final String KEY_GCBIND_A = "InputA_"; diff --git a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java index e2c6c1978c..10530afbb4 100644 --- a/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java +++ b/Source/Android/app/src/main/java/org/dolphinemu/dolphinemu/overlay/InputOverlay.java @@ -24,12 +24,15 @@ import android.view.MotionEvent; import android.view.SurfaceView; import android.view.View; import android.view.View.OnTouchListener; +import android.widget.Toast; import org.dolphinemu.dolphinemu.NativeLibrary; import org.dolphinemu.dolphinemu.NativeLibrary.ButtonState; import org.dolphinemu.dolphinemu.NativeLibrary.ButtonType; import org.dolphinemu.dolphinemu.R; import org.dolphinemu.dolphinemu.activities.EmulationActivity; +import org.dolphinemu.dolphinemu.features.settings.model.Settings; +import org.dolphinemu.dolphinemu.features.settings.utils.SettingsFile; import java.util.ArrayList; import java.util.HashSet; @@ -44,14 +47,20 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener public static final int OVERLAY_GAMECUBE = 0; public static final int OVERLAY_WIIMOTE = 1; public static final int OVERLAY_WIIMOTE_SIDEWAYS = 2; - public static final int OVERLAY_WIIMOTE_NUNCHUCK = 3; + public static final int OVERLAY_WIIMOTE_NUNCHUK = 3; public static final int OVERLAY_WIIMOTE_CLASSIC = 4; + public static final int OVERLAY_NONE = 5; + + private static final String DISABLED_GAMECUBE_CONTROLLER = "0"; + private static final String EMULATED_GAMECUBE_CONTROLLER = "6"; + private static final String GAMECUBE_ADAPTER = "12"; private final Set overlayButtons = new HashSet<>(); private final Set overlayDpads = new HashSet<>(); private final Set overlayJoysticks = new HashSet<>(); private InputOverlayPointer overlayPointer; + private boolean mIsFirstRun = true; private boolean mIsInEditMode = false; private InputOverlayDrawableButton mButtonBeingConfigured; private InputOverlayDrawableDpad mDpadBeingConfigured; @@ -135,7 +144,7 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener int doubleTapButton = mPreferences.getInt("doubleTapButton", InputOverlayPointer.DOUBLE_TAP_OPTIONS.get(InputOverlayPointer.DOUBLE_TAP_A)); - if (mPreferences.getInt("wiiController", OVERLAY_WIIMOTE_NUNCHUCK) != + if (mPreferences.getInt("wiiController", OVERLAY_WIIMOTE_NUNCHUK) != InputOverlay.OVERLAY_WIIMOTE_CLASSIC && doubleTapButton == InputOverlayPointer.DOUBLE_TAP_CLASSIC_A) { @@ -692,24 +701,56 @@ public final class InputOverlay extends SurfaceView implements OnTouchListener if (mPreferences.getBoolean("showInputOverlay", true)) { // Add all the enabled overlay items back to the HashSet. - if (EmulationActivity.isGameCubeGame() || mPreferences.getInt("wiiController", 3) == 0) + if (EmulationActivity.isGameCubeGame()) { - addGameCubeOverlayControls(orientation); - } - else if (mPreferences.getInt("wiiController", 3) == 4) - { - addClassicOverlayControls(orientation); + switch (NativeLibrary + .GetConfig(SettingsFile.FILE_NAME_DOLPHIN + ".ini", Settings.SECTION_INI_CORE, + SettingsFile.KEY_GCPAD_PLAYER_1, EMULATED_GAMECUBE_CONTROLLER)) + { + case DISABLED_GAMECUBE_CONTROLLER: + if (mIsFirstRun) + { + Toast.makeText(getContext(), R.string.disabled_gc_overlay_notice, Toast.LENGTH_SHORT) + .show(); + } + break; + + case EMULATED_GAMECUBE_CONTROLLER: + addGameCubeOverlayControls(orientation); + break; + + case GAMECUBE_ADAPTER: + break; + } } else { - addWiimoteOverlayControls(orientation); - if (mPreferences.getInt("wiiController", 3) == 3) + switch (mPreferences.getInt("wiiController", 3)) { - addNunchukOverlayControls(orientation); + case OVERLAY_GAMECUBE: + addGameCubeOverlayControls(orientation); + break; + + case OVERLAY_WIIMOTE: + case OVERLAY_WIIMOTE_SIDEWAYS: + addWiimoteOverlayControls(orientation); + break; + + case OVERLAY_WIIMOTE_NUNCHUK: + addWiimoteOverlayControls(orientation); + addNunchukOverlayControls(orientation); + break; + + case OVERLAY_WIIMOTE_CLASSIC: + addClassicOverlayControls(orientation); + break; + + case OVERLAY_NONE: + break; } } } - + mIsFirstRun = false; invalidate(); } diff --git a/Source/Android/app/src/main/res/menu/menu_emulation.xml b/Source/Android/app/src/main/res/menu/menu_emulation.xml index 6f0abbeae7..6a44731485 100644 --- a/Source/Android/app/src/main/res/menu/menu_emulation.xml +++ b/Source/Android/app/src/main/res/menu/menu_emulation.xml @@ -82,9 +82,9 @@ + android:title="@string/emulation_overlay_controls"> + android:title="@string/emulation_overlay_controls"> Horizontal Wii Remote Wii Remote + Nunchuk Classic Controller + None None @@ -284,6 +285,7 @@ None Nunchuk Classic + None diff --git a/Source/Android/app/src/main/res/values/strings.xml b/Source/Android/app/src/main/res/values/strings.xml index 94590230f6..795b1ec37d 100644 --- a/Source/Android/app/src/main/res/values/strings.xml +++ b/Source/Android/app/src/main/res/values/strings.xml @@ -332,7 +332,7 @@ Quick Save Quick Load Refresh Wii Remotes - Configure Controls + Overlay Controls Edit Layout Done Toggle Controls @@ -378,5 +378,6 @@ Total Yaw Vertical Offset Disc %1$d + GameCube Controller 1 is set to \"None\"