mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-21 05:09:34 -06:00
Android: Hook up global settings to the new config system
This commit is contained in:
163
Source/Android/jni/NativeConfig.cpp
Normal file
163
Source/Android/jni/NativeConfig.cpp
Normal file
@ -0,0 +1,163 @@
|
||||
// Copyright 2020 Dolphin Emulator Project
|
||||
// Licensed under GPLv2+
|
||||
// Refer to the license.txt file included.
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
|
||||
#include <jni.h>
|
||||
|
||||
#include "Common/Assert.h"
|
||||
#include "Common/Config/Config.h"
|
||||
#include "Core/ConfigLoaders/IsSettingSaveable.h"
|
||||
#include "jni/AndroidCommon/AndroidCommon.h"
|
||||
|
||||
constexpr jint LAYER_BASE_OR_CURRENT = 0;
|
||||
constexpr jint LAYER_LOCAL_GAME = 1;
|
||||
|
||||
static Config::Location GetLocation(JNIEnv* env, jstring file, jstring section, jstring key)
|
||||
{
|
||||
const std::string decoded_file = GetJString(env, file);
|
||||
|
||||
Config::System system;
|
||||
if (decoded_file == "Dolphin")
|
||||
{
|
||||
system = Config::System::Main;
|
||||
}
|
||||
else if (decoded_file == "GFX")
|
||||
{
|
||||
system = Config::System::GFX;
|
||||
}
|
||||
else if (decoded_file == "Logger")
|
||||
{
|
||||
system = Config::System::Logger;
|
||||
}
|
||||
else
|
||||
{
|
||||
ASSERT(false);
|
||||
return {};
|
||||
}
|
||||
|
||||
return Config::Location{system, GetJString(env, section), GetJString(env, key)};
|
||||
}
|
||||
|
||||
static std::shared_ptr<Config::Layer> GetLayer(jint layer, const Config::Location& location)
|
||||
{
|
||||
switch (layer)
|
||||
{
|
||||
case LAYER_BASE_OR_CURRENT:
|
||||
if (GetActiveLayerForConfig(location) == Config::LayerType::Base)
|
||||
return Config::GetLayer(Config::LayerType::Base);
|
||||
else
|
||||
return Config::GetLayer(Config::LayerType::CurrentRun);
|
||||
|
||||
case LAYER_LOCAL_GAME:
|
||||
return Config::GetLayer(Config::LayerType::LocalGame);
|
||||
|
||||
default:
|
||||
ASSERT(false);
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static T Get(jint layer, const Config::Location& location, T default_value)
|
||||
{
|
||||
return GetLayer(layer, location)->Get<T>(location).value_or(default_value);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
static void Set(jint layer, const Config::Location& location, T value)
|
||||
{
|
||||
GetLayer(layer, location)->Set(location, value);
|
||||
Config::InvokeConfigChangedCallbacks();
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_isSettingSaveable(
|
||||
JNIEnv* env, jclass obj, jstring file, jstring section, jstring key)
|
||||
{
|
||||
const Config::Location location = GetLocation(env, file, section, key);
|
||||
return static_cast<jboolean>(ConfigLoaders::IsSettingSaveable(location));
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_save(
|
||||
JNIEnv* env, jclass obj, jint layer)
|
||||
{
|
||||
return GetLayer(layer, {})->Save();
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_deleteKey(
|
||||
JNIEnv* env, jclass obj, jint layer, jstring file, jstring section, jstring key)
|
||||
{
|
||||
const Config::Location location = GetLocation(env, file, section, key);
|
||||
return static_cast<jboolean>(GetLayer(layer, location)->DeleteKey(location));
|
||||
}
|
||||
|
||||
JNIEXPORT jstring JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_getString(
|
||||
JNIEnv* env, jclass obj, jint layer, jstring file, jstring section, jstring key,
|
||||
jstring default_value)
|
||||
{
|
||||
const Config::Location location = GetLocation(env, file, section, key);
|
||||
return ToJString(env, Get(layer, location, GetJString(env, default_value)));
|
||||
}
|
||||
|
||||
JNIEXPORT jboolean JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_getBoolean(
|
||||
JNIEnv* env, jclass obj, jint layer, jstring file, jstring section, jstring key,
|
||||
jboolean default_value)
|
||||
{
|
||||
const Config::Location location = GetLocation(env, file, section, key);
|
||||
return static_cast<jboolean>(Get(layer, location, static_cast<bool>(default_value)));
|
||||
}
|
||||
|
||||
JNIEXPORT jint JNICALL Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_getInt(
|
||||
JNIEnv* env, jclass obj, jint layer, jstring file, jstring section, jstring key,
|
||||
jint default_value)
|
||||
{
|
||||
return Get(layer, GetLocation(env, file, section, key), default_value);
|
||||
}
|
||||
|
||||
JNIEXPORT jfloat JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_getFloat(
|
||||
JNIEnv* env, jclass obj, jint layer, jstring file, jstring section, jstring key,
|
||||
jfloat default_value)
|
||||
{
|
||||
return Get(layer, GetLocation(env, file, section, key), default_value);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_setString(
|
||||
JNIEnv* env, jclass obj, jint layer, jstring file, jstring section, jstring key, jstring value)
|
||||
{
|
||||
return Set(layer, GetLocation(env, file, section, key), GetJString(env, value));
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL
|
||||
Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_setBoolean(
|
||||
JNIEnv* env, jclass obj, jint layer, jstring file, jstring section, jstring key, jboolean value)
|
||||
{
|
||||
return Set(layer, GetLocation(env, file, section, key), static_cast<bool>(value));
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_setInt(
|
||||
JNIEnv* env, jclass obj, jint layer, jstring file, jstring section, jstring key, jint value)
|
||||
{
|
||||
return Set(layer, GetLocation(env, file, section, key), value);
|
||||
}
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_dolphinemu_dolphinemu_features_settings_model_NativeConfig_setFloat(
|
||||
JNIEnv* env, jclass obj, jint layer, jstring file, jstring section, jstring key, jfloat value)
|
||||
{
|
||||
return Set(layer, GetLocation(env, file, section, key), value);
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
Reference in New Issue
Block a user