From 30a1221067849ea9891d4409ee316f4cfbe2f2c8 Mon Sep 17 00:00:00 2001
From: SSimco <37044560+SSimco@users.noreply.github.com>
Date: Sat, 27 Jul 2024 18:15:40 +0300
Subject: [PATCH] Refactor code
---
src/android/app/src/main/AndroidManifest.xml | 8 +-
.../src/main/cpp/AndroidFilesystemCallbacks.h | 2 +-
.../java/info/cemu/Cemu/CemuApplication.java | 3 +
.../java/info/cemu/Cemu/CemuPreferences.java | 6 -
.../java/info/cemu/Cemu/NativeLibrary.java | 336 +++++++-----------
.../{ => emulation}/EmulationActivity.java | 18 +-
.../{ => emulation}/EmulationFragment.java | 22 +-
.../info/cemu/Cemu/{ => gameview}/Game.java | 2 +-
.../cemu/Cemu/{ => gameview}/GameAdapter.java | 4 +-
.../Cemu/{ => gameview}/GamesFragment.java | 19 +-
.../BaseSelectionAdapter.java | 7 +-
.../BaseSingleSelectionRecyclerViewItem.java | 4 +-
.../ButtonRecyclerViewItem.java | 4 +-
.../CheckboxRecyclerViewItem.java | 4 +-
.../GenericRecyclerViewAdapter.java | 3 +-
.../HeaderRecyclerViewItem.java | 4 +-
.../RecyclerViewItem.java | 2 +-
.../SelectionAdapter.java | 11 +-
.../SimpleButtonRecyclerViewItem.java | 4 +-
.../SingleSelectionRecyclerViewItem.java | 4 +-
.../SliderRecyclerViewItem.java | 4 +-
.../StringSelectionAdapter.java | 5 +-
.../cemu/Cemu/{ => input}/InputManager.java | 6 +-
.../cemu/Cemu/{ => inputoverlay}/Button.java | 2 +-
.../ButtonStateChangeListener.java | 2 +-
.../Cemu/{ => inputoverlay}/DPadInput.java | 2 +-
.../cemu/Cemu/{ => inputoverlay}/Input.java | 2 +-
.../InputOverlayConfigureActivity.java | 9 +-
.../InputOverlaySettingsFragment.java | 15 +-
.../InputOverlaySettingsProvider.java | 9 +-
.../InputOverlaySurfaceView.java | 16 +-
.../Cemu/{ => inputoverlay}/Joystick.java | 2 +-
.../{ => inputoverlay}/RectangleButton.java | 2 +-
.../Cemu/{ => inputoverlay}/RoundButton.java | 2 +-
.../Cemu/{ => settings}/OptionsFragment.java | 27 +-
.../Cemu/{ => settings}/SettingsActivity.java | 6 +-
.../cemu/Cemu/settings/SettingsManager.java | 22 ++
.../audio}/AudioSettingsFragment.java | 29 +-
.../GraphicPackItemRecyclerViewItem.java | 5 +-
.../GraphicPackRecyclerViewItem.java | 8 +-
.../graphicpacks}/GraphicPacksFragment.java | 7 +-
.../GraphicPacksRecyclerViewAdapter.java | 5 +-
.../GraphicPacksRootFragment.java | 7 +-
.../graphics}/GraphicsSettingsFragment.java | 23 +-
.../input}/ControllerInputsDataProvider.java | 15 +-
.../input}/ControllerInputsFragment.java | 10 +-
.../ControllerTypeResourceNameMapper.java | 18 +
.../input}/EmulatedControllerTypeAdapter.java | 7 +-
.../input}/InputRecyclerViewItem.java | 5 +-
.../input}/InputSettingsFragment.java | 9 +-
.../{ => settings/input}/MotionDialog.java | 2 +-
.../overlay}/OverlaySettingsFragment.java | 35 +-
.../info/cemu/Cemu/{ => utils}/FileUtil.java | 4 +-
.../{ => utils}/ProgressResponseBody.java | 2 +-
.../info/cemu/Cemu/{ => utils}/ZipUtil.java | 2 +-
.../main/res/layout/activity_emulation.xml | 2 +-
.../res/layout/activity_overlay_configure.xml | 4 +-
.../src/main/res/layout/activity_settings.xml | 2 +-
.../main/res/layout/fragment_emulation.xml | 4 +-
.../src/main/res/layout/fragment_options.xml | 2 +-
.../src/main/res/menu/menu_graphic_packs.xml | 3 +-
.../app/src/main/res/menu/menu_main.xml | 3 +-
.../app/src/main/res/navigation/nav_graph.xml | 2 +-
.../res/navigation/nav_settings_graph.xml | 40 +--
.../app/src/main/res/values/strings.xml | 3 -
65 files changed, 475 insertions(+), 383 deletions(-)
delete mode 100644 src/android/app/src/main/java/info/cemu/Cemu/CemuPreferences.java
rename src/android/app/src/main/java/info/cemu/Cemu/{ => emulation}/EmulationActivity.java (93%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => emulation}/EmulationFragment.java (86%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => gameview}/Game.java (93%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => gameview}/GameAdapter.java (98%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => gameview}/GamesFragment.java (87%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => guibasecomponents}/BaseSelectionAdapter.java (90%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => guibasecomponents}/BaseSingleSelectionRecyclerViewItem.java (97%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => guibasecomponents}/ButtonRecyclerViewItem.java (96%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => guibasecomponents}/CheckboxRecyclerViewItem.java (97%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => guibasecomponents}/GenericRecyclerViewAdapter.java (96%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => guibasecomponents}/HeaderRecyclerViewItem.java (94%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => guibasecomponents}/RecyclerViewItem.java (87%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => guibasecomponents}/SelectionAdapter.java (84%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => guibasecomponents}/SimpleButtonRecyclerViewItem.java (96%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => guibasecomponents}/SingleSelectionRecyclerViewItem.java (98%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => guibasecomponents}/SliderRecyclerViewItem.java (97%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => guibasecomponents}/StringSelectionAdapter.java (88%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => input}/InputManager.java (97%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => inputoverlay}/Button.java (98%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => inputoverlay}/ButtonStateChangeListener.java (78%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => inputoverlay}/DPadInput.java (99%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => inputoverlay}/Input.java (98%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => inputoverlay}/InputOverlayConfigureActivity.java (89%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => inputoverlay}/InputOverlaySettingsFragment.java (88%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => inputoverlay}/InputOverlaySettingsProvider.java (97%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => inputoverlay}/InputOverlaySurfaceView.java (98%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => inputoverlay}/Joystick.java (99%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => inputoverlay}/RectangleButton.java (96%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => inputoverlay}/RoundButton.java (97%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings}/OptionsFragment.java (81%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings}/SettingsActivity.java (93%)
create mode 100644 src/android/app/src/main/java/info/cemu/Cemu/settings/SettingsManager.java
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/audio}/AudioSettingsFragment.java (75%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/graphicpacks}/GraphicPackItemRecyclerViewItem.java (94%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/graphicpacks}/GraphicPackRecyclerViewItem.java (92%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/graphicpacks}/GraphicPacksFragment.java (94%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/graphicpacks}/GraphicPacksRecyclerViewAdapter.java (97%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/graphicpacks}/GraphicPacksRootFragment.java (98%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/graphics}/GraphicsSettingsFragment.java (68%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/input}/ControllerInputsDataProvider.java (95%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/input}/ControllerInputsFragment.java (92%)
create mode 100644 src/android/app/src/main/java/info/cemu/Cemu/settings/input/ControllerTypeResourceNameMapper.java
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/input}/EmulatedControllerTypeAdapter.java (85%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/input}/InputRecyclerViewItem.java (94%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/input}/InputSettingsFragment.java (83%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/input}/MotionDialog.java (95%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => settings/overlay}/OverlaySettingsFragment.java (68%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => utils}/FileUtil.java (98%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => utils}/ProgressResponseBody.java (98%)
rename src/android/app/src/main/java/info/cemu/Cemu/{ => utils}/ZipUtil.java (97%)
diff --git a/src/android/app/src/main/AndroidManifest.xml b/src/android/app/src/main/AndroidManifest.xml
index 85c49e40..2f53dce8 100644
--- a/src/android/app/src/main/AndroidManifest.xml
+++ b/src/android/app/src/main/AndroidManifest.xml
@@ -19,20 +19,20 @@
android:theme="@style/Theme.Cemu"
tools:targetApi="31">
GetStaticMethodID(*m_fileUtilClass, "openContentUri", "(Ljava/lang/String;)I");
m_listFilesMid = env->GetStaticMethodID(*m_fileUtilClass, "listFiles", "(Ljava/lang/String;)[Ljava/lang/String;");
m_isDirectoryMid = env->GetStaticMethodID(*m_fileUtilClass, "isDirectory", "(Ljava/lang/String;)Z");
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/CemuApplication.java b/src/android/app/src/main/java/info/cemu/Cemu/CemuApplication.java
index efa63959..56886fef 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/CemuApplication.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/CemuApplication.java
@@ -3,6 +3,9 @@ package info.cemu.Cemu;
import android.app.Application;
import android.util.DisplayMetrics;
+import info.cemu.Cemu.NativeLibrary;
+import info.cemu.Cemu.utils.FileUtil;
+
public class CemuApplication extends Application {
@Override
public void onCreate() {
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/CemuPreferences.java b/src/android/app/src/main/java/info/cemu/Cemu/CemuPreferences.java
deleted file mode 100644
index 1167ff0f..00000000
--- a/src/android/app/src/main/java/info/cemu/Cemu/CemuPreferences.java
+++ /dev/null
@@ -1,6 +0,0 @@
-package info.cemu.Cemu;
-
-public class CemuPreferences {
- public static final String PREFERENCES_NAME = "CEMU_PREFERENCES";
- public static final String GAMES_PATH_KEY = "GAME_PATHS_KEY";
-}
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/NativeLibrary.java b/src/android/app/src/main/java/info/cemu/Cemu/NativeLibrary.java
index 27db83d3..93e74088 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/NativeLibrary.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/NativeLibrary.java
@@ -2,33 +2,16 @@ package info.cemu.Cemu;
import android.view.Surface;
-import androidx.annotation.Nullable;
-
import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
-import java.util.function.Predicate;
public class NativeLibrary {
static {
System.loadLibrary("CemuAndroid");
}
- public interface FileSystemCallbacks {
- int openContentUri(String uri);
-
- String[] listFiles(String uri);
-
- boolean isDirectory(String uri);
-
- boolean isFile(String uri);
-
- boolean exists(String uri);
- }
-
public static native void setDPI(float dpi);
public static native void setSurface(Surface surface, boolean isMainCanvas);
@@ -72,145 +55,134 @@ public class NativeLibrary {
public static native void onNativeAxis(String deviceDescriptor, String deviceName, int axis, float value);
- static final int VPAD_BUTTON_NONE = 0;
- static final int VPAD_BUTTON_A = 1;
- static final int VPAD_BUTTON_B = 2;
- static final int VPAD_BUTTON_X = 3;
- static final int VPAD_BUTTON_Y = 4;
- static final int VPAD_BUTTON_L = 5;
- static final int VPAD_BUTTON_R = 6;
- static final int VPAD_BUTTON_ZL = 7;
- static final int VPAD_BUTTON_ZR = 8;
- static final int VPAD_BUTTON_PLUS = 9;
- static final int VPAD_BUTTON_MINUS = 10;
- static final int VPAD_BUTTON_UP = 11;
- static final int VPAD_BUTTON_DOWN = 12;
- static final int VPAD_BUTTON_LEFT = 13;
- static final int VPAD_BUTTON_RIGHT = 14;
- static final int VPAD_BUTTON_STICKL = 15;
- static final int VPAD_BUTTON_STICKR = 16;
- static final int VPAD_BUTTON_STICKL_UP = 17;
- static final int VPAD_BUTTON_STICKL_DOWN = 18;
- static final int VPAD_BUTTON_STICKL_LEFT = 19;
- static final int VPAD_BUTTON_STICKL_RIGHT = 20;
- static final int VPAD_BUTTON_STICKR_UP = 21;
- static final int VPAD_BUTTON_STICKR_DOWN = 22;
- static final int VPAD_BUTTON_STICKR_LEFT = 23;
- static final int VPAD_BUTTON_STICKR_RIGHT = 24;
- static final int VPAD_BUTTON_MIC = 25;
- static final int VPAD_BUTTON_SCREEN = 26;
- static final int VPAD_BUTTON_HOME = 27;
- static final int VPAD_BUTTON_MAX = 28;
+ public static final int VPAD_BUTTON_NONE = 0;
+ public static final int VPAD_BUTTON_A = 1;
+ public static final int VPAD_BUTTON_B = 2;
+ public static final int VPAD_BUTTON_X = 3;
+ public static final int VPAD_BUTTON_Y = 4;
+ public static final int VPAD_BUTTON_L = 5;
+ public static final int VPAD_BUTTON_R = 6;
+ public static final int VPAD_BUTTON_ZL = 7;
+ public static final int VPAD_BUTTON_ZR = 8;
+ public static final int VPAD_BUTTON_PLUS = 9;
+ public static final int VPAD_BUTTON_MINUS = 10;
+ public static final int VPAD_BUTTON_UP = 11;
+ public static final int VPAD_BUTTON_DOWN = 12;
+ public static final int VPAD_BUTTON_LEFT = 13;
+ public static final int VPAD_BUTTON_RIGHT = 14;
+ public static final int VPAD_BUTTON_STICKL = 15;
+ public static final int VPAD_BUTTON_STICKR = 16;
+ public static final int VPAD_BUTTON_STICKL_UP = 17;
+ public static final int VPAD_BUTTON_STICKL_DOWN = 18;
+ public static final int VPAD_BUTTON_STICKL_LEFT = 19;
+ public static final int VPAD_BUTTON_STICKL_RIGHT = 20;
+ public static final int VPAD_BUTTON_STICKR_UP = 21;
+ public static final int VPAD_BUTTON_STICKR_DOWN = 22;
+ public static final int VPAD_BUTTON_STICKR_LEFT = 23;
+ public static final int VPAD_BUTTON_STICKR_RIGHT = 24;
+ public static final int VPAD_BUTTON_MIC = 25;
+ public static final int VPAD_BUTTON_SCREEN = 26;
+ public static final int VPAD_BUTTON_HOME = 27;
+ public static final int VPAD_BUTTON_MAX = 28;
- static final int PRO_BUTTON_NONE = 0;
- static final int PRO_BUTTON_A = 1;
- static final int PRO_BUTTON_B = 2;
- static final int PRO_BUTTON_X = 3;
- static final int PRO_BUTTON_Y = 4;
- static final int PRO_BUTTON_L = 5;
- static final int PRO_BUTTON_R = 6;
- static final int PRO_BUTTON_ZL = 7;
- static final int PRO_BUTTON_ZR = 8;
- static final int PRO_BUTTON_PLUS = 9;
- static final int PRO_BUTTON_MINUS = 10;
- static final int PRO_BUTTON_HOME = 11;
- static final int PRO_BUTTON_UP = 12;
- static final int PRO_BUTTON_DOWN = 13;
- static final int PRO_BUTTON_LEFT = 14;
- static final int PRO_BUTTON_RIGHT = 15;
- static final int PRO_BUTTON_STICKL = 16;
- static final int PRO_BUTTON_STICKR = 17;
- static final int PRO_BUTTON_STICKL_UP = 18;
- static final int PRO_BUTTON_STICKL_DOWN = 19;
- static final int PRO_BUTTON_STICKL_LEFT = 20;
- static final int PRO_BUTTON_STICKL_RIGHT = 21;
- static final int PRO_BUTTON_STICKR_UP = 22;
- static final int PRO_BUTTON_STICKR_DOWN = 23;
- static final int PRO_BUTTON_STICKR_LEFT = 24;
- static final int PRO_BUTTON_STICKR_RIGHT = 25;
- static final int PRO_BUTTON_MAX = 26;
+ public static final int PRO_BUTTON_NONE = 0;
+ public static final int PRO_BUTTON_A = 1;
+ public static final int PRO_BUTTON_B = 2;
+ public static final int PRO_BUTTON_X = 3;
+ public static final int PRO_BUTTON_Y = 4;
+ public static final int PRO_BUTTON_L = 5;
+ public static final int PRO_BUTTON_R = 6;
+ public static final int PRO_BUTTON_ZL = 7;
+ public static final int PRO_BUTTON_ZR = 8;
+ public static final int PRO_BUTTON_PLUS = 9;
+ public static final int PRO_BUTTON_MINUS = 10;
+ public static final int PRO_BUTTON_HOME = 11;
+ public static final int PRO_BUTTON_UP = 12;
+ public static final int PRO_BUTTON_DOWN = 13;
+ public static final int PRO_BUTTON_LEFT = 14;
+ public static final int PRO_BUTTON_RIGHT = 15;
+ public static final int PRO_BUTTON_STICKL = 16;
+ public static final int PRO_BUTTON_STICKR = 17;
+ public static final int PRO_BUTTON_STICKL_UP = 18;
+ public static final int PRO_BUTTON_STICKL_DOWN = 19;
+ public static final int PRO_BUTTON_STICKL_LEFT = 20;
+ public static final int PRO_BUTTON_STICKL_RIGHT = 21;
+ public static final int PRO_BUTTON_STICKR_UP = 22;
+ public static final int PRO_BUTTON_STICKR_DOWN = 23;
+ public static final int PRO_BUTTON_STICKR_LEFT = 24;
+ public static final int PRO_BUTTON_STICKR_RIGHT = 25;
+ public static final int PRO_BUTTON_MAX = 26;
- static final int CLASSIC_BUTTON_NONE = 0;
- static final int CLASSIC_BUTTON_A = 1;
- static final int CLASSIC_BUTTON_B = 2;
- static final int CLASSIC_BUTTON_X = 3;
- static final int CLASSIC_BUTTON_Y = 4;
- static final int CLASSIC_BUTTON_L = 5;
- static final int CLASSIC_BUTTON_R = 6;
- static final int CLASSIC_BUTTON_ZL = 7;
- static final int CLASSIC_BUTTON_ZR = 8;
- static final int CLASSIC_BUTTON_PLUS = 9;
- static final int CLASSIC_BUTTON_MINUS = 10;
- static final int CLASSIC_BUTTON_HOME = 11;
- static final int CLASSIC_BUTTON_UP = 12;
- static final int CLASSIC_BUTTON_DOWN = 13;
- static final int CLASSIC_BUTTON_LEFT = 14;
- static final int CLASSIC_BUTTON_RIGHT = 15;
- static final int CLASSIC_BUTTON_STICKL_UP = 16;
- static final int CLASSIC_BUTTON_STICKL_DOWN = 17;
- static final int CLASSIC_BUTTON_STICKL_LEFT = 18;
- static final int CLASSIC_BUTTON_STICKL_RIGHT = 19;
- static final int CLASSIC_BUTTON_STICKR_UP = 20;
- static final int CLASSIC_BUTTON_STICKR_DOWN = 21;
- static final int CLASSIC_BUTTON_STICKR_LEFT = 22;
- static final int CLASSIC_BUTTON_STICKR_RIGHT = 23;
- static final int CLASSIC_BUTTON_MAX = 24;
+ public static final int CLASSIC_BUTTON_NONE = 0;
+ public static final int CLASSIC_BUTTON_A = 1;
+ public static final int CLASSIC_BUTTON_B = 2;
+ public static final int CLASSIC_BUTTON_X = 3;
+ public static final int CLASSIC_BUTTON_Y = 4;
+ public static final int CLASSIC_BUTTON_L = 5;
+ public static final int CLASSIC_BUTTON_R = 6;
+ public static final int CLASSIC_BUTTON_ZL = 7;
+ public static final int CLASSIC_BUTTON_ZR = 8;
+ public static final int CLASSIC_BUTTON_PLUS = 9;
+ public static final int CLASSIC_BUTTON_MINUS = 10;
+ public static final int CLASSIC_BUTTON_HOME = 11;
+ public static final int CLASSIC_BUTTON_UP = 12;
+ public static final int CLASSIC_BUTTON_DOWN = 13;
+ public static final int CLASSIC_BUTTON_LEFT = 14;
+ public static final int CLASSIC_BUTTON_RIGHT = 15;
+ public static final int CLASSIC_BUTTON_STICKL_UP = 16;
+ public static final int CLASSIC_BUTTON_STICKL_DOWN = 17;
+ public static final int CLASSIC_BUTTON_STICKL_LEFT = 18;
+ public static final int CLASSIC_BUTTON_STICKL_RIGHT = 19;
+ public static final int CLASSIC_BUTTON_STICKR_UP = 20;
+ public static final int CLASSIC_BUTTON_STICKR_DOWN = 21;
+ public static final int CLASSIC_BUTTON_STICKR_LEFT = 22;
+ public static final int CLASSIC_BUTTON_STICKR_RIGHT = 23;
+ public static final int CLASSIC_BUTTON_MAX = 24;
- static final int WIIMOTE_BUTTON_NONE = 0;
- static final int WIIMOTE_BUTTON_A = 1;
- static final int WIIMOTE_BUTTON_B = 2;
- static final int WIIMOTE_BUTTON_1 = 3;
- static final int WIIMOTE_BUTTON_2 = 4;
- static final int WIIMOTE_BUTTON_NUNCHUCK_Z = 5;
- static final int WIIMOTE_BUTTON_NUNCHUCK_C = 6;
- static final int WIIMOTE_BUTTON_PLUS = 7;
- static final int WIIMOTE_BUTTON_MINUS = 8;
- static final int WIIMOTE_BUTTON_UP = 9;
- static final int WIIMOTE_BUTTON_DOWN = 10;
- static final int WIIMOTE_BUTTON_LEFT = 11;
- static final int WIIMOTE_BUTTON_RIGHT = 12;
- static final int WIIMOTE_BUTTON_NUNCHUCK_UP = 13;
- static final int WIIMOTE_BUTTON_NUNCHUCK_DOWN = 14;
- static final int WIIMOTE_BUTTON_NUNCHUCK_LEFT = 15;
- static final int WIIMOTE_BUTTON_NUNCHUCK_RIGHT = 16;
- static final int WIIMOTE_BUTTON_HOME = 17;
- static final int WIIMOTE_BUTTON_MAX = 18;
+ public static final int WIIMOTE_BUTTON_NONE = 0;
+ public static final int WIIMOTE_BUTTON_A = 1;
+ public static final int WIIMOTE_BUTTON_B = 2;
+ public static final int WIIMOTE_BUTTON_1 = 3;
+ public static final int WIIMOTE_BUTTON_2 = 4;
+ public static final int WIIMOTE_BUTTON_NUNCHUCK_Z = 5;
+ public static final int WIIMOTE_BUTTON_NUNCHUCK_C = 6;
+ public static final int WIIMOTE_BUTTON_PLUS = 7;
+ public static final int WIIMOTE_BUTTON_MINUS = 8;
+ public static final int WIIMOTE_BUTTON_UP = 9;
+ public static final int WIIMOTE_BUTTON_DOWN = 10;
+ public static final int WIIMOTE_BUTTON_LEFT = 11;
+ public static final int WIIMOTE_BUTTON_RIGHT = 12;
+ public static final int WIIMOTE_BUTTON_NUNCHUCK_UP = 13;
+ public static final int WIIMOTE_BUTTON_NUNCHUCK_DOWN = 14;
+ public static final int WIIMOTE_BUTTON_NUNCHUCK_LEFT = 15;
+ public static final int WIIMOTE_BUTTON_NUNCHUCK_RIGHT = 16;
+ public static final int WIIMOTE_BUTTON_HOME = 17;
+ public static final int WIIMOTE_BUTTON_MAX = 18;
- static final int EMULATED_CONTROLLER_TYPE_VPAD = 0;
- static final int EMULATED_CONTROLLER_TYPE_PRO = 1;
- static final int EMULATED_CONTROLLER_TYPE_CLASSIC = 2;
- static final int EMULATED_CONTROLLER_TYPE_WIIMOTE = 3;
- static final int EMULATED_CONTROLLER_TYPE_DISABLED = -1;
+ public static final int EMULATED_CONTROLLER_TYPE_VPAD = 0;
+ public static final int EMULATED_CONTROLLER_TYPE_PRO = 1;
+ public static final int EMULATED_CONTROLLER_TYPE_CLASSIC = 2;
+ public static final int EMULATED_CONTROLLER_TYPE_WIIMOTE = 3;
+ public static final int EMULATED_CONTROLLER_TYPE_DISABLED = -1;
- static final int DPAD_UP = 34;
- static final int DPAD_DOWN = 35;
- static final int DPAD_LEFT = 36;
- static final int DPAD_RIGHT = 37;
- static final int AXIS_X_POS = 38;
- static final int AXIS_Y_POS = 39;
- static final int ROTATION_X_POS = 40;
- static final int ROTATION_Y_POS = 41;
- static final int TRIGGER_X_POS = 42;
- static final int TRIGGER_Y_POS = 43;
- static final int AXIS_X_NEG = 44;
- static final int AXIS_Y_NEG = 45;
- static final int ROTATION_X_NEG = 46;
- static final int ROTATION_Y_NEG = 47;
+ public static final int DPAD_UP = 34;
+ public static final int DPAD_DOWN = 35;
+ public static final int DPAD_LEFT = 36;
+ public static final int DPAD_RIGHT = 37;
+ public static final int AXIS_X_POS = 38;
+ public static final int AXIS_Y_POS = 39;
+ public static final int ROTATION_X_POS = 40;
+ public static final int ROTATION_Y_POS = 41;
+ public static final int TRIGGER_X_POS = 42;
+ public static final int TRIGGER_Y_POS = 43;
+ public static final int AXIS_X_NEG = 44;
+ public static final int AXIS_Y_NEG = 45;
+ public static final int ROTATION_X_NEG = 46;
+ public static final int ROTATION_Y_NEG = 47;
- static final int MAX_CONTROLLERS = 8;
- static final int MAX_VPAD_CONTROLLERS = 2;
- static final int MAX_WPAD_CONTROLLERS = 7;
-
- public static int controllerTypeToResourceNameId(int type) {
- return switch (type) {
- case EMULATED_CONTROLLER_TYPE_DISABLED -> R.string.disabled;
- case EMULATED_CONTROLLER_TYPE_VPAD -> R.string.vpad_controller;
- case EMULATED_CONTROLLER_TYPE_PRO -> R.string.pro_controller;
- case EMULATED_CONTROLLER_TYPE_WIIMOTE -> R.string.wiimote_controller;
- case EMULATED_CONTROLLER_TYPE_CLASSIC -> R.string.classic_controller;
- default -> throw new RuntimeException("Invalid controller type: " + type);
- };
- }
+ public static final int MAX_CONTROLLERS = 8;
+ public static final int MAX_VPAD_CONTROLLERS = 2;
+ public static final int MAX_WPAD_CONTROLLERS = 7;
public static native void setControllerType(int index, int emulatedControllerType);
@@ -238,18 +210,9 @@ public class NativeLibrary {
public static native void setAsyncShaderCompile(boolean enabled);
- static final int VSYNC_MODE_OFF = 0;
- static final int VSYNC_MODE_DOUBLE_BUFFERING = 1;
- static final int VSYNC_MODE_TRIPLE_BUFFERING = 2;
-
- public static int vsyncModeToResourceNameId(int vsyncMode) {
- return switch (vsyncMode) {
- case VSYNC_MODE_OFF -> R.string.off;
- case VSYNC_MODE_DOUBLE_BUFFERING -> R.string.double_buffering;
- case VSYNC_MODE_TRIPLE_BUFFERING -> R.string.triple_buffering;
- default -> throw new RuntimeException("Invalid vsync mode: " + vsyncMode);
- };
- }
+ public static final int VSYNC_MODE_OFF = 0;
+ public static final int VSYNC_MODE_DOUBLE_BUFFERING = 1;
+ public static final int VSYNC_MODE_TRIPLE_BUFFERING = 2;
public static native int getVSyncMode();
@@ -263,25 +226,16 @@ public class NativeLibrary {
public static native void setAudioDeviceEnabled(boolean enabled, boolean tv);
- static final int AUDIO_CHANNELS_MONO = 0;
- static final int AUDIO_CHANNELS_STEREO = 1;
- static final int AUDIO_CHANNELS_SURROUND = 2;
-
- public static int channelsToResourceNameId(int channels) {
- return switch (channels) {
- case AUDIO_CHANNELS_MONO -> R.string.mono;
- case AUDIO_CHANNELS_STEREO -> R.string.stereo;
- case AUDIO_CHANNELS_SURROUND -> R.string.surround;
- default -> throw new RuntimeException("Invalid channels type: " + channels);
- };
- }
+ public static final int AUDIO_CHANNELS_MONO = 0;
+ public static final int AUDIO_CHANNELS_STEREO = 1;
+ public static final int AUDIO_CHANNELS_SURROUND = 2;
public static native void setAudioDeviceChannels(int channels, boolean tv);
public static native int getAudioDeviceChannels(boolean tv);
- static final int AUDIO_MIN_VOLUME = 0;
- static final int AUDIO_MAX_VOLUME = 100;
+ public static final int AUDIO_MIN_VOLUME = 0;
+ public static final int AUDIO_MAX_VOLUME = 100;
public static native void setAudioDeviceVolume(int volume, boolean tv);
@@ -325,7 +279,7 @@ public class NativeLibrary {
public void setActivePreset(String activePreset) {
if (presets.stream().noneMatch(s -> s.equals(activePreset)))
- throw new RuntimeException("Trying to set an invalid preset: " + activePreset);
+ throw new IllegalArgumentException ("Trying to set an invalid preset: " + activePreset);
setGraphicPackActivePreset(graphicPackId, category, activePreset);
this.activePreset = activePreset;
}
@@ -382,27 +336,13 @@ public class NativeLibrary {
public static native void onOverlayAxis(int controllerIndex, int mappingId, float value);
- static final int OVERLAY_SCREEN_POSITION_DISABLED = 0;
- static final int OVERLAY_SCREEN_POSITION_TOP_LEFT = 1;
- static final int OVERLAY_SCREEN_POSITION_TOP_CENTER = 2;
- static final int OVERLAY_SCREEN_POSITION_TOP_RIGHT = 3;
- static final int OVERLAY_SCREEN_POSITION_BOTTOM_LEFT = 4;
- static final int OVERLAY_SCREEN_POSITION_BOTTOM_CENTER = 5;
- static final int OVERLAY_SCREEN_POSITION_BOTTOM_RIGHT = 6;
-
- public static int overlayScreenPositionToResourceNameId(int overlayScreenPosition) {
- return switch (overlayScreenPosition) {
- case OVERLAY_SCREEN_POSITION_DISABLED -> R.string.overlay_position_disabled;
- case OVERLAY_SCREEN_POSITION_TOP_LEFT -> R.string.overlay_position_top_left;
- case OVERLAY_SCREEN_POSITION_TOP_CENTER -> R.string.overlay_position_top_center;
- case OVERLAY_SCREEN_POSITION_TOP_RIGHT -> R.string.overlay_position_top_right;
- case OVERLAY_SCREEN_POSITION_BOTTOM_LEFT -> R.string.overlay_position_bottom_left;
- case OVERLAY_SCREEN_POSITION_BOTTOM_CENTER -> R.string.overlay_position_bottom_center;
- case OVERLAY_SCREEN_POSITION_BOTTOM_RIGHT -> R.string.overlay_position_bottom_right;
- default ->
- throw new RuntimeException("Invalid overlay position: " + overlayScreenPosition);
- };
- }
+ public static final int OVERLAY_SCREEN_POSITION_DISABLED = 0;
+ public static final int OVERLAY_SCREEN_POSITION_TOP_LEFT = 1;
+ public static final int OVERLAY_SCREEN_POSITION_TOP_CENTER = 2;
+ public static final int OVERLAY_SCREEN_POSITION_TOP_RIGHT = 3;
+ public static final int OVERLAY_SCREEN_POSITION_BOTTOM_LEFT = 4;
+ public static final int OVERLAY_SCREEN_POSITION_BOTTOM_CENTER = 5;
+ public static final int OVERLAY_SCREEN_POSITION_BOTTOM_RIGHT = 6;
public static native int getOverlayPosition();
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/EmulationActivity.java b/src/android/app/src/main/java/info/cemu/Cemu/emulation/EmulationActivity.java
similarity index 93%
rename from src/android/app/src/main/java/info/cemu/Cemu/EmulationActivity.java
rename to src/android/app/src/main/java/info/cemu/Cemu/emulation/EmulationActivity.java
index d0a5e1a5..a696cb57 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/EmulationActivity.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/emulation/EmulationActivity.java
@@ -1,21 +1,19 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.emulation;
-import androidx.appcompat.app.AlertDialog;
-import androidx.appcompat.app.AppCompatActivity;
-import androidx.core.view.WindowCompat;
-import androidx.core.view.WindowInsetsAnimationCompat;
-import androidx.core.view.WindowInsetsCompat;
-import androidx.core.view.WindowInsetsControllerCompat;
-
-import android.content.DialogInterface;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.MotionEvent;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.view.WindowCompat;
+import androidx.core.view.WindowInsetsCompat;
+import androidx.core.view.WindowInsetsControllerCompat;
+
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.ActivityEmulationBinding;
-import info.cemu.Cemu.databinding.ActivityMainBinding;
+import info.cemu.Cemu.input.InputManager;
public class EmulationActivity extends AppCompatActivity {
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/EmulationFragment.java b/src/android/app/src/main/java/info/cemu/Cemu/emulation/EmulationFragment.java
similarity index 86%
rename from src/android/app/src/main/java/info/cemu/Cemu/EmulationFragment.java
rename to src/android/app/src/main/java/info/cemu/Cemu/emulation/EmulationFragment.java
index 6906a12c..31e636f2 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/EmulationFragment.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/emulation/EmulationFragment.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.emulation;
import android.content.Context;
import android.os.Bundle;
@@ -10,9 +10,14 @@ import android.view.ViewGroup;
import android.widget.Toast;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.FragmentEmulationBinding;
+import info.cemu.Cemu.inputoverlay.InputOverlaySettingsProvider;
+import info.cemu.Cemu.inputoverlay.InputOverlaySurfaceView;
+import info.cemu.Cemu.NativeLibrary;
public class EmulationFragment extends Fragment implements SurfaceHolder.Callback {
private final long gameTitleId;
@@ -24,14 +29,19 @@ public class EmulationFragment extends Fragment implements SurfaceHolder.Callbac
this.gameTitleId = gameTitleId;
}
+ InputOverlaySettingsProvider.OverlaySettings overlaySettings;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ var inputOverlaySettingsProvider = new InputOverlaySettingsProvider(requireContext());
+ overlaySettings = inputOverlaySettingsProvider.getOverlaySettings();
+ }
+
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
FragmentEmulationBinding binding = FragmentEmulationBinding.inflate(inflater, container, false);
- var context = requireContext();
- var sharedPref = context.getSharedPreferences(
- context.getString(R.string.inputoverlaysettings_shared_preferences_name), Context.MODE_PRIVATE);
- var inputOverlaySettingsProvider = new InputOverlaySettingsProvider(sharedPref);
- var overlaySettings = inputOverlaySettingsProvider.getOverlaySettings();
+
InputOverlaySurfaceView surfaceView = binding.inputOverlay;
binding.inputModeButton.setOnClickListener(v -> {
InputOverlaySurfaceView.InputMode nextMode = InputOverlaySurfaceView.InputMode.DEFAULT;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/Game.java b/src/android/app/src/main/java/info/cemu/Cemu/gameview/Game.java
similarity index 93%
rename from src/android/app/src/main/java/info/cemu/Cemu/Game.java
rename to src/android/app/src/main/java/info/cemu/Cemu/gameview/Game.java
index c699be7c..4af88106 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/Game.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/gameview/Game.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.gameview;
import android.graphics.Bitmap;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/GameAdapter.java b/src/android/app/src/main/java/info/cemu/Cemu/gameview/GameAdapter.java
similarity index 98%
rename from src/android/app/src/main/java/info/cemu/Cemu/GameAdapter.java
rename to src/android/app/src/main/java/info/cemu/Cemu/gameview/GameAdapter.java
index 6605b9ca..4ef3b471 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/GameAdapter.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/gameview/GameAdapter.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.gameview;
import android.graphics.Bitmap;
import android.view.LayoutInflater;
@@ -18,6 +18,8 @@ import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import info.cemu.Cemu.R;
+
public class GameAdapter extends RecyclerView.Adapter implements Filterable {
private final Map gameInfoMap;
private final List gameTitleIds;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/GamesFragment.java b/src/android/app/src/main/java/info/cemu/Cemu/gameview/GamesFragment.java
similarity index 87%
rename from src/android/app/src/main/java/info/cemu/Cemu/GamesFragment.java
rename to src/android/app/src/main/java/info/cemu/Cemu/gameview/GamesFragment.java
index b728e271..cd660f48 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/GamesFragment.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/gameview/GamesFragment.java
@@ -1,8 +1,6 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.gameview;
-import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.text.Editable;
@@ -17,23 +15,28 @@ import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.FragmentGamesBinding;
+import info.cemu.Cemu.emulation.EmulationActivity;
+import info.cemu.Cemu.NativeLibrary;
+import info.cemu.Cemu.settings.SettingsActivity;
+import info.cemu.Cemu.settings.SettingsManager;
public class GamesFragment extends Fragment {
- FragmentGamesBinding binding;
- GameAdapter gameAdapter;
+ private FragmentGamesBinding binding;
+ private GameAdapter gameAdapter;
+ private SettingsManager settingsManager;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
+ settingsManager = new SettingsManager(requireContext());
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
binding = FragmentGamesBinding.inflate(inflater, container, false);
-
- SharedPreferences cemuPreferences = requireActivity().getSharedPreferences(CemuPreferences.PREFERENCES_NAME, Context.MODE_PRIVATE);
- String gamesPath = cemuPreferences.getString(CemuPreferences.GAMES_PATH_KEY, null);
+ String gamesPath = settingsManager.getGamesPath();
if (gamesPath != null)
NativeLibrary.addGamePath(gamesPath);
RecyclerView recyclerView = binding.gamesRecyclerView;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/BaseSelectionAdapter.java b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/BaseSelectionAdapter.java
similarity index 90%
rename from src/android/app/src/main/java/info/cemu/Cemu/BaseSelectionAdapter.java
rename to src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/BaseSelectionAdapter.java
index cb51c034..c922b42c 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/BaseSelectionAdapter.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/BaseSelectionAdapter.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.guibasecomponents;
import android.view.LayoutInflater;
import android.view.View;
@@ -7,10 +7,7 @@ import android.widget.BaseAdapter;
import com.google.android.material.radiobutton.MaterialRadioButton;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.OptionalInt;
-import java.util.stream.IntStream;
+import info.cemu.Cemu.R;
public abstract class BaseSelectionAdapter extends BaseAdapter {
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/BaseSingleSelectionRecyclerViewItem.java b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/BaseSingleSelectionRecyclerViewItem.java
similarity index 97%
rename from src/android/app/src/main/java/info/cemu/Cemu/BaseSingleSelectionRecyclerViewItem.java
rename to src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/BaseSingleSelectionRecyclerViewItem.java
index 94b7c98e..06acc584 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/BaseSingleSelectionRecyclerViewItem.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/BaseSingleSelectionRecyclerViewItem.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.guibasecomponents;
import android.view.LayoutInflater;
import android.view.View;
@@ -9,6 +9,8 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+import info.cemu.Cemu.R;
+
public abstract class BaseSingleSelectionRecyclerViewItem implements RecyclerViewItem {
private static class SingleSelectionViewHolder extends RecyclerView.ViewHolder {
TextView label;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/ButtonRecyclerViewItem.java b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/ButtonRecyclerViewItem.java
similarity index 96%
rename from src/android/app/src/main/java/info/cemu/Cemu/ButtonRecyclerViewItem.java
rename to src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/ButtonRecyclerViewItem.java
index 4ccb0345..5edbb15f 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/ButtonRecyclerViewItem.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/ButtonRecyclerViewItem.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.guibasecomponents;
import android.view.LayoutInflater;
import android.view.View;
@@ -7,6 +7,8 @@ import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
+import info.cemu.Cemu.R;
+
public class ButtonRecyclerViewItem implements RecyclerViewItem {
public interface OnButtonClickListener {
void onButtonClick();
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/CheckboxRecyclerViewItem.java b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/CheckboxRecyclerViewItem.java
similarity index 97%
rename from src/android/app/src/main/java/info/cemu/Cemu/CheckboxRecyclerViewItem.java
rename to src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/CheckboxRecyclerViewItem.java
index 4747f296..688f53cb 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/CheckboxRecyclerViewItem.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/CheckboxRecyclerViewItem.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.guibasecomponents;
import android.view.LayoutInflater;
import android.view.View;
@@ -9,6 +9,8 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.checkbox.MaterialCheckBox;
+import info.cemu.Cemu.R;
+
public class CheckboxRecyclerViewItem implements RecyclerViewItem {
public interface OnCheckedChangeListener {
void onCheckChanged(boolean checked);
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/GenericRecyclerViewAdapter.java b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/GenericRecyclerViewAdapter.java
similarity index 96%
rename from src/android/app/src/main/java/info/cemu/Cemu/GenericRecyclerViewAdapter.java
rename to src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/GenericRecyclerViewAdapter.java
index 3ec8918b..3a1bbd64 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/GenericRecyclerViewAdapter.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/GenericRecyclerViewAdapter.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.guibasecomponents;
import android.view.ViewGroup;
@@ -7,7 +7,6 @@ import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
-import java.util.function.Predicate;
public class GenericRecyclerViewAdapter extends RecyclerView.Adapter {
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/HeaderRecyclerViewItem.java b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/HeaderRecyclerViewItem.java
similarity index 94%
rename from src/android/app/src/main/java/info/cemu/Cemu/HeaderRecyclerViewItem.java
rename to src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/HeaderRecyclerViewItem.java
index 95f5c610..32dbb06b 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/HeaderRecyclerViewItem.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/HeaderRecyclerViewItem.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.guibasecomponents;
import android.view.LayoutInflater;
import android.view.View;
@@ -7,6 +7,8 @@ import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
+import info.cemu.Cemu.R;
+
public class HeaderRecyclerViewItem implements RecyclerViewItem {
private static class HeaderViewHolder extends RecyclerView.ViewHolder {
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/RecyclerViewItem.java b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/RecyclerViewItem.java
similarity index 87%
rename from src/android/app/src/main/java/info/cemu/Cemu/RecyclerViewItem.java
rename to src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/RecyclerViewItem.java
index a2fa95c3..ce348dac 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/RecyclerViewItem.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/RecyclerViewItem.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.guibasecomponents;
import android.view.ViewGroup;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/SelectionAdapter.java b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/SelectionAdapter.java
similarity index 84%
rename from src/android/app/src/main/java/info/cemu/Cemu/SelectionAdapter.java
rename to src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/SelectionAdapter.java
index 12b320a7..1239a72f 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/SelectionAdapter.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/SelectionAdapter.java
@@ -1,20 +1,13 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.guibasecomponents;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
import android.widget.TextView;
-import androidx.annotation.StringRes;
-
import com.google.android.material.radiobutton.MaterialRadioButton;
import java.util.ArrayList;
import java.util.List;
import java.util.OptionalInt;
import java.util.function.Consumer;
-import java.util.function.Function;
import java.util.stream.IntStream;
public class SelectionAdapter extends BaseSelectionAdapter {
@@ -49,7 +42,7 @@ public class SelectionAdapter extends BaseSelectionAdapter {
public int getPositionOf(T value) {
OptionalInt optionalInt = IntStream.range(0, choiceItems.size()).filter(position -> choiceItems.get(position).choiceValue.equals(value)).findFirst();
if (!optionalInt.isPresent())
- throw new RuntimeException("value " + value + " was not found in the list of choiceItems");
+ throw new IllegalArgumentException("value " + value + " was not found in the list of choiceItems");
return optionalInt.getAsInt();
}
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/SimpleButtonRecyclerViewItem.java b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/SimpleButtonRecyclerViewItem.java
similarity index 96%
rename from src/android/app/src/main/java/info/cemu/Cemu/SimpleButtonRecyclerViewItem.java
rename to src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/SimpleButtonRecyclerViewItem.java
index 16fb8607..b0256be3 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/SimpleButtonRecyclerViewItem.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/SimpleButtonRecyclerViewItem.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.guibasecomponents;
import android.view.LayoutInflater;
import android.view.View;
@@ -7,6 +7,8 @@ import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
+import info.cemu.Cemu.R;
+
public class SimpleButtonRecyclerViewItem implements RecyclerViewItem {
public interface OnButtonClickListener {
void onButtonClick();
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/SingleSelectionRecyclerViewItem.java b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/SingleSelectionRecyclerViewItem.java
similarity index 98%
rename from src/android/app/src/main/java/info/cemu/Cemu/SingleSelectionRecyclerViewItem.java
rename to src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/SingleSelectionRecyclerViewItem.java
index bb8e4b65..9d4d1b31 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/SingleSelectionRecyclerViewItem.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/SingleSelectionRecyclerViewItem.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.guibasecomponents;
import android.view.LayoutInflater;
import android.view.View;
@@ -10,6 +10,8 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+import info.cemu.Cemu.R;
+
public class SingleSelectionRecyclerViewItem implements RecyclerViewItem {
private static class SingleSelectionViewHolder extends RecyclerView.ViewHolder {
TextView label;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/SliderRecyclerViewItem.java b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/SliderRecyclerViewItem.java
similarity index 97%
rename from src/android/app/src/main/java/info/cemu/Cemu/SliderRecyclerViewItem.java
rename to src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/SliderRecyclerViewItem.java
index 3d3703ef..adb0ccec 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/SliderRecyclerViewItem.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/SliderRecyclerViewItem.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.guibasecomponents;
import android.view.LayoutInflater;
import android.view.View;
@@ -10,6 +10,8 @@ import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.slider.LabelFormatter;
import com.google.android.material.slider.Slider;
+import info.cemu.Cemu.R;
+
public class SliderRecyclerViewItem implements RecyclerViewItem {
public interface OnChangeListener {
void onChange(float value);
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/StringSelectionAdapter.java b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/StringSelectionAdapter.java
similarity index 88%
rename from src/android/app/src/main/java/info/cemu/Cemu/StringSelectionAdapter.java
rename to src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/StringSelectionAdapter.java
index 8ae51e4c..65a1c5a5 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/StringSelectionAdapter.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/guibasecomponents/StringSelectionAdapter.java
@@ -1,8 +1,7 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.guibasecomponents;
import com.google.android.material.radiobutton.MaterialRadioButton;
-import java.util.ArrayList;
import java.util.List;
import java.util.OptionalInt;
import java.util.stream.IntStream;
@@ -25,7 +24,7 @@ public class StringSelectionAdapter extends BaseSelectionAdapter {
public int getPositionOf(String value) {
OptionalInt optionalInt = IntStream.range(0, choices.size()).filter(position -> choices.get(position).equals(value)).findFirst();
if (!optionalInt.isPresent())
- throw new RuntimeException("value " + value + " was not found in the list of choices");
+ throw new IllegalArgumentException("value " + value + " was not found in the list of choices");
return optionalInt.getAsInt();
}
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/InputManager.java b/src/android/app/src/main/java/info/cemu/Cemu/input/InputManager.java
similarity index 97%
rename from src/android/app/src/main/java/info/cemu/Cemu/InputManager.java
rename to src/android/app/src/main/java/info/cemu/Cemu/input/InputManager.java
index 8c34daee..a87d92ea 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/InputManager.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/input/InputManager.java
@@ -1,10 +1,12 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.input;
import android.util.Log;
import android.view.InputDevice;
import android.view.KeyEvent;
import android.view.MotionEvent;
+import info.cemu.Cemu.NativeLibrary;
+
public class InputManager {
private static class InvalidAxisException extends Exception {
public InvalidAxisException(int axis) {
@@ -108,13 +110,11 @@ public class InputManager {
float axisValue = event.getAxisValue(motionRange.getAxis(), actionPointerIndex);
int axis = motionRange.getAxis();
NativeLibrary.onNativeAxis(device.getDescriptor(), device.getName(), axis, axisValue);
- Log.i(getClass().getName(), "Axis: " + axis + " value: " + axisValue);
}
return true;
}
public boolean mapKeyEventToMappingId(int controllerIndex, int mappingId, KeyEvent event) {
- Log.i(getClass().getName(), event.toString());
InputDevice device = event.getDevice();
NativeLibrary.setControllerMapping(device.getDescriptor(), device.getName(), controllerIndex, mappingId, event.getKeyCode());
return true;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/Button.java b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/Button.java
similarity index 98%
rename from src/android/app/src/main/java/info/cemu/Cemu/Button.java
rename to src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/Button.java
index cee9858b..2cf26b79 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/Button.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/Button.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.inputoverlay;
import android.content.res.Resources;
import android.graphics.Canvas;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/ButtonStateChangeListener.java b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/ButtonStateChangeListener.java
similarity index 78%
rename from src/android/app/src/main/java/info/cemu/Cemu/ButtonStateChangeListener.java
rename to src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/ButtonStateChangeListener.java
index 436a0eec..9075eeb3 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/ButtonStateChangeListener.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/ButtonStateChangeListener.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.inputoverlay;
public interface ButtonStateChangeListener {
void onButtonStateChange(InputOverlaySurfaceView.OverlayButton button, boolean state);
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/DPadInput.java b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/DPadInput.java
similarity index 99%
rename from src/android/app/src/main/java/info/cemu/Cemu/DPadInput.java
rename to src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/DPadInput.java
index afaec324..56cb56a6 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/DPadInput.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/DPadInput.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.inputoverlay;
import android.content.res.Resources;
import android.graphics.Canvas;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/Input.java b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/Input.java
similarity index 98%
rename from src/android/app/src/main/java/info/cemu/Cemu/Input.java
rename to src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/Input.java
index cfbe9b4e..8ea980c3 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/Input.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/Input.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.inputoverlay;
import android.graphics.Canvas;
import android.graphics.Paint;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/InputOverlayConfigureActivity.java b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/InputOverlayConfigureActivity.java
similarity index 89%
rename from src/android/app/src/main/java/info/cemu/Cemu/InputOverlayConfigureActivity.java
rename to src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/InputOverlayConfigureActivity.java
index b72aa380..ba8b58a6 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/InputOverlayConfigureActivity.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/InputOverlayConfigureActivity.java
@@ -1,7 +1,9 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.inputoverlay;
-import static info.cemu.Cemu.InputOverlaySurfaceView.InputMode.EDIT_POSITION;
-import static info.cemu.Cemu.InputOverlaySurfaceView.InputMode.EDIT_SIZE;
+
+
+import static info.cemu.Cemu.inputoverlay.InputOverlaySurfaceView.InputMode.EDIT_POSITION;
+import static info.cemu.Cemu.inputoverlay.InputOverlaySurfaceView.InputMode.EDIT_SIZE;
import android.os.Bundle;
import android.widget.Toast;
@@ -11,6 +13,7 @@ import androidx.core.view.WindowCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.core.view.WindowInsetsControllerCompat;
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.ActivityOverlayConfigureBinding;
public class InputOverlayConfigureActivity extends AppCompatActivity {
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/InputOverlaySettingsFragment.java b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/InputOverlaySettingsFragment.java
similarity index 88%
rename from src/android/app/src/main/java/info/cemu/Cemu/InputOverlaySettingsFragment.java
rename to src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/InputOverlaySettingsFragment.java
index cbfe3ae8..8c82e498 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/InputOverlaySettingsFragment.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/InputOverlaySettingsFragment.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.inputoverlay;
import android.content.Context;
@@ -15,7 +15,15 @@ import androidx.fragment.app.Fragment;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.GenericRecyclerViewLayoutBinding;
+import info.cemu.Cemu.guibasecomponents.ButtonRecyclerViewItem;
+import info.cemu.Cemu.guibasecomponents.CheckboxRecyclerViewItem;
+import info.cemu.Cemu.guibasecomponents.GenericRecyclerViewAdapter;
+import info.cemu.Cemu.guibasecomponents.SelectionAdapter;
+import info.cemu.Cemu.guibasecomponents.SingleSelectionRecyclerViewItem;
+import info.cemu.Cemu.guibasecomponents.SliderRecyclerViewItem;
+import info.cemu.Cemu.NativeLibrary;
public class InputOverlaySettingsFragment extends Fragment {
@@ -25,10 +33,7 @@ public class InputOverlaySettingsFragment extends Fragment {
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (overlaySettings == null) {
- var context = requireContext();
- var sharedPref = context.getSharedPreferences(
- context.getString(R.string.inputoverlaysettings_shared_preferences_name), Context.MODE_PRIVATE);
- InputOverlaySettingsProvider inputOverlaySettingsProvider = new InputOverlaySettingsProvider(sharedPref);
+ InputOverlaySettingsProvider inputOverlaySettingsProvider = new InputOverlaySettingsProvider(requireContext());
overlaySettings = inputOverlaySettingsProvider.getOverlaySettings();
}
}
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/InputOverlaySettingsProvider.java b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/InputOverlaySettingsProvider.java
similarity index 97%
rename from src/android/app/src/main/java/info/cemu/Cemu/InputOverlaySettingsProvider.java
rename to src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/InputOverlaySettingsProvider.java
index 9c717388..95d5e14f 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/InputOverlaySettingsProvider.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/InputOverlaySettingsProvider.java
@@ -1,12 +1,15 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.inputoverlay;
+import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Rect;
import java.util.Optional;
import java.util.function.Consumer;
+import info.cemu.Cemu.NativeLibrary;
+
public class InputOverlaySettingsProvider {
public enum Input {
A,
@@ -36,8 +39,8 @@ public class InputOverlaySettingsProvider {
private static final int defaultAlpha = 64;
- public InputOverlaySettingsProvider(SharedPreferences sharedPreferences) {
- this.sharedPreferences = sharedPreferences;
+ public InputOverlaySettingsProvider(Context context) {
+ this.sharedPreferences = context.getSharedPreferences("settings", Context.MODE_PRIVATE);
}
public OverlaySettings getOverlaySettings() {
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/InputOverlaySurfaceView.java b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/InputOverlaySurfaceView.java
similarity index 98%
rename from src/android/app/src/main/java/info/cemu/Cemu/InputOverlaySurfaceView.java
rename to src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/InputOverlaySurfaceView.java
index 188f2cf2..c6b61d58 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/InputOverlaySurfaceView.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/InputOverlaySurfaceView.java
@@ -1,6 +1,5 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.inputoverlay;
-import static info.cemu.Cemu.InputOverlaySurfaceView.InputMode.DEFAULT;
import android.content.Context;
import android.graphics.Canvas;
@@ -14,6 +13,9 @@ import android.view.View;
import java.util.ArrayList;
import java.util.List;
+import info.cemu.Cemu.R;
+import info.cemu.Cemu.NativeLibrary;
+
public class InputOverlaySurfaceView extends SurfaceView implements View.OnTouchListener {
public enum InputMode {
DEFAULT,
@@ -21,7 +23,7 @@ public class InputOverlaySurfaceView extends SurfaceView implements View.OnTouch
EDIT_SIZE,
}
- private InputMode inputMode = DEFAULT;
+ private InputMode inputMode = InputMode.DEFAULT;
public void resetInputs() {
int width = getWidth();
@@ -39,7 +41,7 @@ public class InputOverlaySurfaceView extends SurfaceView implements View.OnTouch
public void setInputMode(InputMode inputMode) {
if (inputs != null) {
- if (this.inputMode != DEFAULT) {
+ if (this.inputMode != InputMode.DEFAULT) {
for (var input : inputs) {
input.saveConfiguration();
}
@@ -100,9 +102,7 @@ public class InputOverlaySurfaceView extends SurfaceView implements View.OnTouch
context.getSystemService(Context.VIBRATOR_SERVICE);
vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
setOnTouchListener(this);
- var sharedPref = context.getSharedPreferences(
- getContext().getString(R.string.inputoverlaysettings_shared_preferences_name), Context.MODE_PRIVATE);
- settingsProvider = new InputOverlaySettingsProvider(sharedPref);
+ settingsProvider = new InputOverlaySettingsProvider(context);
var overlaySettings = settingsProvider.getOverlaySettings();
controllerIndex = overlaySettings.getControllerIndex();
vibrateOnTouch = vibrator != null && vibrator.hasVibrator() && overlaySettings.isVibrateOnTouchEnabled();
@@ -550,7 +550,7 @@ public class InputOverlaySurfaceView extends SurfaceView implements View.OnTouch
@Override
public boolean onTouch(View v, MotionEvent event) {
boolean touchEventProcessed = false;
- if (inputMode == DEFAULT) {
+ if (inputMode == InputMode.DEFAULT) {
for (var input : inputs) {
if (input.onTouch(event)) touchEventProcessed = true;
}
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/Joystick.java b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/Joystick.java
similarity index 99%
rename from src/android/app/src/main/java/info/cemu/Cemu/Joystick.java
rename to src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/Joystick.java
index 190de4f7..3539a97f 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/Joystick.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/Joystick.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.inputoverlay;
import android.content.res.Resources;
import android.graphics.Canvas;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/RectangleButton.java b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/RectangleButton.java
similarity index 96%
rename from src/android/app/src/main/java/info/cemu/Cemu/RectangleButton.java
rename to src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/RectangleButton.java
index 58a0d8a9..b199d6f7 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/RectangleButton.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/RectangleButton.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.inputoverlay;
import android.content.res.Resources;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/RoundButton.java b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/RoundButton.java
similarity index 97%
rename from src/android/app/src/main/java/info/cemu/Cemu/RoundButton.java
rename to src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/RoundButton.java
index fb98bc4c..a4bb0f64 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/RoundButton.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/inputoverlay/RoundButton.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.inputoverlay;
import android.content.res.Resources;
import android.graphics.Rect;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/OptionsFragment.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/OptionsFragment.java
similarity index 81%
rename from src/android/app/src/main/java/info/cemu/Cemu/OptionsFragment.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/OptionsFragment.java
index 184f434d..a0e1f9b1 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/OptionsFragment.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/OptionsFragment.java
@@ -1,10 +1,8 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings;
import static android.app.Activity.RESULT_OK;
-import android.content.Context;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -14,14 +12,28 @@ import android.view.ViewGroup;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.documentfile.provider.DocumentFile;
import androidx.fragment.app.Fragment;
import androidx.navigation.fragment.NavHostFragment;
+import java.util.Objects;
+
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.FragmentOptionsBinding;
+import info.cemu.Cemu.guibasecomponents.ButtonRecyclerViewItem;
+import info.cemu.Cemu.guibasecomponents.GenericRecyclerViewAdapter;
+import info.cemu.Cemu.guibasecomponents.SimpleButtonRecyclerViewItem;
public class OptionsFragment extends Fragment {
private ActivityResultLauncher folderSelectionLauncher;
+ private SettingsManager settingsManager;
+
+ @Override
+ public void onCreate(@Nullable Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ settingsManager = new SettingsManager(requireContext());
+ }
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -31,15 +43,12 @@ public class OptionsFragment extends Fragment {
if (result.getResultCode() == RESULT_OK) {
Intent data = result.getData();
if (data != null) {
- Uri uri = data.getData();
+ Uri uri = Objects.requireNonNull(data.getData());
requireActivity().getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
DocumentFile documentFile = DocumentFile.fromTreeUri(requireContext(), uri);
if (documentFile == null) return;
- String gamePath = documentFile.getUri().toString();
- NativeLibrary.addGamePath(gamePath);
- SharedPreferences.Editor preferencesEditor = requireActivity().getSharedPreferences(CemuPreferences.PREFERENCES_NAME, Context.MODE_PRIVATE).edit();
- preferencesEditor.putString(CemuPreferences.GAMES_PATH_KEY, gamePath);
- preferencesEditor.apply();
+ String gamesPath = documentFile.getUri().toString();
+ settingsManager.setGamesPath(gamesPath);
}
}
});
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/SettingsActivity.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/SettingsActivity.java
similarity index 93%
rename from src/android/app/src/main/java/info/cemu/Cemu/SettingsActivity.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/SettingsActivity.java
index 4a067afb..0648ddfd 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/SettingsActivity.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/SettingsActivity.java
@@ -1,16 +1,14 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings;
import android.os.Bundle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.navigation.NavController;
-import androidx.navigation.NavGraph;
import androidx.navigation.Navigation;
import androidx.navigation.ui.AppBarConfiguration;
import androidx.navigation.ui.NavigationUI;
-import java.util.Objects;
-
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.ActivitySettingsBinding;
public class SettingsActivity extends AppCompatActivity {
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/settings/SettingsManager.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/SettingsManager.java
new file mode 100644
index 00000000..b0d31e45
--- /dev/null
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/SettingsManager.java
@@ -0,0 +1,22 @@
+package info.cemu.Cemu.settings;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+
+public class SettingsManager {
+ public static final String PREFERENCES_NAME = "CEMU_PREFERENCES";
+ public static final String GAMES_PATH_KEY = "GAME_PATHS_KEY";
+ private final SharedPreferences sharedPreferences;
+
+ public SettingsManager(Context context) {
+ sharedPreferences = context.getSharedPreferences(PREFERENCES_NAME, Context.MODE_PRIVATE);
+ }
+
+ public String getGamesPath() {
+ return sharedPreferences.getString(GAMES_PATH_KEY, null);
+ }
+
+ public void setGamesPath(String gamesPath) {
+ sharedPreferences.edit().putString(GAMES_PATH_KEY, gamesPath).apply();
+ }
+}
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/AudioSettingsFragment.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/audio/AudioSettingsFragment.java
similarity index 75%
rename from src/android/app/src/main/java/info/cemu/Cemu/AudioSettingsFragment.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/audio/AudioSettingsFragment.java
index 563c08f7..e0102785 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/AudioSettingsFragment.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/audio/AudioSettingsFragment.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.audio;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -12,10 +12,25 @@ import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.GenericRecyclerViewLayoutBinding;
+import info.cemu.Cemu.guibasecomponents.CheckboxRecyclerViewItem;
+import info.cemu.Cemu.guibasecomponents.GenericRecyclerViewAdapter;
+import info.cemu.Cemu.guibasecomponents.SelectionAdapter;
+import info.cemu.Cemu.guibasecomponents.SingleSelectionRecyclerViewItem;
+import info.cemu.Cemu.guibasecomponents.SliderRecyclerViewItem;
+import info.cemu.Cemu.NativeLibrary;
public class AudioSettingsFragment extends Fragment {
+ private static int channelsToResourceNameId(int channels) {
+ return switch (channels) {
+ case NativeLibrary.AUDIO_CHANNELS_MONO -> R.string.mono;
+ case NativeLibrary.AUDIO_CHANNELS_STEREO -> R.string.stereo;
+ case NativeLibrary.AUDIO_CHANNELS_SURROUND -> R.string.surround;
+ default -> throw new IllegalArgumentException("Invalid channels type: " + channels);
+ };
+ }
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
var binding = GenericRecyclerViewLayoutBinding.inflate(inflater, container, false);
@@ -28,15 +43,15 @@ public class AudioSettingsFragment extends Fragment {
genericRecyclerViewAdapter.addRecyclerViewItem(tvDeviceCheckbox);
var tvChannelsChoices = Stream.of(NativeLibrary.AUDIO_CHANNELS_MONO, NativeLibrary.AUDIO_CHANNELS_STEREO, NativeLibrary.AUDIO_CHANNELS_SURROUND)
- .map(channels -> new SelectionAdapter.ChoiceItem<>(t -> t.setText(NativeLibrary.channelsToResourceNameId(channels)), channels))
+ .map(channels -> new SelectionAdapter.ChoiceItem<>(t -> t.setText(channelsToResourceNameId(channels)), channels))
.collect(Collectors.toList());
int tvChannels = NativeLibrary.getAudioDeviceChannels(true);
SelectionAdapter tvChannelsSelectionAdapter = new SelectionAdapter<>(tvChannelsChoices, tvChannels);
SingleSelectionRecyclerViewItem tvChannelsModeSelection = new SingleSelectionRecyclerViewItem<>(getString(R.string.tv_channels),
- getString(NativeLibrary.channelsToResourceNameId(tvChannels)), tvChannelsSelectionAdapter,
+ getString(channelsToResourceNameId(tvChannels)), tvChannelsSelectionAdapter,
(channels, selectionRecyclerViewItem) -> {
NativeLibrary.setAudioDeviceChannels(channels, true);
- selectionRecyclerViewItem.setDescription(getString(NativeLibrary.channelsToResourceNameId(channels)));
+ selectionRecyclerViewItem.setDescription(getString(channelsToResourceNameId(channels)));
});
genericRecyclerViewAdapter.addRecyclerViewItem(tvChannelsModeSelection);
@@ -53,14 +68,14 @@ public class AudioSettingsFragment extends Fragment {
checked -> NativeLibrary.setAudioDeviceEnabled(checked, true));
genericRecyclerViewAdapter.addRecyclerViewItem(padDeviceCheckbox);
- var gamepadChannelsChoices = List.of(new SelectionAdapter.ChoiceItem<>(t -> t.setText(NativeLibrary.channelsToResourceNameId(NativeLibrary.AUDIO_CHANNELS_STEREO)), NativeLibrary.AUDIO_CHANNELS_STEREO));
+ var gamepadChannelsChoices = List.of(new SelectionAdapter.ChoiceItem<>(t -> t.setText(channelsToResourceNameId(NativeLibrary.AUDIO_CHANNELS_STEREO)), NativeLibrary.AUDIO_CHANNELS_STEREO));
int gamepadChannels = NativeLibrary.getAudioDeviceChannels(false);
SelectionAdapter gamepadChannelsSelectionAdapter = new SelectionAdapter<>(gamepadChannelsChoices, gamepadChannels);
SingleSelectionRecyclerViewItem gamepadChannelsModeSelection = new SingleSelectionRecyclerViewItem<>(getString(R.string.gamepad_channels),
- getString(NativeLibrary.channelsToResourceNameId(gamepadChannels)), gamepadChannelsSelectionAdapter,
+ getString(channelsToResourceNameId(gamepadChannels)), gamepadChannelsSelectionAdapter,
(channels, selectionRecyclerViewItem) -> {
NativeLibrary.setAudioDeviceChannels(channels, false);
- selectionRecyclerViewItem.setDescription(getString(NativeLibrary.channelsToResourceNameId(channels)));
+ selectionRecyclerViewItem.setDescription(getString(channelsToResourceNameId(channels)));
});
genericRecyclerViewAdapter.addRecyclerViewItem(gamepadChannelsModeSelection);
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/GraphicPackItemRecyclerViewItem.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPackItemRecyclerViewItem.java
similarity index 94%
rename from src/android/app/src/main/java/info/cemu/Cemu/GraphicPackItemRecyclerViewItem.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPackItemRecyclerViewItem.java
index 6c957253..f2f02b2e 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/GraphicPackItemRecyclerViewItem.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPackItemRecyclerViewItem.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.graphicpacks;
import android.view.LayoutInflater;
import android.view.View;
@@ -8,6 +8,9 @@ import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
+import info.cemu.Cemu.R;
+import info.cemu.Cemu.guibasecomponents.RecyclerViewItem;
+
public class GraphicPackItemRecyclerViewItem implements RecyclerViewItem {
private static class HeaderViewHolder extends RecyclerView.ViewHolder {
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/GraphicPackRecyclerViewItem.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPackRecyclerViewItem.java
similarity index 92%
rename from src/android/app/src/main/java/info/cemu/Cemu/GraphicPackRecyclerViewItem.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPackRecyclerViewItem.java
index 1a395b8e..b3f24af6 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/GraphicPackRecyclerViewItem.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPackRecyclerViewItem.java
@@ -1,15 +1,17 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.graphicpacks;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
-import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.checkbox.MaterialCheckBox;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
+
+import info.cemu.Cemu.R;
+import info.cemu.Cemu.guibasecomponents.RecyclerViewItem;
+import info.cemu.Cemu.NativeLibrary;
public class GraphicPackRecyclerViewItem implements RecyclerViewItem {
private static class GraphicPackViewHolder extends RecyclerView.ViewHolder {
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/GraphicPacksFragment.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPacksFragment.java
similarity index 94%
rename from src/android/app/src/main/java/info/cemu/Cemu/GraphicPacksFragment.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPacksFragment.java
index ba02cdc7..fed02901 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/GraphicPacksFragment.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPacksFragment.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.graphicpacks;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -16,7 +16,12 @@ import java.util.ArrayList;
import java.util.Objects;
import java.util.stream.IntStream;
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.GenericRecyclerViewLayoutBinding;
+import info.cemu.Cemu.guibasecomponents.GenericRecyclerViewAdapter;
+import info.cemu.Cemu.guibasecomponents.SingleSelectionRecyclerViewItem;
+import info.cemu.Cemu.guibasecomponents.StringSelectionAdapter;
+import info.cemu.Cemu.NativeLibrary;
public class GraphicPacksFragment extends Fragment {
private final GenericRecyclerViewAdapter genericRecyclerViewAdapter = new GenericRecyclerViewAdapter();
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/GraphicPacksRecyclerViewAdapter.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPacksRecyclerViewAdapter.java
similarity index 97%
rename from src/android/app/src/main/java/info/cemu/Cemu/GraphicPacksRecyclerViewAdapter.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPacksRecyclerViewAdapter.java
index bdce8cf4..db1b1434 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/GraphicPacksRecyclerViewAdapter.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPacksRecyclerViewAdapter.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.graphicpacks;
import static java.util.regex.Pattern.CASE_INSENSITIVE;
@@ -17,6 +17,9 @@ import java.util.List;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
+import info.cemu.Cemu.R;
+import info.cemu.Cemu.guibasecomponents.RecyclerViewItem;
+
public class GraphicPacksRecyclerViewAdapter extends RecyclerView.Adapter {
private static class GraphicPackSearchItemRecyclerViewItem implements RecyclerViewItem {
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/GraphicPacksRootFragment.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPacksRootFragment.java
similarity index 98%
rename from src/android/app/src/main/java/info/cemu/Cemu/GraphicPacksRootFragment.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPacksRootFragment.java
index efd3dd4a..7016af5d 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/GraphicPacksRootFragment.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/graphicpacks/GraphicPacksRootFragment.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.graphicpacks;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -38,7 +38,12 @@ import java.util.List;
import java.util.Objects;
import java.util.Optional;
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.GenericRecyclerViewLayoutBinding;
+import info.cemu.Cemu.guibasecomponents.GenericRecyclerViewAdapter;
+import info.cemu.Cemu.NativeLibrary;
+import info.cemu.Cemu.utils.FileUtil;
+import info.cemu.Cemu.utils.ZipUtil;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/GraphicsSettingsFragment.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/graphics/GraphicsSettingsFragment.java
similarity index 68%
rename from src/android/app/src/main/java/info/cemu/Cemu/GraphicsSettingsFragment.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/graphics/GraphicsSettingsFragment.java
index e2ded6f4..f1653508 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/GraphicsSettingsFragment.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/graphics/GraphicsSettingsFragment.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.graphics;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -6,14 +6,29 @@ import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
+import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.GenericRecyclerViewLayoutBinding;
+import info.cemu.Cemu.guibasecomponents.CheckboxRecyclerViewItem;
+import info.cemu.Cemu.guibasecomponents.GenericRecyclerViewAdapter;
+import info.cemu.Cemu.guibasecomponents.SelectionAdapter;
+import info.cemu.Cemu.guibasecomponents.SingleSelectionRecyclerViewItem;
+import info.cemu.Cemu.NativeLibrary;
public class GraphicsSettingsFragment extends Fragment {
+ private static int vsyncModeToResourceNameId(int vsyncMode) {
+ return switch (vsyncMode) {
+ case NativeLibrary.VSYNC_MODE_OFF -> R.string.off;
+ case NativeLibrary.VSYNC_MODE_DOUBLE_BUFFERING -> R.string.double_buffering;
+ case NativeLibrary.VSYNC_MODE_TRIPLE_BUFFERING -> R.string.triple_buffering;
+ default -> throw new IllegalArgumentException("Invalid vsync mode: " + vsyncMode);
+ };
+ }
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -26,14 +41,14 @@ public class GraphicsSettingsFragment extends Fragment {
int vsyncMode = NativeLibrary.getVSyncMode();
var vsyncChoices = Stream.of(NativeLibrary.VSYNC_MODE_OFF, NativeLibrary.VSYNC_MODE_DOUBLE_BUFFERING, NativeLibrary.VSYNC_MODE_TRIPLE_BUFFERING)
- .map(vsync -> new SelectionAdapter.ChoiceItem<>(t -> t.setText(NativeLibrary.vsyncModeToResourceNameId(vsync)), vsync))
+ .map(vsync -> new SelectionAdapter.ChoiceItem<>(t -> t.setText(vsyncModeToResourceNameId(vsync)), vsync))
.collect(Collectors.toList());
SelectionAdapter vsyncSelectionAdapter = new SelectionAdapter<>(vsyncChoices, vsyncMode);
SingleSelectionRecyclerViewItem vsyncModeSelection = new SingleSelectionRecyclerViewItem<>(getString(R.string.vsync),
- getString(NativeLibrary.vsyncModeToResourceNameId(vsyncMode)), vsyncSelectionAdapter,
+ getString(vsyncModeToResourceNameId(vsyncMode)), vsyncSelectionAdapter,
(vsync, selectionRecyclerViewItem) -> {
NativeLibrary.setVSyncMode(vsync);
- selectionRecyclerViewItem.setDescription(getString(NativeLibrary.vsyncModeToResourceNameId(vsync)));
+ selectionRecyclerViewItem.setDescription(getString(vsyncModeToResourceNameId(vsync)));
});
genericRecyclerViewAdapter.addRecyclerViewItem(vsyncModeSelection);
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/ControllerInputsDataProvider.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/ControllerInputsDataProvider.java
similarity index 95%
rename from src/android/app/src/main/java/info/cemu/Cemu/ControllerInputsDataProvider.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/input/ControllerInputsDataProvider.java
index 950f7994..e2b7e05d 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/ControllerInputsDataProvider.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/ControllerInputsDataProvider.java
@@ -1,10 +1,13 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.input;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
+import info.cemu.Cemu.R;
+import info.cemu.Cemu.NativeLibrary;
+
public class ControllerInputsDataProvider {
private int getButtonResourceIdName(int controllerType, int buttonId) {
if (controllerType == NativeLibrary.EMULATED_CONTROLLER_TYPE_VPAD) {
@@ -37,7 +40,7 @@ public class ControllerInputsDataProvider {
case NativeLibrary.VPAD_BUTTON_SCREEN -> R.string.button_screen;
case NativeLibrary.VPAD_BUTTON_HOME -> R.string.button_home;
default ->
- throw new RuntimeException("Invalid buttonId " + buttonId + " for controllerType " + controllerType);
+ throw new IllegalArgumentException("Invalid buttonId " + buttonId + " for controllerType " + controllerType);
};
}
if (controllerType == NativeLibrary.EMULATED_CONTROLLER_TYPE_PRO) {
@@ -68,7 +71,7 @@ public class ControllerInputsDataProvider {
case NativeLibrary.PRO_BUTTON_STICKR_LEFT -> R.string.button_stickr_left;
case NativeLibrary.PRO_BUTTON_STICKR_RIGHT -> R.string.button_stickr_right;
default ->
- throw new RuntimeException("Invalid buttonId " + buttonId + " for controllerType " + controllerType);
+ throw new IllegalArgumentException("Invalid buttonId " + buttonId + " for controllerType " + controllerType);
};
}
if (controllerType == NativeLibrary.EMULATED_CONTROLLER_TYPE_CLASSIC) {
@@ -97,7 +100,7 @@ public class ControllerInputsDataProvider {
case NativeLibrary.CLASSIC_BUTTON_STICKR_LEFT -> R.string.button_stickr_left;
case NativeLibrary.CLASSIC_BUTTON_STICKR_RIGHT -> R.string.button_stickr_right;
default ->
- throw new RuntimeException("Invalid buttonId " + buttonId + " for controllerType " + controllerType);
+ throw new IllegalArgumentException("Invalid buttonId " + buttonId + " for controllerType " + controllerType);
};
}
if (controllerType == NativeLibrary.EMULATED_CONTROLLER_TYPE_WIIMOTE) {
@@ -120,10 +123,10 @@ public class ControllerInputsDataProvider {
case NativeLibrary.WIIMOTE_BUTTON_NUNCHUCK_RIGHT -> R.string.button_nunchuck_right;
case NativeLibrary.WIIMOTE_BUTTON_HOME -> R.string.button_home;
default ->
- throw new RuntimeException("Invalid buttonId " + buttonId + " for controllerType " + controllerType);
+ throw new IllegalArgumentException("Invalid buttonId " + buttonId + " for controllerType " + controllerType);
};
}
- throw new RuntimeException("Invalid controllerType " + controllerType);
+ throw new IllegalArgumentException("Invalid controllerType " + controllerType);
}
public static class ControllerInput {
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/ControllerInputsFragment.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/ControllerInputsFragment.java
similarity index 92%
rename from src/android/app/src/main/java/info/cemu/Cemu/ControllerInputsFragment.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/input/ControllerInputsFragment.java
index 41a93f32..81fc476a 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/ControllerInputsFragment.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/ControllerInputsFragment.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.input;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -15,7 +15,13 @@ import androidx.fragment.app.Fragment;
import java.util.HashMap;
import java.util.Map;
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.GenericRecyclerViewLayoutBinding;
+import info.cemu.Cemu.guibasecomponents.GenericRecyclerViewAdapter;
+import info.cemu.Cemu.guibasecomponents.HeaderRecyclerViewItem;
+import info.cemu.Cemu.guibasecomponents.SingleSelectionRecyclerViewItem;
+import info.cemu.Cemu.input.InputManager;
+import info.cemu.Cemu.NativeLibrary;
public class ControllerInputsFragment extends Fragment {
public static final String CONTROLLER_INDEX = "ControllerIndex";
@@ -37,7 +43,7 @@ public class ControllerInputsFragment extends Fragment {
private void setControllerInputs(Map inputs) {
emulatedControllerTypeAdapter.setSelectedValue(controllerType);
emulatedControllerTypeAdapter.setControllerTypeCounts(NativeLibrary.getVPADControllersCount(), NativeLibrary.getWPADControllersCount());
- String controllerTypeName = getString(NativeLibrary.controllerTypeToResourceNameId(controllerType));
+ String controllerTypeName = getString(ControllerTypeResourceNameMapper.controllerTypeToResourceNameId(controllerType));
SingleSelectionRecyclerViewItem emulatedControllerSelection = new SingleSelectionRecyclerViewItem<>(getString(R.string.emulated_controller_label),
getString(R.string.emulated_controller_selection_description, controllerTypeName),
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/settings/input/ControllerTypeResourceNameMapper.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/ControllerTypeResourceNameMapper.java
new file mode 100644
index 00000000..8ff92075
--- /dev/null
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/ControllerTypeResourceNameMapper.java
@@ -0,0 +1,18 @@
+package info.cemu.Cemu.settings.input;
+
+import info.cemu.Cemu.R;
+import info.cemu.Cemu.NativeLibrary;
+
+public class ControllerTypeResourceNameMapper {
+ public static int controllerTypeToResourceNameId(int type) {
+ return switch (type) {
+ case NativeLibrary.EMULATED_CONTROLLER_TYPE_DISABLED -> R.string.disabled;
+ case NativeLibrary.EMULATED_CONTROLLER_TYPE_VPAD -> R.string.vpad_controller;
+ case NativeLibrary.EMULATED_CONTROLLER_TYPE_PRO -> R.string.pro_controller;
+ case NativeLibrary.EMULATED_CONTROLLER_TYPE_WIIMOTE -> R.string.wiimote_controller;
+ case NativeLibrary.EMULATED_CONTROLLER_TYPE_CLASSIC -> R.string.classic_controller;
+ default -> throw new IllegalArgumentException("Invalid controller type: " + type);
+ };
+ }
+
+}
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/EmulatedControllerTypeAdapter.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/EmulatedControllerTypeAdapter.java
similarity index 85%
rename from src/android/app/src/main/java/info/cemu/Cemu/EmulatedControllerTypeAdapter.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/input/EmulatedControllerTypeAdapter.java
index e86a4a25..e398ea52 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/EmulatedControllerTypeAdapter.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/EmulatedControllerTypeAdapter.java
@@ -1,9 +1,12 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.input;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import info.cemu.Cemu.guibasecomponents.SelectionAdapter;
+import info.cemu.Cemu.NativeLibrary;
+
public class EmulatedControllerTypeAdapter extends SelectionAdapter {
private int vpadCount = 0;
private int wpadCount = 0;
@@ -14,7 +17,7 @@ public class EmulatedControllerTypeAdapter extends SelectionAdapter {
NativeLibrary.EMULATED_CONTROLLER_TYPE_PRO,
NativeLibrary.EMULATED_CONTROLLER_TYPE_CLASSIC,
NativeLibrary.EMULATED_CONTROLLER_TYPE_WIIMOTE)
- .map(type -> new ChoiceItem<>(t->t.setText(NativeLibrary.controllerTypeToResourceNameId(type)), type))
+ .map(type -> new ChoiceItem<>(t->t.setText(ControllerTypeResourceNameMapper.controllerTypeToResourceNameId(type)), type))
.collect(Collectors.toList());
setSelectedValue(NativeLibrary.EMULATED_CONTROLLER_TYPE_DISABLED);
}
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/InputRecyclerViewItem.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/InputRecyclerViewItem.java
similarity index 94%
rename from src/android/app/src/main/java/info/cemu/Cemu/InputRecyclerViewItem.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/input/InputRecyclerViewItem.java
index e026330a..8a7d549b 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/InputRecyclerViewItem.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/InputRecyclerViewItem.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.input;
import android.view.LayoutInflater;
import android.view.View;
@@ -7,6 +7,9 @@ import android.widget.TextView;
import androidx.recyclerview.widget.RecyclerView;
+import info.cemu.Cemu.R;
+import info.cemu.Cemu.guibasecomponents.RecyclerViewItem;
+
public class InputRecyclerViewItem implements RecyclerViewItem {
public interface OnInputClickListener {
void onInputClick(InputRecyclerViewItem inputRecyclerViewItem);
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/InputSettingsFragment.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/InputSettingsFragment.java
similarity index 83%
rename from src/android/app/src/main/java/info/cemu/Cemu/InputSettingsFragment.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/input/InputSettingsFragment.java
index f60af96b..c29b6c8a 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/InputSettingsFragment.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/InputSettingsFragment.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.input;
import android.os.Bundle;
@@ -11,7 +11,12 @@ import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.navigation.fragment.NavHostFragment;
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.GenericRecyclerViewLayoutBinding;
+import info.cemu.Cemu.guibasecomponents.ButtonRecyclerViewItem;
+import info.cemu.Cemu.guibasecomponents.GenericRecyclerViewAdapter;
+import info.cemu.Cemu.guibasecomponents.SimpleButtonRecyclerViewItem;
+import info.cemu.Cemu.NativeLibrary;
public class InputSettingsFragment extends Fragment {
@@ -26,7 +31,7 @@ public class InputSettingsFragment extends Fragment {
for (int index = 0; index < NativeLibrary.MAX_CONTROLLERS; index++) {
int controllerIndex = index;
int controllerType = NativeLibrary.isControllerDisabled(controllerIndex) ? NativeLibrary.EMULATED_CONTROLLER_TYPE_DISABLED : NativeLibrary.getControllerType(controllerIndex);
- String controllerTypeName = getString(NativeLibrary.controllerTypeToResourceNameId(controllerType));
+ String controllerTypeName = getString(ControllerTypeResourceNameMapper.controllerTypeToResourceNameId(controllerType));
ButtonRecyclerViewItem buttonRecyclerViewItem = new ButtonRecyclerViewItem(
getString(R.string.controller_numbered, controllerIndex + 1),
getString(R.string.emulated_controller_with_type, controllerTypeName),
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/MotionDialog.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/MotionDialog.java
similarity index 95%
rename from src/android/app/src/main/java/info/cemu/Cemu/MotionDialog.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/input/MotionDialog.java
index a20bc4c4..195b8759 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/MotionDialog.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/input/MotionDialog.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.input;
import android.app.AlertDialog;
import android.content.Context;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/OverlaySettingsFragment.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/overlay/OverlaySettingsFragment.java
similarity index 68%
rename from src/android/app/src/main/java/info/cemu/Cemu/OverlaySettingsFragment.java
rename to src/android/app/src/main/java/info/cemu/Cemu/settings/overlay/OverlaySettingsFragment.java
index d2dabcb5..83535c24 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/OverlaySettingsFragment.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/overlay/OverlaySettingsFragment.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.settings.overlay;
import android.os.Bundle;
import android.view.LayoutInflater;
@@ -8,14 +8,39 @@ import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
-import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.GenericRecyclerViewLayoutBinding;
+import info.cemu.Cemu.guibasecomponents.CheckboxRecyclerViewItem;
+import info.cemu.Cemu.guibasecomponents.GenericRecyclerViewAdapter;
+import info.cemu.Cemu.guibasecomponents.SelectionAdapter;
+import info.cemu.Cemu.guibasecomponents.SingleSelectionRecyclerViewItem;
+import info.cemu.Cemu.NativeLibrary;
public class OverlaySettingsFragment extends Fragment {
+ private static int overlayScreenPositionToResourceNameId(int overlayScreenPosition) {
+ return switch (overlayScreenPosition) {
+ case NativeLibrary.OVERLAY_SCREEN_POSITION_DISABLED ->
+ R.string.overlay_position_disabled;
+ case NativeLibrary.OVERLAY_SCREEN_POSITION_TOP_LEFT ->
+ R.string.overlay_position_top_left;
+ case NativeLibrary.OVERLAY_SCREEN_POSITION_TOP_CENTER ->
+ R.string.overlay_position_top_center;
+ case NativeLibrary.OVERLAY_SCREEN_POSITION_TOP_RIGHT ->
+ R.string.overlay_position_top_right;
+ case NativeLibrary.OVERLAY_SCREEN_POSITION_BOTTOM_LEFT ->
+ R.string.overlay_position_bottom_left;
+ case NativeLibrary.OVERLAY_SCREEN_POSITION_BOTTOM_CENTER ->
+ R.string.overlay_position_bottom_center;
+ case NativeLibrary.OVERLAY_SCREEN_POSITION_BOTTOM_RIGHT ->
+ R.string.overlay_position_bottom_right;
+ default ->
+ throw new IllegalArgumentException("Invalid overlay position: " + overlayScreenPosition);
+ };
+ }
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -31,15 +56,15 @@ public class OverlaySettingsFragment extends Fragment {
NativeLibrary.OVERLAY_SCREEN_POSITION_BOTTOM_LEFT,
NativeLibrary.OVERLAY_SCREEN_POSITION_BOTTOM_CENTER,
NativeLibrary.OVERLAY_SCREEN_POSITION_BOTTOM_RIGHT)
- .map(position -> new SelectionAdapter.ChoiceItem<>(t -> t.setText(NativeLibrary.overlayScreenPositionToResourceNameId(position)), position))
+ .map(position -> new SelectionAdapter.ChoiceItem<>(t -> t.setText(overlayScreenPositionToResourceNameId(position)), position))
.collect(Collectors.toList());
int overlayPosition = NativeLibrary.getOverlayPosition();
SelectionAdapter tvChannelsSelectionAdapter = new SelectionAdapter<>(overlayPositionChoices, overlayPosition);
SingleSelectionRecyclerViewItem tvChannelsModeSelection = new SingleSelectionRecyclerViewItem<>(getString(R.string.overlay_position),
- getString(NativeLibrary.overlayScreenPositionToResourceNameId(overlayPosition)), tvChannelsSelectionAdapter,
+ getString(overlayScreenPositionToResourceNameId(overlayPosition)), tvChannelsSelectionAdapter,
(position, selectionRecyclerViewItem) -> {
NativeLibrary.setOverlayPosition(position);
- selectionRecyclerViewItem.setDescription(getString(NativeLibrary.overlayScreenPositionToResourceNameId(position)));
+ selectionRecyclerViewItem.setDescription(getString(overlayScreenPositionToResourceNameId(position)));
});
genericRecyclerViewAdapter.addRecyclerViewItem(tvChannelsModeSelection);
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/FileUtil.java b/src/android/app/src/main/java/info/cemu/Cemu/utils/FileUtil.java
similarity index 98%
rename from src/android/app/src/main/java/info/cemu/Cemu/FileUtil.java
rename to src/android/app/src/main/java/info/cemu/Cemu/utils/FileUtil.java
index 50af11b5..35ed1a62 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/FileUtil.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/utils/FileUtil.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.utils;
import android.database.Cursor;
import android.net.Uri;
@@ -11,6 +11,8 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
+import info.cemu.Cemu.CemuApplication;
+
public class FileUtil {
private static final String PATH_SEPARATOR_ENCODED = "%2F";
private static final String PATH_SEPARATOR_DECODED = "/";
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/ProgressResponseBody.java b/src/android/app/src/main/java/info/cemu/Cemu/utils/ProgressResponseBody.java
similarity index 98%
rename from src/android/app/src/main/java/info/cemu/Cemu/ProgressResponseBody.java
rename to src/android/app/src/main/java/info/cemu/Cemu/utils/ProgressResponseBody.java
index d3bf43f3..b70935c0 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/ProgressResponseBody.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/utils/ProgressResponseBody.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.utils;
import androidx.annotation.NonNull;
diff --git a/src/android/app/src/main/java/info/cemu/Cemu/ZipUtil.java b/src/android/app/src/main/java/info/cemu/Cemu/utils/ZipUtil.java
similarity index 97%
rename from src/android/app/src/main/java/info/cemu/Cemu/ZipUtil.java
rename to src/android/app/src/main/java/info/cemu/Cemu/utils/ZipUtil.java
index 754ad2bf..6e256d6c 100644
--- a/src/android/app/src/main/java/info/cemu/Cemu/ZipUtil.java
+++ b/src/android/app/src/main/java/info/cemu/Cemu/utils/ZipUtil.java
@@ -1,4 +1,4 @@
-package info.cemu.Cemu;
+package info.cemu.Cemu.utils;
import java.io.File;
import java.io.FileOutputStream;
diff --git a/src/android/app/src/main/res/layout/activity_emulation.xml b/src/android/app/src/main/res/layout/activity_emulation.xml
index 7d630bff..072d690d 100644
--- a/src/android/app/src/main/res/layout/activity_emulation.xml
+++ b/src/android/app/src/main/res/layout/activity_emulation.xml
@@ -4,7 +4,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:keepScreenOn="true"
- tools:context=".EmulationActivity">
+ tools:context=".emulation.EmulationActivity">
+ tools:context=".inputoverlay.InputOverlayConfigureActivity">
-
diff --git a/src/android/app/src/main/res/layout/activity_settings.xml b/src/android/app/src/main/res/layout/activity_settings.xml
index c8f1f585..5ce93921 100644
--- a/src/android/app/src/main/res/layout/activity_settings.xml
+++ b/src/android/app/src/main/res/layout/activity_settings.xml
@@ -6,7 +6,7 @@
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:orientation="vertical"
- tools:context=".SettingsActivity">
+ tools:context=".settings.SettingsActivity">
+ tools:context=".emulation.EmulationFragment">
-
diff --git a/src/android/app/src/main/res/layout/fragment_options.xml b/src/android/app/src/main/res/layout/fragment_options.xml
index 5929f81d..5efa13c8 100644
--- a/src/android/app/src/main/res/layout/fragment_options.xml
+++ b/src/android/app/src/main/res/layout/fragment_options.xml
@@ -4,7 +4,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context=".OptionsFragment">
+ tools:context=".settings.OptionsFragment">
+ xmlns:tools="http://schemas.android.com/tools">
-
+ xmlns:tools="http://schemas.android.com/tools">
-
\ No newline at end of file
diff --git a/src/android/app/src/main/res/navigation/nav_settings_graph.xml b/src/android/app/src/main/res/navigation/nav_settings_graph.xml
index b5eeb5d1..0fc9a129 100644
--- a/src/android/app/src/main/res/navigation/nav_settings_graph.xml
+++ b/src/android/app/src/main/res/navigation/nav_settings_graph.xml
@@ -6,9 +6,8 @@
app:startDestination="@id/optionsFragment">
+ android:name="info.cemu.Cemu.settings.input.InputSettingsFragment"
+ android:label="@string/input_settings">
@@ -18,18 +17,16 @@
+ android:name="info.cemu.Cemu.settings.graphicpacks.GraphicPacksFragment"
+ android:label="@string/graphic_packs">
+ android:name="info.cemu.Cemu.settings.graphicpacks.GraphicPacksFragment"
+ android:label="{title}">
@@ -40,7 +37,7 @@
+ android:name="info.cemu.Cemu.settings.input.ControllerInputsFragment" />
+ android:name="info.cemu.Cemu.settings.graphics.GraphicsSettingsFragment"
+ android:label="@string/graphics_settings" />
+ android:name="info.cemu.Cemu.settings.audio.AudioSettingsFragment"
+ android:label="@string/audio_settings" />
+ android:name="info.cemu.Cemu.settings.overlay.OverlaySettingsFragment"
+ android:label="@string/overlay_settings" />
+ android:name="info.cemu.Cemu.inputoverlay.InputOverlaySettingsFragment"
+ android:label="@string/input_overlay_settings" />
\ No newline at end of file
diff --git a/src/android/app/src/main/res/values/strings.xml b/src/android/app/src/main/res/values/strings.xml
index 8767ccc5..b0e2c520 100644
--- a/src/android/app/src/main/res/values/strings.xml
+++ b/src/android/app/src/main/res/values/strings.xml
@@ -116,9 +116,6 @@
Edit input positions
Exited input edit mode
Change input mode to move/resize or default
-
- Hello blank fragment
- info.cemu.Cemu.InputOverlaySettings
Overlay controller
Input overlay
Input overlay settings