// SPDX-FileCopyrightText: 2023 yuzu Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later #include #include #include "common/logging/log.h" #include "common/settings.h" #include "jni/android_common/android_common.h" #include "jni/config.h" #include "uisettings.h" template Settings::Setting* getSetting(JNIEnv* env, jstring jkey) { auto key = GetJString(env, jkey); auto basicSetting = Settings::values.linkage.by_key[key]; auto basicAndroidSetting = AndroidSettings::values.linkage.by_key[key]; if (basicSetting != 0) { return static_cast*>(basicSetting); } if (basicAndroidSetting != 0) { return static_cast*>(basicAndroidSetting); } LOG_ERROR(Frontend, "[Android Native] Could not find setting - {}", key); return nullptr; } extern "C" { jboolean Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getBoolean(JNIEnv* env, jobject obj, jstring jkey, jboolean getDefault) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return false; } setting->SetGlobal(true); if (static_cast(getDefault)) { return setting->GetDefault(); } return setting->GetValue(); } void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setBoolean(JNIEnv* env, jobject obj, jstring jkey, jboolean value) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return; } setting->SetGlobal(true); setting->SetValue(static_cast(value)); } jbyte Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getByte(JNIEnv* env, jobject obj, jstring jkey, jboolean getDefault) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return -1; } setting->SetGlobal(true); if (static_cast(getDefault)) { return setting->GetDefault(); } return setting->GetValue(); } void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setByte(JNIEnv* env, jobject obj, jstring jkey, jbyte value) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return; } setting->SetGlobal(true); setting->SetValue(value); } jshort Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getShort(JNIEnv* env, jobject obj, jstring jkey, jboolean getDefault) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return -1; } setting->SetGlobal(true); if (static_cast(getDefault)) { return setting->GetDefault(); } return setting->GetValue(); } void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setShort(JNIEnv* env, jobject obj, jstring jkey, jshort value) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return; } setting->SetGlobal(true); setting->SetValue(value); } jint Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getInt(JNIEnv* env, jobject obj, jstring jkey, jboolean getDefault) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return -1; } setting->SetGlobal(true); if (static_cast(getDefault)) { return setting->GetDefault(); } return setting->GetValue(); } void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setInt(JNIEnv* env, jobject obj, jstring jkey, jint value) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return; } setting->SetGlobal(true); setting->SetValue(value); } jfloat Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getFloat(JNIEnv* env, jobject obj, jstring jkey, jboolean getDefault) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return -1; } setting->SetGlobal(true); if (static_cast(getDefault)) { return setting->GetDefault(); } return setting->GetValue(); } void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setFloat(JNIEnv* env, jobject obj, jstring jkey, jfloat value) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return; } setting->SetGlobal(true); setting->SetValue(value); } jlong Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getLong(JNIEnv* env, jobject obj, jstring jkey, jboolean getDefault) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return -1; } setting->SetGlobal(true); if (static_cast(getDefault)) { return setting->GetDefault(); } return setting->GetValue(); } void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setLong(JNIEnv* env, jobject obj, jstring jkey, jlong value) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return; } setting->SetGlobal(true); setting->SetValue(value); } jstring Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getString(JNIEnv* env, jobject obj, jstring jkey, jboolean getDefault) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return ToJString(env, ""); } setting->SetGlobal(true); if (static_cast(getDefault)) { return ToJString(env, setting->GetDefault()); } return ToJString(env, setting->GetValue()); } void Java_org_yuzu_yuzu_1emu_utils_NativeConfig_setString(JNIEnv* env, jobject obj, jstring jkey, jstring value) { auto setting = getSetting(env, jkey); if (setting == nullptr) { return; } setting->SetGlobal(true); setting->SetValue(GetJString(env, value)); } jboolean Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getIsRuntimeModifiable(JNIEnv* env, jobject obj, jstring jkey) { auto key = GetJString(env, jkey); auto setting = Settings::values.linkage.by_key[key]; if (setting != 0) { return setting->RuntimeModfiable(); } LOG_ERROR(Frontend, "[Android Native] Could not find setting - {}", key); return true; } jstring Java_org_yuzu_yuzu_1emu_utils_NativeConfig_getConfigHeader(JNIEnv* env, jobject obj, jint jcategory) { auto category = static_cast(jcategory); return ToJString(env, Settings::TranslateCategory(category)); } } // extern "C"