From d5970c4f7adf8df6b98e782adadced7b87528fe0 Mon Sep 17 00:00:00 2001 From: Chris Bracken Date: Thu, 10 Feb 2022 11:54:38 -0800 Subject: [PATCH] [fml] Use common FML string encoding utils General UTF8/UTF16 string conversion utility functions were recently added to FML. This migrates calls in the Android JNI utils to the common implementations. No additional tests added since we're just dropping one implementation of UTF8/UTF16 functions and making use of an equivalent set that already has unit tests of its own. The rest of the Android-related code is already covered by existing unit tests. Issue: https://github.com/flutter/flutter/issues/98061 Related PR: https://github.com/flutter/engine/pull/31334 --- fml/platform/android/jni_util.cc | 20 +++++--------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/fml/platform/android/jni_util.cc b/fml/platform/android/jni_util.cc index e3b0d0342190e..407c0de9e0447 100644 --- a/fml/platform/android/jni_util.cc +++ b/fml/platform/android/jni_util.cc @@ -6,10 +6,10 @@ #include -#include #include #include "flutter/fml/logging.h" +#include "flutter/fml/string_conversion.h" #include "flutter/fml/thread_local.h" namespace fml { @@ -67,12 +67,6 @@ void DetachFromVM() { } } -static std::string UTF16StringToUTF8String(const char16_t* chars, size_t len) { - std::u16string u16_string(chars, len); - return std::wstring_convert, char16_t>{} - .to_bytes(u16_string); -} - std::string JavaStringToString(JNIEnv* env, jstring str) { if (env == nullptr || str == nullptr) { return ""; @@ -81,21 +75,17 @@ std::string JavaStringToString(JNIEnv* env, jstring str) { if (chars == nullptr) { return ""; } - std::string u8_string = UTF16StringToUTF8String( - reinterpret_cast(chars), env->GetStringLength(str)); + std::u16string u16_string(reinterpret_cast(chars), + env->GetStringLength(str)); + std::string u8_string = Utf16ToUtf8(u16_string); env->ReleaseStringChars(str, chars); ASSERT_NO_EXCEPTION(); return u8_string; } -static std::u16string UTF8StringToUTF16String(const std::string& string) { - return std::wstring_convert, char16_t>{} - .from_bytes(string); -} - ScopedJavaLocalRef StringToJavaString(JNIEnv* env, const std::string& u8_string) { - std::u16string u16_string = UTF8StringToUTF16String(u8_string); + std::u16string u16_string = Utf8ToUtf16(u8_string); auto result = ScopedJavaLocalRef( env, env->NewString(reinterpret_cast(u16_string.data()), u16_string.length()));