diff --git a/android/app/src/cpp/android_settings_interface.cpp b/android/app/src/cpp/android_settings_interface.cpp index 7bef4379c..7f1f44e6e 100644 --- a/android/app/src/cpp/android_settings_interface.cpp +++ b/android/app/src/cpp/android_settings_interface.cpp @@ -53,14 +53,27 @@ void AndroidSettingsInterface::Clear() int AndroidSettingsInterface::GetIntValue(const char* section, const char* key, int default_value /*= 0*/) { JNIEnv* env = AndroidHelpers::GetJNIEnv(); -#if 0 - return static_cast<int>(env->CallIntMethod(m_java_shared_preferences, m_get_int, - env->NewStringUTF(GetSettingKey(section, key)), default_value)); -#else + // Some of these settings are string lists... jstring string_object = reinterpret_cast<jstring>( env->CallObjectMethod(m_java_shared_preferences, m_get_string, env->NewStringUTF(GetSettingKey(section, key)), env->NewStringUTF(TinyString::FromFormat("%d", default_value)))); + if (env->ExceptionCheck()) + { + env->ExceptionClear(); + + // it might actually be an int (e.g. seek bar preference) + const int int_value = static_cast<int>(env->CallIntMethod(m_java_shared_preferences, m_get_int, + env->NewStringUTF(GetSettingKey(section, key)), default_value)); + if (env->ExceptionCheck()) + { + env->ExceptionClear(); + return default_value; + } + + return int_value; + } + if (!string_object) return default_value; @@ -70,7 +83,6 @@ int AndroidSettingsInterface::GetIntValue(const char* section, const char* key, std::optional<int> value = StringUtil::FromChars<int>(data); env->ReleaseStringUTFChars(string_object, data); return value.value_or(default_value); -#endif } float AndroidSettingsInterface::GetFloatValue(const char* section, const char* key, float default_value /*= 0.0f*/)