From c1fc52d169a5dbe7c78734acd0895bfc53388555 Mon Sep 17 00:00:00 2001 From: SSimco <37044560+SSimco@users.noreply.github.com> Date: Sun, 1 Sep 2024 09:47:46 +0300 Subject: [PATCH] Updated overlay settings --- src/android/app/src/main/cpp/native-lib.cpp | 52 ++++++++++++++++ .../java/info/cemu/Cemu/NativeLibrary.java | 22 +++++-- .../overlay/OverlaySettingsFragment.java | 61 ++++++++++++++----- 3 files changed, 114 insertions(+), 21 deletions(-) diff --git a/src/android/app/src/main/cpp/native-lib.cpp b/src/android/app/src/main/cpp/native-lib.cpp index 401ff7d4..61ff916c 100644 --- a/src/android/app/src/main/cpp/native-lib.cpp +++ b/src/android/app/src/main/cpp/native-lib.cpp @@ -518,6 +518,58 @@ Java_info_cemu_Cemu_NativeLibrary_setOverlayDebugEnabled([[maybe_unused]] JNIEnv g_config.Save(); } +extern "C" JNIEXPORT jint JNICALL +Java_info_cemu_Cemu_NativeLibrary_getNotificationsPosition([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz) +{ + return static_cast(g_config.data().notification.position); +} + +extern "C" JNIEXPORT void JNICALL +Java_info_cemu_Cemu_NativeLibrary_setNotificationsPosition([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jint position) +{ + g_config.data().notification.position = static_cast(position); + g_config.Save(); +} + +extern "C" JNIEXPORT jboolean JNICALL +Java_info_cemu_Cemu_NativeLibrary_isNotificationControllerProfilesEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz) +{ + return g_config.data().notification.controller_profiles; +} + +extern "C" JNIEXPORT void JNICALL +Java_info_cemu_Cemu_NativeLibrary_setNotificationControllerProfilesEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean enabled) +{ + g_config.data().notification.controller_profiles = enabled; + g_config.Save(); +} + +extern "C" JNIEXPORT jboolean JNICALL +Java_info_cemu_Cemu_NativeLibrary_isNotificationShaderCompilerEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz) +{ + return g_config.data().notification.shader_compiling; +} + +extern "C" JNIEXPORT void JNICALL +Java_info_cemu_Cemu_NativeLibrary_setNotificationShaderCompilerEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean enabled) +{ + g_config.data().notification.shader_compiling = enabled; + g_config.Save(); +} + +extern "C" JNIEXPORT jboolean JNICALL +Java_info_cemu_Cemu_NativeLibrary_isNotificationFriendListEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz) +{ + return g_config.data().notification.friends; +} + +extern "C" JNIEXPORT void JNICALL +Java_info_cemu_Cemu_NativeLibrary_setNotificationFriendListEnabled([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jboolean enabled) +{ + g_config.data().notification.friends = enabled; + g_config.Save(); +} + extern "C" JNIEXPORT void JNICALL Java_info_cemu_Cemu_NativeLibrary_onTouchDown([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jint x, jint y, jboolean isPad) { 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 e87e1058..2218990b 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 @@ -279,7 +279,7 @@ public class NativeLibrary { public void setActivePreset(String activePreset) { if (presets.stream().noneMatch(s -> s.equals(activePreset))) - throw new IllegalArgumentException ("Trying to set an invalid preset: " + activePreset); + throw new IllegalArgumentException("Trying to set an invalid preset: " + activePreset); setGraphicPackActivePreset(graphicPackId, category, activePreset); this.activePreset = activePreset; } @@ -368,14 +368,26 @@ public class NativeLibrary { public static native void setOverlayRAMUsageEnabled(boolean enabled); - public static native boolean isOverlayVRAMUsageEnabled(); - - public static native void setOverlayVRAMUsageEnabled(boolean enabled); - public static native boolean isOverlayDebugEnabled(); public static native void setOverlayDebugEnabled(boolean enabled); + public static native int getNotificationsPosition(); + + public static native void setNotificationsPosition(int position); + + public static native boolean isNotificationControllerProfilesEnabled(); + + public static native void setNotificationControllerProfilesEnabled(boolean enabled); + + public static native boolean isNotificationShaderCompilerEnabled(); + + public static native void setNotificationShaderCompilerEnabled(boolean enabled); + + public static native boolean isNotificationFriendListEnabled(); + + public static native void setNotificationFriendListEnabled(boolean enabled); + public static native void onTouchDown(int x, int y, boolean isPad); public static native void onTouchMove(int x, int y, boolean isPad); diff --git a/src/android/app/src/main/java/info/cemu/Cemu/settings/overlay/OverlaySettingsFragment.java b/src/android/app/src/main/java/info/cemu/Cemu/settings/overlay/OverlaySettingsFragment.java index 83535c24..f5c50e25 100644 --- a/src/android/app/src/main/java/info/cemu/Cemu/settings/overlay/OverlaySettingsFragment.java +++ b/src/android/app/src/main/java/info/cemu/Cemu/settings/overlay/OverlaySettingsFragment.java @@ -15,6 +15,7 @@ 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.HeaderRecyclerViewItem; import info.cemu.Cemu.guibasecomponents.SelectionAdapter; import info.cemu.Cemu.guibasecomponents.SingleSelectionRecyclerViewItem; import info.cemu.Cemu.NativeLibrary; @@ -59,39 +60,67 @@ public class OverlaySettingsFragment extends Fragment { .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(overlayScreenPositionToResourceNameId(overlayPosition)), tvChannelsSelectionAdapter, + + genericRecyclerViewAdapter.addRecyclerViewItem(new HeaderRecyclerViewItem(R.string.overlay)); + SelectionAdapter overlayPositionSelectionAdapter = new SelectionAdapter<>(overlayPositionChoices, overlayPosition); + SingleSelectionRecyclerViewItem overlayPositionSelection = new SingleSelectionRecyclerViewItem<>(getString(R.string.overlay_position), + getString(overlayScreenPositionToResourceNameId(overlayPosition)), overlayPositionSelectionAdapter, (position, selectionRecyclerViewItem) -> { NativeLibrary.setOverlayPosition(position); selectionRecyclerViewItem.setDescription(getString(overlayScreenPositionToResourceNameId(position))); }); - genericRecyclerViewAdapter.addRecyclerViewItem(tvChannelsModeSelection); + genericRecyclerViewAdapter.addRecyclerViewItem(overlayPositionSelection); - CheckboxRecyclerViewItem overlayFps = new CheckboxRecyclerViewItem(getString(R.string.fps_label), - getString(R.string.fps_description), NativeLibrary.isOverlayFPSEnabled(), + CheckboxRecyclerViewItem overlayFps = new CheckboxRecyclerViewItem(getString(R.string.fps), + getString(R.string.fps_overlay_description), NativeLibrary.isOverlayFPSEnabled(), NativeLibrary::setOverlayFPSEnabled); genericRecyclerViewAdapter.addRecyclerViewItem(overlayFps); - CheckboxRecyclerViewItem drawCallsCheckbox = new CheckboxRecyclerViewItem(getString(R.string.draw_calls_per_frame_label), - getString(R.string.draw_calls_per_frame_label_desription), NativeLibrary.isOverlayDrawCallsPerFrameEnabled(), + CheckboxRecyclerViewItem drawCallsCheckbox = new CheckboxRecyclerViewItem(getString(R.string.draw_calls_per_frame), + getString(R.string.draw_calls_per_frame_overlay_description), NativeLibrary.isOverlayDrawCallsPerFrameEnabled(), NativeLibrary::setOverlayDrawCallsPerFrameEnabled); genericRecyclerViewAdapter.addRecyclerViewItem(drawCallsCheckbox); - CheckboxRecyclerViewItem cpuUsageCheckbox = new CheckboxRecyclerViewItem(getString(R.string.cpu_usage_label), - getString(R.string.cpu_usage_description), NativeLibrary.isOverlayCPUUsageEnabled(), + CheckboxRecyclerViewItem cpuUsageCheckbox = new CheckboxRecyclerViewItem(getString(R.string.cpu_usage), + getString(R.string.cpu_usage_overlay_description), NativeLibrary.isOverlayCPUUsageEnabled(), NativeLibrary::setOverlayCPUUsageEnabled); genericRecyclerViewAdapter.addRecyclerViewItem(cpuUsageCheckbox); - CheckboxRecyclerViewItem ramUsageCheckbox = new CheckboxRecyclerViewItem(getString(R.string.ram_usage_label), - getString(R.string.ram_usage_description), NativeLibrary.isOverlayRAMUsageEnabled(), + CheckboxRecyclerViewItem ramUsageCheckbox = new CheckboxRecyclerViewItem(getString(R.string.ram_usage), + getString(R.string.ram_usage_overlay_description), NativeLibrary.isOverlayRAMUsageEnabled(), NativeLibrary::setOverlayRAMUsageEnabled); genericRecyclerViewAdapter.addRecyclerViewItem(ramUsageCheckbox); - CheckboxRecyclerViewItem vramUsageCheckbox = new CheckboxRecyclerViewItem(getString(R.string.vram_usage_label), - getString(R.string.vram_usage_description), NativeLibrary.isOverlayVRAMUsageEnabled(), - NativeLibrary::setOverlayVRAMUsageEnabled); - genericRecyclerViewAdapter.addRecyclerViewItem(vramUsageCheckbox); + CheckboxRecyclerViewItem debugCheckbox = new CheckboxRecyclerViewItem(getString(R.string.debug), + getString(R.string.debug_overlay_description), NativeLibrary.isOverlayDebugEnabled(), + NativeLibrary::setOverlayDebugEnabled); + genericRecyclerViewAdapter.addRecyclerViewItem(debugCheckbox); + + genericRecyclerViewAdapter.addRecyclerViewItem(new HeaderRecyclerViewItem(R.string.notifications)); + int notificationsPosition = NativeLibrary.getNotificationsPosition(); + SelectionAdapter notificationsPositionSelectionAdapter = new SelectionAdapter<>(overlayPositionChoices, notificationsPosition); + SingleSelectionRecyclerViewItem notificationsPositionSelection = new SingleSelectionRecyclerViewItem<>(getString(R.string.overlay_position), + getString(overlayScreenPositionToResourceNameId(notificationsPosition)), notificationsPositionSelectionAdapter, + (position, selectionRecyclerViewItem) -> { + NativeLibrary.setNotificationsPosition(position); + selectionRecyclerViewItem.setDescription(getString(overlayScreenPositionToResourceNameId(position))); + }); + genericRecyclerViewAdapter.addRecyclerViewItem(notificationsPositionSelection); + + CheckboxRecyclerViewItem controllerProfiles = new CheckboxRecyclerViewItem(getString(R.string.controller_profiles), + getString(R.string.controller_profiles_notification_description), NativeLibrary.isNotificationControllerProfilesEnabled(), + NativeLibrary::setNotificationControllerProfilesEnabled); + genericRecyclerViewAdapter.addRecyclerViewItem(controllerProfiles); + + CheckboxRecyclerViewItem shaderCompiler = new CheckboxRecyclerViewItem(getString(R.string.shader_compiler), + getString(R.string.shader_compiler_notification_description), NativeLibrary.isNotificationShaderCompilerEnabled(), + NativeLibrary::setNotificationShaderCompilerEnabled); + genericRecyclerViewAdapter.addRecyclerViewItem(shaderCompiler); + + CheckboxRecyclerViewItem friendList = new CheckboxRecyclerViewItem(getString(R.string.friend_list), + getString(R.string.friend_list_notification_description), NativeLibrary.isNotificationFriendListEnabled(), + NativeLibrary::setNotificationFriendListEnabled); + genericRecyclerViewAdapter.addRecyclerViewItem(friendList); binding.recyclerView.setAdapter(genericRecyclerViewAdapter);