Added option to set the console language

This commit is contained in:
SSimco
2024-10-17 19:13:37 +03:00
parent c68665a1b4
commit 669fb5533d
7 changed files with 144 additions and 12 deletions
@@ -346,4 +346,17 @@ Java_info_cemu_Cemu_nativeinterface_NativeSettings_setAudioLatency([[maybe_unuse
{
g_config.data().audio_delay = latency;
g_config.Save();
}
extern "C" [[maybe_unused]] JNIEXPORT jint JNICALL
Java_info_cemu_Cemu_nativeinterface_NativeSettings_getConsoleLanguage([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz)
{
return static_cast<jint>(g_config.data().console_language.GetValue());
}
extern "C" [[maybe_unused]] JNIEXPORT void JNICALL
Java_info_cemu_Cemu_nativeinterface_NativeSettings_setConsoleLanguage([[maybe_unused]] JNIEnv* env, [[maybe_unused]] jclass clazz, jint console_language)
{
g_config.data().console_language = static_cast<CafeConsoleLanguage>(console_language);
g_config.Save();
}
@@ -133,4 +133,21 @@ public class NativeSettings {
public static native boolean isNotificationFriendListEnabled();
public static native void setNotificationFriendListEnabled(boolean enabled);
public static final int CONSOLE_LANGUAGE_JAPANESE = 0;
public static final int CONSOLE_LANGUAGE_ENGLISH = 1;
public static final int CONSOLE_LANGUAGE_FRENCH = 2;
public static final int CONSOLE_LANGUAGE_GERMAN = 3;
public static final int CONSOLE_LANGUAGE_ITALIAN = 4;
public static final int CONSOLE_LANGUAGE_SPANISH = 5;
public static final int CONSOLE_LANGUAGE_CHINESE = 6;
public static final int CONSOLE_LANGUAGE_KOREAN = 7;
public static final int CONSOLE_LANGUAGE_DUTCH = 8;
public static final int CONSOLE_LANGUAGE_PORTUGUESE = 9;
public static final int CONSOLE_LANGUAGE_RUSSIAN = 10;
public static final int CONSOLE_LANGUAGE_TAIWANESE = 11;
public static native int getConsoleLanguage();
public static native void setConsoleLanguage(int consoleLanguage);
}
@@ -16,7 +16,6 @@ import androidx.navigation.fragment.NavHostFragment;
import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.LayoutGenericRecyclerViewBinding;
import info.cemu.Cemu.features.DocumentsProvider;
import info.cemu.Cemu.guibasecomponents.ButtonRecyclerViewItem;
import info.cemu.Cemu.guibasecomponents.GenericRecyclerViewAdapter;
import info.cemu.Cemu.guibasecomponents.SimpleButtonRecyclerViewItem;
@@ -27,12 +26,13 @@ public class SettingsFragment extends Fragment {
GenericRecyclerViewAdapter genericRecyclerViewAdapter = new GenericRecyclerViewAdapter();
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.open_cemu_folder), this::openCemuFolder));
genericRecyclerViewAdapter.addRecyclerViewItem(new ButtonRecyclerViewItem(getString(R.string.add_game_path), getString(R.string.games_folder_description), () -> NavHostFragment.findNavController(SettingsFragment.this).navigate(R.id.action_settingsFragment_to_gamePathsFragment)));
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.input_settings), () -> NavHostFragment.findNavController(SettingsFragment.this).navigate(R.id.action_settingsFragment_to_inputSettingsFragment)));
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.graphics_settings), () -> NavHostFragment.findNavController(SettingsFragment.this).navigate(R.id.action_settingsFragment_to_graphicSettingsFragment)));
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.audio_settings), () -> NavHostFragment.findNavController(SettingsFragment.this).navigate(R.id.action_settingsFragment_to_audioSettingsFragment)));
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.graphic_packs), () -> NavHostFragment.findNavController(SettingsFragment.this).navigate(R.id.action_settingsFragment_to_graphicPacksRootFragment)));
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.overlay), () -> NavHostFragment.findNavController(SettingsFragment.this).navigate(R.id.action_settingsFragment_to_overlaySettingsFragment)));
var navController = NavHostFragment.findNavController(this);
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.general_settings), () -> navController.navigate(R.id.action_settingsFragment_to_generalSettingsFragment)));
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.input_settings), () -> navController.navigate(R.id.action_settingsFragment_to_inputSettingsFragment)));
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.graphics_settings), () -> navController.navigate(R.id.action_settingsFragment_to_graphicSettingsFragment)));
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.audio_settings), () -> navController.navigate(R.id.action_settingsFragment_to_audioSettingsFragment)));
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.graphic_packs), () -> navController.navigate(R.id.action_settingsFragment_to_graphicPacksRootFragment)));
genericRecyclerViewAdapter.addRecyclerViewItem(new SimpleButtonRecyclerViewItem(getString(R.string.overlay), () -> navController.navigate(R.id.action_settingsFragment_to_overlaySettingsFragment)));
binding.recyclerView.setAdapter(genericRecyclerViewAdapter);
return binding.getRoot();
@@ -0,0 +1,79 @@
package info.cemu.Cemu.settings.general;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.fragment.app.Fragment;
import androidx.navigation.fragment.NavHostFragment;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import info.cemu.Cemu.R;
import info.cemu.Cemu.databinding.LayoutGenericRecyclerViewBinding;
import info.cemu.Cemu.guibasecomponents.ButtonRecyclerViewItem;
import info.cemu.Cemu.guibasecomponents.GenericRecyclerViewAdapter;
import info.cemu.Cemu.guibasecomponents.SelectionAdapter;
import info.cemu.Cemu.guibasecomponents.SingleSelectionRecyclerViewItem;
import info.cemu.Cemu.nativeinterface.NativeSettings;
public class GeneralSettingsFragment extends Fragment {
private static @StringRes() int consoleLanguageToResourceNameId(int channels) {
return switch (channels) {
case NativeSettings.CONSOLE_LANGUAGE_JAPANESE -> R.string.console_language_japanese;
case NativeSettings.CONSOLE_LANGUAGE_ENGLISH -> R.string.console_language_english;
case NativeSettings.CONSOLE_LANGUAGE_FRENCH -> R.string.console_language_french;
case NativeSettings.CONSOLE_LANGUAGE_GERMAN -> R.string.console_language_german;
case NativeSettings.CONSOLE_LANGUAGE_ITALIAN -> R.string.console_language_italian;
case NativeSettings.CONSOLE_LANGUAGE_SPANISH -> R.string.console_language_spanish;
case NativeSettings.CONSOLE_LANGUAGE_CHINESE -> R.string.console_language_chinese;
case NativeSettings.CONSOLE_LANGUAGE_KOREAN -> R.string.console_language_korean;
case NativeSettings.CONSOLE_LANGUAGE_DUTCH -> R.string.console_language_dutch;
case NativeSettings.CONSOLE_LANGUAGE_PORTUGUESE -> R.string.console_language_portuguese;
case NativeSettings.CONSOLE_LANGUAGE_RUSSIAN -> R.string.console_language_russian;
case NativeSettings.CONSOLE_LANGUAGE_TAIWANESE -> R.string.console_language_taiwanese;
default -> throw new IllegalArgumentException("Invalid console language: " + channels);
};
}
@Override
public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
var binding = LayoutGenericRecyclerViewBinding.inflate(inflater, container, false);
GenericRecyclerViewAdapter genericRecyclerViewAdapter = new GenericRecyclerViewAdapter();
genericRecyclerViewAdapter.addRecyclerViewItem(new ButtonRecyclerViewItem(getString(R.string.add_game_path), getString(R.string.games_folder_description), () -> NavHostFragment.findNavController(GeneralSettingsFragment.this).navigate(R.id.action_generalSettingsFragment_to_gamePathsFragment)));
var consoleLanguageChoices = Stream.of(NativeSettings.CONSOLE_LANGUAGE_JAPANESE,
NativeSettings.CONSOLE_LANGUAGE_ENGLISH,
NativeSettings.CONSOLE_LANGUAGE_FRENCH,
NativeSettings.CONSOLE_LANGUAGE_GERMAN,
NativeSettings.CONSOLE_LANGUAGE_ITALIAN,
NativeSettings.CONSOLE_LANGUAGE_SPANISH,
NativeSettings.CONSOLE_LANGUAGE_CHINESE,
NativeSettings.CONSOLE_LANGUAGE_KOREAN,
NativeSettings.CONSOLE_LANGUAGE_DUTCH,
NativeSettings.CONSOLE_LANGUAGE_PORTUGUESE,
NativeSettings.CONSOLE_LANGUAGE_RUSSIAN,
NativeSettings.CONSOLE_LANGUAGE_TAIWANESE)
.map(channels -> new SelectionAdapter.ChoiceItem<>(t -> t.setText(consoleLanguageToResourceNameId(channels)), channels))
.collect(Collectors.toList());
int currentConsoleLanguage = NativeSettings.getConsoleLanguage();
SelectionAdapter<Integer> consoleLanguageAdapter = new SelectionAdapter<>(consoleLanguageChoices, currentConsoleLanguage);
SingleSelectionRecyclerViewItem<Integer> consoleLanguageSelection = new SingleSelectionRecyclerViewItem<>(getString(R.string.console_language),
getString(consoleLanguageToResourceNameId(currentConsoleLanguage)), consoleLanguageAdapter,
(consoleLanguage, selectionRecyclerViewItem) -> {
NativeSettings.setConsoleLanguage(consoleLanguage);
selectionRecyclerViewItem.setDescription(getString(consoleLanguageToResourceNameId(consoleLanguage)));
});
genericRecyclerViewAdapter.addRecyclerViewItem(consoleLanguageSelection);
binding.recyclerView.setAdapter(genericRecyclerViewAdapter);
return binding.getRoot();
}
}
@@ -38,14 +38,14 @@ public class GraphicsSettingsFragment extends Fragment {
};
}
private static int scalingFilterToResourceNameId(int fullscreenScaling) {
return switch (fullscreenScaling) {
private static int scalingFilterToResourceNameId(int scalingFilter) {
return switch (scalingFilter) {
case NativeSettings.SCALING_FILTER_BILINEAR_FILTER -> R.string.bilinear;
case NativeSettings.SCALING_FILTER_BICUBIC_FILTER -> R.string.bicubic;
case NativeSettings.SCALING_FILTER_BICUBIC_HERMITE_FILTER -> R.string.hermite;
case NativeSettings.SCALING_FILTER_NEAREST_NEIGHBOR_FILTER -> R.string.nearest_neighbor;
default ->
throw new IllegalArgumentException("Invalid fullscreen scaling mode: " + fullscreenScaling);
throw new IllegalArgumentException("Invalid scaling filter: " + scalingFilter);
};
}
@@ -59,8 +59,8 @@
android:id="@+id/action_settingsFragment_to_overlaySettingsFragment"
app:destination="@id/overlaySettingsFragment" />
<action
android:id="@+id/action_settingsFragment_to_gamePathsFragment"
app:destination="@id/gamePathsFragment" />
android:id="@+id/action_settingsFragment_to_generalSettingsFragment"
app:destination="@id/generalSettingsFragment" />
</fragment>
<fragment
android:id="@+id/controllerInputsFragment"
@@ -91,4 +91,13 @@
android:name="info.cemu.Cemu.settings.gamespath.GamePathsFragment"
android:label="@string/game_paths_settings"
tools:layout="@layout/layout_generic_recycler_view" />
<fragment
android:id="@+id/generalSettingsFragment"
android:name="info.cemu.Cemu.settings.general.GeneralSettingsFragment"
android:label="@string/general_settings"
tools:layout="@layout/layout_generic_recycler_view" >
<action
android:id="@+id/action_generalSettingsFragment_to_gamePathsFragment"
app:destination="@id/gamePathsFragment" />
</fragment>
</navigation>
@@ -224,4 +224,18 @@
<string name="thread_quantum">Thread quantum</string>
<string name="audio_latency">Latency</string>
<string name="game_favorite">Favorite</string>
<string name="general_settings">General settings</string>
<string name="console_language_japanese">Japanese</string>
<string name="console_language_english">English</string>
<string name="console_language_french">French</string>
<string name="console_language_german">German</string>
<string name="console_language_italian">Italian</string>
<string name="console_language_spanish">Spanish</string>
<string name="console_language_chinese">Chinese</string>
<string name="console_language_korean">Korean</string>
<string name="console_language_dutch">Dutch</string>
<string name="console_language_portuguese">Portuguese</string>
<string name="console_language_russian">Russian</string>
<string name="console_language_taiwanese">Taiwanese</string>
<string name="console_language">Console language</string>
</resources>