Page MenuHomePhabricator

D13166.id43862.diff
No OneTemporary

D13166.id43862.diff

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
@@ -96,6 +96,35 @@
}
method(cls, keysJava);
}
+
+ static void addElementToStringSet(std::string setKey, std::string element) {
+ static const auto cls = javaClassStatic();
+ static auto method = cls->getStaticMethod<void(std::string, std::string)>(
+ "addElementToStringSet");
+ method(cls, setKey, element);
+ }
+
+ static void
+ removeElementFromStringSet(std::string setKey, std::string element) {
+ static const auto cls = javaClassStatic();
+ static auto method = cls->getStaticMethod<void(std::string, std::string)>(
+ "removeElementFromStringSet");
+ method(cls, setKey, element);
+ }
+
+ static std::vector<std::string> getStringSet(std::string setKey) {
+ static const auto cls = javaClassStatic();
+ static auto method =
+ cls->getStaticMethod<JArrayClass<JString>(std::string)>("getStringSet");
+ auto methodResult = method(cls, setKey);
+
+ std::vector<std::string> result;
+ for (int i = 0; i < methodResult->size(); i++) {
+ result.push_back(methodResult->getElement(i)->toStdString());
+ }
+
+ return result;
+ }
};
namespace comm {
@@ -157,4 +186,24 @@
NativeAndroidAccessProvider::runTask(
[&]() { CommMMKVJavaClass::removeKeys(keys); });
}
+
+void CommMMKV::addElementToStringSet(std::string setKey, std::string element) {
+ NativeAndroidAccessProvider::runTask(
+ [&]() { CommMMKVJavaClass::addElementToStringSet(setKey, element); });
+}
+
+void CommMMKV::removeElementFromStringSet(
+ std::string setKey,
+ std::string element) {
+ NativeAndroidAccessProvider::runTask([&]() {
+ CommMMKVJavaClass::removeElementFromStringSet(setKey, element);
+ });
+}
+
+std::vector<std::string> CommMMKV::getStringSet(std::string setKey) {
+ std::vector<std::string> result;
+ NativeAndroidAccessProvider::runTask(
+ [&]() { result = CommMMKVJavaClass::getStringSet(setKey); });
+ 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
@@ -6,6 +6,7 @@
import app.comm.android.fbjni.PlatformSpecificTools;
import com.tencent.mmkv.MMKV;
import java.util.Base64;
+import java.util.Set;
public class CommMMKV {
private static final int MMKV_ENCRYPTION_KEY_SIZE = 16;
@@ -135,4 +136,48 @@
getMMKVInstance(mmkvIdentifier, mmkvEncryptionKey)
.removeValuesForKeys(keys);
}
+
+ public static void addElementToStringSet(String setKey, String element) {
+ initialize();
+ MMKV mmkv = getMMKVInstance(mmkvIdentifier, mmkvEncryptionKey);
+ mmkv.lock();
+ try {
+ Set<String> stringSet = mmkv.decodeStringSet(setKey);
+ if (stringSet != null) {
+ stringSet.add(element);
+ } else {
+ stringSet = Set.of(element);
+ }
+ mmkv.encode(setKey, stringSet);
+ } finally {
+ mmkv.unlock();
+ }
+ }
+
+ public static void removeElementFromStringSet(String setKey, String element) {
+ initialize();
+ MMKV mmkv = getMMKVInstance(mmkvIdentifier, mmkvEncryptionKey);
+ mmkv.lock();
+ try {
+ Set<String> stringSet = mmkv.decodeStringSet(setKey);
+ if (stringSet == null) {
+ return;
+ }
+ stringSet.remove(element);
+ mmkv.encode(setKey, stringSet);
+ } finally {
+ mmkv.unlock();
+ }
+ }
+
+ public static String[] getStringSet(String setKey) {
+ initialize();
+ Set<String> stringSet = getMMKVInstance(mmkvIdentifier, mmkvEncryptionKey)
+ .decodeStringSet(setKey);
+ if (stringSet == null) {
+ return new String[0];
+ }
+
+ return stringSet.toArray(new String[stringSet.size()]);
+ }
}
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
@@ -27,6 +27,11 @@
static std::vector<std::string> getAllKeys();
static void removeKeys(const std::vector<std::string> &keys);
+ static void addElementToStringSet(std::string setKey, std::string element);
+ static void
+ removeElementFromStringSet(std::string setKey, std::string element);
+ static std::vector<std::string> getStringSet(std::string setKey);
+
class InitFromNSEForbiddenError : public std::runtime_error {
public:
using std::runtime_error::runtime_error;
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
@@ -212,4 +212,62 @@
[mmkv removeValuesForKeys:keysObjC];
}
+void CommMMKV::addElementToStringSet(std::string setKey, std::string element) {
+ NSString *setKeyObjC = [NSString stringWithCString:setKey.c_str()
+ encoding:NSUTF8StringEncoding];
+ NSString *elementObjC = [NSString stringWithCString:element.c_str()
+ encoding:NSUTF8StringEncoding];
+
+ CommMMKV::ScopedCommMMKVLock();
+ MMKV *mmkv = getMMKVInstance(mmkvIdentifier, mmkvEncryptionKey);
+ NSMutableSet *stringSet =
+ [mmkv getObjectOfClass:NSMutableSet.class forKey:setKeyObjC];
+
+ if (stringSet) {
+ [stringSet addObject:elementObjC];
+ } else {
+ stringSet = [NSMutableSet setWithObject:elementObjC];
+ }
+
+ [mmkv setObject:stringSet forKey:setKeyObjC];
+}
+
+void CommMMKV::removeElementFromStringSet(
+ std::string setKey,
+ std::string element) {
+ NSString *setKeyObjC = [NSString stringWithCString:setKey.c_str()
+ encoding:NSUTF8StringEncoding];
+ NSString *elementObjC = [NSString stringWithCString:element.c_str()
+ encoding:NSUTF8StringEncoding];
+
+ CommMMKV::ScopedCommMMKVLock();
+ MMKV *mmkv = getMMKVInstance(mmkvIdentifier, mmkvEncryptionKey);
+ NSMutableSet *stringSet =
+ [mmkv getObjectOfClass:NSMutableSet.class forKey:setKeyObjC];
+
+ if (!stringSet) {
+ return;
+ }
+
+ [stringSet removeObject:elementObjC];
+ [mmkv setObject:stringSet forKey:setKeyObjC];
+}
+
+std::vector<std::string> CommMMKV::getStringSet(std::string setKey) {
+ NSString *setKeyObjC = [NSString stringWithCString:setKey.c_str()
+ encoding:NSUTF8StringEncoding];
+
+ CommMMKV::ScopedCommMMKVLock();
+ MMKV *mmkv = getMMKVInstance(mmkvIdentifier, mmkvEncryptionKey);
+ NSMutableSet *stringSet =
+ [mmkv getObjectOfClass:NSMutableSet.class forKey:setKeyObjC];
+
+ std::vector<std::string> stringSetCpp{};
+ for (NSString *element in stringSet) {
+ stringSetCpp.emplace_back(std::string{[element UTF8String]});
+ }
+
+ return stringSetCpp;
+}
+
} // namespace comm

File Metadata

Mime Type
text/plain
Expires
Sat, Oct 19, 7:26 PM (18 h, 54 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2321861
Default Alt Text
D13166.id43862.diff (6 KB)

Event Timeline