diff --git a/native/android/app/src/cpp/CommMMKV.cpp b/native/android/app/src/cpp/CommMMKV.cpp --- a/native/android/app/src/cpp/CommMMKV.cpp +++ b/native/android/app/src/cpp/CommMMKV.cpp @@ -125,6 +125,22 @@ return result; } + + static bool + setStringSet(std::string key, const std::vector &elements) { + static const auto cls = javaClassStatic(); + static auto method = cls->getStaticMethod>)>("setStringSet"); + + local_ref> elementsJava = + JArrayClass::newArray(elements.size()); + + for (int i = 0; i < elements.size(); i++) { + elementsJava->setElement(i, *make_jstring(elements[i])); + } + + return method(cls, key, elementsJava); + } }; namespace comm { @@ -206,4 +222,13 @@ [&]() { result = CommMMKVJavaClass::getStringSet(setKey); }); return result; } + +bool CommMMKV::setStringSet( + std::string key, + const std::vector &elements) { + bool result; + NativeAndroidAccessProvider::runTask( + [&]() { result = CommMMKVJavaClass::setStringSet(key, elements); }); + return result; +} } // namespace comm diff --git a/native/android/app/src/main/java/app/comm/android/fbjni/CommMMKV.java b/native/android/app/src/main/java/app/comm/android/fbjni/CommMMKV.java --- a/native/android/app/src/main/java/app/comm/android/fbjni/CommMMKV.java +++ b/native/android/app/src/main/java/app/comm/android/fbjni/CommMMKV.java @@ -180,4 +180,11 @@ return stringSet.toArray(new String[stringSet.size()]); } + + public static boolean setStringSet(String key, String[] elements) { + initialize(); + Set stringSet = Set.of(elements); + return getMMKVInstance(mmkvIdentifier, mmkvEncryptionKey) + .encode(key, stringSet); + } } diff --git a/native/cpp/CommonCpp/Tools/CommMMKV.h b/native/cpp/CommonCpp/Tools/CommMMKV.h --- a/native/cpp/CommonCpp/Tools/CommMMKV.h +++ b/native/cpp/CommonCpp/Tools/CommMMKV.h @@ -31,6 +31,8 @@ static void removeElementFromStringSet(std::string setKey, std::string element); static std::vector getStringSet(std::string setKey); + static bool + setStringSet(std::string key, const std::vector &elements); class InitFromNSEForbiddenError : public std::runtime_error { public: diff --git a/native/ios/Comm/CommMMKV.mm b/native/ios/Comm/CommMMKV.mm --- a/native/ios/Comm/CommMMKV.mm +++ b/native/ios/Comm/CommMMKV.mm @@ -270,4 +270,26 @@ return stringSetCpp; } +bool CommMMKV::setStringSet( + std::string key, + const std::vector &elements) { + CommMMKV::initialize(); + NSString *keyObjC = [NSString stringWithCString:key.c_str() + encoding:NSUTF8StringEncoding]; + + NSMutableSet *stringSet = [[NSMutableSet alloc] init]; + for (const auto &element : elements) { + [stringSet addObject:[NSString stringWithCString:element.c_str() + encoding:NSUTF8StringEncoding]]; + } + + MMKV *mmkv = getMMKVInstance(mmkvIdentifier, mmkvEncryptionKey); + BOOL result = [mmkv setObject:stringSet forKey:keyObjC]; + + if (!result) { + Logger::log("Attempt to write in background or failure during write."); + } + return result; +} + } // namespace comm